Source code for toardb.timeseries.models_role
# SPDX-FileCopyrightText: 2021 Forschungszentrum Jülich GmbH
# SPDX-License-Identifier: MIT
"""
class TimeseriesRole (Base)
===========================
"""
from sqlalchemy import Column, ForeignKey, Integer, text, \
CheckConstraint, UniqueConstraint, \
Table, Sequence
from sqlalchemy.orm import relationship
from toardb.contacts.models import Contact
from toardb.base import Base
# many-to-many relationships
timeseries_timeseries_roles_table = Table('timeseries_timeseries_roles', Base.metadata,
Column('timeseries_id', Integer, ForeignKey('timeseries.id')),
Column('role_id', Integer, ForeignKey('timeseries_roles.id'))
)
TIMESERIES_ROLES_ID_SEQ = Sequence('timeseries_roles_id_seq') # define sequence explicitly
[docs]class TimeseriesRole(Base):
"""
Table "public.timeseries_roles"
+---------------+---------+-----------+----------+----------------------------------------------+
| Column | Type | Collation | Nullable | Default |
+===============+=========+===========+==========+==============================================+
| id | integer | | not null | nextval('timeseries_roles_id_seq'::regclass) |
+---------------+---------+-----------+----------+----------------------------------------------+
| role | integer | | not null | |
+---------------+---------+-----------+----------+----------------------------------------------+
| status | integer | | not null | |
+---------------+---------+-----------+----------+----------------------------------------------+
| contact_id | integer | | not null | |
+---------------+---------+-----------+----------+----------------------------------------------+
Indexes:
"timeseries_roles_pkey" PRIMARY KEY, btree (id)
"timeseries_roles_role_status_contact_id_uniq" UNIQUE CONSTRAINT, btree (role, status, contact_id)
"timeseries_roles_contact_id" btree (contact_id)
Check constraints:
"timeseries_roles_role_check" CHECK (role >= 0)
"timeseries_roles_status_check" CHECK (status >= 0)
Foreign-key constraints:
"timeseries_roles_contact_id_fk_contacts_id" FOREIGN KEY (contact_id) REFERENCES contacts(id) DEFERRABLE INITIALLY DEFERRED
"""
__tablename__ = 'timeseries_roles'
__table_args__ = (
CheckConstraint('role >= 0'),
CheckConstraint('status >= 0'),
UniqueConstraint('role', 'status', 'contact_id')
)
id = Column(Integer, TIMESERIES_ROLES_ID_SEQ, primary_key=True, server_default=TIMESERIES_ROLES_ID_SEQ.next_value())
role = Column(ForeignKey('rc_vocabulary.enum_val'), nullable=False)
status = Column(ForeignKey('rs_vocabulary.enum_val'), nullable=False)
# do not use string declaration here (not working for pytest)
# use the explicit class name here,
# see: https://groups.google.com/forum/#!topic/sqlalchemy/YjGhE4d6K4U
contact_id = Column(ForeignKey(Contact.id, deferrable=True, initially='DEFERRED'), nullable=False, index=True)
contact = relationship(Contact)
# rc_vocabulary = relationship('RcVocabulary')
# rs_vocabulary = relationship('RsVocabulary')
timeseries = relationship("Timeseries",
secondary=timeseries_timeseries_roles_table,
backref="roles")