from importlib import import_module
from flask import current_app
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql import select, func
from utils_flask_sqla.serializers import serializable
from .env import db
@serializable
[docs]
class CorTaxrefNomenclature(db.Model):
"""
Relation entre taxonomie et nomenclature.
A n'utiliser uniquement lorsque que l'extension 'taxonomie' des nomenclatures est installée
"""
[docs]
__tablename__ = "cor_taxref_nomenclature"
[docs]
__table_args__ = {"schema": "ref_nomenclatures"}
[docs]
id_nomenclature = db.Column(
db.Integer,
ForeignKey("ref_nomenclatures.t_nomenclatures.id_nomenclature"),
primary_key=True,
)
[docs]
regne = db.Column(db.Unicode, primary_key=True)
[docs]
group2_inpn = db.Column(db.Unicode, primary_key=True)
[docs]
group3_inpn = db.Column(db.Unicode, primary_key=True)
@serializable(
exclude=[
"label_en",
"definition_en",
"label_es",
"definition_es",
"label_de",
"definition_de",
"label_it",
"definition_it",
"meta_create_date",
"meta_update_date",
]
)
[docs]
class TNomenclatures(db.Model):
[docs]
__tablename__ = "t_nomenclatures"
[docs]
__table_args__ = {"schema": "ref_nomenclatures"}
[docs]
id_nomenclature = db.Column(db.Integer, primary_key=True)
[docs]
id_type = db.Column(
db.Integer, ForeignKey("ref_nomenclatures.bib_nomenclatures_types.id_type")
)
[docs]
nomenclature_type = relationship(
"BibNomenclaturesTypes",
backref="nomenclatures",
)
[docs]
cd_nomenclature = db.Column(db.Unicode)
[docs]
mnemonique = db.Column(db.Unicode)
[docs]
label_default = db.Column(db.Unicode)
[docs]
definition_default = db.Column(db.Unicode)
[docs]
label_fr = db.Column(db.Unicode)
[docs]
definition_fr = db.Column(db.Unicode)
[docs]
label_en = db.Column(db.Unicode)
[docs]
definition_en = db.Column(db.Unicode)
[docs]
label_es = db.Column(db.Unicode)
[docs]
definition_es = db.Column(db.Unicode)
[docs]
label_de = db.Column(db.Unicode)
[docs]
definition_de = db.Column(db.Unicode)
[docs]
label_it = db.Column(db.Unicode)
[docs]
definition_it = db.Column(db.Unicode)
[docs]
source = db.Column(db.Unicode)
[docs]
statut = db.Column(db.Unicode)
[docs]
id_broader = db.Column(db.Integer)
[docs]
hierarchy = db.Column(db.Unicode)
[docs]
active = db.Column(db.BOOLEAN)
@staticmethod
[docs]
def get_default_nomenclature(mnemonique, id_organism=0):
q = select(
func.ref_nomenclatures.get_default_nomenclature_value(mnemonique, id_organism).label(
"default"
)
)
result = db.session.execute(q)
return result.fetchone().default
[docs]
class TNomenclatureTaxonomy(TNomenclatures):
"""
Hérite de TNomenclatures, rajoute une relation vers CorTaxrefNomenclature
"""
[docs]
taxref = relationship("CorTaxrefNomenclature", lazy="joined")
@serializable
[docs]
class BibNomenclaturesTypes(db.Model):
[docs]
__tablename__ = "bib_nomenclatures_types"
[docs]
__table_args__ = {"schema": "ref_nomenclatures"}
[docs]
id_type = db.Column(db.Integer, primary_key=True)
[docs]
mnemonique = db.Column(db.Unicode)
[docs]
label_default = db.Column(db.Unicode)
[docs]
definition_default = db.Column(db.Unicode)
[docs]
label_fr = db.Column(db.Unicode)
[docs]
definition_fr = db.Column(db.Unicode)
[docs]
label_en = db.Column(db.Unicode)
[docs]
definition_en = db.Column(db.Unicode)
[docs]
label_es = db.Column(db.Unicode)
[docs]
definition_es = db.Column(db.Unicode)
[docs]
label_de = db.Column(db.Unicode)
[docs]
definition_de = db.Column(db.Unicode)
[docs]
label_it = db.Column(db.Unicode)
[docs]
definition_it = db.Column(db.Unicode)
[docs]
source = db.Column(db.Unicode)
[docs]
statut = db.Column(db.Unicode)
[docs]
def __repr__(self):
return self.label_default
@staticmethod
[docs]
def get_default_nomenclature(mnemonique, id_organism=0):
q = select(
[
func.ref_nomenclatures.get_default_nomenclature_value(
mnemonique, id_organism
).label("default")
]
)
result = db.session.execute(q)
return result.fetchone().default
[docs]
class BibNomenclaturesTypeTaxo(BibNomenclaturesTypes):
"""
Hérite de BibNomenclaturesTypes, rajoute simplement une relation vers 'nomenclature' avec la jointure vers la taxonomie
"""
[docs]
taxonomic_nomenclatures = relationship(
"TNomenclatureTaxonomy",
primaryjoin="and_(TNomenclatureTaxonomy.id_type == BibNomenclaturesTypes.id_type, TNomenclatureTaxonomy.active == True)",
lazy="joined",
order_by="TNomenclatureTaxonomy.hierarchy",
viewonly=True,
)
# Modèle utilisé seulement si l'extension 'taxonomie'
# du module est activée et installée
@serializable
[docs]
class VNomenclatureTaxonomie(db.Model):
[docs]
__tablename__ = "v_nomenclature_taxonomie"
[docs]
__table_args__ = {"schema": "ref_nomenclatures"}
[docs]
id_type = db.Column(db.Integer)
[docs]
type_label = db.Column(db.Unicode)
[docs]
type_definition = db.Column(db.Unicode)
[docs]
type_label_fr = db.Column(db.Unicode)
[docs]
type_definition_fr = db.Column(db.Unicode)
[docs]
type_label_en = db.Column(db.Unicode)
[docs]
type_definition_en = db.Column(db.Unicode)
[docs]
type_label_es = db.Column(db.Unicode)
[docs]
type_definition_es = db.Column(db.Unicode)
[docs]
type_label_de = db.Column(db.Unicode)
[docs]
type_definition_de = db.Column(db.Unicode)
[docs]
type_label_it = db.Column(db.Unicode)
[docs]
type_definition_it = db.Column(db.Unicode)
[docs]
regne = db.Column(db.Unicode, primary_key=True)
[docs]
group2_inpn = db.Column(db.Unicode, primary_key=True)
[docs]
group3_inpn = db.Column(db.Unicode, primary_key=True)
[docs]
id_nomenclature = db.Column(db.Integer, primary_key=True)
[docs]
mnemonique = db.Column(db.Unicode)
[docs]
nomenclature_label = db.Column(db.Unicode)
[docs]
nomenclature_definition = db.Column(db.Unicode)
[docs]
nomenclature_label_fr = db.Column(db.Unicode)
[docs]
nomenclature_definition_fr = db.Column(db.Unicode)
[docs]
nomenclature_label_en = db.Column(db.Unicode)
[docs]
nomenclature_definition_en = db.Column(db.Unicode)
[docs]
nomenclature_label_es = db.Column(db.Unicode)
[docs]
nomenclature_definition_es = db.Column(db.Unicode)
[docs]
nomenclature_label_de = db.Column(db.Unicode)
[docs]
nomenclature_definition_de = db.Column(db.Unicode)
[docs]
nomenclature_label_it = db.Column(db.Unicode)
[docs]
nomenclature_definition_it = db.Column(db.Unicode)
[docs]
id_broader = db.Column(db.Integer)
[docs]
hierarchy = db.Column(db.Unicode)