<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: orm code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 05 Oct 2008 23:21:58 GMT</pubDate>
    <description>DZone Snippets: orm code</description>
    <item>
      <title>Storm ORM by Canonical in WSGI enabled applications</title>
      <link>http://snippets.dzone.com/posts/show/4408</link>
      <description>&lt;code&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;# vim:ts=4:sw=4:et&lt;br /&gt;# (c) 2007 Vsevolod Balashov &lt;vsevolod@balashov.name&gt; under terms of LGPL 2.1&lt;br /&gt;# use Storm ORM &lt;https://storm.canonical.com&gt; in WSGI enabled applications&lt;br /&gt;#&lt;br /&gt;# actual version on http://pypi.python.org/pypi/middlestorm&lt;br /&gt;&lt;br /&gt;"""WSGI middleware for Storm.&lt;br /&gt;&lt;br /&gt;This is the database access inteface for WSGI enabled (PEP 333) web applications.&lt;br /&gt;&lt;br /&gt;Pylons framework example:&lt;br /&gt;&lt;br /&gt;in wsgiapp.py&lt;br /&gt;&lt;br /&gt;from storm.database import create_database&lt;br /&gt;from middlestorm import MiddleStorm&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;# CUSTOM MIDDLEWARE HERE&lt;br /&gt;app = MiddleStorm(app, create_database(config['app_conf']['sqlalchemy.default.uri']))&lt;br /&gt;&lt;br /&gt;in controller:&lt;br /&gt;&lt;br /&gt;class DemoController(BaseController):&lt;br /&gt;    def index(self):&lt;br /&gt;        store = request.environ['storm.store']&lt;br /&gt;        ...&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;from storm.database import Database&lt;br /&gt;from storm.store import Store&lt;br /&gt;from threading import local&lt;br /&gt;&lt;br /&gt;__all__ = ["MiddleStorm"]&lt;br /&gt;__author__ = "Vsevolod Balashov &lt;http://vsevolod.balashov.name&gt;"&lt;br /&gt;__version__ = "0.1"&lt;br /&gt;&lt;br /&gt;class SingleConn(Database):&lt;br /&gt;    """Database proxy class.&lt;br /&gt;    Share single database connection between all Store object instances in threads.&lt;br /&gt;    If you have readonly database or not use transactions why not?&lt;br /&gt;    """&lt;br /&gt;    def __init__(self, database):&lt;br /&gt;        self._database = database&lt;br /&gt;        self._connection = database.connect()&lt;br /&gt;    def connect(self):&lt;br /&gt;        return self._connection&lt;br /&gt;&lt;br /&gt;class MiddleStorm(object):&lt;br /&gt;    """WSGI middleware.&lt;br /&gt;    Add Store object instance in environ['storm.store']. Each thread contains own instance.&lt;br /&gt;    """&lt;br /&gt;&lt;br /&gt;    def __init__(self, app, database, single = False):&lt;br /&gt;        """Create WSGI middleware.&lt;br /&gt;        @param app: up level application or middleware.&lt;br /&gt;        @param database: instance of Database returned create_database.&lt;br /&gt;        @param: single: use single database connection in all threads. &lt;br /&gt;        """&lt;br /&gt;        assert isinstance(database, Database), \&lt;br /&gt;            'database must be subclass of storm.database.Database'&lt;br /&gt;        if single:&lt;br /&gt;            self._database = SingleConn(database)&lt;br /&gt;        else:&lt;br /&gt;            self._database = database&lt;br /&gt;        self._app = app&lt;br /&gt;        self._local = local()&lt;br /&gt;&lt;br /&gt;    def __call__(self, environ, start_response):&lt;br /&gt;        try:&lt;br /&gt;            environ['storm.store']  = self._local.store&lt;br /&gt;        except AttributeError:&lt;br /&gt;            environ['storm.store']  = \&lt;br /&gt;                self._local.__dict__.setdefault('store', Store(self._database))&lt;br /&gt;        return self._app(environ, start_response)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 10 Aug 2007 11:39:51 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4408</guid>
      <author>sevkin (Vsevolod Balashov)</author>
    </item>
  </channel>
</rss>
