Changes to the database (#67)

In this PR are pruposed changed that come up when i started the data
migration.
Plese review them an approve and disaprove.
This commit is contained in:
Philipp Horstenkamp 2023-08-24 17:23:19 +02:00 committed by GitHub
parent ba30ba2cc5
commit 06e59b8061
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 44 additions and 49 deletions

View File

@ -2,15 +2,20 @@
import enum import enum
class RelationTypeEnum(enum.Enum): class RelationTypeEnum(enum.IntEnum):
"""RelationTypeEnum.""" """RelationTypeEnum."""
executive = "Executive" EXECUTIVE = enum.auto()
auditor = "Auditor" AUDITOR = enum.auto()
supervisory_board = "Supervisory_Board" SUPERVISORY_BOARD = enum.auto()
managing_director = "Managing_Directory" MANAGING_DIRECTOR = enum.auto()
authorized_representative = "Authorized_Representative" AUTHORIZED_REPRESENTATIVE = enum.auto()
final_auditor = "Final_Auditor" FINAL_AUDITOR = enum.auto()
PARTICIPATES_WITH = enum.auto()
HAS_SHARES_OF = enum.auto()
IS_SUPPLIED_BY = enum.auto()
WORKS_WITH = enum.auto()
class SentimentTypeEnum(enum.Enum): class SentimentTypeEnum(enum.Enum):
@ -20,12 +25,3 @@ class SentimentTypeEnum(enum.Enum):
sustainability = "sustainability" sustainability = "sustainability"
environmental_aspects = "environmental_aspects" environmental_aspects = "environmental_aspects"
perception = "perception" perception = "perception"
class RelationTypeCompanyEnum(enum.Enum):
"""RelationTypeCompanyEnum."""
participates_with = "participates_with"
has_shares_of = "has_shares_of"
is_supplied_by = "is_supplied_by"
works_with = "works_with"

View File

@ -1,11 +1,10 @@
"""Module containing connection utils for PostgreSQL DB.""" """Module containing connection utils for PostgreSQL DB."""
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.engine import URL, Engine from sqlalchemy.engine import URL, Engine
from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.orm import Session, declarative_base, sessionmaker
from aki_prj23_transparenzregister.config.config_providers import JsonFileConfigProvider from aki_prj23_transparenzregister.config.config_providers import JsonFileConfigProvider
from aki_prj23_transparenzregister.config.config_template import PostgreConnectionString from aki_prj23_transparenzregister.config.config_template import PostgreConnectionString
from aki_prj23_transparenzregister.utils.postgres.entities import Base
def get_engine(conn_args: PostgreConnectionString) -> Engine: def get_engine(conn_args: PostgreConnectionString) -> Engine:
@ -34,6 +33,9 @@ def get_session() -> Session: # pragma: no cover
return session() return session()
Base = declarative_base()
def init_db() -> None: def init_db() -> None:
"""Initialize DB with all defined entities.""" """Initialize DB with all defined entities."""
config_provider = JsonFileConfigProvider("./secrets.json") config_provider = JsonFileConfigProvider("./secrets.json")

View File

@ -1,20 +1,15 @@
"""ORM entities for Prod. DB.""" """ORM entities for Prod. DB."""
import uuid
from datetime import datetime from datetime import datetime
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.orm import (
declarative_base,
)
from aki_prj23_transparenzregister.utils.enumy_types import ( from aki_prj23_transparenzregister.utils.enumy_types import (
RelationTypeCompanyEnum,
RelationTypeEnum, RelationTypeEnum,
SentimentTypeEnum, SentimentTypeEnum,
) )
from aki_prj23_transparenzregister.utils.postgres.connector import Base
# # create an object *district_court* which inherits attributes from Base-class # # create an object *district_court* which inherits attributes from Base-class
Base = declarative_base()
class DistrictCourt(Base): class DistrictCourt(Base):
@ -22,9 +17,9 @@ class DistrictCourt(Base):
__tablename__ = "district_court" __tablename__ = "district_court"
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
city = sa.Column(sa.String(100), nullable=False) city = sa.Column(sa.String(100), nullable=False)
name = sa.Column(sa.String(100), nullable=False) name = sa.Column(sa.String(100), nullable=False, unique=True)
class Company(Base): class Company(Base):
@ -37,7 +32,7 @@ class Company(Base):
sa.UniqueConstraint("hr", "court_id"), sa.UniqueConstraint("hr", "court_id"),
) )
id = sa.Column(sa.String, primary_key=True, default=uuid.uuid4, unique=True) id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
hr = sa.Column(sa.Integer, nullable=False) hr = sa.Column(sa.Integer, nullable=False)
court_id = sa.Column( court_id = sa.Column(
sa.Integer, sa.Integer,
@ -51,14 +46,14 @@ class Company(Base):
sector = sa.Column(sa.String(100), nullable=False) sector = sa.Column(sa.String(100), nullable=False)
class Finance(Base): class AnnualFinanceStatement(Base):
"""Finance.""" """Finance."""
__tablename__ = "finance" __tablename__ = "annual_finance_statement"
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, primary_key=True)
company_id = sa.Column(sa.String, sa.ForeignKey("company.id")) company_id = sa.Column(sa.String, sa.ForeignKey("company.id"))
date = sa.Column(sa.DateTime(timezone=True), default=datetime.now) date = sa.Column(sa.DateTime(timezone=True), nullable=False)
total_volume = sa.Column(sa.Float) total_volume = sa.Column(sa.Float)
ebit = sa.Column(sa.Float) ebit = sa.Column(sa.Float)
ebitda = sa.Column(sa.Float) ebitda = sa.Column(sa.Float)
@ -103,36 +98,42 @@ class Person(Base):
works_for = sa.Column(sa.String(100)) works_for = sa.Column(sa.String(100))
class Relation(Base):
"""A super table containing all relations."""
__tablename__ = "relation"
id = sa.Column(sa.Integer, primary_key=True)
company_id = sa.Column(sa.String, sa.ForeignKey("company.id"))
date_from = sa.Column(sa.DateTime(timezone=True), nullable=True)
date_to = sa.Column(sa.DateTime(timezone=True), nullable=True)
relation = sa.Column(sa.Enum(RelationTypeEnum), nullable=False)
# create own relation type and person_relation object # create own relation type and person_relation object
class PersonRelation(Base): class PersonRelation(Relation):
"""PersonRelation.""" """PersonRelation."""
__tablename__ = "person_relation" __tablename__ = "person_relation"
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, sa.ForeignKey("relation.id"), primary_key=True)
company_id = sa.Column(sa.String, sa.ForeignKey("company.id")) person_id = sa.Column(sa.Integer, sa.ForeignKey("person.id"))
person_id = sa.Column(sa.Integer, sa.ForeignKey(Person.id))
date_from = sa.Column(sa.DateTime(timezone=True), default=datetime.now)
date_to = sa.Column(sa.DateTime(timezone=True), default=datetime.now)
relation = sa.Column(sa.Enum(RelationTypeEnum), nullable=False)
# company = relationship("Company") # company = relationship("Company")
# person = relationship("Person", foreign_keys=[person_id]) # person = relationship("Person", foreign_keys=[person_id])
# company = relationship('Company', foreign_keys=[company_hr,company_court]) # company = relationship('Company', foreign_keys=[company_hr,company_court])
__table_args__ = {"extend_existing": True}
# create own relation type and company_relation object # create own relation type and company_relation object
class CompanyRelation(Base): class CompanyRelation(Relation):
"""CompanyRelation.""" """CompanyRelation."""
__tablename__ = "company_relation" __tablename__ = "company_relation"
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, sa.ForeignKey("relation.id"), primary_key=True)
company1_id = sa.Column(sa.String, sa.ForeignKey("company.id"), nullable=False)
company2_id = sa.Column(sa.String, sa.ForeignKey("company.id"), nullable=False) company2_id = sa.Column(sa.String, sa.ForeignKey("company.id"), nullable=False)
date_from = sa.Column(sa.DateTime(timezone=True), default=datetime.now)
date_to = sa.Column(sa.DateTime(timezone=True), default=datetime.now)
relation = sa.Column(sa.Enum(RelationTypeCompanyEnum), nullable=False)
# company = relationship("Company") # company = relationship("Company")

View File

@ -1 +0,0 @@
"""Tests for config module."""

View File

@ -1 +0,0 @@
"""Mongo utils module."""

View File

@ -1 +0,0 @@
"""Tests for utils.postgres module."""

View File

@ -18,7 +18,7 @@ def test_init_db() -> None:
with patch( with patch(
"aki_prj23_transparenzregister.utils.postgres.connector.get_engine" "aki_prj23_transparenzregister.utils.postgres.connector.get_engine"
) as mock_get_engine, patch( ) as mock_get_engine, patch(
"aki_prj23_transparenzregister.utils.postgres.entities.declarative_base" "aki_prj23_transparenzregister.utils.postgres.connector.declarative_base"
) as mock_declarative_base, patch( ) as mock_declarative_base, patch(
"aki_prj23_transparenzregister.utils.postgres.connector.JsonFileConfigProvider" "aki_prj23_transparenzregister.utils.postgres.connector.JsonFileConfigProvider"
) as mock_provider: ) as mock_provider:
@ -33,4 +33,3 @@ def test_init_db() -> None:
mock_value.get_postgre_connection_string.return_value = "" mock_value.get_postgre_connection_string.return_value = ""
init_db() init_db()
assert True

View File

@ -1,4 +1,4 @@
def test_import() -> None: def test_import() -> None:
from aki_prj23_transparenzregister.utils.postgres import entities from aki_prj23_transparenzregister.utils.postgres import entities
assert entities is not None assert entities