Example #1
0
    def call_trigger(self, call_type, obj):
        try:
            self.objects._send_flag = 0
            if self.verbose:
                print call_type, obj.id
            self.check_consistency("before new_object:", [])
            if call_type != "delete":
                resolved_objects = self.resolver.new_object(obj)
            else:
                resolved_objects = [obj]
            self.check_consistency("before:", resolved_objects)
            #CHEAT: should store call call_type at first try and use that
            changes_flag = -1
            while changes_flag:
                changes_flag = 0
                for i in range(len(resolved_objects)):
                    obj2 = resolved_objects[i]
                    if obj2.id == "right_meadow":
                        print "type(right_meadow.contains[0]) ==", type(
                            obj2.contains[0])
                    obj3 = self.check_class(obj2)
                    ##                    if obj2.id=="fence2":
                    ##                        print "???? fence2 <- right_meadow:", self.objects.get("right_meadow")
                    ##                        print "classes:", obj2.__class__, obj2.__class__.__bases__, obj3.__class__, obj3.__class__.__bases__
                    ##                        print "fence2:self,resolver:", self.objects["fence2"].__class__, self.objects["fence2"].__class__.__bases__, self.resolver.objects["fence2"].__class__, self.resolver.objects["fence2"].__class__.__bases__
                    if id(obj3) != id(obj2):
                        ##                        print obj2.id, obj2.__class__, obj3.id, obj3.__class__
                        changes_flag = changes_flag + 1
                        setattr(self.objects, obj3.id, obj3)
                        resolved_objects[i] = obj2 = self.objects[obj2.id]
                        ##                        print ">>>fence2:self,resolver:", getattr(self.objects, obj2.id).__class__, getattr(self.objects, obj2.id).__class__.__bases__, self.objects["fence2"].__class__, self.objects["fence2"].__class__.__bases__, self.resolver.objects["fence2"].__class__, self.resolver.objects["fence2"].__class__.__bases__
                        for pointer in self.resolver.links.get1(obj2.id):
                            obj_other, id_other = atlas.resolve_pointer2(
                                self.objects, pointer)
                            obj_other[id_other] = obj2
##                            if obj2.id=="right_meadow" and pointer=="meadow1.contains.1":
##                                if type(obj2.contains[0])==StringType:
##                                    print "eeeerr0:", obj2.id, obj2.contains[0]
##                                print "!!!!", obj2.id, obj2.__class__, obj2.__class__.__bases__, obj2.contains[0].id, obj2.contains[0].__class__, obj2.contains[0].__class__.__bases__
##                                print "fence2:self,resolver:", self.objects["fence2"].__class__, self.objects["fence2"].__class__.__bases__, self.resolver.objects["fence2"].__class__, self.resolver.objects["fence2"].__class__.__bases__
                    self.check_consistency("loop: %s:" % obj2.id,
                                           resolved_objects)
##                print "call_trigger: changes loop:", changes_flag, map(lambda o:o.id, resolved_objects)
##            print "call_trigger:", map(str_inf, resolved_objects)
##            print "call_trigger: links:", self.resolver.links
            self.check_consistency("after:", resolved_objects)
            for obj2 in resolved_objects:
                for func in self.triggers.get(call_type, []):
                    self.check_consistency("before func with %s:" % obj2.id,
                                           [])
                    res = func(obj2)
                    self.check_consistency("after func with %s:" % obj2.id, [])
                    if res:
                        self.ask(res)
                    self.check_consistency("after ask with %s:" % obj2.id, [])
            self.check_consistency("after func:", resolved_objects)
        finally:
            self.objects._send_flag = 1
Example #2
0
    def call_trigger(self, call_type, obj):
        try:
            self.objects._send_flag = 0
            if self.verbose:
                print call_type, obj.id
            self.check_consistency("before new_object:", [])
            if call_type!="delete":
                resolved_objects = self.resolver.new_object(obj)
            else:
                resolved_objects = [obj]
            self.check_consistency("before:", resolved_objects)
            #CHEAT: should store call call_type at first try and use that
            changes_flag = -1
            while changes_flag:
                changes_flag = 0
                for i in range(len(resolved_objects)):
                    obj2 = resolved_objects[i]
                    if obj2.id=="right_meadow": print "type(right_meadow.contains[0]) ==",type(obj2.contains[0])
                    obj3 = self.check_class(obj2)
##                    if obj2.id=="fence2":
##                        print "???? fence2 <- right_meadow:", self.objects.get("right_meadow")
##                        print "classes:", obj2.__class__, obj2.__class__.__bases__, obj3.__class__, obj3.__class__.__bases__
##                        print "fence2:self,resolver:", self.objects["fence2"].__class__, self.objects["fence2"].__class__.__bases__, self.resolver.objects["fence2"].__class__, self.resolver.objects["fence2"].__class__.__bases__
                    if id(obj3)!=id(obj2):
##                        print obj2.id, obj2.__class__, obj3.id, obj3.__class__
                        changes_flag = changes_flag + 1
                        setattr(self.objects, obj3.id, obj3)
                        resolved_objects[i] = obj2 = self.objects[obj2.id]
##                        print ">>>fence2:self,resolver:", getattr(self.objects, obj2.id).__class__, getattr(self.objects, obj2.id).__class__.__bases__, self.objects["fence2"].__class__, self.objects["fence2"].__class__.__bases__, self.resolver.objects["fence2"].__class__, self.resolver.objects["fence2"].__class__.__bases__
                        for pointer in self.resolver.links.get1(obj2.id):
                            obj_other, id_other = atlas.resolve_pointer2(self.objects, pointer)
                            obj_other[id_other] = obj2
##                            if obj2.id=="right_meadow" and pointer=="meadow1.contains.1":
##                                if type(obj2.contains[0])==StringType:
##                                    print "eeeerr0:", obj2.id, obj2.contains[0]
##                                print "!!!!", obj2.id, obj2.__class__, obj2.__class__.__bases__, obj2.contains[0].id, obj2.contains[0].__class__, obj2.contains[0].__class__.__bases__
##                                print "fence2:self,resolver:", self.objects["fence2"].__class__, self.objects["fence2"].__class__.__bases__, self.resolver.objects["fence2"].__class__, self.resolver.objects["fence2"].__class__.__bases__
                    self.check_consistency("loop: %s:" % obj2.id, resolved_objects)
##                print "call_trigger: changes loop:", changes_flag, map(lambda o:o.id, resolved_objects)
##            print "call_trigger:", map(str_inf, resolved_objects)
##            print "call_trigger: links:", self.resolver.links
            self.check_consistency("after:", resolved_objects)
            for obj2 in resolved_objects:
                for func in self.triggers.get(call_type, []):
                    self.check_consistency("before func with %s:" % obj2.id, [])
                    res = func(obj2)
                    self.check_consistency("after func with %s:" % obj2.id, [])
                    if res:
                        self.ask(res)
                    self.check_consistency("after ask with %s:" % obj2.id, [])
            self.check_consistency("after func:", resolved_objects)
        finally:
            self.objects._send_flag = 1
Example #3
0
    def new_object(self, obj):
        ok_objects = {}
        if self.verbose:
            print "-" * 60
            print "new_object:", obj.id
        for pointer in self.pending.get1(obj.id):
            if self.verbose:
                print "pointer:", pointer
            obj2, id = atlas.resolve_pointer2(self.objects, pointer)
            #obj2[id] = obj
            if type(obj2[id]) == StringType:
                obj2[id] = atlas.resolve_pointer(self.objects, obj2[id])
            self.check_bidirectiontal(obj2, id)
            self.links.add(obj.id, pointer)
            other_id_lst = self.depencies.get2(pointer)
            self.depencies.remove(pointer)
            for other_id in other_id_lst:
                if self.verbose:
                    print "other_id:", other_id
                self.depencies.copy(other_id, obj.id)
                if not self.depencies.get1(other_id):
                    if self.verbose:
                        print "!!", other_id
                    ok_objects[other_id] = self.objects[other_id]
        self.pending.remove(obj.id)

        if self.depencies.get1(obj.id):
            if self.verbose:
                print "not ok!"
        else:
            if self.verbose:
                print "ok!"
            ok_objects[obj.id] = self.objects[obj.id]
        if self.verbose:
            print "===> ok_objects:", obj.id, ok_objects.keys()
            print "!!!>", self.pending
            print "???>", self.depencies
            #print self.links
            print "=" * 60
            for i in range(4):
                print
            import sys
            sys.stdout.flush()
        return ok_objects.values()
Example #4
0
    def new_object(self, obj):
        ok_objects = {}
        if self.verbose:
            print "-"*60
            print "new_object:", obj.id
        for pointer in self.pending.get1(obj.id):
            if self.verbose:
                print "pointer:", pointer
            obj2, id = atlas.resolve_pointer2(self.objects, pointer)
            #obj2[id] = obj
            if type(obj2[id])==StringType:
                obj2[id] = atlas.resolve_pointer(self.objects, obj2[id])
            self.check_bidirectiontal(obj2, id)
            self.links.add(obj.id, pointer)
            other_id_lst = self.depencies.get2(pointer)
            self.depencies.remove(pointer)
            for other_id in other_id_lst:
                if self.verbose:
                    print "other_id:", other_id
                self.depencies.copy(other_id, obj.id)
                if not self.depencies.get1(other_id):
                    if self.verbose:
                        print "!!", other_id
                    ok_objects[other_id] = self.objects[other_id]
        self.pending.remove(obj.id)

        if self.depencies.get1(obj.id):
            if self.verbose:
                print "not ok!"
        else:
            if self.verbose:
                print "ok!"
            ok_objects[obj.id] = self.objects[obj.id]
        if self.verbose:
            print "===> ok_objects:", obj.id, ok_objects.keys()
            print "!!!>", self.pending
            print "???>", self.depencies
            #print self.links
            print "="*60
            for i in range(4): print
            import sys
            sys.stdout.flush()
        return ok_objects.values()
Example #5
0
 def delete_op(self, op):
     id_lst = string.split(op.arg.id, ".")
     root_obj = self.objects[id_lst[0]]
     self.objects._send_flag = 0
     try:
         obj, id = atlas.resolve_pointer2(self.objects, op.arg.id)
         if type(obj) == ListType:
             del obj[id]
         else:
             delattr(obj, id)
     finally:
         self.objects._send_flag = 1
     if self.verbose:
         print "deleted entity:", op.arg.id
     if len(id_lst) > 1:
         self.call_trigger("set", root_obj)
     else:
         self.call_trigger("delete", root_obj)
         if hasattr(root_obj, "loc"):
             other = root_obj.loc
             if hasattr(other, "contains"):
                 other.contains.remove(root_obj)
                 print "removed this object from %s contains" % other.id
Example #6
0
 def delete_op(self, op):
     id_lst = string.split(op.arg.id, ".")
     root_obj = self.objects[id_lst[0]]
     self.objects._send_flag = 0
     try:
         obj, id = atlas.resolve_pointer2(self.objects, op.arg.id)
         if type(obj)==ListType:
             del obj[id]
         else:
             delattr(obj, id)
     finally:
         self.objects._send_flag = 1
     if self.verbose:
         print "deleted entity:", op.arg.id
     if len(id_lst)>1:
         self.call_trigger("set", root_obj)
     else:
         self.call_trigger("delete", root_obj)
         if hasattr(root_obj, "loc"):
             other = root_obj.loc
             if hasattr(other, "contains"):
                 other.contains.remove(root_obj)
                 print "removed this object from %s contains" % other.id
Example #7
0
 def fetch_object_id(self, id_path):
     try:
         return atlas.resolve_pointer2(self.server.objects, id_path)
     except IndexError, KeyError:
         return None, ""
Example #8
0
 def fetch_object_id(self, id_path):
     try:
         return atlas.resolve_pointer2(self.server.objects, id_path)
     except IndexError, KeyError:
         return None, ""