summaryrefslogtreecommitdiff
path: root/examples/simplewiki/database.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/simplewiki/database.py')
-rw-r--r--examples/simplewiki/database.py95
1 files changed, 57 insertions, 38 deletions
diff --git a/examples/simplewiki/database.py b/examples/simplewiki/database.py
index d5df7387..f0cec34e 100644
--- a/examples/simplewiki/database.py
+++ b/examples/simplewiki/database.py
@@ -9,11 +9,23 @@
:license: BSD-3-Clause
"""
from datetime import datetime
-from sqlalchemy import Table, Column, Integer, String, DateTime, \
- ForeignKey, MetaData, join
-from sqlalchemy.orm import relation, create_session, scoped_session, \
- mapper
-from simplewiki.utils import application, local_manager, parse_creole
+
+from sqlalchemy import Column
+from sqlalchemy import DateTime
+from sqlalchemy import ForeignKey
+from sqlalchemy import Integer
+from sqlalchemy import join
+from sqlalchemy import MetaData
+from sqlalchemy import String
+from sqlalchemy import Table
+from sqlalchemy.orm import create_session
+from sqlalchemy.orm import mapper
+from sqlalchemy.orm import relation
+from sqlalchemy.orm import scoped_session
+
+from .utils import application
+from .utils import local_manager
+from .utils import parse_creole
# create a global metadata
@@ -28,8 +40,7 @@ def new_db_session():
application. If there is no application bound to the context it
raises an exception.
"""
- return create_session(application.database_engine, autoflush=True,
- autocommit=False)
+ return create_session(application.database_engine, autoflush=True, autocommit=False)
# and create a new global session factory. Calling this object gives
@@ -38,17 +49,21 @@ session = scoped_session(new_db_session, local_manager.get_ident)
# our database tables.
-page_table = Table('pages', metadata,
- Column('page_id', Integer, primary_key=True),
- Column('name', String(60), unique=True)
+page_table = Table(
+ "pages",
+ metadata,
+ Column("page_id", Integer, primary_key=True),
+ Column("name", String(60), unique=True),
)
-revision_table = Table('revisions', metadata,
- Column('revision_id', Integer, primary_key=True),
- Column('page_id', Integer, ForeignKey('pages.page_id')),
- Column('timestamp', DateTime),
- Column('text', String),
- Column('change_note', String(200))
+revision_table = Table(
+ "revisions",
+ metadata,
+ Column("revision_id", Integer, primary_key=True),
+ Column("page_id", Integer, ForeignKey("pages.page_id")),
+ Column("timestamp", DateTime),
+ Column("text", String),
+ Column("change_note", String(200)),
)
@@ -59,9 +74,10 @@ class Revision(object):
new revisions. It's also used for the diff system and the revision
log.
"""
+
query = session.query_property()
- def __init__(self, page, text, change_note='', timestamp=None):
+ def __init__(self, page, text, change_note="", timestamp=None):
if isinstance(page, int):
self.page_id = page
else:
@@ -75,11 +91,7 @@ class Revision(object):
return parse_creole(self.text)
def __repr__(self):
- return '<%s %r:%r>' % (
- self.__class__.__name__,
- self.page_id,
- self.revision_id
- )
+ return "<%s %r:%r>" % (self.__class__.__name__, self.page_id, self.revision_id)
class Page(object):
@@ -87,6 +99,7 @@ class Page(object):
Represents a simple page without any revisions. This is for example
used in the page index where the page contents are not relevant.
"""
+
query = session.query_property()
def __init__(self, name):
@@ -94,10 +107,10 @@ class Page(object):
@property
def title(self):
- return self.name.replace('_', ' ')
+ return self.name.replace("_", " ")
def __repr__(self):
- return '<%s %r>' % (self.__class__.__name__, self.name)
+ return "<%s %r>" % (self.__class__.__name__, self.name)
class RevisionedPage(Page, Revision):
@@ -106,26 +119,32 @@ class RevisionedPage(Page, Revision):
and the ability of SQLAlchemy to map to joins we can combine `Page` and
`Revision` into one class here.
"""
+
query = session.query_property()
def __init__(self):
- raise TypeError('cannot create WikiPage instances, use the Page and '
- 'Revision classes for data manipulation.')
+ raise TypeError(
+ "cannot create WikiPage instances, use the Page and "
+ "Revision classes for data manipulation."
+ )
def __repr__(self):
- return '<%s %r:%r>' % (
- self.__class__.__name__,
- self.name,
- self.revision_id
- )
+ return "<%s %r:%r>" % (self.__class__.__name__, self.name, self.revision_id)
# setup mappers
mapper(Revision, revision_table)
-mapper(Page, page_table, properties=dict(
- revisions=relation(Revision, backref='page',
- order_by=Revision.revision_id.desc())
-))
-mapper(RevisionedPage, join(page_table, revision_table), properties=dict(
- page_id=[page_table.c.page_id, revision_table.c.page_id],
-))
+mapper(
+ Page,
+ page_table,
+ properties=dict(
+ revisions=relation(
+ Revision, backref="page", order_by=Revision.revision_id.desc()
+ )
+ ),
+)
+mapper(
+ RevisionedPage,
+ join(page_table, revision_table),
+ properties=dict(page_id=[page_table.c.page_id, revision_table.c.page_id]),
+)