[Grok-dev] Elixir ORM Mapper for grok

Martin Aspeli optilude+lists at gmail.com
Mon May 11 10:35:10 EDT 2009

Hi Patrick,

Patrick Gerken wrote:
> Hi,
> while trying to grok Martian, I wanted to try it with a small example. 
> The result is a grokker for Elixir schema definitions. It generates 
> zope.interfaces with zope.schemas for it, and make the class implement 
> some interfaces so that it can be traversed in grok.


I'm really interested in the first part of that: turning an Elixir class 
into a schema interface.

How did you do it? What conversion algorithm did you use?

> Elixir is a module that allows you to write one class and does 
> everything whats needed for you to be able to persist it. It looks a bit 
> like a Interface with schemas:
> class Movie(Entity):
>     title = Field(Unicode(30))
>     year = Field(Integer)
>     description = Field(UnicodeText)
> Now, what did I get working:
> - The class at it is, will be grokked, and I create a Interface with 
> schema information out of it.
> - Together with a custom traverser, I can look at instances that I saved 
> to the database before.
> - Edit and Displayforms
> Whats does not work
> - I was just playing around and I decided to stop, before the  "commit 
> the changes to the database" stuff. I tried it once in an interactive 
> shell, and that worked.
> Whats too unfinished
> - I just made mappers for three different schema types, I do not 
> retrieve all attributes from the elixir schema information

Right. Are you starting from Elixir objects, or the SQLAlchemy table 
definitions it presumably generates?

> - I did not dig into relations either, might be complicated, but maybe not.
> - Somehow, my views got loaded to early, before I grokked the model 
> data. Also, the dynamically generated interface cannot be easily 
> referenced. So an EditForm looks like that currently:
> class Index(EditForm):
>     grok.context(Movie)
>     def update(self):
>         self.form_fields = grok.Fields(Movie.grokked_interface)

I'd suggest that you stick it in the module as I${class_name} or 
something like that, rather than as an attribute on the class.

> I just wanted to play around with all this stuff, I have no itch 
> scratching me, so I stop here for now, and look at it at a later time 
> again, maybe at the Neanderthalsprint.
> Meanwhile if somebody has an urgent interest for getting this stuff to 
> work, please contact me and I'll clean the stuff up and publish it.

I'd certainly be interested to see the code.


Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book

More information about the Grok-dev mailing list