hooks/syncsession.py
changeset 2847 c2ee28f4d4b1
parent 2841 107ba1c45227
child 2898 a485d80b8fcb
equal deleted inserted replaced
2846:e71d6a585b83 2847:c2ee28f4d4b1
    72     def __call__(self):
    72     def __call__(self):
    73         if self.event == 'after_delete_relation':
    73         if self.event == 'after_delete_relation':
    74             opcls = _DeleteGroupOp
    74             opcls = _DeleteGroupOp
    75         else:
    75         else:
    76             opcls = _AddGroupOp
    76             opcls = _AddGroupOp
    77         for session in get_user_sessions(self.cw_req.repo, self.eidfrom):
    77         for session in get_user_sessions(self._cw.repo, self.eidfrom):
    78             opcls(self.cw_req, cnxuser=session.user, geid=self.eidto)
    78             opcls(self._cw, cnxuser=session.user, geid=self.eidto)
    79 
    79 
    80 
    80 
    81 class _DelUserOp(hook.Operation):
    81 class _DelUserOp(hook.Operation):
    82     """close associated user's session when it is deleted"""
    82     """close associated user's session when it is deleted"""
    83     def __init__(self, session, cnxid):
    83     def __init__(self, session, cnxid):
    97     __select__ = SyncSessionHook.__select__ & entity_implements('CWUser')
    97     __select__ = SyncSessionHook.__select__ & entity_implements('CWUser')
    98     events = ('after_delete_entity',)
    98     events = ('after_delete_entity',)
    99 
    99 
   100     def __call__(self):
   100     def __call__(self):
   101         """modify user permission, need to update users"""
   101         """modify user permission, need to update users"""
   102         for session in get_user_sessions(self.cw_req.repo, self.entity.eid):
   102         for session in get_user_sessions(self._cw.repo, self.entity.eid):
   103             _DelUserOp(self.cw_req, session.id)
   103             _DelUserOp(self._cw, session.id)
   104 
   104 
   105 
   105 
   106 # CWProperty hooks #############################################################
   106 # CWProperty hooks #############################################################
   107 
   107 
   108 
   108 
   141     __select__ = SyncSessionHook.__select__ & entity_implements('CWProperty')
   141     __select__ = SyncSessionHook.__select__ & entity_implements('CWProperty')
   142     events = ('after_add_entity',)
   142     events = ('after_add_entity',)
   143 
   143 
   144     def __call__(self):
   144     def __call__(self):
   145         key, value = self.entity.pkey, self.entity.value
   145         key, value = self.entity.pkey, self.entity.value
   146         session = self.cw_req
   146         session = self._cw
   147         try:
   147         try:
   148             value = session.vreg.typed_value(key, value)
   148             value = session.vreg.typed_value(key, value)
   149         except UnknownProperty:
   149         except UnknownProperty:
   150             raise ValidationError(self.entity.eid,
   150             raise ValidationError(self.entity.eid,
   151                                   {'pkey': session._('unknown property key')})
   151                                   {'pkey': session._('unknown property key')})
   166         entity = self.entity
   166         entity = self.entity
   167         if not ('pkey' in entity.edited_attributes or
   167         if not ('pkey' in entity.edited_attributes or
   168                 'value' in entity.edited_attributes):
   168                 'value' in entity.edited_attributes):
   169             return
   169             return
   170         key, value = entity.pkey, entity.value
   170         key, value = entity.pkey, entity.value
   171         session = self.cw_req
   171         session = self._cw
   172         try:
   172         try:
   173             value = session.vreg.typed_value(key, value)
   173             value = session.vreg.typed_value(key, value)
   174         except UnknownProperty:
   174         except UnknownProperty:
   175             return
   175             return
   176         except ValueError, ex:
   176         except ValueError, ex:
   189     __id__ = 'delcwprop'
   189     __id__ = 'delcwprop'
   190     events = ('before_delete_entity',)
   190     events = ('before_delete_entity',)
   191 
   191 
   192     def __call__(self):
   192     def __call__(self):
   193         eid = self.entity.eid
   193         eid = self.entity.eid
   194         session = self.cw_req
   194         session = self._cw
   195         for eidfrom, rtype, eidto in session.transaction_data.get('pendingrelations', ()):
   195         for eidfrom, rtype, eidto in session.transaction_data.get('pendingrelations', ()):
   196             if rtype == 'for_user' and eidfrom == self.entity.eid:
   196             if rtype == 'for_user' and eidfrom == self.entity.eid:
   197                 # if for_user was set, delete has already been handled
   197                 # if for_user was set, delete has already been handled
   198                 break
   198                 break
   199         else:
   199         else:
   204     __id__ = 'addcwpropforuser'
   204     __id__ = 'addcwpropforuser'
   205     __select__ = SyncSessionHook.__select__ & hook.match_rtype('for_user')
   205     __select__ = SyncSessionHook.__select__ & hook.match_rtype('for_user')
   206     events = ('after_add_relation',)
   206     events = ('after_add_relation',)
   207 
   207 
   208     def __call__(self):
   208     def __call__(self):
   209         session = self.cw_req
   209         session = self._cw
   210         eidfrom = self.eidfrom
   210         eidfrom = self.eidfrom
   211         if not session.describe(eidfrom)[0] == 'CWProperty':
   211         if not session.describe(eidfrom)[0] == 'CWProperty':
   212             return
   212             return
   213         key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V',
   213         key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V',
   214                                      {'x': eidfrom}, 'x')[0]
   214                                      {'x': eidfrom}, 'x')[0]
   223 class DelForUserRelationHook(AddForUserRelationHook):
   223 class DelForUserRelationHook(AddForUserRelationHook):
   224     __id__ = 'delcwpropforuser'
   224     __id__ = 'delcwpropforuser'
   225     events = ('after_delete_relation',)
   225     events = ('after_delete_relation',)
   226 
   226 
   227     def __call__(self):
   227     def __call__(self):
   228         session = self.cw_req
   228         session = self._cw
   229         key = session.execute('Any K WHERE P eid %(x)s, P pkey K',
   229         key = session.execute('Any K WHERE P eid %(x)s, P pkey K',
   230                               {'x': self.eidfrom}, 'x')[0][0]
   230                               {'x': self.eidfrom}, 'x')[0][0]
   231         session.transaction_data.setdefault('pendingrelations', []).append(
   231         session.transaction_data.setdefault('pendingrelations', []).append(
   232             (self.eidfrom, self.rtype, self.eidto))
   232             (self.eidfrom, self.rtype, self.eidto))
   233         for session_ in get_user_sessions(session.repo, self.eidto):
   233         for session_ in get_user_sessions(session.repo, self.eidto):