Ticket #198: caching-class-alias.diff

File caching-class-alias.diff, 1.8 KB (added by nick, 11 months ago)

Based on your work for _writeElementFunc, I have implemented a cache for ClassAlias

  • pyamf/__init__.py

     
    131131        self.objects = [] 
    132132        self.rev_objects = {} 
    133133 
     134        self.class_aliases = {} 
     135 
    134136    def getObject(self, ref): 
    135137        """ 
    136138        Gets an object based on a reference. 
     
    170172 
    171173        return idx 
    172174 
     175    def getClassAlias(self, klass): 
     176        """ 
     177        Gets a class alias based on the supplied C{klass}. 
     178        """ 
     179        if klass not in self.class_aliases: 
     180            try: 
     181                self.class_aliases[klass] = get_class_alias(klass) 
     182            except UnknownClassAlias: 
     183                self.class_aliases[klass] = None 
     184 
     185        return self.class_aliases[klass] 
     186 
    173187    def __copy__(self): 
    174188        raise NotImplementedError 
    175189 
  • pyamf/amf0.py

     
    699699        except pyamf.ReferenceError: 
    700700            self.context.addObject(o) 
    701701 
    702         try: 
    703             alias = pyamf.get_class_alias(o) 
    704         except pyamf.UnknownClassAlias: 
    705             alias = None 
     702        alias = self.context.getClassAlias(o.__class__) 
    706703 
    707704        if alias is None: 
    708705            self.writeType(ASTypes.OBJECT) 
  • pyamf/amf3.py

     
    14921492        """ 
    14931493        encoding = ObjectEncoding.DYNAMIC 
    14941494 
    1495         try: 
    1496             alias = pyamf.get_class_alias(obj) 
    1497         except pyamf.UnknownClassAlias: 
    1498             alias = None 
     1495        alias = self.context.getClassAlias(obj.__class__) 
    14991496 
    15001497        if alias: 
    15011498            if 'dynamic' in alias.metadata: