ciclos

ref: master

core/database.py


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from sqlalchemy import create_engine, event
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base

from datetime import datetime

from .config import read_from_config

engine = create_engine(read_from_config('connection-string'), echo=True)
db = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))

Base = declarative_base()
Base.query = db.query_property()

def init_database():
    @event.listens_for(Base, 'before_insert', propagate=True)
    def before_insert(mapper, connection, target):
        if hasattr(target, '_no_autoupdate'):
            return
        if hasattr(target, 'created_at'):
            target.created_at = datetime.utcnow()
        if hasattr(target, 'updated_at'):
            target.updated_at = datetime.utcnow()

    @event.listens_for(Base, 'before_update', propagate=True)
    def before_insert(mapper, connection, target):
        if hasattr(target, '_no_autoupdate'):
            return
        if hasattr(target, 'updated_at'):
            target.updated_at = datetime.utcnow()

    import core.types
    Base.metadata.create_all(bind=engine)