Package DINO2
Process timetable data in the DINO 2.1 format
DINO2
Object-relational model using sqlalchemy for DINO version 2.1 data.
Developed and tested with/for python 3.7 and sqlite.
Setup
Install requirements into a new virtual environment: pipenv install
Install package: python setup.py install
Tools
Import data
pipenv run python -m DINO2.tools.imp "sqlite:///./DINO2.db" ../dino 9
Create graph from db and model
pipenv run python -m DINO2.tools.graph "sqlite:///./DINO2.db" ./docs/DINO2/model
Generate documentation
(use pipenv install --dev
)
pipenv run pdoc3 -c show_type_annotations=True -c sort_identifiers=False --html DINO2 -o ./docs --force
pipenv run pdoc3 -c show_type_annotations=True -c sort_identifiers=False --pdf DINO2 | iconv -f cp1252 -t utf-8 | pandoc --metadata=title:"DINO2 documentation" --toc --toc-depth=4 --from=markdown+abbreviations --pdf-engine=xelatex --variable=mainfont:"DejaVu Sans" --output=docs/docs.pdf
Test
pipenv run python -m pytest
(uses test data inside <./tests/data/>)
Expand source code
# -*- coding: utf-8 -*-
"""
Process timetable data in the DINO 2.1 format
.. include:: ../README.md
"""
from dataclasses import dataclass, field
from sqlalchemy import create_engine, event
from sqlalchemy.engine import Engine
from sqlalchemy.orm import sessionmaker
@dataclass
class Database:
"""
Class for database connection.
Provides `engine` and `Session` properties.
"""
url: str = 'sqlite:///./DINO2.db'
fk: bool = False
engine: Engine = field(init=False)
Session: sessionmaker = field(init=False)
def __post_init__(self):
self.engine = create_engine(self.url)
if self.fk:
# Foreign Keys auswerten. Quelle: https://stackoverflow.com/a/7831210
event.listen(self.engine, 'connect', lambda dbapi_con, con_record: dbapi_con.execute('pragma foreign_keys=ON'))
self.Session = sessionmaker()
self.Session.configure(bind=self.engine)
from . import model, tools, types
Sub-modules
DINO2.model
-
Data model for DINO 2.1 data …
DINO2.tools
-
Tools for DINO 2.1 data …
DINO2.types
-
Custom types
Classes
class Database (url: str = 'sqlite:///./DINO2.db', fk: bool = False)
-
Class for database connection.
Provides
engine
andSession
properties.Expand source code
@dataclass class Database: """ Class for database connection. Provides `engine` and `Session` properties. """ url: str = 'sqlite:///./DINO2.db' fk: bool = False engine: Engine = field(init=False) Session: sessionmaker = field(init=False) def __post_init__(self): self.engine = create_engine(self.url) if self.fk: # Foreign Keys auswerten. Quelle: https://stackoverflow.com/a/7831210 event.listen(self.engine, 'connect', lambda dbapi_con, con_record: dbapi_con.execute('pragma foreign_keys=ON')) self.Session = sessionmaker() self.Session.configure(bind=self.engine)
Class variables
var engine : sqlalchemy.engine.base.Engine
var Session : sqlalchemy.orm.session.sessionmaker
var url : str
var fk : bool