Revision 1d8f8481 test/pgerakios.py

b/test/pgerakios.py
29 29
        print(fmt.format(*args))
30 30
    return 0
31 31

  
32

  
33 32
def exn(fmt, *args):
34 33
    raise Exception(fmt.format(*args))
35 34

  
36

  
37 35
def cexn(b, fmt, *args):
38 36
    if(b):
39 37
        raise Exception(fmt.format(*args))
......
522 520
class Entity(Config):
523 521
    # static  field (in some sense --- if it is assigned it will create a new binding)
524 522
    EntityState = enum('NOT_EXISTS', 'EXISTS')
523
    systemName = "system"
524
    systemKey = ""
525 525

  
526 526
    allEntities = {}
527 527

  
528 528
    @staticmethod
529
    def getClass(className,name="", key="", parent=None):
529
    def get(name="",f=(lambda: Entity().set("system","",None))):
530
        printf("get name {0}",name)
531
        if(name == ""):
532
            name = "system"
533
        if( Entity.allEntities.get("system") == None):
534
            Entity.allEntities[name] = Entity().set("system","",None)
530 535
        e = Entity.allEntities.get(name)
531 536
        if(e == None):
532
            e = locals()[className]()
533
            if(name == "system" or name == ""):
534
                e.set("system", "", None)
535
            else:
536
                cexn(parent == None, "Entity.get of a non-existent entity with name {0} and no parent.", name)
537
                #cexn(not isinstance(parent, Entity), "Entity.get parent of {0} is not an Entity!", name)
538
                e.set(name, key, parent)
539
            Entity.allEntities[name] = e
540

  
537
            Entity.allEntities[name] = f()
541 538
        return e
542 539

  
543 540
    @staticmethod
544
    def get(name="", key="", parent=None):
545
        Entity.get("Entity",name,key,parent)
546

  
547

  
548
    @staticmethod
549 541
    def list():
550 542
        return [v for k, v in Entity.allEntities.iteritems()]
551 543

  
......
592 584
        printf("\n")
593 585
        for name,parentName in acceptedList:
594 586
            e = find((lambda e: e.entityName == name),entityList)
595
            if(parentName !=  e.parent.entityName):
587
            if(e.parent != None and parentName !=  e.parent.entityName):
596 588
                exn("Parent of {0} is {1} and not {2}.",e.entityName,parentName,e.parent.parentName)
597 589
        for e in ok:
598 590
            e.state = Entity.EntityState.EXISTS
......
614 606
        return not (self.__eq__(other))
615 607

  
616 608
    def __init__(self):
617
        self.set(None, None, None)
609
        self.set("system", "", None)
618 610
        self._commissions = []
619 611
        self._resources = []
620 612

  
......
630 622
        self.set(None, None, None)
631 623

  
632 624
    def set(self, name, password, parent):
625
        cexn(parent == None and name != "system", "Entity.get of a non-existent entity with name {0} and no parent.", name)
633 626
        self.entityName = name
634 627
        self.entityKey = password
635 628
        self.parent = parent
636 629
        self.state = Entity.EntityState.NOT_EXISTS
630
        return self
637 631

  
638 632
    def exists(self, query=False):
639 633
        self._check()
......
724 718

  
725 719
class ResourceHolder(Entity):
726 720

  
727
    root = Entity.get("pgerakios", "key1",Entity.get())
728
    resourceNames = ["pithos","cyclades.vm","cyclades.cpu","cyclades.mem"]
721
    root = Entity.get("pgerakios", lambda: Entity().set("pgerakios","key1",Entity.get("system")))
722
    resourceNames = ["pithos","cyclades_vm","cyclades_cpu","cyclades_mem"]
729 723

  
730 724
    def __init__(self):
731 725
        super(Entity,self).__init__()
......
760 754

  
761 755
class Group(ResourceHolder):
762 756

  
763
    groupRoot =   Entity.getClass("Group","group","group",ResourceHolder.root)
757
    groupRoot =   Entity.get("group",lambda: Group().set("group","group",ResourceHolder.root))
764 758
    systemGroupName = "system"
765 759
    systemGroupKey  = "system"
766 760

  
......
774 768

  
775 769
    @staticmethod
776 770
    def get(name,key):
777
        ret = Entity.getClass("Group",name,key,Group.groupRoot)
771
        ret =   Entity.get(name,lambda: Group().set(name,key,Group.groupRoot))
778 772
        if(name == Group.systemGroupName):
779 773
            ret.makeSystem()
780 774
        elif(ret.exists(True) == False):
......
810 804
    def makeSystem(self):
811 805
        if(self.initializedSystem):
812 806
            return
813
        #TODO: create system resources here
807
        #
808
        for r in self.getResources():
809
            r.quantity = 1000
810
        self.saveResources(True)
811
        #
814 812
        self.initializedSystem = True
815 813

  
816 814

  
......
831 829

  
832 830

  
833 831
class User(ResourceHolder):
834

  
835
    userRoot = Entity.getClass("User","user","user",ResourceHolder.root)
832
    userRoot =   Entity.get("user",lambda: User().set("user","user",ResourceHolder.root))
836 833

  
837 834
    @staticmethod
838 835
    def listUsers():
......
840 837

  
841 838
    @staticmethod
842 839
    def get(name,key):
843
        return Entity.getClass("User",name,key,User.userRoot)
840
         return Entity.get(name,lambda: User().set(name,key,User.userRoot))
844 841

  
845 842
    def __init__(self):
846 843
        super(ResourceHolder,self).__init__(None)
......
881 878
        for r in self.getResources():
882 879
            groupUserPolicy = group.getUserPolicyFor(r.resourceName)
883 880
            self.commission.addResource(r,groupUserPolicy.quantity)
884
        self.commit()
881
        #DO NOT COMMIT HERE
882
        # self.commit !!! no
885 883

  
886 884

  
887 885
# Main program
......
889 887
try:
890 888

  
891 889
    # Group1
890
    printf("Step 1")
892 891
    group1 = Group.get("group1","group1")
893 892

  
893
    printf("Step 2  name : {0}",group1.entityName)
894 894
    #["pithos","cyclades.vm","cyclades.cpu","cyclades.mem"]
895
    group1.savePolicyQuantities('pithos'=10,'cyclades.vm'=2,'cyclades.mem'=3)
895
    group1.savePolicyQuantities(pithos=10,cyclades_vm=2,cyclades_mem=3)
896

  
896 897

  
897 898

  
899
    printf("Step 3 ")
898 900
    user1 = User.get("prodromos", "key1")
901

  
902
    printf("Step 4 ")
899 903
    user1.joinGroup(group1)
904
    printf("Step 5")
905
    user1.commit()
906
    printf("Step 6")
907
    user1.release()
900 908

  
901 909
finally:
902 910
    for e in Entity.list():

Also available in: Unified diff