import os.path
from flask import current_app
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import ForeignKey, Sequence
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.schema import FetchedValue
from utils_flask_sqla.serializers import serializable
from ref_geo.models import LAreas
from . import db
@serializable
[docs]
class BibNoms(db.Model):
[docs]
__tablename__ = "bib_noms"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_nom = db.Column(db.Integer, primary_key=True)
[docs]
cd_nom = db.Column(db.Integer, ForeignKey("taxonomie.taxref.cd_nom"), nullable=True)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
nom_francais = db.Column(db.Unicode)
[docs]
taxref = db.relationship("Taxref", back_populates="bib_nom")
[docs]
attributs = db.relationship("CorTaxonAttribut", back_populates="bib_nom")
[docs]
listes = db.relationship("CorNomListe", back_populates="bib_nom")
# medias relationship defined through backref
[docs]
def __repr__(self):
return f"<BibNoms {self.nom_francais}>"
@serializable
[docs]
class CorTaxonAttribut(db.Model):
[docs]
__tablename__ = "cor_taxon_attribut"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_attribut = db.Column(
db.Integer,
ForeignKey("taxonomie.bib_attributs.id_attribut"),
nullable=False,
primary_key=True,
)
[docs]
cd_ref = db.Column(
db.Integer,
ForeignKey("taxonomie.bib_noms.cd_ref"),
nullable=False,
primary_key=True,
)
[docs]
valeur_attribut = db.Column(db.Text, nullable=False)
[docs]
bib_nom = db.relationship("BibNoms", back_populates="attributs")
[docs]
bib_attribut = db.relationship("BibAttributs")
[docs]
def __repr__(self):
return f"<CorTaxonAttribut {self.valeur_attribut}>"
@serializable
[docs]
class BibThemes(db.Model):
[docs]
__tablename__ = "bib_themes"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_theme = db.Column(db.Integer, primary_key=True)
[docs]
nom_theme = db.Column(db.Unicode)
[docs]
desc_theme = db.Column(db.Unicode)
[docs]
ordre = db.Column(db.Integer)
[docs]
id_droit = db.Column(db.Integer)
[docs]
attributs = db.relationship("BibAttributs", lazy="select", back_populates="theme")
[docs]
def __repr__(self):
return f"<BibThemes {self.nom_theme}>"
@serializable
[docs]
class BibAttributs(db.Model):
[docs]
__tablename__ = "bib_attributs"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_attribut = db.Column(db.Integer, primary_key=True)
[docs]
nom_attribut = db.Column(db.Unicode, nullable=True)
[docs]
label_attribut = db.Column(db.Unicode, nullable=True)
[docs]
liste_valeur_attribut = db.Column(db.Text, nullable=True)
[docs]
obligatoire = db.Column(db.BOOLEAN, nullable=True, server_default=FetchedValue())
[docs]
desc_attribut = db.Column(db.Text)
[docs]
type_attribut = db.Column(db.Unicode)
[docs]
regne = db.Column(db.Unicode)
[docs]
group2_inpn = db.Column(db.Unicode)
[docs]
id_theme = db.Column(
db.Integer,
ForeignKey(BibThemes.id_theme),
nullable=False,
primary_key=False,
)
[docs]
ordre = db.Column(db.Integer)
[docs]
theme = db.relationship(BibThemes, back_populates="attributs")
[docs]
def __repr__(self):
return f"<BibAttributs {self.nom_attribut}>"
@serializable(exclude=["nom_vern_or_lb_nom"])
[docs]
class Taxref(db.Model):
[docs]
__tablename__ = "taxref"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
cd_nom = db.Column(db.Integer, primary_key=True)
[docs]
id_statut = db.Column(db.Unicode)
[docs]
id_habitat = db.Column(db.Integer)
[docs]
id_rang = db.Column(db.Unicode)
[docs]
regne = db.Column(db.Unicode)
[docs]
phylum = db.Column(db.Unicode)
[docs]
classe = db.Column(db.Unicode)
regne = db.Column(db.Unicode)
[docs]
ordre = db.Column(db.Unicode)
[docs]
famille = db.Column(db.Unicode)
[docs]
sous_famille = db.Column(db.Unicode)
[docs]
tribu = db.Column(db.Unicode)
[docs]
cd_taxsup = db.Column(db.Integer)
[docs]
cd_sup = db.Column(db.Integer)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
lb_nom = db.Column(db.Unicode)
[docs]
lb_auteur = db.Column(db.Unicode)
[docs]
nom_complet = db.Column(db.Unicode)
[docs]
nom_complet_html = db.Column(db.Unicode)
[docs]
nom_vern = db.Column(db.Unicode)
[docs]
nom_valide = db.Column(db.Unicode)
[docs]
nom_vern_eng = db.Column(db.Unicode)
[docs]
group1_inpn = db.Column(db.Unicode)
[docs]
group2_inpn = db.Column(db.Unicode)
[docs]
group3_inpn = db.Column(db.Unicode)
[docs]
url = db.Column(db.Unicode)
[docs]
bib_nom = db.relationship(BibNoms, back_populates="taxref")
@hybrid_property
[docs]
def nom_vern_or_lb_nom(self):
return self.nom_vern if self.nom_vern else self.lb_nom
@nom_vern_or_lb_nom.expression
def nom_vern_or_lb_nom(cls):
return db.func.coalesce(cls.nom_vern, cls.lb_nom)
[docs]
def __repr__(self):
return f"<Taxref {self.nom_complet}>"
@serializable
[docs]
class CorNomListe(db.Model):
[docs]
__tablename__ = "cor_nom_liste"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_liste = db.Column(
db.Integer,
ForeignKey("taxonomie.bib_listes.id_liste"),
nullable=False,
primary_key=True,
)
[docs]
id_nom = db.Column(
db.Integer,
ForeignKey("taxonomie.bib_noms.id_nom"),
nullable=False,
primary_key=True,
)
[docs]
bib_nom = db.relationship(BibNoms, back_populates="listes")
[docs]
bib_liste = db.relationship("BibListes", back_populates="cnl")
[docs]
def __repr__(self):
return f"<CorNomListe {self.id_liste}>"
@serializable
[docs]
class BibListes(db.Model):
[docs]
__tablename__ = "bib_listes"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_liste = db.Column(db.Integer, primary_key=True)
[docs]
code_liste = db.Column(db.Unicode)
[docs]
nom_liste = db.Column(db.Unicode)
[docs]
desc_liste = db.Column(db.Text)
[docs]
picto = db.Column(db.Unicode)
[docs]
regne = db.Column(db.Unicode)
[docs]
group2_inpn = db.Column(db.Unicode)
[docs]
cnl = db.relationship(CorNomListe, lazy="select", back_populates="bib_liste")
[docs]
noms = db.relationship(
"BibNoms", secondary=CorNomListe.__table__, overlaps="bib_nom,listes,bib_liste,cnl"
)
[docs]
def __repr__(self):
return f"<BibListes {self.nom_liste}>"
@serializable
@serializable
@serializable
[docs]
class VMTaxrefListForautocomplete(db.Model):
[docs]
__tablename__ = "vm_taxref_list_forautocomplete"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
gid = db.Column(db.Integer, primary_key=True)
[docs]
cd_nom = db.Column(db.Integer, ForeignKey(Taxref.cd_nom))
[docs]
search_name = db.Column(db.Unicode)
[docs]
unaccent_search_name = db.Column(db.Unicode)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
nom_valide = db.Column(db.Unicode)
[docs]
lb_nom = db.Column(db.Unicode)
[docs]
nom_vern = db.Column(db.Unicode)
[docs]
regne = db.Column(db.Unicode)
[docs]
group2_inpn = db.Column(db.Unicode)
[docs]
group3_inpn = db.Column(db.Unicode)
[docs]
def __repr__(self):
return f"<VMTaxrefListForautocomplete {self.search_name} >"
@serializable
[docs]
class BibTaxrefHabitats(db.Model):
[docs]
__tablename__ = "bib_taxref_habitats"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_habitat = db.Column(db.Integer, primary_key=True)
[docs]
nom_habitat = db.Column(db.Unicode)
[docs]
desc_habitat = db.Column(db.Text)
[docs]
def __repr__(self):
return f"<BibTaxrefHabitats {self.nom_habitat}>"
@serializable
[docs]
class BibTaxrefRangs(db.Model):
[docs]
__tablename__ = "bib_taxref_rangs"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_rang = db.Column(db.Integer, primary_key=True)
[docs]
nom_rang = db.Column(db.Unicode)
[docs]
tri_rang = db.Column(db.Integer)
[docs]
def __repr__(self):
return f"<BibTaxrefRangs {self.nom_rang}>"
@serializable
[docs]
class BibTaxrefStatus(db.Model):
[docs]
__tablename__ = "bib_taxref_statuts"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_statut = db.Column(db.Integer, primary_key=True)
[docs]
nom_statut = db.Column(db.Unicode)
[docs]
def __repr__(self):
return f"<BibTaxrefStatus {self.nom_statut}>"
@serializable
[docs]
class VMTaxrefHierarchie(db.Model):
[docs]
__tablename__ = "vm_taxref_hierarchie"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
cd_nom = db.Column(db.Integer, primary_key=True)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
regne = db.Column(db.Unicode)
[docs]
phylum = db.Column(db.Unicode)
[docs]
classe = db.Column(db.Unicode)
[docs]
ordre = db.Column(db.Unicode)
[docs]
famille = db.Column(db.Unicode)
[docs]
lb_nom = db.Column(db.Unicode)
[docs]
id_rang = db.Column(db.Unicode)
[docs]
nb_tx_fm = db.Column(db.Integer)
[docs]
nb_tx_or = db.Column(db.Integer)
[docs]
nb_tx_cl = db.Column(db.Integer)
[docs]
nb_tx_ph = db.Column(db.Integer)
[docs]
nb_tx_kd = db.Column(db.Integer)
[docs]
def __repr__(self):
return f"<VMTaxrefHierarchie {self.lb_nom}>"
@serializable
[docs]
class VTaxrefHierarchieBibtaxons(db.Model):
[docs]
__tablename__ = "v_taxref_hierarchie_bibtaxons"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
cd_nom = db.Column(db.Integer, primary_key=True)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
regne = db.Column(db.Unicode)
[docs]
phylum = db.Column(db.Unicode)
[docs]
classe = db.Column(db.Unicode)
[docs]
ordre = db.Column(db.Unicode)
[docs]
lb_nom = db.Column(db.Unicode)
[docs]
id_rang = db.Column(db.Unicode)
[docs]
nb_tx_fm = db.Column(db.Integer)
[docs]
nb_tx_or = db.Column(db.Integer)
[docs]
nb_tx_cl = db.Column(db.Integer)
[docs]
nb_tx_ph = db.Column(db.Integer)
[docs]
nb_tx_kd = db.Column(db.Integer)
[docs]
def __repr__(self):
return f"<VMTaxrefHierarchie {self.lb_nom}>"
@serializable
[docs]
class TaxrefBdcStatutType(db.Model):
[docs]
__tablename__ = "bdc_statut_type"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
cd_type_statut = db.Column(db.Unicode, primary_key=True)
[docs]
lb_type_statut = db.Column(db.Unicode)
[docs]
regroupement_type = db.Column(db.Unicode)
[docs]
thematique = db.Column(db.Unicode)
[docs]
type_value = db.Column(db.Unicode)
[docs]
text = db.relationship("TaxrefBdcStatutText", lazy="select", back_populates="type_statut")
@hybrid_property
[docs]
def display(self):
return f"{self.lb_type_statut} - {self.cd_type_statut}"
[docs]
bdc_statut_cor_text_area = db.Table(
"bdc_statut_cor_text_area",
db.Column(
"id_text", db.Integer, ForeignKey("taxonomie.bdc_statut_text.id_text"), primary_key=True
),
db.Column("id_area", db.Integer, ForeignKey(LAreas.id_area), primary_key=True),
schema="taxonomie",
)
@serializable
[docs]
class TaxrefBdcStatutText(db.Model):
[docs]
__tablename__ = "bdc_statut_text"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_text = db.Column(db.Integer, primary_key=True)
[docs]
cd_st_text = db.Column(db.Unicode)
[docs]
cd_type_statut = db.Column(
db.Unicode, ForeignKey("taxonomie.bdc_statut_type.cd_type_statut"), nullable=False
)
[docs]
cd_sig = db.Column(db.Unicode)
[docs]
cd_doc = db.Column(db.Unicode)
[docs]
niveau_admin = db.Column(db.Unicode)
[docs]
cd_iso3166_1 = db.Column(db.Unicode)
[docs]
cd_iso3166_2 = db.Column(db.Unicode)
[docs]
lb_adm_tr = db.Column(db.Unicode)
[docs]
full_citation = db.Column(db.Unicode)
[docs]
doc_url = db.Column(db.Unicode)
[docs]
enable = db.Column(db.Boolean)
[docs]
type_statut = db.relationship(TaxrefBdcStatutType, lazy="select", back_populates="text")
[docs]
cor_text = db.relationship(
"TaxrefBdcStatutCorTextValues", lazy="select", back_populates="text"
)
[docs]
areas = db.relationship(LAreas, secondary=bdc_statut_cor_text_area)
@serializable
[docs]
class TaxrefBdcStatutValues(db.Model):
[docs]
__tablename__ = "bdc_statut_values"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_value = db.Column(db.Integer, primary_key=True)
[docs]
code_statut = db.Column(db.Unicode)
[docs]
label_statut = db.Column(db.Unicode)
@hybrid_property
[docs]
def display(self):
return f"{self.code_statut} - {self.label_statut}"
@serializable
[docs]
class TaxrefBdcStatutCorTextValues(db.Model):
[docs]
__tablename__ = "bdc_statut_cor_text_values"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id_value_text = db.Column(db.Integer, primary_key=True)
[docs]
id_value = db.Column(
db.Unicode, ForeignKey("taxonomie.bdc_statut_values.id_value"), nullable=False
)
[docs]
id_text = db.Column(
db.Unicode, ForeignKey("taxonomie.bdc_statut_text.id_text"), nullable=False
)
[docs]
text = db.relationship(TaxrefBdcStatutText, lazy="select", back_populates="cor_text")
[docs]
value = db.relationship(TaxrefBdcStatutValues, lazy="select")
[docs]
taxon = db.relationship("TaxrefBdcStatutTaxon", lazy="select", back_populates="value_text")
@serializable
[docs]
class TaxrefBdcStatutTaxon(db.Model):
[docs]
__tablename__ = "bdc_statut_taxons"
[docs]
__table_args__ = {"schema": "taxonomie"}
[docs]
id = db.Column(db.Integer, primary_key=True)
[docs]
id_value_text = db.Column(
db.Integer,
ForeignKey("taxonomie.bdc_statut_cor_text_values.id_value_text"),
nullable=False,
)
[docs]
cd_nom = db.Column(db.Integer)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
rq_statut = db.Column(db.Unicode)
[docs]
value_text = db.relationship(
TaxrefBdcStatutCorTextValues, lazy="select", back_populates="taxon"
)
@serializable
[docs]
class VBdcStatus(db.Model):
[docs]
__tablename__ = "v_bdc_status"
[docs]
__table_args__ = {"schema": "taxonomie", "info": dict(is_view=True)}
[docs]
cd_nom = db.Column(db.Integer, primary_key=True)
[docs]
cd_ref = db.Column(db.Integer)
[docs]
rq_statut = db.Column(db.Unicode)
[docs]
code_statut = db.Column(db.Unicode, primary_key=True)
[docs]
label_statut = db.Column(db.Unicode)
[docs]
cd_type_statut = db.Column(db.Unicode, primary_key=True)
[docs]
lb_type_statut = db.Column(db.Unicode)
[docs]
regroupement_type = db.Column(db.Unicode)
[docs]
thematique = db.Column(db.Unicode)
[docs]
cd_st_text = db.Column(db.Unicode, primary_key=True)
[docs]
cd_sig = db.Column(db.Unicode)
[docs]
cd_doc = db.Column(db.Unicode)
[docs]
niveau_admin = db.Column(db.Unicode)
[docs]
cd_iso3166_1 = db.Column(db.Unicode)
[docs]
cd_iso3166_2 = db.Column(db.Unicode)
[docs]
full_citation = db.Column(db.Unicode, primary_key=True)
[docs]
doc_url = db.Column(db.Unicode)
[docs]
type_value = db.Column(db.Unicode)
@serializable