def get_observations_from_list(id): # noqa: A002 """Get all observations from a taxonomy list GET --- tags: - observations parameters: - name: id in: path type: integer required: true example: 1 definitions: cd_nom: type: integer description: cd_nom taxref geometry: type: dict description: Géométrie de la donnée name: type: string geom: type: geometry responses: 200: description: A list of all species lists """ # taxhub_url = load_config()['TAXHUB_API_URL'] taxhub_lists_taxa_url = taxhub_lists_url + "taxons/" + str(id) rtaxa = requests.get(taxhub_lists_taxa_url) if rtaxa.status_code == 200: try: taxa = rtaxa.json()["items"] current_app.logger.debug(taxa) features = [] for t in taxa: current_app.logger.debug("R", t["cd_nom"]) datas = (ObservationModel.query.filter_by( cd_nom=t["cd_nom"]).order_by( desc(ObservationModel.timestamp_create)).all()) for d in datas: feature = get_geojson_feature(d.geom) observation_dict = d.as_dict(True) for k in observation_dict: if k in obs_keys: feature["properties"][k] = observation_dict[k] taxref = get_specie_from_cd_nom( feature["properties"]["cd_nom"]) for k in taxref: feature["properties"][k] = taxref[k] features.append(feature) return FeatureCollection(features) except Exception as e: current_app.logger.critical( "[get_observations_from_list] Error: %s", str(e)) return {"message": str(e)}, 400
def get_observations(): """Get all observations --- tags: - observations definitions: cd_nom: type: integer description: cd_nom taxref geometry: type: dict description: Géométrie de la donnée name: type: string geom: type: geometry responses: 200: description: A list of all observations """ try: observations = ObservationModel.query.order_by( ObservationModel.timestamp_create.desc() ).all() features = [] for observation in observations: feature = get_geojson_feature(observation.geom) observation_dict = observation.as_dict(True) for k in observation_dict: if k in obs_keys: feature["properties"][k] = observation_dict[k] taxref = get_specie_from_cd_nom(feature["properties"]["cd_nom"]) for k in taxref: feature["properties"][k] = taxref[k] features.append(feature) return FeatureCollection(features) except Exception as e: current_app.logger.critical("[get_observations] Error: %s", str(e)) return {"message": str(e)}, 400
def get_taxon_from_cd_nom(cd_nom): """Get taxon TaxRef data from cd_nom --- tags: - taxon parameters: - name: cd_nom in: path type: integer required: true example: 1 definitions: cd_nom: type: integer description: cd_nom from TaxRef responses: 200: description: Taxon data from Taxref """ """Renvoie la fiche TaxRef de l'espèce d'après le cd_nom""" try: return get_specie_from_cd_nom(cd_nom=cd_nom) except Exception as e: return {"message": str(e)}, 400
def get_rewards(id): total_obs = 0 program_scores = [] taxon_scores = [] awarded_badges = [] current_app.config.from_pyfile("../config/badges_config.py") rewards = current_app.config["REWARDS"] scores_query = ( ObservationModel.query.filter(ObservationModel.id_role == id) .group_by(ObservationModel.id_program) .values( ObservationModel.id_program.label("id"), func.count(ObservationModel.id_program).label("nb_obs") ) ) for item in scores_query: program_scores.append({"id_program": item.id, "nb_obs": item.nb_obs}) total_obs = total_obs + item.nb_obs taxon_query = ( ObservationModel.query.filter(ObservationModel.id_role == id) .group_by(ObservationModel.cd_nom) .values( ObservationModel.cd_nom, func.count(ObservationModel.cd_nom).label("nb_obs") ) ) classes = {} families = {} for query in taxon_query: taxon = get_specie_from_cd_nom(cd_nom=query.cd_nom) class_ = taxon.get('classe', '') family = taxon.get('famille', '') if classes.get(class_) is not None: classes[class_] += query.nb_obs else: classes[class_] = query.nb_obs if families.get(family) is not None: families[family] += query.nb_obs else: families[family] = query.nb_obs for class_, total in classes.items(): taxon_scores.append({"classe": class_, "nb_obs": total}) for family, total in families.items(): taxon_scores.append({"famille": family, "nb_obs": total}) user = UserModel.query.filter(UserModel.id_user == id).one() result = user.as_secured_dict(True) user_date_create = result["timestamp_create"] user_date_create = datetime.strptime( user_date_create, "%Y-%m-%dT%H:%M:%S.%f" ) for reward in rewards: if reward["type"] == "all_attendance": id = 1 for badge in reward["badges"]: if total_obs >= badge["min_obs"]: badge["type"] = reward["type"] badge["id"] = reward["type"] + "_" + str(id) badge["reward_label"] = reward["reward_label"] awarded_badges.append(badge) id = id + 1 if reward["type"] == "program_attendance": id = 1 for program in program_scores: if program["id_program"] == reward["id_program"]: for badge in reward["badges"]: if program["nb_obs"] >= badge["min_obs"]: badge["type"] = reward["type"] badge["reward_label"] = reward["reward_label"] badge["id_program"] = reward["id_program"] badge["id"] = ( reward["type"] + "_prog" + str(reward["id_program"]) + "_" + str(id) ) awarded_badges.append(badge) id = id + 1 if reward["type"] == "seniority": for badge in reward["badges"]: id = 1 if badge["min_date"].endswith("d"): delta = (datetime.now() - user_date_create).days if delta >= int(badge["min_date"][0:-1]): badge["type"] = reward["type"] badge["id"] = reward["type"] + "_" + str(id) badge["reward_label"] = reward["reward_label"] awarded_badges.append(badge) id = id + 1 if badge["min_date"].endswith("m"): delta = monthdelta(user_date_create, datetime.now()) if delta >= int(badge["min_date"][0:-1]): badge["type"] = reward["type"] badge["id"] = reward["type"] + "_" + str(id) badge["reward_label"] = reward["reward_label"] awarded_badges.append(badge) id = id + 1 if badge["min_date"].endswith("y"): delta = monthdelta(user_date_create, datetime.now()) / 12 if delta >= int(badge["min_date"][0:-1]): badge["type"] = reward["type"] badge["id"] = reward["type"] + "_" + str(id) badge["reward_label"] = reward["reward_label"] awarded_badges.append(badge) id = id + 1 if reward["type"] == "recognition": for taxon in taxon_scores: id = 1 if "classe" in reward and "classe" in taxon: if taxon["classe"] == reward["classe"]: for badge in reward["badges"]: if program["nb_obs"] >= badge["min_obs"]: badge["type"] = reward["type"] badge["id"] = reward["type"] + "_" + str(id) badge["classe"] = reward["classe"] badge["reward_label"] = reward["reward_label"] awarded_badges.append(badge) id = id + 1 if "famille" in reward and "famille" in taxon: if taxon["famille"] == reward["famille"]: for badge in reward["badges"]: if program["nb_obs"] >= badge["min_obs"]: badge["type"] = reward["type"] badge["id"] = reward["type"] + "_" + str(id) badge["famille"] = reward["famille"] badge["reward_label"] = reward["reward_label"] awarded_badges.append(badge) id = id + 1 return jsonify(awarded_badges)