diff options
author | emkael <emkael@tlen.pl> | 2016-02-19 13:29:28 +0100 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-02-19 13:29:28 +0100 |
commit | 53078b3f387216b21bf8ab27636511f4373dc9f6 (patch) | |
tree | 901ee0d0d9e82a7cbcc091e0859a0c2703f886d0 | |
parent | c5676bc2f1175b32ff703065f049e299a546bccd (diff) |
* code standards improved
-rw-r--r-- | init_db.py | 16 | ||||
-rw-r--r-- | rcal/db.py | 30 | ||||
-rw-r--r-- | rcal/model.py | 40 |
3 files changed, 61 insertions, 25 deletions
@@ -1,10 +1,16 @@ +import sys + from rcal.db import Session from rcal.model import Base -import sys -session = Session() -if len(sys.argv) > 1 and sys.argv[1] == 'force': - Base.metadata.drop_all(session.get_bind()) +def main(): + session = Session.create() + + if len(sys.argv) > 1 and sys.argv[1] == 'force': + Base.metadata.drop_all(session.get_bind()) + + Base.metadata.create_all(session.get_bind()) -Base.metadata.create_all(session.get_bind()) +if __name__ == '__main__': + main() @@ -1,11 +1,27 @@ +import json +from os import path + from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -import json, __main__ -from os import path -config = json.load( - open(path.join(path.dirname(__main__.__file__), 'conf', 'db.json'))) -engine = create_engine( - "{0[type]}://{0[user]}:{0[pass]}@{0[host]}/{0[name]}?{0[opts]}".format(config)) -Session = sessionmaker(bind=engine) +class Session(object): + + engine = None + + def __init__(self): + config = json.load( + open(path.join(path.dirname( + path.realpath(__file__)), '..', 'conf', 'db.json'))) + db_str = "{0[type]}://{0[user]}:{0[pass]}@{0[host]}/{0[name]}".format( + config) + self.engine = create_engine(db_str) + + def get_maker(self): + return sessionmaker(bind=self.engine) + + @staticmethod + def create(): + session = Session() + maker = session.get_maker() + return maker() diff --git a/rcal/model.py b/rcal/model.py index 014476e..2c09e6c 100644 --- a/rcal/model.py +++ b/rcal/model.py @@ -1,11 +1,13 @@ -from sqlalchemy import Column, ForeignKey, Table +# pylint: disable=too-few-public-methods, invalid-name +from sqlalchemy import Column, ForeignKey from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import backref, relationship, sessionmaker -from sqlalchemy.types import Boolean, Date, Float, Integer, String +from sqlalchemy.orm import relationship +from sqlalchemy.types import Boolean, Date, Integer, String -Base = declarative_base() +BASE = declarative_base() -class Calendar(Base): + +class Calendar(BASE): __tablename__ = 'calendars' uid = Column(String(255), primary_key=True) @@ -24,14 +26,14 @@ class Calendar(Base): 'Category', back_populates='calendars', order_by='Calendar.name') - + entries = relationship( 'Entry', back_populates='calendar', cascade="all", passive_deletes=True, order_by='Entry.begin_date') - + @staticmethod def fetch(uid, session, name=None, url=None): calendar = session.query(Calendar).filter(Calendar.uid == uid).first() @@ -45,7 +47,8 @@ class Calendar(Base): calendar.url = url return calendar -class Entry(Base): + +class Entry(BASE): __tablename__ = 'entries' id = Column(Integer, primary_key=True) @@ -66,7 +69,7 @@ class Entry(Base): 'Calendar', back_populates='entries', order_by='Entry.begin_date') - + @staticmethod def fetch(uid, session): entry = session.query(Entry).filter(Entry.uid == uid).first() @@ -75,11 +78,12 @@ class Entry(Base): session.add(entry) return entry -class Category(Base): + +class Category(BASE): __tablename__ = 'categories' id = Column(Integer, primary_key=True) - name = Column(String(255)) + name = Column(String(255), index=True) calendars = relationship( 'Calendar', @@ -87,5 +91,15 @@ class Category(Base): cascade="all", passive_deletes=True, order_by='Calendar.name') - -__all__ = ['Calendar', 'Entry', 'Category'] + + @staticmethod + def fetch(name, session): + category = session.query(Category).filter( + Category.name == name).first() + if not category: + category = Category() + category.name = name + session.add(category) + return category + +__all__ = ('Calendar', 'Entry', 'Category') |