[Checkins] SVN: grokapps/rdbexample/trunk/ More non-working code.
Right now Zope tries to start and then hangs.
Martijn Faassen
faassen at infrae.com
Fri May 2 11:34:01 EDT 2008
Log message for revision 86103:
More non-working code. Right now Zope tries to start and then hangs.
Changed:
U grokapps/rdbexample/trunk/buildout.cfg
U grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/__init__.py
A grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/components.py
A grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/db.py
A grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/interfaces.py
U grokapps/rdbexample/trunk/src/rdbexample/app.py
-=-
Modified: grokapps/rdbexample/trunk/buildout.cfg
===================================================================
--- grokapps/rdbexample/trunk/buildout.cfg 2008-05-02 15:30:39 UTC (rev 86102)
+++ grokapps/rdbexample/trunk/buildout.cfg 2008-05-02 15:34:01 UTC (rev 86103)
@@ -1,10 +1,10 @@
[buildout]
-develop = . megrok.rdb collective.lead
+develop = . megrok.rdb collective.lead grok
parts = app data zopectl i18n test
find-links = http://download.zope.org/distribution/
eggs-directory = /home/faassen/buildout-eggs
newest = false
-extends= http://grok.zope.org/releaseinfo/grok-0.12.cfg
+extends= grok/versions.cfg
versions = versions
[app]
Modified: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/__init__.py
===================================================================
--- grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/__init__.py 2008-05-02 15:30:39 UTC (rev 86102)
+++ grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/__init__.py 2008-05-02 15:34:01 UTC (rev 86103)
@@ -0,0 +1,3 @@
+from megrok.rdb.components import Model, Container
+from megrok.rdb.db import Database
+
Added: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/components.py
===================================================================
--- grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/components.py (rev 0)
+++ grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/components.py 2008-05-02 15:34:01 UTC (rev 86103)
@@ -0,0 +1,28 @@
+from sqlalchemy.ext.declarative import DeclarativeMeta
+from sqlalchemy.orm.collections import MappedCollection
+from sqlalchemy.schema import MetaData
+
+from zope.interface import implements
+
+from grokcore.component import Context
+from zope.app.container.interfaces import IContainer
+
+_lcl_metadata = MetaData()
+
+class Model(Context):
+ __metaclass__ = DeclarativeMeta
+ metadata = _lcl_metadata
+ _decl_class_registry = {}
+
+ def __init__(self, **kwargs):
+ for k in kwargs:
+ if not hasattr(type(self), k):
+ raise TypeError('%r is an invalid keyword argument for %s' %
+ (k, type(self).__name__))
+ setattr(self, k, kwargs[k])
+
+class Container(Context, MappedCollection):
+ implements(IContainer)
+
+ def __init__(self, *args, **kw):
+ MappedCollection.__init__(self, keyfunc=lambda node:node.id)
Added: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/db.py
===================================================================
--- grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/db.py (rev 0)
+++ grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/db.py 2008-05-02 15:34:01 UTC (rev 86103)
@@ -0,0 +1,27 @@
+import grok
+
+from collective.lead import Database as DatabaseBase
+from collective.lead.interfaces import IDatabase
+
+from megrok.rdb.components import Model
+from megrok.rdb.interfaces import IDatabase as IRdbDatabase
+
+class Database(grok.GlobalUtility, DatabaseBase):
+ grok.implements(IRdbDatabase)
+ grok.provides(IDatabase)
+ grok.name('megrok.rdb')
+ grok.baseclass()
+
+ @property
+ def _url(self):
+ # XXXX missing 'url' gets turned into an AttributeError for `_url`
+ # instead of `url`, which sucks.
+ return self.url
+
+ def _setup_tables(self, metadata, tables):
+ self.metadata = metadata = Model.metadata
+ Model.metadata.create_all(self._engine)
+ self.setup(metadata)
+
+ def setup(self, metadata):
+ pass
Added: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/interfaces.py
===================================================================
--- grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/interfaces.py (rev 0)
+++ grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/interfaces.py 2008-05-02 15:34:01 UTC (rev 86103)
@@ -0,0 +1,35 @@
+from zope.interface import Interface, Attribute
+
+from zope.app.container.interfaces import IContainer as IContainerBase
+
+
+class IContainer(IContainerBase):
+ def set(value):
+ """Add a new value to the container without having to specify the key.
+
+ Lets the container figure out an appropriate key.
+
+
+ Defined by SQLAlchemy dictionary-based collections.
+ """
+
+ def remove(value):
+ """Remove a value from the container, by value.
+
+
+ Defined by SQLAlchemy dictionary-based collections.
+ """
+
+class IDatabase(Interface):
+ # you have to implement this attribute to set up the connection URL
+ url = Attribute(u"The connection URL of the database.")
+
+ def setup(metadata):
+ """Extra setup the database if required.
+
+ Implement this method if you want to do extra setup for the database.
+
+ The declarative base classes Model and Container already get set
+ up automatically, but you may want to add extra tables and ORM mappers
+ in this method.
+ """
Modified: grokapps/rdbexample/trunk/src/rdbexample/app.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/app.py 2008-05-02 15:30:39 UTC (rev 86102)
+++ grokapps/rdbexample/trunk/src/rdbexample/app.py 2008-05-02 15:34:01 UTC (rev 86103)
@@ -1,23 +1,29 @@
import grok
from megrok import rdb
-from sqlalchemy.orm import * # XXX
+from sqlalchemy.schema import Column, ForeignKey
+from sqlalchemy.types import Integer, String
+from sqlalchemy.orm import relation
+class Database(rdb.Database):
+ url = 'postgres:///rdbexample'
+
class RDBExample(grok.Application, grok.Model):
- def __init__(self):
- pass
-
def traverse(self, name):
return rdb.query(Faculty).get(name)
-
class Index(grok.View):
pass
+class Departments(rdb.Container):
+ pass
class Faculty(rdb.Model):
# rdb.table_name('faculty') is the default
+ __tablename__ = 'faculty'
+ grok.traversable('departments')
+
id = Column('id', Integer, primary_key=True)
title = Column('email', String(50))
@@ -25,14 +31,10 @@
backref='faculty',
collection_class=Departments)
- def traverse(self, name):
- return self.departments.get(name)
-
-
-class Departments(rdb.Container):
- pass
+class Department(rdb.Model):
+ __tablename__ = 'department'
-class Department(rdb.Model):
+ id = Column('id', Integer, primary_key=True)
faculty_id = Column('faculty_id', Integer, ForeignKey(Faculty.id))
class DepartmentList(grok.View):
More information about the Checkins
mailing list