hooks/metadata.py
changeset 3376 f5c69485381f
parent 2968 0e3460341023
child 3399 2b84f4adb6f8
equal deleted inserted replaced
3375:ebb11fa58ab9 3376:f5c69485381f
    35 class InitMetaAttrsHook(MetaDataHook):
    35 class InitMetaAttrsHook(MetaDataHook):
    36     """before create a new entity -> set creation and modification date
    36     """before create a new entity -> set creation and modification date
    37 
    37 
    38     this is a conveniency hook, you shouldn't have to disable it
    38     this is a conveniency hook, you shouldn't have to disable it
    39     """
    39     """
    40     __id__ = 'metaattrsinit'
    40     __regid__ = 'metaattrsinit'
    41     events = ('before_add_entity',)
    41     events = ('before_add_entity',)
    42 
    42 
    43     def __call__(self):
    43     def __call__(self):
    44         timestamp = datetime.now()
    44         timestamp = datetime.now()
    45         self.entity.setdefault('creation_date', timestamp)
    45         self.entity.setdefault('creation_date', timestamp)
    49             self.entity.setdefault('cwuri', cwuri)
    49             self.entity.setdefault('cwuri', cwuri)
    50 
    50 
    51 
    51 
    52 class UpdateMetaAttrsHook(MetaDataHook):
    52 class UpdateMetaAttrsHook(MetaDataHook):
    53     """update an entity -> set modification date"""
    53     """update an entity -> set modification date"""
    54     __id__ = 'metaattrsupdate'
    54     __regid__ = 'metaattrsupdate'
    55     events = ('before_update_entity',)
    55     events = ('before_update_entity',)
    56 
    56 
    57     def __call__(self):
    57     def __call__(self):
    58         self.entity.setdefault('modification_date', datetime.now())
    58         self.entity.setdefault('modification_date', datetime.now())
    59 
    59 
    69             session.add_relation(self.entity.eid, 'created_by', session.user.eid)
    69             session.add_relation(self.entity.eid, 'created_by', session.user.eid)
    70 
    70 
    71 
    71 
    72 class SetIsHook(MetaDataHook):
    72 class SetIsHook(MetaDataHook):
    73     """create a new entity -> set is relation"""
    73     """create a new entity -> set is relation"""
    74     __id__ = 'setis'
    74     __regid__ = 'setis'
    75     events = ('after_add_entity',)
    75     events = ('after_add_entity',)
    76 
    76 
    77     def __call__(self):
    77     def __call__(self):
    78         if hasattr(self.entity, '_cw_recreating'):
    78         if hasattr(self.entity, '_cw_recreating'):
    79             return
    79             return
    90                                  eschema_type_eid(session, etype))
    90                                  eschema_type_eid(session, etype))
    91 
    91 
    92 
    92 
    93 class SetOwnershipHook(MetaDataHook):
    93 class SetOwnershipHook(MetaDataHook):
    94     """create a new entity -> set owner and creator metadata"""
    94     """create a new entity -> set owner and creator metadata"""
    95     __id__ = 'setowner'
    95     __regid__ = 'setowner'
    96     events = ('after_add_entity',)
    96     events = ('after_add_entity',)
    97 
    97 
    98     def __call__(self):
    98     def __call__(self):
    99         asession = self._cw.actual_session()
    99         asession = self._cw.actual_session()
   100         if not asession.is_internal_session:
   100         if not asession.is_internal_session:
   112 
   112 
   113 class SyncCompositeOwner(MetaDataHook):
   113 class SyncCompositeOwner(MetaDataHook):
   114     """when adding composite relation, the composed should have the same owners
   114     """when adding composite relation, the composed should have the same owners
   115     has the composite
   115     has the composite
   116     """
   116     """
   117     __id__ = 'synccompositeowner'
   117     __regid__ = 'synccompositeowner'
   118     events = ('after_add_relation',)
   118     events = ('after_add_relation',)
   119 
   119 
   120     def __call__(self):
   120     def __call__(self):
   121         if self.rtype == 'wf_info_for':
   121         if self.rtype == 'wf_info_for':
   122             # skip this special composite relation # XXX (syt) why?
   122             # skip this special composite relation # XXX (syt) why?
   129             _SyncOwnersOp(self._cw, compositeeid=eidto, composedeid=eidfrom)
   129             _SyncOwnersOp(self._cw, compositeeid=eidto, composedeid=eidfrom)
   130 
   130 
   131 
   131 
   132 class FixUserOwnershipHook(MetaDataHook):
   132 class FixUserOwnershipHook(MetaDataHook):
   133     """when a user has been created, add owned_by relation on itself"""
   133     """when a user has been created, add owned_by relation on itself"""
   134     __id__ = 'fixuserowner'
   134     __regid__ = 'fixuserowner'
   135     __select__ = MetaDataHook.__select__ & entity_implements('CWUser')
   135     __select__ = MetaDataHook.__select__ & entity_implements('CWUser')
   136     events = ('after_add_entity',)
   136     events = ('after_add_entity',)
   137 
   137 
   138     def __call__(self):
   138     def __call__(self):
   139         self._cw.add_relation(self.entity.eid, 'owned_by', self.entity.eid)
   139         self._cw.add_relation(self.entity.eid, 'owned_by', self.entity.eid)
   140 
   140 
   141 
   141 
   142 class UpdateFTIHook(MetaDataHook):
   142 class UpdateFTIHook(MetaDataHook):
   143     """sync fulltext index when relevant relation is added / removed
   143     """sync fulltext index when relevant relation is added / removed
   144     """
   144     """
   145     __id__ = 'updateftirel'
   145     __regid__ = 'updateftirel'
   146     events = ('after_add_relation', 'after_delete_relation')
   146     events = ('after_add_relation', 'after_delete_relation')
   147 
   147 
   148     def __call__(self):
   148     def __call__(self):
   149         rtype = self.rtype
   149         rtype = self.rtype
   150         session = self._cw
   150         session = self._cw