Code source de apptax.taxonomie.models

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] comments = 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] type_widget = 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
[docs] class BibTypesMedia(db.Model):
[docs] __tablename__ = "bib_types_media"
[docs] __table_args__ = {"schema": "taxonomie"}
[docs] id_type = db.Column(db.Integer, primary_key=True)
[docs] nom_type_media = db.Column(db.Unicode)
[docs] desc_type_media = db.Column(db.Text)
[docs] def __repr__(self): return f"<BibTypesMedia {self.nom_type_media}>"
@serializable
[docs] class TMedias(db.Model):
[docs] __tablename__ = "t_medias"
[docs] __table_args__ = {"schema": "taxonomie"}
[docs] id_media = db.Column(db.Integer, primary_key=True)
[docs] cd_ref = db.Column( db.Integer, ForeignKey(BibNoms.cd_nom), nullable=False, primary_key=False, )
[docs] titre = db.Column(db.Unicode)
[docs] url = db.Column(db.Unicode)
[docs] chemin = db.Column(db.Unicode)
[docs] auteur = db.Column(db.Unicode)
[docs] desc_media = db.Column(db.Text)
[docs] source = db.Column(db.Unicode)
[docs] licence = db.Column(db.Unicode)
[docs] is_public = db.Column(db.BOOLEAN)
[docs] supprime = db.Column(db.BOOLEAN)
[docs] id_type = db.Column( db.Integer, ForeignKey(BibTypesMedia.id_type), nullable=False, )
[docs] types = db.relationship(BibTypesMedia)
[docs] bib_nom = db.relationship(BibNoms, backref="medias")
[docs] def __repr__(self): return f"<TMedias {self.titre}>"
@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
[docs] class TMetaTaxref(db.Model):
[docs] __tablename__ = "t_meta_taxref"
[docs] __table_args__ = {"schema": "taxonomie"}
[docs] referencial_name = db.Column(db.Integer, primary_key=True)
[docs] version = db.Column(db.Integer)
[docs] update_date = db.Column(db.DateTime, default=db.func.now(), nullable=False)