cornerstone.soup lighning talk on plone conference 2009
DESCRIPTION
shows how to use cornerstone.soup, a lightweight mass-data storage inside zodb for zope2 and ploneTRANSCRIPT
![Page 1: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/1.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
Plone Conference 2009Budapest
Lightning Talk
cornerstone.soupisolated container
for queryable records
Jens Klein <[email protected]>
2010-10-29
![Page 2: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/2.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
Use-Cases
Need Container for many entities (mass-data) of non-CMSish content, like:
– Votes,
– Data from a Poll,
– Orders in a Webshop,
– measuring data,
– (fill in your use-case here)
tested with Plone 3.3
![Page 3: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/3.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
Soup Characteristics
● isolated: all in one persistent local utility;● stores generic „Records“:
– persistent items
– with attributes passed in at construction time as keyword arguments.
● has its own local index (ZopeToolKit);● fetches items by query.
![Page 4: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/4.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
RecipeCook your own Soup
1Heat editor in a large soucepan, subclass the soup object and give it an appropriate id:
>>> from cornerstone.soup import Soup >>> class MySoup(Soup): ... id = u'mysoup'
![Page 5: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/5.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
RecipeCook your own Soup
2Provide a Catalog Factory and cook for 2-3 minutes, until softened but not colored.
>>> from zope.interface import implements >>> from zope.catalog.catalog import Catalog >>> from zope.catalog.field import FieldIndex >>> from cornerstone.soup.interfaces import ICatalogFactory >>> class MyCatalogFactory(object): ... implements(ICatalogFactory) ... ... def __call__(self): ... catalog = Catalog() ... catalog[u'name'] = FieldIndex(field_name='name', ... field_callable=False) ... return catalog
![Page 6: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/6.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
RecipeCook your own Soup
3Add one utility registered under the same name as the soup-id, stirring, for 20 seconds:
<utility name="mysoup" factory=".mymodule.MyCatalogFactory" provides="cornerstone.soup.interfaces.ICatalogFactory" />
![Page 7: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/7.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
RecipeCook your own Soup
4Add two local utilities to componentregistry.xml registered under the same name as the soup-id, and bring to boil.
<utilities> <utility name="mysoup" factory="mymodule.MySoup" interface="cornerstone.soup.interfaces.ISoup" /> <utility name="mysoup" factory="five.intid.intid.OFSIntIds" interface="zope.app.intid.interfaces.IIntIds" /> </utilities>
![Page 8: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/8.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
RecipeCook your own Soup
5Start your Plone, turn heat to low, cover and simmer for some minutes. Go to portal_setup and import your packages GenericSetup profile.
Season and add a little more data if desired.
>>> from zope.component import getUtility >>> from cornerstone.soup.interfaces import ISoup >>> soup = getUtility(ISoup, name=u'mysoup')
>>> from cornerstone.soup import Record >>> rec = Record(name=u'rec1') >>> soup.add(rec) >>> rec = Record(name=u'rec2') >>> soup.add(rec)
![Page 9: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/9.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
Enjoy your soupbon appetit!
Query data:
>>> soup.query(name=u'rec1') [<Record at /.../record-0>] >>> soup.query(name=u'rec2') [<Record at /.../record-1>]
Modify data:
>>> rec.data['name'] = u'rec1' >>> soup.reindex([rec]) >>> soup.query(name=u'rec1') [<Record at /.../record-0>, <Record at /.../record-1>]
![Page 10: cornerstone.soup Lighning Talk on Plone Conference 2009](https://reader038.vdocuments.net/reader038/viewer/2022100603/559308cc1a28ab1e498b4636/html5/thumbnails/10.jpg)
Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Österreich Lizenz
Ingredients and complete recipe
http://pypi.python.org/pypi/cornerstone.soup