comparison roundup/hyperdb.py @ 7464:82bbb95e5690 issue2550923_computed_property

merge from tip into issue2550923_computed_property
author John Rouillard <rouilj@ieee.org>
date Thu, 08 Jun 2023 00:10:32 -0400
parents ca90f7270cd4 76a21cf791b9
children 14a8e11f3a87
comparison
equal deleted inserted replaced
7045:ca90f7270cd4 7464:82bbb95e5690
177 def from_raw(self, value, **kw): 177 def from_raw(self, value, **kw):
178 if not value: 178 if not value:
179 return None 179 return None
180 try: 180 try:
181 return password.Password(encrypted=value, scheme=self.scheme, 181 return password.Password(encrypted=value, scheme=self.scheme,
182 strict=True) 182 strict=True,
183 config=kw['db'].config)
183 except password.PasswordValueError as message: 184 except password.PasswordValueError as message:
184 raise HyperdbValueError(_('property %s: %s') % 185 raise HyperdbValueError(_('property %(property)s: %(errormsg)s') %
185 (kw['propname'], message)) 186 {'property': kw['propname'],
187 'errormsg': message})
186 188
187 def sort_repr(self, cls, val, name): 189 def sort_repr(self, cls, val, name):
188 if not val: 190 if not val:
189 return val 191 return val
190 return str(val) 192 return str(val)
206 208
207 def from_raw(self, value, db, **kw): 209 def from_raw(self, value, db, **kw):
208 try: 210 try:
209 value = date.Date(value, self.offset(db)) 211 value = date.Date(value, self.offset(db))
210 except ValueError as message: 212 except ValueError as message:
211 raise HyperdbValueError(_('property %s: %r is an invalid ' 213 raise HyperdbValueError(_(
212 'date (%s)') % (kw['propname'], 214 'property %(property)s: %(value)r is an invalid '
213 value, message)) 215 'date (%(errormsg)s)') % {'property': kw['propname'],
216 'value': value,
217 'errormsg': message})
214 return value 218 return value
215 219
216 def range_from_raw(self, value, db): 220 def range_from_raw(self, value, db):
217 """return Range value from given raw value with offset correction""" 221 """return Range value from given raw value with offset correction"""
218 return date.Range(value, date.Date, offset=self.offset(db)) 222 return date.Range(value, date.Date, offset=self.offset(db))
227 """An object designating an Interval property.""" 231 """An object designating an Interval property."""
228 def from_raw(self, value, **kw): 232 def from_raw(self, value, **kw):
229 try: 233 try:
230 value = date.Interval(value) 234 value = date.Interval(value)
231 except ValueError as message: 235 except ValueError as message:
232 raise HyperdbValueError(_('property %s: %r is an invalid ' 236 raise HyperdbValueError(_(
233 'date interval (%s)') % 237 'property %(property)s: %(value)r is an invalid '
234 (kw['propname'], value, message)) 238 'date interval (%(errormsg)s)') %
239 {'property': kw['propname'],
240 'value': value,
241 'errormsg': message})
235 return value 242 return value
236 243
237 def sort_repr(self, cls, val, name): 244 def sort_repr(self, cls, val, name):
238 if not val: 245 if not val:
239 return val 246 return val
481 def from_raw(self, value, **kw): 488 def from_raw(self, value, **kw):
482 value = value.strip() 489 value = value.strip()
483 try: 490 try:
484 value = float(value) 491 value = float(value)
485 except ValueError: 492 except ValueError:
486 raise HyperdbValueError(_('property %s: %r is not a number') % 493 raise HyperdbValueError(_(
487 (kw['propname'], value)) 494 'property %(property)s: %(value)r is not a number') %
495 {'property': kw['propname'],
496 'value': value})
488 return value 497 return value
489 498
490 499
491 class Integer(_Type): 500 class Integer(_Type):
492 """An object designating an integer property""" 501 """An object designating an integer property"""
493 def from_raw(self, value, **kw): 502 def from_raw(self, value, **kw):
494 value = value.strip() 503 value = value.strip()
495 try: 504 try:
496 value = int(value) 505 value = int(value)
497 except ValueError: 506 except ValueError:
498 raise HyperdbValueError(_('property %s: %r is not an integer') % 507 raise HyperdbValueError(_(
499 (kw['propname'], value)) 508 'property %(property)s: %(value)r is not an integer') % {
509 'property': kw['propname'],
510 'value': value})
500 return value 511 return value
501 512
502 513
503 # 514 #
504 # Support for splitting designators 515 # Support for splitting designators
737 else: 748 else:
738 filterspec[p.name] = ['-1'] # no match was found 749 filterspec[p.name] = ['-1'] # no match was found
739 else: 750 else:
740 assert not isinstance(p.val, Exact_Match) 751 assert not isinstance(p.val, Exact_Match)
741 filterspec[p.name] = p.val 752 filterspec[p.name] = p.val
742 self.set_val(self.cls._filter(search_matches, filterspec, sort and self, 753 self.set_val(self.cls._filter(search_matches, filterspec,
754 sort and self,
743 retired=retired, 755 retired=retired,
744 exact_match_spec=exact_match_spec)) 756 exact_match_spec=exact_match_spec))
745 return self.val 757 return self.val
746 758
747 def sort(self, ids=None): 759 def sort(self, ids=None):
1235 1247
1236 # do the db-related init stuff 1248 # do the db-related init stuff
1237 db.addclass(self) 1249 db.addclass(self)
1238 1250
1239 actions = "create set retire restore".split() 1251 actions = "create set retire restore".split()
1240 self.auditors = dict([(a, PrioList()) for a in actions]) 1252 skey = lambda x: x[:2]
1241 self.reactors = dict([(a, PrioList()) for a in actions]) 1253 self.auditors = dict([(a, PrioList(key=skey)) for a in actions])
1254 self.reactors = dict([(a, PrioList(key=skey)) for a in actions])
1242 1255
1243 def __repr__(self): 1256 def __repr__(self):
1244 """Slightly more useful representation 1257 """Slightly more useful representation
1245 Note that an error message can be raised at a point 1258 Note that an error message can be raised at a point
1246 where self.classname isn't known yet if the error 1259 where self.classname isn't known yet if the error
2025 if not idre or not idre.match(value): 2038 if not idre or not idre.match(value):
2026 if linkcl.getkey(): 2039 if linkcl.getkey():
2027 try: 2040 try:
2028 value = linkcl.lookup(value) 2041 value = linkcl.lookup(value)
2029 except KeyError: 2042 except KeyError:
2030 raise HyperdbValueError(_('property %s: %r is not a %s.') % ( 2043 raise HyperdbValueError(_(
2031 propname, value, prop.classname)) 2044 'property %(property)s: %(value)r '
2045 'is not a %(classname)s.') % {
2046 'property': propname,
2047 'value': value,
2048 'classname': prop.classname})
2032 else: 2049 else:
2033 raise HyperdbValueError(_('you may only enter ID values ' 2050 raise HyperdbValueError(_('you may only enter ID values '
2034 'for property %s') % propname) 2051 'for property %s') % propname)
2035 return value 2052 return value
2036 2053
2062 # ensure it's a valid property name 2079 # ensure it's a valid property name
2063 propname = propname.strip() 2080 propname = propname.strip()
2064 try: 2081 try:
2065 proptype = properties[propname] 2082 proptype = properties[propname]
2066 except KeyError: 2083 except KeyError:
2067 raise HyperdbValueError(_('%r is not a property of %s') % ( 2084 raise HyperdbValueError(_(
2068 propname, klass.classname)) 2085 '%(property)r is not a property of %(classname)s') % {
2086 'property': propname,
2087 'classname': klass.classname})
2069 2088
2070 # if we got a string, strip it now 2089 # if we got a string, strip it now
2071 if isinstance(value, type('')): 2090 if isinstance(value, type('')):
2072 value = value.strip() 2091 value = value.strip()
2073 2092

Roundup Issue Tracker: http://roundup-tracker.org/