def table_factory(model): """ Automatically define a Table class for the specified model. This is used during kernel setup to create default tables for models who have no Table. """ #~ logger.info('table_factory(%s)',model.__name__) bases = (Table,) for b in model.__bases__: rpt = getattr(b, '_lino_default_table', None) if rpt is not None: if issubclass(model, rpt.model): #~ if issubclass(rpt.model,model): bases = (rpt,) #~ bases = (rpt.__class__,) #~ logger.info('table_factory(%s) : bases is %s',model.__name__,bases) app_label = model._meta.app_label name = model.__name__ + "Table" cls = type(name, bases, dict(model=model, app_label=app_label)) return actors.register_actor(cls)
def table_factory(model): """ Automatically define a Table class for the specified model. This is used during kernel setup to create default tables for models who have no Table. """ # logger.info('table_factory(%s)',model.__name__) bases = (Table, ) for b in model.__bases__: rpt = getattr(b, '_lino_default_table', None) if rpt is not None: if issubclass(model, rpt.model): # if issubclass(rpt.model,model): bases = (rpt, ) # bases = (rpt.__class__,) # logger.info('table_factory(%s) : bases is %s',model.__name__,bases) app_label = model._meta.app_label name = model.__name__ + "Table" cls = type(name, bases, dict(model=model, app_label=app_label)) return actors.register_actor(cls)
def table_factory(model): """ Automatically define a Table class for the specified model. This is used during kernel setup to create default tables for models who have no Table. """ #~ logger.info('table_factory(%s)',model.__name__) bases = (Table,) for b in model.__bases__: rpt = getattr(b,'_lino_default_table',None) if rpt is not None: if issubclass(model,rpt.model): #~ if issubclass(rpt.model,model): bases = (rpt,) #~ bases = (rpt.__class__,) #~ logger.info('table_factory(%s) : bases is %s',model.__name__,bases) app_label = model._meta.app_label name = model.__name__ + "Table" cls = type(name,bases,dict(model=model,app_label=app_label)) #~ cls.class_init() #~ cls.setup() #~ """ #~ 20120104 We even add the factored class to the module because #~ actor lookup needs it. Otherwise we'd get a #~ `'module' object has no attribute 'DataControlListingTable'` error. #~ We cannot simply do ``settings.SITE.modules.define(app_label,name,cls)`` #~ because this code is executed when `settings.SITE.modules` doesn't yet exist. #~ """ #~ m = import_module(model.__module__) #~ if getattr(m,name,None) is not None: #~ raise Exception( #~ "Name of factored class %s clashes with existing name in %s" #~ %(cls,m)) #~ setattr(m,name,cls) return actors.register_actor(cls)