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 and Session 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