Changeset 242
- Timestamp:
- 07/25/06 18:11:28
- Files:
-
- trunk/__init__.py (modified) (6 diffs)
- trunk/arenas.py (modified) (9 diffs)
- trunk/engines.py (modified) (2 diffs)
- trunk/storage/db.py (modified) (5 diffs)
- trunk/storage/dbmodel.py (modified) (4 diffs)
- trunk/storage/storeado.py (modified) (5 diffs)
- trunk/storage/storefirebird.py (modified) (2 diffs)
- trunk/storage/storemysql.py (modified) (2 diffs)
- trunk/storage/storeodbc.py (modified) (5 diffs)
- trunk/storage/storeshelve.py (modified) (3 diffs)
- trunk/storage/storesqlite.py (modified) (4 diffs)
- trunk/test/test_dejavu.py (modified) (2 diffs)
- trunk/test/zoo_fixture.py (modified) (4 diffs)
- trunk/units.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/__init__.py
r241 r242 7 7 "Dejavu", to quote Flying Circus episode 16, means "that strange feeling 8 8 we sometimes get that we've lived through something before." What better 9 name for a n object server? Our terminology reflects this cognitive bent:9 name for a persistence system? Our terminology reflects this cognitive bent: 10 10 sandboxes "memorize", "recall" and "forget" Units. 11 11 … … 36 36 37 37 38 import datetime 38 import datetime as _datetime 39 39 40 from dejavu.analysis import * 40 import analysis 41 sort = analysis.sort 42 41 43 from dejavu.arenas import * 42 from dejavu.containers import *43 from dejavu.errors import *44 44 from dejavu.schemas import * 45 45 from dejavu.units import * … … 97 97 def year(value): 98 98 """The year attribute of a date.""" 99 if isinstance(value, ( datetime.date,datetime.datetime)):99 if isinstance(value, (_datetime.date, _datetime.datetime)): 100 100 return value.year 101 101 else: … … 104 104 def month(value): 105 105 """The month attribute of a date.""" 106 if isinstance(value, ( datetime.date,datetime.datetime)):106 if isinstance(value, (_datetime.date, _datetime.datetime)): 107 107 return value.month 108 108 else: … … 111 111 def now(): 112 112 """Late-bound datetime.datetime.now(). Taint this when early binding.""" 113 return datetime.datetime.now()113 return _datetime.datetime.now() 114 114 now.bind_late = True 115 115 116 116 def today(): 117 117 """Late-bound datetime.date.today(). Taint this when early binding.""" 118 return datetime.date.today()118 return _datetime.date.today() 119 119 today.bind_late = True 120 120 121 121 def iscurrentweek(value): 122 122 """If value is in the current week, return True, else False.""" 123 if isinstance(value, ( datetime.date,datetime.datetime)):124 return datetime.date.today().strftime('%W%Y') == value.strftime('%W%Y')123 if isinstance(value, (_datetime.date, _datetime.datetime)): 124 return _datetime.date.today().strftime('%W%Y') == value.strftime('%W%Y') 125 125 else: 126 126 return False … … 134 134 setattr(_d, _name, globals()[_name]) 135 135 logic.dejavu = _d 136 del _name, _d, _Empty trunk/arenas.py
r241 r242 8 8 import xray 9 9 10 __all__ = ['Arena', 'Sandbox', 11 'LOGFORGET', 'LOGIO', 'LOGMEMORIZE', 'LOGRECALL', 12 'LOGREPRESS', 'LOGSANDBOX', 'LOGSQL', 'LOGVIEW', 10 __all__ = ['Arena', 'Sandbox', 'logflags', 13 11 ] 14 12 15 13 14 class Enum(object): 15 pass 16 16 17 # logging flags (see Arena.logflags) 17 LOGIO = 1 18 LOGSQL = 4 19 20 LOGMEMORIZE = 128 21 LOGRECALL = 256 22 LOGVIEW = 512 23 LOGREPRESS = 1024 24 LOGFORGET = 2048 25 LOGSANDBOX = LOGMEMORIZE | LOGRECALL | LOGVIEW | LOGREPRESS | LOGFORGET 18 logflags = Enum() 19 logflags.IO = 1 20 logflags.SQL = 4 21 22 logflags.MEMORIZE = 128 23 logflags.RECALL = 256 24 logflags.VIEW = 512 25 logflags.REPRESS = 1024 26 logflags.FORGET = 2048 27 logflags.SANDBOX = logflags.MEMORIZE | logflags.RECALL | logflags.VIEW | logflags.REPRESS | logflags.FORGET 26 28 27 29 … … 253 255 id = unit.identity() 254 256 self._cache(cls)[id] = unit 255 self.arena.log("MEMORIZE %s: %s" % (cls.__name__, id), LOGMEMORIZE)257 self.arena.log("MEMORIZE %s: %s" % (cls.__name__, id), logflags.MEMORIZE) 256 258 257 259 # Do this at the end of the func, since most on_memorize … … 265 267 266 268 id = unit.identity() 267 self.arena.log("FORGET %s: %s" % (cls.__name__, id), LOGFORGET)269 self.arena.log("FORGET %s: %s" % (cls.__name__, id), logflags.FORGET) 268 270 self.arena.storage(cls).destroy(unit) 269 271 … … 285 287 286 288 cls = classes 287 self.arena.log("RECALL %s: %s" % (cls.__name__, expr), LOGRECALL)289 self.arena.log("RECALL %s: %s" % (cls.__name__, expr), logflags.RECALL) 288 290 289 291 # Collect all registered subclasses of cls. … … 371 373 self.arena.log("RECALL %s %s" % 372 374 (", ".join([c.__name__ for c in classes]), expr), 373 LOGRECALL)375 logflags.RECALL) 374 376 375 377 stores = [self.arena.storage(cls) for cls in classes] … … 426 428 def view(self, cls, attrs, expr=None): 427 429 """view(cls, attrs, expr=None) -> Iterator of all Property tuples.""" 428 self.arena.log("VIEW %s [%s]: %s" % (cls.__name__, attrs, expr), LOGVIEW)430 self.arena.log("VIEW %s [%s]: %s" % (cls.__name__, attrs, expr), logflags.VIEW) 429 431 430 432 cache = self._cache(cls) … … 462 464 (in fact it's the only way to do it) by using attrs = ['ID']. 463 465 """ 464 self.arena.log("DISTINCT %s [%s]: %s" % (cls.__name__, attrs, expr), LOGVIEW)466 self.arena.log("DISTINCT %s [%s]: %s" % (cls.__name__, attrs, expr), logflags.VIEW) 465 467 466 468 seen = {} … … 507 509 cls = unit.__class__ 508 510 id = unit.identity() 509 self.arena.log("REPRESS %s: %s" % (cls.__name__, id), LOGREPRESS)511 self.arena.log("REPRESS %s: %s" % (cls.__name__, id), logflags.REPRESS) 510 512 511 513 if hasattr(unit, "on_repress"): … … 536 538 while cache: 537 539 unitid, unit = cache.popitem() 538 self.arena.log("REPRESS %s: %s" % (cls.__name__, unitid), LOGREPRESS)540 self.arena.log("REPRESS %s: %s" % (cls.__name__, unitid), logflags.REPRESS) 539 541 store.save(unit) 540 542 trunk/engines.py
r241 r242 16 16 17 17 import dejavu 18 from dejavu import logic18 from dejavu import errors, logic 19 19 20 20 … … 27 27 if self.Expiration <= datetime.datetime.now(): 28 28 self.forget() 29 raise dejavu.UnrecallableError29 raise errors.UnrecallableError 30 30 else: 31 31 self.decay(minutes=15) trunk/storage/db.py
r241 r242 50 50 51 51 import dejavu 52 from dejavu import logic, storage, LOGSQL, xray52 from dejavu import errors, logic, storage, logflags, xray 53 53 from dbmodel import * 54 54 … … 319 319 "since each unit must be fully-formed. %s" 320 320 % (cls.__name__, self.__class__.__name__, expr), 321 dejavu.StorageWarning)321 errors.StorageWarning) 322 322 for unit in self.recall(cls, expr): 323 323 # Use tuples for hashability … … 342 342 "since each unit must be fully-formed. %s" 343 343 % (cls.__name__, self.__class__.__name__, expr), 344 dejavu.StorageWarning)344 errors.StorageWarning) 345 345 vals = {} 346 346 for unit in self.recall(cls, expr): … … 382 382 if ua is None: 383 383 msg = ("No association found between %s and %s." % (name1, name2)) 384 raise dejavu.AssociationError(msg)384 raise errors.AssociationError(msg) 385 385 386 386 t = self.db … … 536 536 537 537 def rename_storage(self, oldname, newname): 538 self.arena.log("rename table %s to %s" % (oldname, newname), LOGSQL)538 self.arena.log("rename table %s to %s" % (oldname, newname), logflags.SQL) 539 539 self.db.rename(oldname, newname) 540 540 trunk/storage/dbmodel.py
r241 r242 72 72 73 73 import dejavu 74 from dejavu import codewalk, LOGSQL74 from dejavu import codewalk, errors, logflags 75 75 76 76 … … 810 810 811 811 812 class OutOfConnectionsError( dejavu.DejavuError):812 class OutOfConnectionsError(errors.DejavuError): 813 813 """Exception raised when a database store has run out of connections.""" 814 814 pass … … 1227 1227 warnings.warn("The name '%s' is longer than the maximum of " 1228 1228 "%s characters." % (key, maxlen), 1229 dejavu.StorageWarning)1229 errors.StorageWarning) 1230 1230 key = key[:maxlen] 1231 1231 … … 1342 1342 if isinstance(query, unicode): 1343 1343 query = query.encode(self.adaptertosql.encoding) 1344 self.log(query, LOGSQL)1344 self.log(query, logflags.SQL) 1345 1345 return conn.query(query) 1346 1346 trunk/storage/storeado.py
r241 r242 17 17 18 18 import dejavu 19 from dejavu import storage, logic19 from dejavu import errors, logic, storage 20 20 from dejavu.storage import db 21 21 … … 502 502 if isinstance(query, unicode): 503 503 query = query.encode(self.adaptertosql.encoding) 504 self.log(query, dejavu. LOGSQL)504 self.log(query, dejavu.logflags.SQL) 505 505 try: 506 506 conn.Execute(query) … … 519 519 res = conn.OpenSchema(query) 520 520 else: 521 self.log(query, dejavu. LOGSQL)521 self.log(query, dejavu.logflags.SQL) 522 522 res = win32com.client.Dispatch(r'ADODB.Recordset') 523 523 if hasattr(conn, "conn"): … … 642 642 "not allow comparisons on string fields larger " 643 643 "than 8000 characters. Some of your data may be " 644 "truncated.", dejavu.StorageWarning)644 "truncated.", errors.StorageWarning) 645 645 bytes = 8000 646 646 … … 1013 1013 warnings.warn("Memo fields cannot be used as join keys. " 1014 1014 "You should set %s.%s(hints={'bytes': 255})" 1015 % (cls.__name__, key), dejavu.StorageWarning)1015 % (cls.__name__, key), errors.StorageWarning) 1016 1016 return col 1017 1017 trunk/storage/storefirebird.py
r241 r242 75 75 if isinstance(query, unicode): 76 76 query = query.encode(self.toAdapter.encoding) 77 self.arena.log(query, dejavu. LOGSQL)77 self.arena.log(query, dejavu.logflags.SQL) 78 78 cur = conn.cursor() 79 79 cur.execute(query) … … 99 99 if isinstance(query, unicode): 100 100 query = query.encode(self.toAdapter.encoding) 101 self.arena.log(query, dejavu. LOGSQL)101 self.arena.log(query, dejavu.logflags.SQL) 102 102 cur = conn.cursor() 103 103 cur.execute(query) trunk/storage/storemysql.py
r241 r242 18 18 19 19 import dejavu 20 from dejavu import storage, logic, LOGSQL20 from dejavu import storage, logic, logflags 21 21 from dejavu.storage import db 22 22 … … 402 402 if isinstance(query, unicode): 403 403 query = query.encode(self.adaptertosql.encoding) 404 self.log(query, LOGSQL)404 self.log(query, logflags.SQL) 405 405 try: 406 406 return conn.query(query) trunk/storage/storeodbc.py
r241 r242 5 5 import warnings 6 6 import datetime 7 from dejavu import logic, LOGSQL7 from dejavu import errors, logic, logflags 8 8 from dejavu.storage import db 9 9 … … 19 19 warnings.warn("The precision of %s.%s cannot be determined for " 20 20 "ODBC stores. Values may be stored incorrectly." 21 % (cls.__name__, key), dejavu.StorageWarning)21 % (cls.__name__, key), errors.StorageWarning) 22 22 return u"NUMERIC" 23 23 … … 25 25 warnings.warn("The precision of %s.%s cannot be determined for " 26 26 "ODBC stores. Values may be stored incorrectly." 27 % (cls.__name__, key), dejavu.StorageWarning)27 % (cls.__name__, key), errors.StorageWarning) 28 28 return u"NUMERIC" 29 29 … … 39 39 warnings.warn("The precision of %s.%s cannot be determined for " 40 40 "ODBC stores. Values may be stored incorrectly." 41 % (cls.__name__, key), dejavu.StorageWarning)41 % (cls.__name__, key), errors.StorageWarning) 42 42 return u"NUMERIC" 43 43 … … 104 104 if conn is None: 105 105 conn = self.connection() 106 self.arena.log(query, LOGSQL)106 self.arena.log(query, logflags.SQL) 107 107 try: 108 108 cursor = conn.cursor() trunk/storage/storeshelve.py
r241 r242 16 16 17 17 import dejavu 18 from dejavu import storage, logic18 from dejavu import errors, logic, storage 19 19 20 20 … … 59 59 if x.args[0] == "need 'c' or 'n' flag to open new db": 60 60 msg = "You must call create_storage() before recall()." 61 raise dejavu.UnrecallableError(msg)61 raise errors.UnrecallableError(msg) 62 62 raise 63 63 self.shelves[clsname] = s … … 202 202 if ua is None: 203 203 msg = ("No association found between %s and %s." % (cls1, cls2)) 204 raise dejavu.AssociationError(msg)204 raise errors.AssociationError(msg) 205 205 206 206 unitrows = [] trunk/storage/storesqlite.py
r241 r242 3 3 4 4 import dejavu 5 from dejavu import storage, logic5 from dejavu import errors, logic, storage 6 6 from dejavu.storage import db 7 7 … … 17 17 "wildcard literals." % _version) 18 18 import warnings 19 warnings.warn(_escape_warning, dejavu.StorageWarning)19 warnings.warn(_escape_warning, errors.StorageWarning) 20 20 21 21 _add_column_support = (_version >= storage.Version([3, 2, 0])) … … 489 489 if isinstance(query, unicode): 490 490 query = query.encode(self.adaptertosql.encoding) 491 self.log(query, dejavu. LOGSQL)491 self.log(query, dejavu.logflags.SQL) 492 492 while True: 493 493 try: … … 568 568 if ua is None: 569 569 msg = ("No association found between %s and %s." % (name1, name2)) 570 raise dejavu.AssociationError(msg)570 raise errors.AssociationError(msg) 571 571 572 572 near = '%s.%s' % (self.db.quote(self.db.table_name(nearClass)), trunk/test/test_dejavu.py
r241 r242 4 4 5 5 import dejavu 6 from dejavu import logic, storage6 from dejavu import errors, logic, storage 7 7 from dejavu.test.zoo_fixture import * 8 8 … … 175 175 trees.append( (Animal & Zoo) >> Exhibit ) 176 176 177 warnings.filterwarnings("error", category= dejavu.StorageWarning)177 warnings.filterwarnings("error", category=errors.StorageWarning) 178 178 try: 179 self.assertRaises( dejavu.StorageWarning, make_tree)179 self.assertRaises(errors.StorageWarning, make_tree) 180 180 finally: 181 181 warnings.filters.pop(0) 182 182 183 183 # Since we raised the warning, our first make_tree failed. 184 warnings.filterwarnings("ignore", category= dejavu.StorageWarning)184 warnings.filterwarnings("ignore", category=errors.StorageWarning) 185 185 try: 186 186 make_tree() trunk/test/zoo_fixture.py
r241 r242 38 38 39 39 import dejavu 40 from dejavu import logic40 from dejavu import errors, logic 41 41 from dejavu import Unit, UnitProperty, ToOne, ToMany, UnitSequencerInteger 42 42 from dejavu.test import tools … … 572 572 def make_tree(): 573 573 trees.append( (Animal & Zoo) >> Vet ) 574 warnings.filterwarnings("ignore", category= dejavu.StorageWarning)574 warnings.filterwarnings("ignore", category=errors.StorageWarning) 575 575 try: 576 576 make_tree() … … 871 871 else: 872 872 overflow_prec = 8 873 874 dc = decimal.getcontext() 875 873 876 for prec in xrange(overflow_prec + 1): 874 877 p = 2 ** prec 875 878 print p, 879 if p > dc.prec: 880 dc.prec = p 881 876 882 # We don't need to test <type long> at different 'scales'. 877 883 long_done = False … … 986 992 arena = dejavu.Arena() 987 993 arena.log = _djvlog 988 arena.logflags = dejavu. LOGSQL + dejavu.LOGIO + dejavu.LOGRECALL994 arena.logflags = dejavu.logflags.SQL + dejavu.logflags.IO + dejavu.logflags.RECALL 989 995 990 996 trunk/units.py
r241 r242 16 16 'UnitSequencerInteger', 'UnitSequencerNull', 17 17 'UnitSequencerUnicode', 18 '_define_fixedpoint_states', '_fix_fixedpoint_cmp',18 ## '_define_fixedpoint_states', '_fix_fixedpoint_cmp', 19 19 ] 20 20
