Changeset 602

Show
Ignore:
Timestamp:
07/07/03 18:53:27 (5 years ago)
Author:
sholloway
Message:

Code cleanup

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBFoundation/RBFoundation/Objects/Relations.py

    r595 r602  
    256256    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    257257 
    258     defaultkey = None 
    259     keyname = None 
    260258    itemfactory = None 
    261259 
     
    264262    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    265263 
    266     def __init__(self, keyname=None, defaultkey=None, itemfactory=None, lookup=None): 
    267         if keyname is not None: 
    268             self.keyname = keyname 
    269  
    270         if defaultkey is not None: 
    271             self.defaultkey = defaultkey 
    272  
     264    def __init__(self, itemfactory=None, lookup=None): 
    273265        if itemfactory is not None: 
    274266            self.itemfactory = itemfactory 
     
    335327            if default is not NotImplemented: 
    336328                return default 
    337             elif self.itemfactory is not None
     329            elif self.itemfactory
    338330                result = self.lookup[key] = self.itemfactory().asRelationReference() 
    339331                return result.Resolve() 
     
    365357 
    366358    def _getkeypairs(self, *relations): 
    367         if self.keyname is None: 
    368             raise ValueError, 'Cannot infer key for relation "%s"' % (relation,) 
    369  
    370         for relation in relations: 
    371             try:  
    372                 yield self._translateKey(relation.Metadata(self.keyname)), relation 
    373             except KeyError: 
    374                 if self.defaultkey is not None: 
    375                     yield self._translateKey(self.defaultkey), relation 
    376                 else: 
    377                     raise KeyError, 'Relation "%s" metadata has no key "%s"' % (relation, self.keyname) 
     359        raise NotImplementedError 
    378360 
    379361#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    523505#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    524506 
    525 class RelationshipMetadataMixin(object): 
    526     def Metadata(self, *keys): 
    527         """Returns the metadata about this relationship""" 
    528         try: 
    529             result = self.metadata 
    530         except AttributeError: 
    531             if keys: 
    532                 # Don't force the creation of the dictionary 
    533                 result = {} 
    534             else: 
    535                 self.metadata = {} 
    536                 result = self.metadata 
    537         if keys: 
    538             if len(keys) == 1: 
    539                 result = result[keys[0]] 
    540             elif len(keys) > 1: 
    541                 result = [result[key] for key in keys] 
    542         return result 
    543  
    544507class RelationshipDefaultMixin(object): 
    545508    #~ Default Relations helpers ~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    566529#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    567530 
    568 class Relationships(RelationshipsBase, RelationshipMetadataMixin, RelationshipDefaultMixin): 
    569     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    570     #~ Constants / Variables / Etc.  
    571     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    572  
    573     relations = LazyProperty(RelationsLookup) 
    574     defaultKind = None 
    575  
    576     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    577     #~ Public Methods  
    578     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    579  
     531class RelationshipDataItemMixin(object): 
    580532    def __init__(self, dataitem=None, metarelationship=None): 
    581533        if dataitem is not None: 
    582534            self.SetDataItem(dataitem) 
    583535 
    584         #if metarelationship is not None: 
    585         #    self.SetMetaRelationship(metarelationship) 
    586  
    587536    def GetDataItem(self): 
    588537        """Returns the subject dataitem of the relationship""" 
     
    599548    DataItem = property(GetDataItem, SetDataItem, DelDataItem) 
    600549 
    601     #def GetMetaRelationship(self): 
    602     #    """Returns the relationship "above" the current level... a relationship of relationships""" 
    603     #    return self.metarelationship 
    604  
    605     #def SetMetaRelationship(self, metarelationship): 
    606     #    """Sets the relationship "above" the current level... a relationship of relationships""" 
    607     #    self.metarelationship = metarelationship 
    608  
    609     #def DelMetaRelationship(self): 
    610     #    """Removes the relationship "above" the current level... a relationship of relationships""" 
    611     #    del self.metarelationship 
    612  
    613     #MetaRelationship = property(GetMetaRelationship, SetMetaRelationship, DelMetaRelationship) 
    614  
    615     def AddRelation(self, other, kind=None, **kw): 
    616         if kind is None: kind = self.defaultKind 
     550#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     551 
     552class MetaRelationshipsMixin(object): 
     553    def __init__(self, metarelationship=None): 
     554        if metarelationship is not None: 
     555            self.SetMetaRelationship(metarelationship) 
     556 
     557    def GetMetaRelationship(self): 
     558        """Returns the relationship "above" the current level... a relationship of relationships""" 
     559        return self.metarelationship 
     560 
     561    def SetMetaRelationship(self, metarelationship): 
     562        """Sets the relationship "above" the current level... a relationship of relationships""" 
     563        self.metarelationship = metarelationship 
     564 
     565    def DelMetaRelationship(self): 
     566        """Removes the relationship "above" the current level... a relationship of relationships""" 
     567        del self.metarelationship 
     568 
     569    MetaRelationship = property(GetMetaRelationship, SetMetaRelationship, DelMetaRelationship) 
     570 
     571#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     572 
     573class Relationships(RelationshipsBase, RelationshipDataItemMixin, RelationshipDefaultMixin): 
     574    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     575    #~ Constants / Variables / Etc.  
     576    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     577 
     578    relations = LazyProperty(RelationsLookup) 
     579    defaultKind = None 
     580 
     581    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     582    #~ Public Methods  
     583    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     584 
     585    def Metadata(self): 
     586        """Returns the metadata about this relationship""" 
     587        try: 
     588            return self.metadata 
     589        except AttributeError: 
     590            self.metadata = {} 
     591            return self.metadata 
     592 
     593    def AddRelation(self, other, kind=NotImplemented, **kw): 
     594        if kind is NotImplemented: kind = self.defaultKind 
    617595        self.relations[kind].add(other, **kw) 
    618596 
     
    620598        self.relations[kind] = relationcollection 
    621599 
    622     def Relations(self, kind=None): 
    623         if kind is None: kind = self.defaultKind 
     600    def Relations(self, kind=NotImplemented): 
     601        if kind is NotImplemented: kind = self.defaultKind 
    624602        return self.relations[kind] 
    625603