Changeset 320
- Timestamp:
- 03/23/08 01:23:15 (10 months ago)
- Files:
-
- trunk/setup.py (modified) (1 diff)
- trunk/src/dm/__init__.py (modified) (1 diff)
- trunk/src/dm/db.py (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/setup.py
r318 r320 16 16 # no way to specify the dependency on django as we need a specific revision 17 17 install_requires = [ 18 'SQLObject==0.10.0 ,18 'SQLObject==0.10.0', 19 19 'simplejson', 20 20 # 'Django>=0.95' # Django not served on cheese shop trunk/src/dm/__init__.py
r318 r320 1 __version__ = '0.3.1 4'1 __version__ = '0.3.15' trunk/src/dm/db.py
r319 r320 27 27 depends on an ORM to move values from the persistence model to the DBRMS. 28 28 29 This module has been tested with the recent stable SQLObject versions, which 30 are understood by the author to be 0.7.10, 0.8.7, 0.9.5, and 0.10.0. It has 31 also been tested with the python-sqlobject version of Debian Etch (0.7.1). 32 29 33 """ 30 34 31 sov = '0.10' 35 from dm.exceptions import * 36 37 import sqlobject 38 sqoVer = None 39 isSqoSupported = False 40 sqoVers = ['0.7', '0.8', '0.9', '0.10'] 41 if sqlobject.__doc__ != None: 42 sqoDocSplit = sqlobject.__doc__.split(' ') 43 if len(sqoDocSplit) > 1: 44 sqoVerSplit = sqoDocSplit[1].split('.') 45 if len(sqoVerSplit) > 2: 46 sqoVer = ".".join(sqoVerSplit[0:2]) 47 if sqoVer in sqoVers: 48 isSqoSupported = True 49 else: 50 # Debian Etch-ish support (SQLObject 0.7.1). 51 if sqlobject.__doc__ == None and \ 52 hasattr(sqlobject.SQLObject, 'sqlmeta'): 53 isSqoSupported = True 54 sqoVer = '0.7' 55 if not isSqoSupported: 56 msg = "Imported SQLObject not supported by dm." 57 msg += "\nImported SQLObject package doc: %s" % sqlobject.__doc__ 58 msg += "Imported SQLObject package path: %s" % sqlobject.__path__ 59 msg += "\nNeeds latest version of any of: %s." % ", ".join(sqoVers) 60 raise ORMError, msg 32 61 33 62 from sqlobject import * … … 35 64 from dm.ioc import * 36 65 import dm.dom.meta 37 from dm.exceptions import KforgeDbError38 66 import sqlobject.main 39 67 from dm.ioc import * … … 276 304 if sqlAttribute == None: 277 305 return 306 # Todo: Perhaps just? addColumn = mapperClass.sqlmeta.addColumn 278 307 if hasattr(mapperClass.sqlmeta, 'addColumn'): 279 308 addColumn = mapperClass.sqlmeta.addColumn … … 284 313 else: 285 314 raise ORMError, "No 'delColumn' method on SQLObject sqlmeta." 286 287 if sov == '0.7' or sov == '0.10': 288 try: 289 addColumn(sqlAttribute, changeSchema=False) 290 except: 291 if features.allowReplace: 292 return 293 raise 294 try: 295 list(mapperClass.select()) 296 except: 297 delColumn(sqlAttribute, changeSchema=False) 298 addColumn(sqlAttribute, changeSchema=True) 299 list(mapperClass.select()) 300 msg = "Added %s field to %s table in database." % ( 301 mapperAttribute.dbName, 302 mapperClass.meta.dbName 303 ) 304 logger.info(msg) 305 elif sov == '0.10': 315 try: 316 addColumn(sqlAttribute, changeSchema=False) 317 except: 318 if features.allowReplace: 319 return 320 raise 321 try: 322 list(mapperClass.select()) 323 except: 324 delColumn(sqlAttribute, changeSchema=False) 306 325 addColumn(sqlAttribute, changeSchema=True) 326 list(mapperClass.select()) 307 327 msg = "Added %s field to %s table in database." % ( 308 328 mapperAttribute.dbName, … … 448 468 449 469 def getSQLStyle(self): 450 if hasattr(SQLObject, 'sqlmeta'): # SQLObject 0.7 451 return SQLObject.sqlmeta.style 452 #elif hasattr(SQLObject, '_style'): # SQLObject 0.6 453 # return SQLObject._style 454 else: 455 raise Exception, "Can't find SQLObject style object." 470 return SQLObject.sqlmeta.style 456 471 457 472 … … 463 478 self.isUnique = self.dom.isUnique 464 479 self.isCached = self.dom.isCached 465 if sov == '0.10':466 dbName = self.makeSafeTableName(self.dom.dbName or self.dom.name)480 dbName = self.makeSafeTableName(self.dom.dbName or self.dom.name) 481 if sqoVer in ['0.8', '0.9', '0.10']: 467 482 self.domName = dbName 468 483 self.dbName = dbName 469 if sov == '0.7': 470 dbName = self.makeSafeTableName(self.dom.dbName or self.dom.name) 484 if sqoVer == '0.7': 471 485 self.domName = self.dom.name 472 486 self.dbName = dbName … … 504 518 # Set mapper class name from domName, and table attribute from dbName. 505 519 mapper = self.createClass(self.domName, baseClass, mapperAttributes) 506 if s ov== '0.7' and self.dbName:520 if sqoVer == '0.7' and self.dbName: 507 521 mapper.sqlmeta.table = self.dbName 508 522 if self.isCached: … … 521 535 def getSQLObjectAttributes(self): 522 536 mapperAttributes = {} 523 if not 'sqlmeta' in sqlobject.main.__dict__: # table for SQLObject 0.6524 if self.dbName:525 mapperAttributes['_table'] = self.dbName526 537 for a in self.attributes: 527 538 if a.dom.isTemporal: 528 539 # We don't persist temporal attributes on the parent. 540 # Todo: Perhaps we should? 529 541 continue 530 542 mapperClassAttribute = a.createMapperClassAttribute() … … 542 554 index = DatabaseIndex(mapperClassAttribute) 543 555 mapperAttributes[indexName] = index 544 545 556 return mapperAttributes 546 557 … … 566 577 self.dom = metaDomainAttribute 567 578 self.domName = self.dom.name 568 if s ov == '0.10'and self.dom.isDomainObjectRef:579 if sqoVer in ['0.8', '0.9', '0.10'] and self.dom.isDomainObjectRef: 569 580 self.typeName = self.makeSafeFieldName(self.dom.typeName) 570 581 else: … … 659 670 return None 660 671 elif issubclass(self.dom.__class__, dm.dom.meta.DomainObjectRef): 661 if s ov == '0.10':672 if sqoVer in ['0.8', '0.9', '0.10']: 662 673 dbName = self.dbName 663 elif s ov == '0.7':674 elif sqoVer in ['0.7']: 664 675 dbName = self.dbName + 'ID' 665 676 else: 666 raise ORMError, "No support for SQLObject version %s." % s ov677 raise ORMError, "No support for SQLObject version %s." % sqoVer 667 678 if hasattr(self, 'default'): 668 679 return KeyCol(foreignKey=self.typeName, name=dbName, … … 720 731 if self.selectByKeywords(**kwds).count(): 721 732 msg = "'%s' record already exists for: %s" % (self.__name__, kwds) 722 logger. error(msg)733 logger.info(msg) 723 734 raise KforgeDbError, msg 724 735 … … 996 1007 mapper = kwds[metaAttr.domName] 997 1008 del kwds[metaAttr.domName] 998 if s ov == '0.10':1009 if sqoVer in ['0.10']: 999 1010 dbName = metaAttr.dbName 1000 elif s ov == '0.7':1011 elif sqoVer in ['0.7', '0.8', '0.9']: 1001 1012 dbName = metaAttr.dbName + 'ID' 1002 1013 if mapper: 1003 if s ov == '0.10':1014 if sqoVer in ['0.10']: 1004 1015 kwds[dbName] = mapper 1005 elif s ov == '0.7':1016 elif sqoVer in ['0.7', '0.8', '0.9']: 1006 1017 kwds[dbName] = mapper.id 1007 1018 else: … … 1014 1025 coerceKwds = classmethod(coerceKwds) 1015 1026 1027 def getAttributeDbName(self, domName): 1028 return self.meta.getAttribute(domName).dbName 1029 1030 getAttributeDbName = classmethod(getAttributeDbName) 1031 1032 def makeSqlName(self, name): 1033 if name[-2:] == 'ID': 1034 name = name[:-2] + '_id' 1035 return name 1036 1037 makeSqlName = classmethod(makeSqlName) 1038 1016 1039 def startsWith(self, value, attributeName, **kwds): 1017 1040 sqlSafeValue = sqlrepr(value, 'postgres')[1:-1] # drop quotes … … 1023 1046 for name in kwds: 1024 1047 value = kwds[name] 1025 if s ov == '0.10':1048 if sqoVer in ['0.10']: 1026 1049 if self.meta.dom.attributeNames[name].isDomainObjectRef: 1027 1050 name += '_id' … … 1041 1064 startsWith = classmethod(startsWith) 1042 1065 1043 def getAttributeDbName(self, domName):1044 return self.meta.getAttribute(domName).dbName1045 1046 getAttributeDbName = classmethod(getAttributeDbName)1047 1048 def makeSqlName(self, name):1049 #return self.q.__getattr__(name)1050 if name[-2:] == 'ID':1051 name = name[:-2] + '_id'1052 return name1053 1054 makeSqlName = classmethod(makeSqlName)1055 1056 1066 def search(self, userQuery, attributeNames, spaceSplit=True, **kwds): 1057 1067 dbNames = [] … … 1083 1093 for name in kwds: 1084 1094 value = kwds[name] 1085 if s ov == '0.10':1095 if sqoVer in ['0.10']: 1086 1096 if self.meta.dom.attributeNames[name].isDomainObjectRef: 1087 1097 name += '_id' … … 1110 1120 for name in kwds: 1111 1121 value = kwds[name] 1112 if s ov == '0.10'and name != 'id':1122 if sqoVer in ['0.10'] and name != 'id': 1113 1123 if self.meta.dom.attributeNames[name].isDomainObjectRef: 1114 1124 name += '_id' … … 1191 1201 sqlEqualsList.append(sqlEquals) 1192 1202 else: 1193 if s ov == '0.10':1203 if sqoVer in ['0.10']: 1194 1204 if self.meta.dom.attributeNames[name].isDomainObjectRef: 1195 1205 name += '_id'
