Hi, Zope 3.3.0
I hope everyone is well today. If I have a container how do I find out what types of objects it contains and then from that, how do I find out the schema of the contained object? Eg. I have a SQLAlchemyContainer with a SQLAlchemyContainerView. The container contains the mapped class for a sqlalchemy table. Here's the view code that I've been struggling with: class SQLAlchemyContainerView(BrowserView): def __init__(self, context, request): self.context = context self.request = request def fieldsInObject(self): objlist = [obj for key, obj in self.context.items()] obj = removeSecurityProxy(objlist[0]) return obj.__dict__ def rowView(self): for obj in self.context.values(): yield obj My goal is to generalize a view that creates an HTML table for an arbitrary database table. I want to register it for the ISQLAlchemyContainer interface. So I need to know the objects contained and their schema. In a ZPT I would do something like: for field in fieldsInObject(row) # which has (ordered?) fields th cell: field.name for row in rowView for field in fieldsInObject(row) # which has (ordered?) fields td cell: field.value I know the above is broken in several ways. I've been trying various methods all evening. The closest I get is the __dict__ usage. Ideally, I would get the interface provided by the object and feed that to form.Fields() but I can't determine how to get an interface value that can be fed to form.Fields(). iface = zope.interface.providedBy(obj) doesn't seem to work. Anyone done this already or know of some (comprehensible, for a noob) documentation/source code for this? Thanks in advance. Vinny ======== some code ========= class IISO6392Language(Interface): """The interface definition of the iso639_2_language table. """ id = Int( title=_(u"serial id"), description=_(u"primary key is derived from this content"), readonly=True, required=True, ) lookup = TextLine( title=_(u"Lookup code. Message Id"), description=_(u"This may be used as a message id in i18n terms. Should be unique in a table."), required=True, max_length=1024 ) class ISO6392Language(object): """The implementation of IISO6392Language. Hopefully, the FieldProperty usage will help validate user data.""" implements(IISO6392Language) id = FieldProperty(IISO6392Language['id']) lookup = FieldProperty(IISO6392Language['lookup']) iso639_2_language = sqlalchemy.Table( 'iso639_2_language', z3c.zalchemy.metadata, sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True), sqlalchemy.Column('lookup', sqlalchemy.String(1024), nullable=False, default=u''), ) ISO6392Language.mapper = sqlalchemy.mapper(ISO6392Language, iso639_2_language) ============== _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users