Coverage for rfpy/model/tags.py: 100%
15 statements
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-31 16:00 +0000
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-31 16:00 +0000
1from sqlalchemy import Column, ForeignKey, Table, UniqueConstraint, Integer
2from sqlalchemy.orm import relationship, backref
3from sqlalchemy.dialects import mysql
6from .humans import Organisation
7from .questionnaire import QuestionInstance
8from .meta import Base
11tags_qinstances_table = Table(
12 "tags_qinstances",
13 Base.metadata,
14 Column("tag_id", Integer, ForeignKey('tags.id', ondelete="CASCADE"), index=True),
15 Column(
16 "question_instance_id",
17 Integer,
18 ForeignKey(QuestionInstance.id, ondelete="CASCADE"),
19 index=True
20 ),
21 UniqueConstraint('tag_id', 'question_instance_id')
22)
25class Tag(Base):
27 __tablename__ = "tags"
28 __table_args__ = (
29 UniqueConstraint("org_id", "name"),
30 {"mysql_engine": "InnoDB", "mysql_charset": 'utf8mb4'}
31 )
33 org_id = Column(
34 mysql.VARCHAR(length=50),
35 ForeignKey("organisations.id", ondelete="CASCADE", onupdate="CASCADE")
36 )
37 name = Column(mysql.VARCHAR(length=128), nullable=False)
38 description = Column(mysql.VARCHAR(length=256))
40 organisation = relationship(
41 Organisation,
42 primaryjoin=org_id == Organisation.id,
43 backref=backref(
44 "tags",
45 lazy="dynamic",
46 cascade="all,delete",
47 passive_deletes=True,
48 ),
49 )
51 question_instances = relationship(
52 QuestionInstance,
53 secondary=tags_qinstances_table,
54 backref=backref('tags', passive_deletes=True),
55 passive_deletes=True,
56 lazy='dynamic'
57 )