[storm] Announcement: nva.stromcontainer

Christian Klinger cklinger at novareto.de
Mon Jan 28 12:39:38 GMT 2008


Hi,

as some of you noticed i worked during the last week on
a container implementation for storm.zope. I need this
container because i want a nice ORM solution for grok [1].

I´ve released a first devel package of nva.stormcontainer
at pypi [2].

My next tasks is working on a megrok.storm package which
makes the usage of storm.zope and nva.stormcontainer more
"grokkish".

If you have any suggestions please comment.

Christian

[1] http://grok.zope.org
[2] http://pypi.python.org/pypi/nva.stormcontainer/0.2


Here is a part of the doctest which describes the usage of
nva.stormcontainer:


Lets Create a StormContainer
----------------------------

We create now a container which holds the Person objects.
This objects should be automatically go into our DB.

    >>> from nva.stormcontainer import StormContainer
    >>> from nva.stormcontainer.interfaces import IStormContainer
    >>> container = StormContainer()
    >>> container
    <nva.stormcontainer.container.StormContainer object at ...>

I have to use a seperate *helper* class for Person to make
sure that the class could be resolved.

    >>> 
container.setClassName('nva.stormcontainer.tests.test_doctests.Person')
    >>> container.getClassName()
    'nva.stormcontainer.tests.test_doctests.Person'

Test the name of the store utility

    >>> container.setStoreUtilityName('test')
    >>> container.getStoreUtilityName()
    'test'

Check the contents of the container. As we have nothing
saved yet. There should be no objects in our container.

    >>> len(container)
    0

Let´s create some Persons
--------------------------

    >>> joe = Person()
    >>> joe.id = 1
    >>> joe.name = u"Joe Frazier"
    >>> joe
    <Person object at ...>

Save joe into the Container

It does not matter what id pass as name for the object,
because the container saves the object to database.

    >>> container['id'] = joe
    >>> transaction.commit()

The length of the container should be 1.

    >>> len(container)
    1

We should have a generator for items.

    >>> container.items()
    <generator object at ...>


We can iterate over the items
    >>> [item.id for key, item in container.items()]
    [1]

We can iterate over the keys. The second suffix after the -
is not nice. Maybe i will find a better solution for this.

    >>> [key for key in container.keys()]
    ['Person-aW50OjE7']

We can delete the object.

    >>> del(container['Person-aW50OjE7'])

And the length of the container should be 0 again.

    >>> len(container)
    0





More information about the storm mailing list