Revision da9bcceb astakosclient/astakosclient/__init__.py

b/astakosclient/astakosclient/__init__.py
560 560

  
561 561
    # ----------------------------------
562 562
    # do a POST to ``API_COMMISSIONS``
563
    def issue_commission(self, request):
563
    def _issue_commission(self, request):
564 564
        """Issue a commission
565 565

  
566 566
        Keyword arguments:
......
591 591
            self.logger.error(msg)
592 592
            raise AstakosClientException(msg)
593 593

  
594
    def _mk_user_provision(self, holder, source, resource, quantity):
595
        holder = "user:" + holder
596
        source = "project:" + source
597
        return {"holder": holder, "source": source,
598
                "resource": resource, "quantity": quantity}
599

  
600
    def _mk_project_provision(self, holder, resource, quantity):
601
        holder = "project:" + holder
602
        return {"holder": holder, "source": None,
603
                "resource": resource, "quantity": quantity}
604

  
605
    def mk_provisions(self, holder, source, resource, quantity):
606
        return [self._mk_user_provision(holder, source, resource, quantity),
607
                self._mk_project_provision(source, resource, quantity)]
608

  
609
    def issue_commission_generic(self, user_provisions, project_provisions,
610
                                 name="", force=False, auto_accept=False):
611
        """Issue commission (for multiple holder/source pairs)
612

  
613
        keyword arguments:
614
        user_provisions  -- dict mapping user holdings
615
                            (user, project, resource) to integer quantities
616
        project_provisions -- dict mapping project holdings
617
                              (project, resource) to integer quantities
618
        name        -- description of the commission (string)
619
        force       -- force this commission (boolean)
620
        auto_accept -- auto accept this commission (boolean)
621

  
622
        In case of success return commission's id (int).
623
        Otherwise raise an AstakosClientException.
624

  
625
        """
626
        request = {}
627
        request["force"] = force
628
        request["auto_accept"] = auto_accept
629
        request["name"] = name
630
        try:
631
            request["provisions"] = []
632
            for (holder, source, resource), quantity in \
633
                    user_provisions.iteritems():
634
                p = self._mk_user_provision(holder, source, resource, quantity)
635
                request["provisions"].append(p)
636
            for (holder, resource), quantity in project_provisions.iteritems():
637
                p = self._mk_project_provision(holder, resource, quantity)
638
                request["provisions"].append(p)
639
        except Exception as err:
640
            self.logger.error(str(err))
641
            raise BadValue(str(err))
642

  
643
        return self._issue_commission(request)
644

  
594 645
    def issue_one_commission(self, holder, source, provisions,
595 646
                             name="", force=False, auto_accept=False):
596 647
        """Issue one commission (with specific holder and source)
......
605 656

  
606 657
        In case of success return commission's id (int).
607 658
        Otherwise raise an AstakosClientException.
608
        (See also issue_commission)
609 659

  
610 660
        """
611 661
        check_input("issue_one_commission", self.logger,
......
619 669
        try:
620 670
            request["provisions"] = []
621 671
            for resource, quantity in provisions.iteritems():
622
                prov = {"holder": holder, "source": source,
623
                        "resource": resource, "quantity": quantity}
624
                request["provisions"].append(prov)
672
                ps = self.mk_provisions(holder, source, resource, quantity)
673
                request["provisions"].extend(ps)
625 674
        except Exception as err:
626 675
            self.logger.error(str(err))
627 676
            raise BadValue(str(err))
628 677

  
629
        return self.issue_commission(request)
678
        return self._issue_commission(request)
630 679

  
631 680
    # ----------------------------------
632 681
    # do a GET to ``API_COMMISSIONS``

Also available in: Unified diff