hooks/syncsession.py
branchstable
changeset 5030 5238d9a8dfee
parent 4569 1acd90d0cb59
child 5174 78438ad513ca
child 5421 8167de96c523
equal deleted inserted replaced
5029:f7709d28fb79 5030:5238d9a8dfee
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     7 """
     7 """
     8 __docformat__ = "restructuredtext en"
     8 __docformat__ = "restructuredtext en"
     9 
     9 
       
    10 from yams.schema import role_name
    10 from cubicweb import UnknownProperty, ValidationError, BadConnectionId
    11 from cubicweb import UnknownProperty, ValidationError, BadConnectionId
    11 from cubicweb.selectors import implements
    12 from cubicweb.selectors import implements
    12 from cubicweb.server import hook
    13 from cubicweb.server import hook
    13 
    14 
    14 
    15 
   145         key, value = self.entity.pkey, self.entity.value
   146         key, value = self.entity.pkey, self.entity.value
   146         session = self._cw
   147         session = self._cw
   147         try:
   148         try:
   148             value = session.vreg.typed_value(key, value)
   149             value = session.vreg.typed_value(key, value)
   149         except UnknownProperty:
   150         except UnknownProperty:
       
   151             qname = role_name('pkey', 'subject')
   150             raise ValidationError(self.entity.eid,
   152             raise ValidationError(self.entity.eid,
   151                                   {'pkey': session._('unknown property key')})
   153                                   {qname: session._('unknown property key')})
   152         except ValueError, ex:
   154         except ValueError, ex:
       
   155             qname = role_name('value', 'subject')
   153             raise ValidationError(self.entity.eid,
   156             raise ValidationError(self.entity.eid,
   154                                   {'value': session._(str(ex))})
   157                                   {qname: session._(str(ex))})
   155         if not session.user.matching_groups('managers'):
   158         if not session.user.matching_groups('managers'):
   156             session.add_relation(self.entity.eid, 'for_user', session.user.eid)
   159             session.add_relation(self.entity.eid, 'for_user', session.user.eid)
   157         else:
   160         else:
   158             _AddCWPropertyOp(session, cwprop=self.entity)
   161             _AddCWPropertyOp(session, cwprop=self.entity)
   159 
   162 
   172         try:
   175         try:
   173             value = session.vreg.typed_value(key, value)
   176             value = session.vreg.typed_value(key, value)
   174         except UnknownProperty:
   177         except UnknownProperty:
   175             return
   178             return
   176         except ValueError, ex:
   179         except ValueError, ex:
   177             raise ValidationError(entity.eid, {'value': session._(str(ex))})
   180             qname = role_name('value', 'subject')
       
   181             raise ValidationError(entity.eid, {qname: session._(str(ex))})
   178         if entity.for_user:
   182         if entity.for_user:
   179             for session_ in get_user_sessions(session.repo, entity.for_user[0].eid):
   183             for session_ in get_user_sessions(session.repo, entity.for_user[0].eid):
   180                 _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties,
   184                 _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties,
   181                                     key=key, value=value)
   185                                     key=key, value=value)
   182         else:
   186         else:
   212         if not session.describe(eidfrom)[0] == 'CWProperty':
   216         if not session.describe(eidfrom)[0] == 'CWProperty':
   213             return
   217             return
   214         key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V',
   218         key, value = session.execute('Any K,V WHERE P eid %(x)s,P pkey K,P value V',
   215                                      {'x': eidfrom}, 'x')[0]
   219                                      {'x': eidfrom}, 'x')[0]
   216         if session.vreg.property_info(key)['sitewide']:
   220         if session.vreg.property_info(key)['sitewide']:
       
   221             qname = role_name('for_user', 'subject')
       
   222             msg = session._("site-wide property can't be set for user")
   217             raise ValidationError(eidfrom,
   223             raise ValidationError(eidfrom,
   218                                   {'for_user': session._("site-wide property can't be set for user")})
   224                                   {qname: msg})
   219         for session_ in get_user_sessions(session.repo, self.eidto):
   225         for session_ in get_user_sessions(session.repo, self.eidto):
   220             _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties,
   226             _ChangeCWPropertyOp(session, cwpropdict=session_.user.properties,
   221                               key=key, value=value)
   227                               key=key, value=value)
   222 
   228 
   223 
   229