def export_metadata(info_role): """Route to export the metadata in CSV .. :quickref: Synthese; The table synthese is join with gn_synthese.v_metadata_for_export The column jdd_id is mandatory in the view gn_synthese.v_metadata_for_export POST parameters: Use a list of id_synthese (in POST parameters) to filter the v_synthese_for_export_view """ if request.json: filters = request.json elif request.data: # decode byte to str - compat python 3.5 filters = json.loads(request.data.decode("utf-8")) else: filters = { key: request.args.getlist(key) for key, value in request.args.items() } metadata_view = GenericTable(tableName="v_metadata_for_export", schemaName="gn_synthese", engine=DB.engine) q = DB.session.query(distinct(VSyntheseForWebApp.id_dataset), metadata_view.tableDef).join( metadata_view.tableDef, getattr( metadata_view.tableDef.columns, current_app.config["SYNTHESE"] ["EXPORT_METADATA_ID_DATASET_COL"], ) == VSyntheseForWebApp.id_dataset, ) q = select( [distinct(VSyntheseForWebApp.id_dataset), metadata_view.tableDef]) synthese_query_class = SyntheseQuery(VSyntheseForWebApp, q, filters) synthese_query_class.add_join( metadata_view.tableDef, getattr( metadata_view.tableDef.columns, current_app.config["SYNTHESE"]["EXPORT_METADATA_ID_DATASET_COL"], ), VSyntheseForWebApp.id_dataset) synthese_query_class.filter_query_all_filters(info_role) data = DB.engine.execute(synthese_query_class.query) return to_csv_resp( datetime.datetime.now().strftime("%Y_%m_%d_%Hh%Mm%S"), data=[metadata_view.as_dict(d) for d in data], separator=";", columns=[db_col.key for db_col in metadata_view.tableDef.columns], )
def export_status(info_role): """ Route to get all the protection status of a synthese search Parameters: - HTTP-GET: the same that the /synthese endpoint (all the filter in web app) Get the CRUVED from 'R' action because we don't give observations X/Y but only statuts and to be constistant with the data displayed in the web interface """ filters = {key: request.args.getlist(key) for key, value in request.args.items()} # initalize the select object q = select( [ distinct(VSyntheseForWebApp.cd_nom), Taxref.nom_complet, Taxref.cd_ref, Taxref.nom_vern, TaxrefProtectionArticles.type_protection, TaxrefProtectionArticles.article, TaxrefProtectionArticles.intitule, TaxrefProtectionArticles.arrete, TaxrefProtectionArticles.date_arrete, TaxrefProtectionArticles.url, ] ) synthese_query_class = SyntheseQuery(VSyntheseForWebApp, q, filters) # add join synthese_query_class.add_join(Taxref, Taxref.cd_nom, VSyntheseForWebApp.cd_nom) synthese_query_class.add_join( TaxrefProtectionEspeces, TaxrefProtectionEspeces.cd_nom, VSyntheseForWebApp.cd_nom, ) synthese_query_class.add_join( TaxrefProtectionArticles, TaxrefProtectionArticles.cd_protection, TaxrefProtectionEspeces.cd_protection, ) # filter with all get params q = synthese_query_class.filter_query_all_filters(info_role) data = DB.engine.execute(q) protection_status = [] for d in data: row = OrderedDict( [ ("nom_complet", d["nom_complet"]), ("nom_vern", d["nom_vern"]), ("cd_nom", d["cd_nom"]), ("cd_ref", d["cd_ref"]), ("type_protection", d["type_protection"]), ("article", d["article"]), ("intitule", d["intitule"]), ("arrete", d["arrete"]), ("date_arrete", d["date_arrete"]), ("url", d["url"]), ] ) protection_status.append(row) export_columns = [ "nom_complet", "nom_vern", "cd_nom", "cd_ref", "type_protection", "article", "intitule", "arrete", "date_arrete", "url", ] return to_csv_resp( datetime.datetime.now().strftime("%Y_%m_%d_%Hh%Mm%S"), protection_status, separator=";", columns=export_columns, )
def export_status(info_role): """Route to get all the protection status of a synthese search .. :quickref: Synthese; Get the CRUVED from 'R' action because we don't give observations X/Y but only statuts and to be constistant with the data displayed in the web interface Parameters: - HTTP-GET: the same that the /synthese endpoint (all the filter in web app) """ filters = {key: request.args.getlist(key) for key, value in request.args.items()} # initalize the select object q = select( [ distinct(VSyntheseForWebApp.cd_nom), Taxref.nom_complet, Taxref.cd_ref, Taxref.nom_vern, TaxrefProtectionArticles.type_protection, TaxrefProtectionArticles.article, TaxrefProtectionArticles.intitule, TaxrefProtectionArticles.arrete, TaxrefProtectionArticles.date_arrete, TaxrefProtectionArticles.url, ] ) synthese_query_class = SyntheseQuery(VSyntheseForWebApp, q, filters) # add join synthese_query_class.add_join( Taxref, Taxref.cd_nom, VSyntheseForWebApp.cd_nom) synthese_query_class.add_join( TaxrefProtectionEspeces, TaxrefProtectionEspeces.cd_nom, VSyntheseForWebApp.cd_nom, ) synthese_query_class.add_join( TaxrefProtectionArticles, TaxrefProtectionArticles.cd_protection, TaxrefProtectionEspeces.cd_protection, ) # filter with all get params q = synthese_query_class.filter_query_all_filters(info_role) data = DB.engine.execute(q) protection_status = [] for d in data: row = OrderedDict( [ ("nom_complet", d["nom_complet"]), ("nom_vern", d["nom_vern"]), ("cd_nom", d["cd_nom"]), ("cd_ref", d["cd_ref"]), ("type_protection", d["type_protection"]), ("article", d["article"]), ("intitule", d["intitule"]), ("arrete", d["arrete"]), ("date_arrete", d["date_arrete"]), ("url", d["url"]), ] ) protection_status.append(row) export_columns = [ "nom_complet", "nom_vern", "cd_nom", "cd_ref", "type_protection", "article", "intitule", "arrete", "date_arrete", "url", ] return to_csv_resp( datetime.datetime.now().strftime("%Y_%m_%d_%Hh%Mm%S"), protection_status, separator=";", columns=export_columns, )