Mercurial > p > roundup > code
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 |
