schema.py
changeset 9253 77e31ede9b04
parent 9250 0dcc68dd8458
child 9283 5f2c5eb1a820
equal deleted inserted replaced
9252:01bca75ee8bd 9253:77e31ede9b04
   980 class BaseRQLConstraint(RRQLExpression, BaseConstraint):
   980 class BaseRQLConstraint(RRQLExpression, BaseConstraint):
   981     """base class for rql constraints"""
   981     """base class for rql constraints"""
   982     distinct_query = None
   982     distinct_query = None
   983 
   983 
   984     def serialize(self):
   984     def serialize(self):
   985         # start with a comma for bw compat,see below
   985         # start with a semicolon for bw compat, see below
   986         return ';' + ','.join(sorted(self.mainvars)) + ';' + self.expression
   986         return ';' + ','.join(sorted(self.mainvars)) + ';' + self.expression
   987 
   987 
   988     @classmethod
   988     @classmethod
   989     def deserialize(cls, value):
   989     def deserialize(cls, value):
   990         # XXX < 3.5.10 bw compat
       
   991         if not value.startswith(';'):
       
   992             return cls(value)
       
   993         _, mainvars, expression = value.split(';', 2)
   990         _, mainvars, expression = value.split(';', 2)
   994         return cls(expression, mainvars)
   991         return cls(expression, mainvars)
   995 
   992 
   996     def check(self, entity, rtype, value):
   993     def check(self, entity, rtype, value):
   997         """return true if the value satisfy the constraint, else false"""
   994         """return true if the value satisfy the constraint, else false"""
  1042         # start with a semicolon for bw compat, see below
  1039         # start with a semicolon for bw compat, see below
  1043         return ';%s;%s\n%s' % (','.join(sorted(self.mainvars)), self.expression,
  1040         return ';%s;%s\n%s' % (','.join(sorted(self.mainvars)), self.expression,
  1044                                self.msg or '')
  1041                                self.msg or '')
  1045 
  1042 
  1046     def deserialize(cls, value):
  1043     def deserialize(cls, value):
  1047         # XXX < 3.5.10 bw compat
       
  1048         if not value.startswith(';'):
       
  1049             return cls(value)
       
  1050         value, msg = value.split('\n', 1)
  1044         value, msg = value.split('\n', 1)
  1051         _, mainvars, expression = value.split(';', 2)
  1045         _, mainvars, expression = value.split(';', 2)
  1052         return cls(expression, mainvars, msg)
  1046         return cls(expression, mainvars, msg)
  1053     deserialize = classmethod(deserialize)
  1047     deserialize = classmethod(deserialize)
  1054 
  1048