@@ -214,24 +214,31 @@ def _relation_repr(cls, rel):
214214 @classmethod
215215 def __repr__ (cls ):
216216 log .debug ('repring class with name %s' % cls .__name__ )
217- mapper = class_mapper (cls )
218- s = ""
219- s += "class " + model_name + '(DeclarativeBase):\n '
220- if is_many_to_many_table :
221- s += " __table__ = %s\n \n " % table_name
222- else :
223- s += " __tablename__ = '%s'\n \n " % table_name
224- if hasattr (cls , '__table_args__' ):
225- s += " __table_args__ = %s" % cls .__table_args__
226- s += " #column definitions\n "
227- for column in sorted (cls .__table__ .c , by_name ):
228- s += " %s = %s\n " % (column .name , column_repr (column ))
229- s += "\n #relation definitions\n "
230- ess = s
231- for prop in mapper .iterate_properties :
232- if isinstance (prop , RelationshipProperty ):
233- s += ' %s\n ' % cls ._relation_repr (prop )
234- return s
217+ try :
218+ mapper = class_mapper (cls )
219+ s = ""
220+ s += "class " + model_name + '(DeclarativeBase):\n '
221+ if is_many_to_many_table :
222+ s += " __table__ = %s\n \n " % table_name
223+ else :
224+ s += " __tablename__ = '%s'\n \n " % table_name
225+ if hasattr (cls , '__table_args__' ):
226+ s += " __table_args__ = %s" % cls .__table_args__
227+ s += " #column definitions\n "
228+ for column in sorted (cls .__table__ .c , by_name ):
229+ s += " %s = %s\n " % (column .name , column_repr (column ))
230+ s += "\n #relation definitions\n "
231+ ess = s
232+ for prop in mapper .iterate_properties :
233+ if isinstance (prop , RelationshipProperty ):
234+ s += ' %s\n ' % cls ._relation_repr (prop )
235+ return s
236+ except Exception , e :
237+ log .error ("Could not generate class for: %s" % cls .__name__ )
238+ from traceback import format_exc
239+ log .error (format_exc ())
240+ return ''
241+
235242
236243 #hack the class to have the right classname
237244 Temporal .__name__ = model_name
@@ -245,17 +252,21 @@ def __repr__(cls):
245252 Temporal ._decl_class_registry [model_name ] = Temporal ._decl_class_registry ['Temporal' ]
246253 del Temporal ._decl_class_registry ['Temporal' ]
247254
255+
248256 #add in single relations
249257 fks = self .get_foreign_keys (table )
250258 for related_table in sorted (fks .keys (), by_name ):
251259 columns = fks [related_table ]
252260 if len (columns )> 1 :
253261 continue
262+ column = columns [0 ]
254263 log .info (' Adding <primary> foreign key for:%s' % related_table .name )
255264 backref_name = plural (table_name )
256- rel = relation (singular (name2label (related_table .name , related_table .schema )))#, backref=backref_name)
265+ # import ipdb; ipdb.set_trace()
266+ rel = relation (singular (name2label (related_table .name , related_table .schema )), primaryjoin = column == column .foreign_keys [0 ].column )#, backref=backref_name)
257267 setattr (Temporal , related_table .name , _deferred_relationship (Temporal , rel ))
258268
269+ """
259270 #add in many-to-many relations
260271 for join_table in self.get_related_many_to_many_tables(table.name):
261272 for column in join_table.columns:
@@ -269,7 +280,8 @@ def __repr__(cls):
269280 related_table.schema)),
270281 secondary=join_table)))
271282 break;
272-
283+
284+ """
273285 return Temporal
274286
275287 def get_table (self , name ):
0 commit comments