[Grok-dev] Grok ORM wit storm.zope

Christian Klinger cklinger at novareto.de
Wed Nov 21 04:22:05 EST 2007


Hi,

i have developed the last days a very simple ORM application
with grok and storm.zope [1]. This was easier then i have
expected. :-)

Unfortunatly storm.zope has no container implementation for
zope. So i decided to work on a StormContainer for grok.

I´m now ready with the StormContainer and it works nice with my
simple example. I try to give you an impression at the end of
this mail.

Before you will see some code i have some questions:

- Is this intresting for other people?
- Should i make a megrok.storm package for the StromContainer?
- I don´t know how to write tests for the Container with the
   Database dependency.

Christian

[1] https://storm.canonical.com/

contact.py
==========
import grok
from storm.locals import *
from interfaces import IPerson

class Person(grok.Model):
     grok.implements(IPerson)
     __storm_table__ = "DBPerson"

     id = Int(primary=True)
     name = Unicode()
     vorname = Unicode()

class Index(grok.View):
     grok.context(Person)

class Edit(grok.EditForm):
     grok.context(Person)
     form_fields = grok.AutoFields(IPerson)


app.py
======
import grok
from contact import Person
from interfaces import IPerson
from megrok.storm.stormcontainer import StormContainer

class PersonDB(grok.Application, StormContainer):
     def __init__(self):
         super(PersonDB, self).__init__()
         self.setClassName('person.person.contact.Person')

class PersonDelete(grok.View):
     """ Delete the Person """
     grok.context(PersonDB)
     def render(self, id):
         context = self.context
         del(context[id])
         self.redirect('index')

class Index(grok.View):
     grok.name('index')
     grok.context(PersonDB)

     def getPersons(self):
         """ The DB-Entries acts as normal Objects"""
         rc=[]
         for obj in self.context.items():
             o = obj[1]
             it = {'id_name': obj[0],
                   'name': o.name,
                   'id': o.id,
                   'vorname': o.vorname }
             print it
             rc.append(it)
         return rc

class CreatePerson(grok.AddForm):
     grok.context(PersonDB)
     form_fields = grok.AutoFields(IPerson)

     @grok.action('Create')
     def create(self, **kw):
         r = Person()
         self.applyData(r, **kw)
         context = self.context
         context['id'] = r
         self.redirect(self.url(self.context))



More information about the Grok-dev mailing list