Package advene :: Package model :: Package cam :: Module relation
[hide private]
[frames] | no frames]

Source Code for Module advene.model.cam.relation

 1  from advene.model.cam.consts import CAM_TYPE, CAMSYS_TYPE 
 2  from advene.model.cam.element import CamElementMixin 
 3  from advene.model.cam.exceptions import SemanticError 
 4  from advene.model.cam.group import CamGroupMixin 
 5  import advene.model.cam.util.bookkeeping as bk 
 6  from advene.model.core.relation import Relation as CoreRelation 
 7  from advene.model.core.element import TAG 
8 9 -class Relation(CamGroupMixin, CoreRelation, CamElementMixin):
10 11 @classmethod
12 - def instantiate(cls, *args):
13 r = super(Relation, cls).instantiate(*args) 14 r._self_connect("modified-items", bk.update_element) 15 return r
16
17 - def __iter__(self):
18 # necessary to override CamGroupMixin __iter__ 19 return CoreRelation.__iter__(self)
20
21 - def set_meta(self, key, value, val_is_idref=False):
22 if key == CAM_TYPE: 23 advene_type = getattr(value, "ADVENE_TYPE", None) 24 if advene_type: 25 if advene_type is not TAG \ 26 or value.get_meta(CAMSYS_TYPE, None) != "relation-type": 27 raise SemanticError("not a relation type") 28 else: 29 if not val_is_idref: 30 raise SemanticError("not a relation type") 31 32 old_type = self.get_meta(key, None) 33 owner = self._owner 34 if old_type: 35 old_type = owner.get(old_type, old_type) # get element if we can 36 owner._dissociate_tag_nowarn(self, old_type) 37 owner._associate_tag_nowarn(self, value) 38 39 return super(Relation, self).set_meta(key, value, val_is_idref)
40
41 - def del_meta(self, key):
42 if key == CAM_TYPE: 43 # TODO raise a user-warning, this is not good practice 44 old_type = self.get_meta(key, None) 45 if old_type: 46 self._owner._dissociate_tag_nowarn(self, old_type) 47 return super(Relation, self).del_meta(key)
48 49 Relation.make_metadata_property(CAM_TYPE, "type", default=None, doc=""" 50 The type of this relation, created with Package.create_relation_type. 51 """) 52