From c371a2d9974cd219c7d87e871d88c6e1616049b1 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sun, 8 Jul 2012 12:07:40 -0500 Subject: [PATCH] convert db module to unix format --- edbob/db/__init__.py | 368 +++++++++++++++++++++---------------------- edbob/db/alembic.ini | 92 +++++------ 2 files changed, 230 insertions(+), 230 deletions(-) diff --git a/edbob/db/__init__.py b/edbob/db/__init__.py index 18d6888..0fd3018 100644 --- a/edbob/db/__init__.py +++ b/edbob/db/__init__.py @@ -1,184 +1,184 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -################################################################################ -# -# edbob -- Pythonic Software Framework -# Copyright © 2010-2012 Lance Edgar -# -# This file is part of edbob. -# -# edbob is free software: you can redistribute it and/or modify it under the -# terms of the GNU Affero General Public License as published by the Free -# Software Foundation, either version 3 of the License, or (at your option) -# any later version. -# -# edbob is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for -# more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with edbob. If not, see . -# -################################################################################ - -""" -``edbob.db`` -- Database Framework -""" - -from __future__ import absolute_import - -from sqlalchemy import engine_from_config, MetaData -from sqlalchemy.orm import sessionmaker -from sqlalchemy.ext.declarative import declarative_base - -import edbob - - -# __all__ = ['engines', 'engine', 'Session', 'metadata', -# 'get_setting', 'save_setting'] - -__all__ = ['engines', 'engine', 'Session', 'get_setting', 'save_setting'] - -inited = False -engines = None -engine = None -Session = sessionmaker() -Base = declarative_base() -# metadata = None - - -def init(config): - """ - Initializes the database connection(s); called by :func:`edbob.init()` if - config includes something like:: - - .. highlight:: ini - - [edbob] - init = ['edbob.db'] - - [edbob.db] - sqlalchemy.urls = { - 'default': 'postgresql://user:pass@localhost/edbob, - } - - This function reads connection info from ``config`` and builds a dictionary - or :class:`sqlalchemy.Engine` instances accordingly. It also extends the - root ``edbob`` namespace with the ORM classes (:class:`edbob.Person`, - :class:`edbob.User`, etc.), as well as a few other things - (e.g. :attr:`edbob.engine`, :attr:`edbob.Session`, :attr:`edbob.metadata`). - """ - - import edbob.db - # from edbob.db import classes - from edbob.db import model - from edbob.db import enum - # from edbob.db.model import get_metadata - # from edbob.db.mappers import make_mappers - from edbob.db.extensions import extend_framework - - # global inited, engines, engine, metadata - global inited, engines, engine - - keys = config.get('edbob.db', 'sqlalchemy.keys') - if keys: - keys = keys.split() - else: - keys = ['default'] - - engines = {} - cfg = config.get_dict('edbob.db') - for key in keys: - try: - engines[key] = engine_from_config(cfg, 'sqlalchemy.%s.' % key) - except KeyError: - if key == 'default': - try: - engines[key] = engine_from_config(cfg) - except KeyError: - pass - - engine = engines.get('default') - if engine: - Base.metadata.bind = engine - - # metadata = get_metadata(bind=engine) - # make_mappers(metadata) - extend_framework() - - edbob.graft(edbob, edbob.db) - # edbob.graft(edbob, classes) - edbob.graft(edbob, model) - edbob.graft(edbob, enum) - inited = True - - -def get_setting(name, session=None): - """ - Returns a setting from the database. - """ - - _session = session - if not session: - session = Session() - setting = session.query(edbob.Setting).get(name) - if setting: - setting = setting.value - if not _session: - session.close() - return setting - - -def save_setting(name, value, session=None): - """ - Saves a setting to the database. - """ - - _session = session - if not session: - session = Session() - setting = session.query(edbob.Setting).get(name) - if not setting: - setting = edbob.Setting(name=name) - session.add(setting) - setting.value = value - if not _session: - session.commit() - session.close() - - -def get_core_metadata(): - """ - Returns a :class:`sqlalchemy.MetaData` instance containing only those - :class:`sqlalchemy.Table`s which are part of the core ``edbob`` schema. - """ - - from edbob.db import model - - meta = MetaData() - for name in model.__all__: - if name != 'Base': - obj = getattr(model, name) - if isinstance(obj, type) and issubclass(obj, model.Base): - obj.__table__.tometadata(meta) - return meta - - -def needs_session(func): - """ - Decorator which adds helpful session handling. - """ - - def wrapped(*args, **kwargs): - session = kwargs.pop('session', None) - _orig_session = session - if not session: - session = Session() - res = func(session, *args, **kwargs) - if not _orig_session: - session.commit() - session.close() - return res - - return wrapped +#!/usr/bin/env python +# -*- coding: utf-8 -*- +################################################################################ +# +# edbob -- Pythonic Software Framework +# Copyright © 2010-2012 Lance Edgar +# +# This file is part of edbob. +# +# edbob is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# edbob is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for +# more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with edbob. If not, see . +# +################################################################################ + +""" +``edbob.db`` -- Database Framework +""" + +from __future__ import absolute_import + +from sqlalchemy import engine_from_config, MetaData +from sqlalchemy.orm import sessionmaker +from sqlalchemy.ext.declarative import declarative_base + +import edbob + + +# __all__ = ['engines', 'engine', 'Session', 'metadata', +# 'get_setting', 'save_setting'] + +__all__ = ['engines', 'engine', 'Session', 'get_setting', 'save_setting'] + +inited = False +engines = None +engine = None +Session = sessionmaker() +Base = declarative_base() +# metadata = None + + +def init(config): + """ + Initializes the database connection(s); called by :func:`edbob.init()` if + config includes something like:: + + .. highlight:: ini + + [edbob] + init = ['edbob.db'] + + [edbob.db] + sqlalchemy.urls = { + 'default': 'postgresql://user:pass@localhost/edbob, + } + + This function reads connection info from ``config`` and builds a dictionary + or :class:`sqlalchemy.Engine` instances accordingly. It also extends the + root ``edbob`` namespace with the ORM classes (:class:`edbob.Person`, + :class:`edbob.User`, etc.), as well as a few other things + (e.g. :attr:`edbob.engine`, :attr:`edbob.Session`, :attr:`edbob.metadata`). + """ + + import edbob.db + # from edbob.db import classes + from edbob.db import model + from edbob.db import enum + # from edbob.db.model import get_metadata + # from edbob.db.mappers import make_mappers + from edbob.db.extensions import extend_framework + + # global inited, engines, engine, metadata + global inited, engines, engine + + keys = config.get('edbob.db', 'sqlalchemy.keys') + if keys: + keys = keys.split() + else: + keys = ['default'] + + engines = {} + cfg = config.get_dict('edbob.db') + for key in keys: + try: + engines[key] = engine_from_config(cfg, 'sqlalchemy.%s.' % key) + except KeyError: + if key == 'default': + try: + engines[key] = engine_from_config(cfg) + except KeyError: + pass + + engine = engines.get('default') + if engine: + Base.metadata.bind = engine + + # metadata = get_metadata(bind=engine) + # make_mappers(metadata) + extend_framework() + + edbob.graft(edbob, edbob.db) + # edbob.graft(edbob, classes) + edbob.graft(edbob, model) + edbob.graft(edbob, enum) + inited = True + + +def get_setting(name, session=None): + """ + Returns a setting from the database. + """ + + _session = session + if not session: + session = Session() + setting = session.query(edbob.Setting).get(name) + if setting: + setting = setting.value + if not _session: + session.close() + return setting + + +def save_setting(name, value, session=None): + """ + Saves a setting to the database. + """ + + _session = session + if not session: + session = Session() + setting = session.query(edbob.Setting).get(name) + if not setting: + setting = edbob.Setting(name=name) + session.add(setting) + setting.value = value + if not _session: + session.commit() + session.close() + + +def get_core_metadata(): + """ + Returns a :class:`sqlalchemy.MetaData` instance containing only those + :class:`sqlalchemy.Table`s which are part of the core ``edbob`` schema. + """ + + from edbob.db import model + + meta = MetaData() + for name in model.__all__: + if name != 'Base': + obj = getattr(model, name) + if isinstance(obj, type) and issubclass(obj, model.Base): + obj.__table__.tometadata(meta) + return meta + + +def needs_session(func): + """ + Decorator which adds helpful session handling. + """ + + def wrapped(*args, **kwargs): + session = kwargs.pop('session', None) + _orig_session = session + if not session: + session = Session() + res = func(session, *args, **kwargs) + if not _orig_session: + session.commit() + session.close() + return res + + return wrapped diff --git a/edbob/db/alembic.ini b/edbob/db/alembic.ini index 891ae32..0bebfc7 100644 --- a/edbob/db/alembic.ini +++ b/edbob/db/alembic.ini @@ -1,46 +1,46 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts -script_location = schema - -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -sqlalchemy.url = driver://user:pass@localhost/dbname - - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S +# A generic, single database configuration. + +[alembic] +# path to migration scripts +script_location = schema + +# template used to generate migration files +# file_template = %%(rev)s_%%(slug)s + +sqlalchemy.url = driver://user:pass@localhost/dbname + + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S