1from PythonGenerator import PythonGenerator 2from PythonGenerator import Klass as SuperKlass 3 4 5class SQLPythonGenerator(PythonGenerator): 6 pass 7 8 9class Klass(object): 10 11 def writePyImports(self): 12 SuperKlass.writePyImports.im_func(self) # invoke our super generator's method 13 # @@ 2000-11-22 ce: the above is pretty hacky; 14 # invoking super is the only awkward aspect of mix-ins that hasn't been solved 15 self._pyOut.write('from MiddleKit.Run.SQLObjectStore import ObjRefError\n\n') 16 17 18class ObjRefAttr(object): 19 20 def writePyGet(self, out): 21 name = self.name() 22 pyGetName = self.pyGetName() 23 klassName = self.klass().name() 24 out.write(''' 25 def %(pyGetName)s(self): 26 if self._%(name)s is not None and not isinstance(self._%(name)s, MiddleObject): 27 try: 28 self.__dict__['_%(name)s'] = self._mk_store.fetchObjRef(self._%(name)s) 29 except ObjRefError as e: 30 self.__dict__['_%(name)s'] = self.objRefErrorWasRaised(e, %(klassName)r, %(name)r) 31 return self._%(name)s 32''' % locals()) 33 34 35class ListAttr(object): 36 37 def writePyGet(self, out, names): 38 if self.setting('UseBigIntObjRefColumns', False): 39 out.write(''' 40 def %(pyGetName)s(self): 41 if self._%(name)s is None: 42 from %(package)s%(targetClassName)s import %(targetClassName)s 43 self._%(name)s = self._mk_store.fetchObjectsOfClass(%(targetClassName)s, clauses='where %(backRefAttrName)sId=%%i' %% self.sqlObjRef()) 44 return self._%(name)s 45''' % names) 46 else: 47 classIdSuffix, objIdSuffix = self.setting('ObjRefSuffixes') 48 names.update(locals()) 49 out.write(''' 50 def %(pyGetName)s(self): 51 if self._%(name)s is None: 52 from %(package)s%(targetClassName)s import %(targetClassName)s 53 self._%(name)s = self._mk_store.fetchObjectsOfClass(%(targetClassName)s, clauses='where %(backRefAttrName)s%(classIdSuffix)s=%%i and %(backRefAttrName)s%(objIdSuffix)s=%%i' %% (self.klass().id(), self.serialNum())) 54 return self._%(name)s 55''' % names) 56 if self.setting('AccessorStyle', 'methods') == 'properties': 57 out.write(''' 58 %(name)s = property(%(pyGetName)s) 59''' % names) 60