diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..0c02843 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +recursive-include src *.sql diff --git a/README.md b/README.md index deb85fd..69a28a0 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,35 @@ # Habref-api-module -API d'interrogation d'Habref: référentiel des Habitat de l'INPN : https://inpn.mnhn.fr/telechargement/referentiels/habitats +API d'interrogation d'Habref : référentiel des typologies d’habitats et de végétation pour la France (https://inpn.mnhn.fr/telechargement/referentiels/habitats). -Technologies ------------- +## Technologies -* Python 3 -* Flask -* SqlAlchemy +- Python 3 +- Flask +- SQLAlchemy -Installation ------------- +## Installation -* Créer un virtualenv et l'activer +- Créer un virtualenv et l'activer : -:: +``` +virtualenv -p /usr/bin/python3 venv +source venv/bin/acticate +``` - virtualenv -p /usr/bin/python3 venv - source venv/bin/acticate +- Installer le module : -* Installer le module +``` +pip install https://github.com/PnX-SI/Habref-api-module/archive/.zip +``` -:: - - pip install https://github.com/PnX-SI/Habref-api-module/archive/.zip +- Installer le schéma de base de données : +Le module est fourni avec une commande pour installer la base de données. Cette commande télécharge le référentiel Habref et créé un schéma de base de données nommé ``ref_habitats``. -* Installer le schéma de base de données - -Le module est fourni avec une commande pour installer la base de données. Cette commande télécharge le référentiel habref et crée un schéma de base de données nommé `ref_habitat` - -:: - - # depuis le virtualenv - install_habref_schema - # ex: - # install_habref_schema "postgresql://geonatadmin:monpassachanger@localhost:5432/geonature2db" +``` +# Depuis le virtualenv +install_habref_schema +# Exemple : +# install_habref_schema "postgresql://geonatadmin:monpassachanger@localhost:5432/geonature2db" +``` diff --git a/VERSION b/VERSION index 7bcd0e3..b1e80bb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.2 \ No newline at end of file +0.1.3 diff --git a/docs/changelog.rst b/docs/changelog.rst index 56dda76..bae333f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -2,11 +2,39 @@ CHANGELOG ========= -0.0.2 (2020-06-17) +0.1.3 (2020-06-17) ------------------ - **🚀 Nouveautés** * Montée de la version de ``utils-flask-sqlalchemy`` + +0.1.2 (2019-12-20) +------------------ + +**Corrections** + +* Correction erreur 500 lorsqu'un habitat n'a pas de correspondance + +0.1.1 (2019-12-18) +------------------ + +**Corrections** + +* Ajout des fichiers SQL d'installation du schéma ``ref_habitats`` dans le paquet +* Montée de version de la librairie utils-Flask-SQLAlchemy + +0.1.0 (2019-12-17) +------------------ + +Première version stabilisée du sous-module Habref. + +* SQL de création d'un schéma ``ref_habitats`` contenant les données du référentiel HABREF 5.0 +* Commande python de création et d'import des données HABREF +* API d'interrogation du référentiel Habref : + + - Recherche dans la table ``habref`` sur l'ensemble des champs + - Interrogation de la table ``typo_ref`` + - Recherche d'informations sur un habitat et ses correspondances + - Interrogation auto-complétée et intelligente sur des listes d'habitats créées au préalable diff --git a/src/pypn_habref_api/data/__init__.py b/src/pypn_habref_api/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pypn_habref_api/data/data_inpn_habref.sql b/src/pypn_habref_api/data/data_inpn_habref.sql index c44d95c..0f73550 100644 --- a/src/pypn_habref_api/data/data_inpn_habref.sql +++ b/src/pypn_habref_api/data/data_inpn_habref.sql @@ -5,7 +5,7 @@ SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -SET search_path = ref_habitat, pg_catalog; +SET search_path = ref_habitats, pg_catalog; TRUNCATE TABLE habref CASCADE; @@ -23,57 +23,57 @@ TRUNCATE TABLE habref_sources CASCADE; TRUNCATE TABLE cor_hab_source CASCADE; COPY bib_habref_typo_rel -FROM '/tmp/habref/HABREF_TYPE_REL_40.csv' +FROM '/tmp/habref/HABREF_TYPE_REL_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY bib_habref_statuts -FROM '/tmp/habref/HABREF_STATUTS_40.csv' +FROM '/tmp/habref/HABREF_STATUTS_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY habref_sources -FROM '/tmp/habref/HABREF_SOURCES_40.csv' +FROM '/tmp/habref/HABREF_SOURCES_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY typoref -FROM '/tmp/habref/TYPOREF_40.csv' +FROM '/tmp/habref/TYPOREF_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY habref -FROM '/tmp/habref/HABREF_NOHTML_40.csv' +FROM '/tmp/habref/HABREF_NOHTML_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY habref_corresp_hab -FROM '/tmp/habref/HABREF_CORRESP_HAB_40.csv' +FROM '/tmp/habref/HABREF_CORRESP_HAB_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY habref_corresp_taxon -FROM '/tmp/habref/HABREF_CORRESP_TAXON_40.csv' +FROM '/tmp/habref/HABREF_CORRESP_TAXON_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY cor_habref_terr_statut -FROM '/tmp/habref/HABREF_TERR_40.csv' +FROM '/tmp/habref/HABREF_TERR_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY typoref_fields -FROM '/tmp/habref/TYPOREF_FIELDS_40.csv' +FROM '/tmp/habref/TYPOREF_FIELDS_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY cor_habref_description -FROM '/tmp/habref/HABREF_DESCRIPTION_NOHTML_40.csv' +FROM '/tmp/habref/HABREF_DESCRIPTION_NOHTML_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; COPY cor_hab_source -FROM '/tmp/habref/HABREF_LIEN_SOURCES_40.csv' +FROM '/tmp/habref/HABREF_LIEN_SOURCES_50.csv' WITH CSV HEADER DELIMITER E';' encoding 'UTF-8'; @@ -90,12 +90,12 @@ ALTER TABLE cor_habref_description DROP COLUMN lb_hab_field; -- CREATE TABLE AUTOCOMPLETE -INSERT INTO ref_habitat.autocomplete_habitat +INSERT INTO ref_habitats.autocomplete_habitat SELECT cd_hab, h.cd_typo, lb_code, lb_nom_typo, concat(lb_code, ' - ', lb_hab_fr, ' ', lb_hab_fr_complet) -FROM ref_habitat.habref h -JOIN ref_habitat.typoref t ON t.cd_typo = h.cd_typo; \ No newline at end of file +FROM ref_habitats.habref h +JOIN ref_habitats.typoref t ON t.cd_typo = h.cd_typo; \ No newline at end of file diff --git a/src/pypn_habref_api/data/habref.sql b/src/pypn_habref_api/data/habref.sql index 61e0bd6..59aa504 100644 --- a/src/pypn_habref_api/data/habref.sql +++ b/src/pypn_habref_api/data/habref.sql @@ -5,9 +5,9 @@ SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -CREATE SCHEMA IF NOT EXISTS ref_habitat; +CREATE SCHEMA IF NOT EXISTS ref_habitats; -SET search_path = ref_habitat, pg_catalog, public; +SET search_path = ref_habitats, pg_catalog, public; SET default_with_oids = false; @@ -16,15 +16,15 @@ SET default_with_oids = false; --FUNCTIONS-- ------------- -CREATE OR REPLACE FUNCTION ref_habitat.is_communitarian(my_cd_hab integer) +CREATE OR REPLACE FUNCTION ref_habitats.is_communitarian(my_cd_hab integer) RETURNS boolean AS $BODY$ --fonction permettant de savoir si un habitat est communautaire DECLARE is_com integer; BEGIN SELECT INTO is_com count(*) - FROM ref_habitat.habref hab - JOIN ref_habitat.typoref typ ON hab.cd_typo = typ.cd_typo + FROM ref_habitats.habref hab + JOIN ref_habitats.typoref typ ON hab.cd_typo = typ.cd_typo WHERE typ.cd_table = 'TYPO_HIC' AND hab.cd_hab = my_cd_hab; RETURN is_com = 1; @@ -64,7 +64,7 @@ CREATE TABLE typoref ( cd_typo_sortie integer, niveau_inpn character varying(255) -- pas de doc ); -COMMENT ON TABLE ref_habitat.typoref IS 'typoref, table TYPOREF du référentiel HABREF 4.0'; +COMMENT ON TABLE ref_habitats.typoref IS 'typoref, table TYPOREF du référentiel HABREF 4.0'; -- init référentiel HABREF 4.0, table HABREF CREATE TABLE habref ( @@ -83,7 +83,7 @@ CREATE TABLE habref ( france character varying(5), lb_description character varying(4000) ); -COMMENT ON TABLE ref_habitat.habref IS 'habref, table HABREF référentiel HABREF 4.0 INPN'; +COMMENT ON TABLE ref_habitats.habref IS 'habref, table HABREF référentiel HABREF 4.0 INPN'; @@ -101,7 +101,7 @@ CREATE TABLE habref_corresp_hab( date_modif text, diffusion boolean ); -COMMENT ON TABLE ref_habitat.habref_corresp_hab IS 'Table de corespondances entres les habitats de differentes typologie'; +COMMENT ON TABLE ref_habitats.habref_corresp_hab IS 'Table de corespondances entres les habitats de differentes typologie'; CREATE TABLE habref_corresp_taxon( @@ -116,7 +116,7 @@ CREATE TABLE habref_corresp_taxon( date_crea text, date_modif text ); -COMMENT ON TABLE ref_habitat.habref_corresp_taxon IS 'Table de corespondances entres les habitats les taxon (table taxref)'; +COMMENT ON TABLE ref_habitats.habref_corresp_taxon IS 'Table de corespondances entres les habitats les taxon (table taxref)'; CREATE TABLE bib_habref_typo_rel( @@ -129,7 +129,7 @@ CREATE TABLE bib_habref_typo_rel( date_crea text, date_modif text ); -COMMENT ON TABLE ref_habitat.bib_habref_typo_rel IS 'Bibliothèque des types de relations entre habitats - Table habref_typo_rel de HABREF'; +COMMENT ON TABLE ref_habitats.bib_habref_typo_rel IS 'Bibliothèque des types de relations entre habitats - Table habref_typo_rel de HABREF'; CREATE TABLE bib_habref_statuts( @@ -138,7 +138,7 @@ CREATE TABLE bib_habref_statuts( definition character varying(500) NOT NULL, ordre integer ); -COMMENT ON TABLE ref_habitat.bib_habref_statuts IS 'Bibliothèque des types statut d''habitat - Présence, absence ... - Table habref_status de HABREF'; +COMMENT ON TABLE ref_habitats.bib_habref_statuts IS 'Bibliothèque des types statut d''habitat - Présence, absence ... - Table habref_status de HABREF'; CREATE TABLE cor_habref_terr_statut( cd_hab_ter integer NOT NULL, @@ -148,7 +148,7 @@ CREATE TABLE cor_habref_terr_statut( date_crea text, date_modif text ); -COMMENT ON TABLE ref_habitat.cor_habref_terr_statut IS 'Table de correspondance entre un habitat, un territoire et son statut - Table habref_terr de HABREF' ; +COMMENT ON TABLE ref_habitats.cor_habref_terr_statut IS 'Table de correspondance entre un habitat, un territoire et son statut - Table habref_terr de HABREF' ; CREATE TABLE typoref_fields( cd_hab_field integer NOT NULL, @@ -162,7 +162,7 @@ CREATE TABLE typoref_fields( date_crea text, date_modif text ); -COMMENT ON TABLE ref_habitat.cor_habref_terr_statut IS 'Table de descritpion des champs additionnels de chaque typologie.' ; +COMMENT ON TABLE ref_habitats.cor_habref_terr_statut IS 'Table de descritpion des champs additionnels de chaque typologie.' ; CREATE TABLE cor_habref_description( cd_hab_description integer NOT NULL, @@ -173,7 +173,7 @@ CREATE TABLE cor_habref_description( lb_hab_field character varying(200), valeurs text ); -COMMENT ON TABLE ref_habitat.cor_habref_description IS 'Table de correspondance entre un habitat et les champs additionnels décrit dans la table typoref_fields - Table habref_description de HABREF' ; +COMMENT ON TABLE ref_habitats.cor_habref_description IS 'Table de correspondance entre un habitat et les champs additionnels décrit dans la table typoref_fields - Table habref_description de HABREF' ; CREATE TABLE habref_sources( @@ -189,7 +189,7 @@ CREATE TABLE habref_sources( date_crea text, date_modif text ); -COMMENT ON TABLE ref_habitat.habref_sources IS 'Table des sources décrivant les habitats' ; +COMMENT ON TABLE ref_habitats.habref_sources IS 'Table des sources décrivant les habitats' ; CREATE TABLE cor_hab_source( @@ -201,21 +201,21 @@ CREATE TABLE cor_hab_source( date_crea text, date_modif text ); -COMMENT ON TABLE ref_habitat.cor_hab_source IS 'Table de corespondance entre une unité (cd_hab, cd_coresp_hab, cd_coresp_taxon) et une source - Table habref_lien_source de HABREF'; +COMMENT ON TABLE ref_habitats.cor_hab_source IS 'Table de corespondance entre une unité (cd_hab, cd_coresp_hab, cd_coresp_taxon) et une source - Table habref_lien_source de HABREF'; CREATE TABLE bib_list_habitat ( id_list serial NOT NULL, list_name character varying(255) NOT NULL ); -COMMENT ON TABLE ref_habitat.bib_list_habitat IS 'Table des listes des habitats'; +COMMENT ON TABLE ref_habitats.bib_list_habitat IS 'Table des listes des habitats'; CREATE TABLE cor_list_habitat ( id_cor_list serial NOT NULL, id_list integer NOT NULL, cd_hab integer NOT NULL ); -COMMENT ON TABLE ref_habitat.cor_list_habitat IS 'Habitat de chaque liste'; +COMMENT ON TABLE ref_habitats.cor_list_habitat IS 'Habitat de chaque liste'; CREATE TABLE autocomplete_habitat( @@ -278,45 +278,47 @@ ALTER TABLE ONLY autocomplete_habitat --------------- ALTER TABLE ONLY habref - ADD CONSTRAINT fk_typoref FOREIGN KEY (cd_typo) REFERENCES ref_habitat.typoref (cd_typo) ON UPDATE CASCADE; - + ADD CONSTRAINT fk_typoref FOREIGN KEY (cd_typo) REFERENCES ref_habitats.typoref (cd_typo) ON UPDATE CASCADE; ALTER TABLE ONLY cor_list_habitat - ADD CONSTRAINT fk_cor_list_habitat_cd_hab FOREIGN KEY (cd_hab) REFERENCES ref_habitat.habref (cd_hab) ON UPDATE CASCADE; + ADD CONSTRAINT fk_cor_list_habitat_cd_hab FOREIGN KEY (cd_hab) REFERENCES ref_habitats.habref (cd_hab) ON UPDATE CASCADE; + +ALTER TABLE ONLY cor_list_habitat + ADD CONSTRAINT fk_cor_list_habitat_id_list FOREIGN KEY (id_list) REFERENCES ref_habitats.bib_list_habitat (id_list) ON UPDATE CASCADE; ALTER TABLE ONLY habref_corresp_hab - ADD CONSTRAINT fk_habref_corresp_hab_cd_type_rel FOREIGN KEY (cd_type_relation) REFERENCES ref_habitat.bib_habref_typo_rel (cd_type_rel) ON UPDATE CASCADE; + ADD CONSTRAINT fk_habref_corresp_hab_cd_type_rel FOREIGN KEY (cd_type_relation) REFERENCES ref_habitats.bib_habref_typo_rel (cd_type_rel) ON UPDATE CASCADE; ALTER TABLE ONLY habref_corresp_hab - ADD CONSTRAINT fk_habref_corresp_hab_cd_hab_entre FOREIGN KEY (cd_hab_entre) REFERENCES ref_habitat.habref (cd_hab) ON UPDATE CASCADE; + ADD CONSTRAINT fk_habref_corresp_hab_cd_hab_entre FOREIGN KEY (cd_hab_entre) REFERENCES ref_habitats.habref (cd_hab) ON UPDATE CASCADE; ALTER TABLE ONLY habref_corresp_hab - ADD CONSTRAINT fk_habref_corresp_hab_cd_hab_sortie FOREIGN KEY (cd_hab_sortie) REFERENCES ref_habitat.habref (cd_hab) ON UPDATE CASCADE; + ADD CONSTRAINT fk_habref_corresp_hab_cd_hab_sortie FOREIGN KEY (cd_hab_sortie) REFERENCES ref_habitats.habref (cd_hab) ON UPDATE CASCADE; ALTER TABLE ONLY habref_corresp_taxon - ADD CONSTRAINT fk_habref_corresp_tax_cd_typ_rel FOREIGN KEY (cd_type_relation) REFERENCES ref_habitat.bib_habref_typo_rel (cd_type_rel) ON UPDATE CASCADE; + ADD CONSTRAINT fk_habref_corresp_tax_cd_typ_rel FOREIGN KEY (cd_type_relation) REFERENCES ref_habitats.bib_habref_typo_rel (cd_type_rel) ON UPDATE CASCADE; ALTER TABLE ONLY habref_corresp_taxon - ADD CONSTRAINT fk_habref_corresp_tax_cd_hab_entre FOREIGN KEY (cd_hab_entre) REFERENCES ref_habitat.habref (cd_hab) ON UPDATE CASCADE; + ADD CONSTRAINT fk_habref_corresp_tax_cd_hab_entre FOREIGN KEY (cd_hab_entre) REFERENCES ref_habitats.habref (cd_hab) ON UPDATE CASCADE; -- ALTER TABLE ONLY habref_corresp_taxon -- ADD CONSTRAINT fk_habref_corresp_tax_cd_nom FOREIGN KEY (cd_nom) REFERENCES taxonomie.taxref (cd_nom) ON UPDATE CASCADE; ALTER TABLE ONLY cor_habref_terr_statut - ADD CONSTRAINT fk_cor_habref_terr_statut_cd_hab FOREIGN KEY (cd_hab) REFERENCES ref_habitat.habref (cd_hab) ON UPDATE CASCADE; + ADD CONSTRAINT fk_cor_habref_terr_statut_cd_hab FOREIGN KEY (cd_hab) REFERENCES ref_habitats.habref (cd_hab) ON UPDATE CASCADE; ALTER TABLE ONLY cor_habref_terr_statut - ADD CONSTRAINT fk_cor_habref_terr_statut_cd_statut_presence FOREIGN KEY (cd_statut_presence) REFERENCES ref_habitat.bib_habref_statuts (statut) ON UPDATE CASCADE; + ADD CONSTRAINT fk_cor_habref_terr_statut_cd_statut_presence FOREIGN KEY (cd_statut_presence) REFERENCES ref_habitats.bib_habref_statuts (statut) ON UPDATE CASCADE; ALTER TABLE ONLY cor_habref_description - ADD CONSTRAINT fk_cor_habref_description_cd_hab FOREIGN KEY (cd_hab) REFERENCES ref_habitat.habref (cd_hab) ON UPDATE CASCADE ON DELETE CASCADE; + ADD CONSTRAINT fk_cor_habref_description_cd_hab FOREIGN KEY (cd_hab) REFERENCES ref_habitats.habref (cd_hab) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE ONLY cor_habref_description - ADD CONSTRAINT fk_cor_habref_description_cd_hab_field FOREIGN KEY (cd_hab_field) REFERENCES ref_habitat.typoref_fields (cd_hab_field) ON UPDATE CASCADE ON DELETE CASCADE; + ADD CONSTRAINT fk_cor_habref_description_cd_hab_field FOREIGN KEY (cd_hab_field) REFERENCES ref_habitats.typoref_fields (cd_hab_field) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE ONLY cor_hab_source - ADD CONSTRAINT fk_cor_cor_hab_source_cd_source FOREIGN KEY (cd_source) REFERENCES ref_habitat.habref_sources (cd_source) ON UPDATE CASCADE ON DELETE CASCADE; + ADD CONSTRAINT fk_cor_cor_hab_source_cd_source FOREIGN KEY (cd_source) REFERENCES ref_habitats.habref_sources (cd_source) ON UPDATE CASCADE ON DELETE CASCADE; ---------- @@ -324,4 +326,4 @@ ALTER TABLE ONLY cor_hab_source ---------- ALTER TABLE ONLY cor_list_habitat - ADD CONSTRAINT unique_cor_list_habitat UNIQUE ( id_list, cd_hab ); \ No newline at end of file + ADD CONSTRAINT unique_cor_list_habitat UNIQUE ( id_list, cd_hab ); diff --git a/src/pypn_habref_api/models.py b/src/pypn_habref_api/models.py index 5a14955..e4cb8f8 100644 --- a/src/pypn_habref_api/models.py +++ b/src/pypn_habref_api/models.py @@ -14,7 +14,7 @@ @serializable class BibHabrefTypoRel(DB.Model): __tablename__ = "bib_habref_typo_rel" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} cd_type_rel = DB.Column(DB.Integer, primary_key=True) lb_type_rel = DB.Column(DB.Unicode) lb_rel = DB.Column(DB.Unicode) @@ -26,13 +26,13 @@ class BibHabrefTypoRel(DB.Model): @serializable class CorespHab(DB.Model): __tablename__ = "habref_corresp_hab" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} cd_corresp_hab = DB.Column(DB.Integer, primary_key=True) cd_hab_entre = DB.Column( - DB.Integer, ForeignKey("ref_habitat.habref.cd_hab")) + DB.Integer, ForeignKey("ref_habitats.habref.cd_hab")) cd_hab_sortie = DB.Column(DB.Integer) cd_type_relation = DB.Column( - DB.Integer, ForeignKey("ref_habitat.bib_habref_typo_rel.cd_type_rel") + DB.Integer, ForeignKey("ref_habitats.bib_habref_typo_rel.cd_type_rel") ) lb_condition = DB.Column(DB.Unicode) lb_remarques = DB.Column(DB.Unicode) @@ -48,7 +48,7 @@ class CorespHab(DB.Model): @serializable class TypoRef(DB.Model): __tablename__ = "typoref" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} cd_typo = DB.Column(DB.Integer, primary_key=True) cd_table = DB.Column(DB.Unicode) lb_nom_typo = DB.Column(DB.Unicode) @@ -78,10 +78,10 @@ class TypoRef(DB.Model): @serializable class Habref(DB.Model): __tablename__ = "habref" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} cd_hab = DB.Column(DB.Integer, primary_key=True) fg_validite = DB.Column(DB.Unicode) - cd_typo = DB.Column(DB.Integer, ForeignKey("ref_habitat.typoref.cd_typo")) + cd_typo = DB.Column(DB.Integer, ForeignKey("ref_habitats.typoref.cd_typo")) lb_code = DB.Column(DB.Unicode) lb_hab_fr = DB.Column(DB.Unicode) lb_hab_fr_complet = DB.Column(DB.Unicode) @@ -101,7 +101,7 @@ class Habref(DB.Model): @serializable class BibListHabitat(DB.Model): __tablename__ = "bib_list_habitat" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} id_list = DB.Column(DB.Integer, primary_key=True) list_name = DB.Column(DB.Unicode) @@ -109,17 +109,17 @@ class BibListHabitat(DB.Model): @serializable class CorListHabitat(DB.Model): __tablename__ = "cor_list_habitat" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} id_cor_list = DB.Column(DB.Integer, primary_key=True) id_list = DB.Column(DB.Integer, ForeignKey( - "ref_habitat.bib_list_habitat.id_list")) - cd_hab = DB.Column(DB.Integer, ForeignKey("ref_habitat.habref.cd_hab")) + "ref_habitats.bib_list_habitat.id_list")) + cd_hab = DB.Column(DB.Integer, ForeignKey("ref_habitats.habref.cd_hab")) @serializable class AutoCompleteHabitat(DB.Model): __tablename__ = "autocomplete_habitat" - __table_args__ = {"schema": "ref_habitat"} + __table_args__ = {"schema": "ref_habitats"} cd_hab = DB.Column(DB.Integer, primary_key=True) cd_typo = DB.Column(DB.Integer) lb_code = DB.Column(DB.Unicode) diff --git a/src/pypn_habref_api/routes.py b/src/pypn_habref_api/routes.py index 857e03b..2c24fd2 100644 --- a/src/pypn_habref_api/routes.py +++ b/src/pypn_habref_api/routes.py @@ -33,6 +33,8 @@ def getSearchInField(field, ilike): Get the first 20 result of Habref table for a given field with an ilike query Use trigram algo to add relevance + .. :quickref: Habref; + :params field: a Habref column :type field: str :param ilike: the ilike where expression to filter @@ -63,32 +65,28 @@ def getSearchInField(field, ilike): def get_hab(cd_hab): """ Get one habitat with its correspondances + + .. :quickref: Habref; + + :params cd_hab: a cd_hab + :type cd_hab: int """ one_hab = DB.session.query(Habref).get(cd_hab).as_dict(True) - for cor in one_hab["correspondances"]: - hab_sortie = DB.session.query(Habref).get( - cor["cd_hab_sortie"]).as_dict(True) - cor["habref"] = hab_sortie + if 'correspondances' in one_hab: + for cor in one_hab["correspondances"]: + hab_sortie = DB.session.query(Habref).get( + cor["cd_hab_sortie"]).as_dict(True) + cor["habref"] = hab_sortie return one_hab -@routes.route("/habitats/list/", methods=["GET"]) -@json_resp -def get_habref_list(id_list): - q = ( - DB.session.query(Habref) - .join(CorNomListe, CorListHabitat.cd_hab == CorListHabitat.cd_hab) - .filter(CorNomListe.id_list == id_list) - ).all() - - return [d.as_dict() for d in data] - - @routes.route("/habitats/autocomplete/list/", methods=["GET"]) @json_resp def get_habref_autocomplete(id_list): """ - Get all habref items for autocomplete + Get all habref items of a list for autocomplete + + .. :quickref: Habref; :param id_list: the id of the habref list :type id_list: int @@ -135,6 +133,8 @@ def get_typo(): """ Get all typology + .. :quickref: Habref; + :query int id_list: return only the typology of a given id_list :returns: Array """ @@ -160,9 +160,12 @@ def get_typo(): @json_resp def get_coresp(cd_hab): """ - Get all correspondance + Get all correspondances in other typo from a cd_hab + + .. :quickref: Habref; - :returns: + :params cd_hab: a cd_hab + :type cd_hab: int """ q = ( DB.session.query(CorespHab, BibHabrefTypoRel, Habref, TypoRef) diff --git a/src/pypn_habref_api/scripts/database.py b/src/pypn_habref_api/scripts/database.py index 49b04d7..eab21be 100644 --- a/src/pypn_habref_api/scripts/database.py +++ b/src/pypn_habref_api/scripts/database.py @@ -17,17 +17,6 @@ CURDIR = Path(os.path.dirname(os.path.abspath(__file__))) DATADIR = CURDIR.parent / 'data' -habref_file = [ - 'HABITATS.HABREF_NOTES_40.csv', - 'HABREF_DESCRIPTION_40.csv', - 'HABREF_SOURCES_40.csv', - 'HABREF_VALIDITE_40.csv', - 'HABREF_40.csv', - 'HABREF_DESCRIPTION_NOHTML_40.csv', 'HABREF_STATUTS_40.csv' 'TYPOREF_40.csv' -'HABREF_CORRESP_HAB_40.csv', 'HABREF_LIEN_SOURCES_40.csv', 'HABREF_TERR_40.csv', 'TYPOREF_FIELDS_40.csv', -'HABREF_CORRESP_TAXON_40.csv', 'HABREF_NOHTML_40.csv', 'HABREF_TYPE_REL_40.csv', 'TYPOREF_NOHTML_40.csv' -] - def download_habref(): if not os.path.isdir('/tmp/habref'): @@ -36,7 +25,7 @@ def download_habref(): if not os.path.isfile('habref.zip'): print('DOWNLOADING HABREF...') resp = requests.get( - 'https://geonature.fr/data/inpn/habitats/HABREF_40.zip' + 'https://geonature.fr/data/inpn/habitats/HABREF_50.zip' ) if resp.status_code != 200: raise Exception("Erreur while downlading Habref") @@ -52,12 +41,12 @@ def check_if_schema_exist(database_uri): engine = database_connect(database_uri) with engine.connect(): sql = ''' - SELECT count(*) FROM information_schema.schemata WHERE schema_name = 'ref_habitat'; + SELECT count(*) FROM information_schema.schemata WHERE schema_name = 'ref_habitats'; ''' r = engine.execute(sql).fetchone() if r[0] == 1: - raise Exception('Schema ref_habitat already exist') - click.echo("Schema ref_habitat does not exist, let's install it !") + raise Exception('Schema ref_habitats already exist') + click.echo("Schema ref_habitats does not exist, let's install it !") def database_connect(database_uri): @@ -66,6 +55,7 @@ def database_connect(database_uri): ''' return sqlalchemy.create_engine(database_uri) + def run_sql_scripts(engine, databse_uri): uri = urlparse(databse_uri) db_name = uri.path[1:] @@ -81,28 +71,28 @@ def run_sql_scripts(engine, databse_uri): code = subprocess.call(command.split()) if code != 0: raise Exception( - 'An error occured while insering Habref data in ref_habitat schema' + 'An error occured while insering Habref data in ref_habitats schema' ) conn.execute('COMMIT') conn.close() - @click.group() def main(): pass + @main.command() @click.argument('db_uri') def install_schema(db_uri): - click.echo('Initialized the schema ref_habitat in, {}'.format(db_uri)) + click.echo('Initialized the schema ref_habitats in, {}'.format(db_uri)) check_if_schema_exist(db_uri) download_habref() engine = database_connect(db_uri) run_sql_scripts(engine, db_uri) click.echo('\n\n ') click.echo('\o/ ') - click.echo('## Install sucessfully schema ref_habitat ##') + click.echo('## Install sucessfully schema ref_habitats ##') @main.command() @@ -110,5 +100,6 @@ def install_schema(db_uri): def drop_schema(db_uri): click.echo('Drop the schema in, {}'.format(db_uri)) + if __name__ == '__main__': - main() \ No newline at end of file + main()