Exemplo n.º 1
0
def getViewReleveOccurrence(info_role):
    """
    Deprecated
    """
    releve_repository = ReleveRepository(VReleveOccurrence)
    q = releve_repository.get_filtered_query(info_role)

    parameters = request.args

    nbResultsWithoutFilter = DB.session.query(VReleveOccurrence).count()

    limit = int(parameters.get("limit")) if parameters.get("limit") else 100
    page = int(parameters.get("offset")) if parameters.get("offset") else 0

    # Filters
    for param in parameters:
        if param in VReleveOccurrence.__table__.columns:
            col = getattr(VReleveOccurrence.__table__.columns, param)
            q = q.filter(col == parameters[param])

    # Order by
    if "orderby" in parameters:
        if parameters.get("orderby") in VReleveOccurrence.__table__.columns:
            orderCol = getattr(
                VReleveOccurrence.__table__.columns, parameters["orderby"]
            )

        if "order" in parameters:
            if parameters["order"] == "desc":
                orderCol = orderCol.desc()

        q = q.order_by(orderCol)

    try:
        data = q.limit(limit).offset(page * limit).all()
    except Exception as e:
        DB.session.rollback()
        raise

    user = info_role
    user_cruved = get_or_fetch_user_cruved(
        session=session,
        id_role=info_role.id_role,
        module_code="OCCTAX",
        id_application_parent=current_app.config["ID_APPLICATION_GEONATURE"],
    )
    featureCollection = []

    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature()
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)

    if data:
        return {
            "items": FeatureCollection(featureCollection),
            "total": nbResultsWithoutFilter,
        }
    return {"message": "not found"}, 404
Exemplo n.º 2
0
def get_zh(info_role):
    q = DB.session.query(TZH)

    parameters = request.args

    limit = int(parameters.get("limit", 100))
    page = int(parameters.get("offset", 0))

    # Pour obtenir le nombre de résultat de la requete sans le LIMIT
    nb_results_without_limit = q.count()

    user = info_role
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="ZONES_HUMIDES")

    data = q.limit(limit).offset(page * limit).all()

    featureCollection = []
    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature(relationships=())
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)
    return {
        "total": nb_results_without_limit,
        "total_filtered": len(data),
        "page": page,
        "limit": limit,
        "items": FeatureCollection(featureCollection),
    }
Exemplo n.º 3
0
 def get_all(self, info_role, with_cruved=False, mapping_type=None):
     """
     Get all mappings
     """
     users_mapping = self.get_user_mapping(info_role)
     q = DB.session.query(TMappings).filter(TMappings.temporary == False)
     if mapping_type:
         q = q.filter(TMappings.mapping_type == mapping_type.upper())
     if info_role.value_filter in ("1", "2"):
         q = q.filter(TMappings.id_mapping.in_(users_mapping))
     data = q.all()
     if with_cruved:
         user_cruved = get_or_fetch_user_cruved(
             session=session,
             id_role=info_role.id_role,
             module_code="IMPORT",
             object_code="MAPPING",
         )
         mapping_as_dict = []
         for d in data:
             temp = d.as_dict()
             temp["cruved"] = self.get_mapping_cruved(
                 user_cruved, d.id_mapping, users_mapping)
             mapping_as_dict.append(temp)
         return mapping_as_dict
     return [d.as_dict() for d in data]
Exemplo n.º 4
0
def occurrenceHandler(request, *, occurrence, info_role):

    releve = TRelevesOccurrence.query.get_or_404(occurrence.id_releve_occtax)

    # Test des droits d'édition du relevé si modification
    if occurrence.id_occurrence_occtax is not None:
        user_cruved = get_or_fetch_user_cruved(session=session,
                                               id_role=info_role.id_role,
                                               module_code="OCCTAX")
        # info_role.code_action = update_data_scope
        info_role = UserRigth(
            id_role=info_role.id_role,
            value_filter=user_cruved["U"],
            code_action="U",
            id_organisme=info_role.id_organisme,
        )

    releve = releve.get_releve_if_allowed(info_role)
    # fin test, si ici => c'est ok

    occurrenceSchema = OccurrenceSchema()
    try:
        occurrence = occurrenceSchema.load(request.get_json(),
                                           instance=occurrence)
    except ValidationError as error:
        log.exception(error.messages)
        raise BadRequest(error.messages)
    DB.session.add(occurrence)
    DB.session.commit()

    return occurrence
Exemplo n.º 5
0
def getOneReleve(id_releve, info_role):
    """
    Get one releve

    .. :quickref: Occtax;

    :param id_releve: the id releve from pr_occtax.t_releve_occtax
    :type id_releve: int
    :returns: Return a releve with its attached Cruved
    :rtype: `dict{'releve':<TRelevesOccurrence>, 'cruved': Cruved}`
    """
    releveCruvedSchema = ReleveCruvedSchema()
    releve = DB.session.query(TRelevesOccurrence).get(id_releve)

    if not releve:
        raise NotFound('The releve "{}" does not exist'.format(id_releve))
    # check if the user is autorized
    releve = releve.get_releve_if_allowed(info_role)

    user_cruved = get_or_fetch_user_cruved(
        session=session, id_role=info_role.id_role, module_code="OCCTAX"
    )

    releve_cruved = {
        "releve": {
            "properties": releve,
            "id": releve.id_releve_occtax,
            "geometry": releve.geom_4326,
        },
        "cruved": releve.get_releve_cruved(info_role, user_cruved),
    }

    return releveCruvedSchema.dump(releve_cruved)
Exemplo n.º 6
0
def returnUserCruved(info_role):
    # récupérer le CRUVED complet de l'utilisateur courant
    user_cruved = get_or_fetch_user_cruved(
        session=session,
        id_role=info_role.id_role,
        module_code=blueprint.config['MODULE_CODE'])
    return user_cruved
Exemplo n.º 7
0
def getReleves(info_role):
    """
    Route for map list web interface

    .. :quickref: Occtax;

    """

    releve_repository = ReleveRepository(TRelevesOccurrence)
    q = releve_repository.get_filtered_query(info_role)

    parameters = request.args

    limit = int(parameters.get("limit", 100))
    page = int(parameters.get("offset", 0))
    orderby = {
        "orderby": (parameters.get("orderby", "date_max")).lower(),
        "order": (parameters.get("order", "desc")).lower() if (parameters.get(
            "order", "desc")).lower() == "asc" else "desc",  # asc or desc
    }

    # Filters
    q = get_query_occtax_filters(parameters, TRelevesOccurrence, q)
    query_without_limit = q
    # Order by
    q = get_query_occtax_order(orderby, TRelevesOccurrence, q)
    data = q.limit(limit).offset(page * limit).all()

    # Pour obtenir le nombre de résultat de la requete sans le LIMIT
    nb_results_without_limit = query_without_limit.count()

    user = info_role
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCTAX")

    featureCollection = []
    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature(relationships=(
            "t_occurrences_occtax",
            "cor_counting_occtax",
            "taxref",
            "observers",
            "digitiser",
            "dataset",
            "right",
            "medias",
        ))
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)
    return {
        "total": nb_results_without_limit,
        "total_filtered": len(data),
        "page": page,
        "limit": limit,
        "items": FeatureCollection(featureCollection),
    }
Exemplo n.º 8
0
def post_station(info_role):
    """
    Post one occhab station (station + habitats)

    .. :quickref: OccHab; 

    Post one occhab station (station + habitats)

    :returns: GeoJson<TStationsOcchab>
    """
    data = dict(request.get_json())
    occ_hab = None
    properties = data['properties']
    if "t_habitats" in properties:
        occ_hab = properties.pop("t_habitats")
    observers_list = None
    if "observers" in properties:
        observers_list = properties.pop("observers")

    station = TStationsOcchab(**properties)
    shape = asShape(data["geometry"])
    two_dimension_geom = remove_third_dimension(shape)
    station.geom_4326 = from_shape(two_dimension_geom, srid=4326)
    if observers_list is not None:
        observers = (
            DB.session.query(User).filter(
                User.id_role.in_(
                    list(map(lambda user: user['id_role'], observers_list))
                )).all()
        )
        for o in observers:
            station.observers.append(o)
    t_hab_list_object = []
    if occ_hab is not None:
        for occ in occ_hab:
            if occ['id_habitat'] is None:
                occ.pop('id_habitat')
            data_attr = [k for k in occ]
            for att in data_attr:
                if not getattr(THabitatsOcchab, att, False):
                    occ.pop(att)
            t_hab_list_object.append(THabitatsOcchab(**occ))

    # set habitat complexe
    station.is_habitat_complex = len(t_hab_list_object) > 1

    station.t_habitats = t_hab_list_object
    if station.id_station:
        user_cruved = get_or_fetch_user_cruved(
            session=session, id_role=info_role.id_role, module_code="OCCHAB"
        )
        # check if allowed to update or raise 403
        station.check_if_allowed(info_role, 'U', user_cruved["U"])
        DB.session.merge(station)
    else:
        DB.session.add(station)
    DB.session.commit()
    return station.get_geofeature()
Exemplo n.º 9
0
def getViewReleveOccurrence(info_role):
    releve_repository = ReleveRepository(VReleveOccurrence)
    q = releve_repository.get_filtered_query(info_role)

    parameters = request.args

    nbResultsWithoutFilter = DB.session.query(VReleveOccurrence).count()

    limit = int(parameters.get("limit")) if parameters.get("limit") else 100
    page = int(parameters.get("offset")) if parameters.get("offset") else 0

    # Filters
    for param in parameters:
        if param in VReleveOccurrence.__table__.columns:
            col = getattr(VReleveOccurrence.__table__.columns, param)
            q = q.filter(col == parameters[param])

    # Order by
    if "orderby" in parameters:
        if parameters.get("orderby") in VReleveOccurrence.__table__.columns:
            orderCol = getattr(
                VReleveOccurrence.__table__.columns, parameters["orderby"]
            )

        if "order" in parameters:
            if parameters["order"] == "desc":
                orderCol = orderCol.desc()

        q = q.order_by(orderCol)

    try:
        data = q.limit(limit).offset(page * limit).all()
    except Exception as e:
        DB.session.rollback()
        raise

    user = info_role
    user_cruved = get_or_fetch_user_cruved(
        session=session,
        id_role=info_role.id_role,
        module_code="OCCTAX",
        id_application_parent=current_app.config["ID_APPLICATION_GEONATURE"],
    )
    featureCollection = []

    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature()
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)

    if data:
        return {
            "items": FeatureCollection(featureCollection),
            "total": nbResultsWithoutFilter,
        }
    return {"message": "not found"}, 404
Exemplo n.º 10
0
def getReleves(info_role):

    releve_repository = ReleveRepository(TRelevesOccurrence)
    q = releve_repository.get_filtered_query(info_role)

    parameters = request.args

    limit = int(parameters.get("limit", 100))
    page = int(parameters.get("offset", 0))
    orderby = {
        "orderby": (parameters.get("orderby", "date_max")).lower(),
        "order": (parameters.get("order", "desc")).lower()
        if (parameters.get("order", "desc")).lower() == "asc"
        else "desc",  # asc or desc
    }

    # Filters
    q = get_query_occtax_filters(parameters, TRelevesOccurrence, q)

    # Order by
    q = get_query_occtax_order(orderby, TRelevesOccurrence, q)
    try:
        data = q.limit(limit).offset(page * limit).all()
    except Exception as e:
        DB.session.rollback()
        raise

    # Pour obtenir le nombre de résultat de la requete sans le LIMIT
    try:
        nbResultsQuery = releve_repository.get_filtered_query(info_role)
        nbResultsQuery = get_query_occtax_filters(
            parameters, TRelevesOccurrence, nbResultsQuery
        )
        nbResultsWithoutFilter = nbResultsQuery.count()
    except Exception as e:
        DB.session.rollback()
        raise

    user = info_role
    user_cruved = get_or_fetch_user_cruved(
        session=session, id_role=info_role.id_role, module_code="OCCTAX"
    )

    featureCollection = []
    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature()
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)
    return {
        "total": nbResultsWithoutFilter,
        "total_filtered": len(data),
        "page": page,
        "limit": limit,
        "items": FeatureCollection(featureCollection),
    }
Exemplo n.º 11
0
def getOneReleve(id_releve, info_role):
    """
    Get one releve
    """
    releve_repository = ReleveRepository(TRelevesOccurrence)
    releve_model, releve_geojson = releve_repository.get_one(id_releve, info_role)
    user_cruved = get_or_fetch_user_cruved(
        session=session, id_role=info_role.id_role, module_code="OCCTAX"
    )
    releve_cruved = releve_model.get_releve_cruved(info_role, user_cruved)
    return {"releve": releve_geojson, "cruved": releve_cruved}
Exemplo n.º 12
0
def getOneReleve(id_releve, info_role):
    """
    Get one releve
    """
    releve_repository = ReleveRepository(TRelevesOccurrence)
    releve_model, releve_geojson = releve_repository.get_one(
        id_releve, info_role)
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCTAX")
    releve_cruved = releve_model.get_releve_cruved(info_role, user_cruved)
    return {"releve": releve_geojson, "cruved": releve_cruved}
Exemplo n.º 13
0
def releveHandler(request, *, releve, info_role):

    # Test des droits d'édition du relevé
    if releve.id_releve_occtax is not None:
        user_cruved = get_or_fetch_user_cruved(session=session,
                                               id_role=info_role.id_role,
                                               module_code="OCCTAX")
        # info_role.code_action = update_data_scope
        user = UserRigth(
            id_role=info_role.id_role,
            value_filter=user_cruved["U"],
            code_action="U",
            id_organisme=info_role.id_organisme,
        )

        releve = releve.get_releve_if_allowed(user)
        # fin test, si ici => c'est ok
    # if creation
    else:
        if info_role.value_filter in ("0", "1", "2"):
            # Check if user can add a releve in the current dataset
            allowed = releve.user_is_in_dataset_actor(info_role)
            if not allowed:
                raise InsufficientRightsError(
                    "User {} has no right in dataset {}".format(
                        info_role.id_role, releve.id_dataset),
                    403,
                )

    # creation du relevé à partir du POST
    releveSchema = ReleveSchema()

    # Modification de la requete geojson en releve
    json_req = request.get_json()
    json_req["properties"]["geom_4326"] = json_req["geometry"]
    # chargement des données POST et merge avec relevé initial
    releve, errors = releveSchema.load(json_req["properties"], instance=releve)
    if bool(errors):
        raise InsufficientRightsError(
            errors,
            422,
        )
    # set id_digitiser
    releve.id_digitiser = info_role.id_role

    DB.session.add(releve)
    DB.session.commit()
    DB.session.flush()
    return releve
Exemplo n.º 14
0
def get_sensitive_view(info_role):
    # Récupérer l'id de l'utilisateur qui demande la route
    id_role = info_role.id_role
    # Récupérer la portée autorisée à l'utilisateur pour l'acton 'R' (read)
    read_scope = info_role.value_filter

    #récupérer le CRUVED complet de l'utilisateur courant
    user_cruved = get_or_fetch_user_cruved(
        session=session,
        id_role=info_role.id_role,
        module_code='MY_MODULE_CODE',
    )
    q = DB.session.query(MySQLAModel)
    data = q.all()
    return [d.as_dict() for d in data]
Exemplo n.º 15
0
def get_sensitive_view(info_role):
    # Récupérer l'id de l'utilisateur qui demande la route
    id_role = info_role.id_role
    # Récupérer la portée autorisée à l'utilisateur pour l'acton 'R' (read)
    read_scope = info_role.value_filter

    #récupérer le CRUVED complet de l'utilisateur courant
    user_cruved = get_or_fetch_user_cruved(
        session=session,
        id_role=info_role.id_role,
        module_code='BIOMAP',
    )
    q = DB.session.query(MySQLAModel)
    data = q.all()
    return [d.as_dict() for d in data]
Exemplo n.º 16
0
 def get_one(self, id_mapping, info_role, with_cruved):
     users_mapping = self.get_user_mapping(info_role)
     mapping = DB.session.query(TMappings).get(id_mapping)
     if mapping:
         mapping_as_dict = mapping.as_dict()
         if with_cruved:
             user_cruved = get_or_fetch_user_cruved(
                 session=session,
                 id_role=info_role.id_role,
                 module_code="IMPORT",
                 object_code="MAPPING",
             )
             mapping_as_dict["cruved"] = self.get_mapping_cruved(
                 user_cruved, id_mapping, users_mapping)
         return mapping_as_dict
     return None
Exemplo n.º 17
0
def envoiPost(data):
    DB.session.rollback()
    # if its not an update we check if there is not aleady a visit this year
    print('LAAAAAA')
    #print(data)
    if not data['id_base_visit']:
        check_year_visit(data['id_base_site'], data['visit_date_min'][0:4])

    try:
        tab_perturbation = data.pop('cor_visit_perturbation')
    except:
        pass
    tab_visit_grid = data.pop('cor_visit_grid')
    tab_observer = data.pop('cor_visit_observer')
    visit = TVisiteSFT(**data)
    visit.as_dict(True)
    # pour que visit prenne en compte des relations
    # sinon elle prend pas en compte le fait qu'on efface toutes les perturbations quand on édite par ex.
    try:
        perturs = DB.session.query(TNomenclatures).filter(
            TNomenclatures.id_nomenclature.in_(tab_perturbation)).all()
        for per in perturs:
            visit.cor_visit_perturbation.append(per)
    except:
        pass
    for v in tab_visit_grid:
        visit_grid = CorVisitGrid(**v)
        visit.cor_visit_grid.append(visit_grid)
    observers = DB.session.query(User).filter(
        User.id_role.in_(tab_observer)).all()
    for o in observers:
        visit.observers.append(o)

    if visit.id_base_visit:
        user_cruved = get_or_fetch_user_cruved(session=session,
                                               id_role=info_role.id_role,
                                               module_code='SFT')
        update_cruved = user_cruved['U']
        check_user_cruved_visit(info_role, visit, update_cruved)
        DB.session.merge(visit)
    else:
        DB.session.add(visit)

    DB.session.commit()

    return visit.as_dict(recursif=True)
Exemplo n.º 18
0
def getOneReleve(id_releve, info_role):
    """
    Get one releve

    .. :quickref: Occtax;

    :param id_releve: the id releve from pr_occtax.t_releve_occtax
    :type id_releve: int
    :returns: Return a releve with its attached Cruved
    :rtype: `dict{'releve':<TRelevesOccurrence>, 'cruved': Cruved}` 
    """
    releve_repository = ReleveRepository(TRelevesOccurrence)
    releve_model, releve_geojson = releve_repository.get_one(
        id_releve, info_role)
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCTAX")
    releve_cruved = releve_model.get_releve_cruved(info_role, user_cruved)
    return {"releve": releve_geojson, "cruved": releve_cruved}
Exemplo n.º 19
0
def get_all_habitats(info_role):
    """
        Get all stations with their hab

        .. :quickref: Occhab;

    """
    params = request.args.to_dict()
    q = DB.session.query(TStationsOcchab)

    if 'id_dataset' in params:
        q = q.filter(TStationsOcchab.id_dataset == params['id_dataset'])

    if 'cd_hab' in params:
        q = q.filter(TStationsOcchab.t_habitats.any(cd_hab=params['cd_hab']))

    if 'date_low' in params:
        q = q.filter(TStationsOcchab.date_min >= params.pop("date_low"))

    if "date_up" in params:
        q = q.filter(TStationsOcchab.date_max <= params.pop("date_up"))

    q = filter_query_with_cruved(
        TStationsOcchab,
        q,
        info_role
    )
    q = q.order_by(TStationsOcchab.date_min.desc())
    limit = request.args.get(
        'limit', None) or blueprint.config['NB_MAX_MAP_LIST']
    data = q.limit(limit)

    user_cruved = get_or_fetch_user_cruved(
        session=session, id_role=info_role.id_role, module_code="OCCHAB"
    )
    feature_list = []
    for d in data:
        feature = d.get_geofeature(True)
        feature['properties']['rights'] = d.get_releve_cruved(
            info_role, user_cruved)

        feature_list.append(feature)
    return FeatureCollection(feature_list)
Exemplo n.º 20
0
def occurrenceHandler(request, *, occurrence, info_role):

    try:
        releve = DB.session.query(TRelevesOccurrence).get(
            occurrence.id_releve_occtax)
    except Exception as e:
        DB.session.rollback()
        raise

    if not releve:
        raise InsufficientRightsError(
            {"message": "not found"},
            404,
        )

    # Test des droits d'édition du relevé si modification
    if occurrence.id_occurrence_occtax is not None:
        user_cruved = get_or_fetch_user_cruved(session=session,
                                               id_role=info_role.id_role,
                                               module_code="OCCTAX")
        # info_role.code_action = update_data_scope
        info_role = UserRigth(
            id_role=info_role.id_role,
            value_filter=user_cruved["U"],
            code_action="U",
            id_organisme=info_role.id_organisme,
        )

    releve = releve.get_releve_if_allowed(info_role)
    # fin test, si ici => c'est ok

    occurrenceSchema = OccurrenceSchema()
    occurrence, errors = occurrenceSchema.load(request.get_json(),
                                               instance=occurrence)

    if bool(errors):
        return errors, 422

    DB.session.add(occurrence)
    DB.session.commit()

    return occurrence
Exemplo n.º 21
0
def get_one_station(id_station, info_role):
    """
    Return one station

    .. :quickref: Occhab;

    :param id_station: the id_station
    :type id_station: int

    :return: a dict representing one station with its habitats
    :rtype dict<TStationsOcchab>

    """
    station = DB.session.query(OneStation).get(id_station)
    station_geojson = station.get_geofeature(True)
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCHAB")
    station_geojson["properties"]["rights"] = station.get_releve_cruved(
        info_role, user_cruved)
    return station_geojson
Exemplo n.º 22
0
def insertOrUpdateOneReleve(info_role):
    releveRepository = ReleveRepository(TRelevesOccurrence)
    data = dict(request.get_json())
    occurrences_occtax = None
    if "t_occurrences_occtax" in data["properties"]:
        occurrences_occtax = data["properties"]["t_occurrences_occtax"]
        data["properties"].pop("t_occurrences_occtax")
    observersList = None
    if "observers" in data["properties"]:
        observersList = data["properties"]["observers"]
        data["properties"].pop("observers")

    # Test et suppression des propriétés inexistantes de TRelevesOccurrence
    attliste = [k for k in data["properties"]]
    for att in attliste:
        if not getattr(TRelevesOccurrence, att, False):
            data["properties"].pop(att)

    releve = TRelevesOccurrence(**data["properties"])

    shape = asShape(data["geometry"])
    releve.geom_4326 = from_shape(shape, srid=4326)

    if observersList is not None:
        observers = DB.session.query(User).filter(
            User.id_role.in_(observersList)).all()
        for o in observers:
            releve.observers.append(o)

    for occ in occurrences_occtax:
        cor_counting_occtax = []
        if "cor_counting_occtax" in occ:
            cor_counting_occtax = occ["cor_counting_occtax"]
            occ.pop("cor_counting_occtax")

        # Test et suppression
        #   des propriétés inexistantes de TOccurrencesOccurrence
        attliste = [k for k in occ]
        for att in attliste:
            if not getattr(TOccurrencesOccurrence, att, False):
                occ.pop(att)
        # pop the id if None. otherwise DB.merge is not OK
        if "id_occurrence_occtax" in occ and occ[
                "id_occurrence_occtax"] is None:
            occ.pop("id_occurrence_occtax")
        occtax = TOccurrencesOccurrence(**occ)

        for cnt in cor_counting_occtax:
            # Test et suppression
            # des propriétés inexistantes de CorCountingOccurrence
            attliste = [k for k in cnt]
            for att in attliste:
                if not getattr(CorCountingOccurrence, att, False):
                    cnt.pop(att)
            # pop the id if None. otherwise DB.merge is not OK
            if "id_counting_occtax" in cnt and cnt[
                    "id_counting_occtax"] is None:
                cnt.pop("id_counting_occtax")
            countingOccurrence = CorCountingOccurrence(**cnt)
            occtax.cor_counting_occtax.append(countingOccurrence)
        releve.t_occurrences_occtax.append(occtax)

    # if its a update
    if releve.id_releve_occtax:
        # get update right of the user
        user_cruved = get_or_fetch_user_cruved(session=session,
                                               id_role=info_role.id_role,
                                               module_code="OCCTAX")
        update_code_filter = user_cruved["U"]
        # info_role.code_action = update_data_scope
        user = UserRigth(
            id_role=info_role.id_role,
            value_filter=update_code_filter,
            code_action="U",
            id_organisme=info_role.id_organisme,
        )
        releve = releveRepository.update(releve, user, shape)
    # if its a simple post
    else:
        # set id_digitiser
        releve.id_digitiser = info_role.id_role
        if info_role.value_filter in ("0", "1", "2"):
            # Check if user can add a releve in the current dataset
            allowed = releve.user_is_in_dataset_actor(info_role)
            if not allowed:
                raise InsufficientRightsError(
                    "User {} has no right in dataset {}".format(
                        info_role.id_role, releve.id_dataset),
                    403,
                )
        DB.session.add(releve)
    DB.session.commit()
    DB.session.flush()

    return releve.get_geofeature()
Exemplo n.º 23
0
def getViewReleveList(info_role):
    """
        Retour la liste résumé des relevés avec occurrences


        Parameters
        ----------
        limit: int
            Nombre max de résulats à retourner
        offset: int
            Numéro de la page à retourner
        cd_nom: int
            Filtrer les relevés avec des occurrences avec le taxon x
        observers: int
        date_up: date
            Date minimum des relevés à retourner
        date_low: date
            Date maximum des relevés à retourner
        date_eq: date
            Date exacte des relevés à retourner
        orderby: char
            Nom du champ sur lequel baser l'ordonnancement
        order: char (asc|desc)
            Sens de l'ordonnancement
        organism: int
            id de l'organisme
        [NomChampTableVReleveList]
            Filtre sur le champ NomChampTableVReleveList

        Returns
        -------
        json
        {
            'total': Nombre total de résultat,
            'total_filtered': Nombre total de résultat après filtration ,
            'page': Numéro de la page retournée,
            'limit': Nombre de résultats,
            'items': données au format GeoJson
        }


    """
    releveRepository = ReleveRepository(VReleveList)
    q = releveRepository.get_filtered_query(info_role)

    params = request.args.to_dict()

    nbResultsWithoutFilter = VReleveList.query.count()

    limit = int(params.get("limit")) if params.get("limit") else 100
    page = int(params.get("offset")) if params.get("offset") else 0

    q = get_query_occtax_filters(request.args, VReleveList, q)

    # order by date
    q = q.order_by(VReleveList.date_min.desc())

    nbResults = q.count()

    data = q.limit(limit).offset(page * limit).all()

    user = info_role
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCTAX")
    featureCollection = []
    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature()
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)
    return {
        "total": nbResultsWithoutFilter,
        "total_filtered": nbResults,
        "page": page,
        "limit": limit,
        "items": FeatureCollection(featureCollection),
    }
Exemplo n.º 24
0
def getViewReleveList(info_role):
    """
        Retour la liste résumé des relevés avec occurrences


        Parameters
        ----------
        limit: int
            Nombre max de résulats à retourner
        offset: int
            Numéro de la page à retourner
        cd_nom: int
            Filtrer les relevés avec des occurrences avec le taxon x
        observers: int
        date_up: date
            Date minimum des relevés à retourner
        date_low: date
            Date maximum des relevés à retourner
        date_eq: date
            Date exacte des relevés à retourner
        orderby: char
            Nom du champ sur lequel baser l'ordonnancement
        order: char (asc|desc)
            Sens de l'ordonnancement
        organism: int
            id de l'organisme
        [NomChampTableVReleveList]
            Filtre sur le champ NomChampTableVReleveList

        Returns
        -------
        json
        {
            'total': Nombre total de résultat,
            'total_filtered': Nombre total de résultat après filtration ,
            'page': Numéro de la page retournée,
            'limit': Nombre de résultats,
            'items': données au format GeoJson
        }


    """
    releveRepository = ReleveRepository(VReleveList)
    q = releveRepository.get_filtered_query(info_role)

    params = request.args.to_dict()

    nbResultsWithoutFilter = VReleveList.query.count()

    limit = int(params.get("limit")) if params.get("limit") else 100
    page = int(params.get("offset")) if params.get("offset") else 0

    q = get_query_occtax_filters(request.args, VReleveList, q)

    # order by date
    q = q.order_by(VReleveList.date_min.desc())

    nbResults = q.count()

    data = q.limit(limit).offset(page * limit).all()

    user = info_role
    user_cruved = get_or_fetch_user_cruved(
        session=session, id_role=info_role.id_role, module_code="OCCTAX"
    )
    featureCollection = []
    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature()
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)
    return {
        "total": nbResultsWithoutFilter,
        "total_filtered": nbResults,
        "page": page,
        "limit": limit,
        "items": FeatureCollection(featureCollection),
    }
Exemplo n.º 25
0
def insertOrUpdateOneReleve(info_role):
    releveRepository = ReleveRepository(TRelevesOccurrence)
    data = dict(request.get_json())
    occurrences_occtax = None
    if "t_occurrences_occtax" in data["properties"]:
        occurrences_occtax = data["properties"]["t_occurrences_occtax"]
        data["properties"].pop("t_occurrences_occtax")
    observersList = None
    if "observers" in data["properties"]:
        observersList = data["properties"]["observers"]
        data["properties"].pop("observers")

    # Test et suppression des propriétés inexistantes de TRelevesOccurrence
    attliste = [k for k in data["properties"]]
    for att in attliste:
        if not getattr(TRelevesOccurrence, att, False):
            data["properties"].pop(att)

    releve = TRelevesOccurrence(**data["properties"])

    shape = asShape(data["geometry"])
    releve.geom_4326 = from_shape(shape, srid=4326)

    if observersList is not None:
        observers = DB.session.query(User).filter(User.id_role.in_(observersList)).all()
        for o in observers:
            releve.observers.append(o)

    for occ in occurrences_occtax:
        cor_counting_occtax = []
        if "cor_counting_occtax" in occ:
            cor_counting_occtax = occ["cor_counting_occtax"]
            occ.pop("cor_counting_occtax")

        # Test et suppression
        #   des propriétés inexistantes de TOccurrencesOccurrence
        attliste = [k for k in occ]
        for att in attliste:
            if not getattr(TOccurrencesOccurrence, att, False):
                occ.pop(att)
        # pop the id if None. otherwise DB.merge is not OK
        if "id_occurrence_occtax" in occ and occ["id_occurrence_occtax"] is None:
            occ.pop("id_occurrence_occtax")
        occtax = TOccurrencesOccurrence(**occ)

        for cnt in cor_counting_occtax:
            # Test et suppression
            # des propriétés inexistantes de CorCountingOccurrence
            attliste = [k for k in cnt]
            for att in attliste:
                if not getattr(CorCountingOccurrence, att, False):
                    cnt.pop(att)
            # pop the id if None. otherwise DB.merge is not OK
            if "id_counting_occtax" in cnt and cnt["id_counting_occtax"] is None:
                cnt.pop("id_counting_occtax")
            countingOccurrence = CorCountingOccurrence(**cnt)
            occtax.cor_counting_occtax.append(countingOccurrence)
        releve.t_occurrences_occtax.append(occtax)

    # if its a update
    if releve.id_releve_occtax:
        # get update right of the user
        user_cruved = get_or_fetch_user_cruved(
            session=session, id_role=info_role.id_role, module_code="OCCTAX"
        )
        update_code_filter = user_cruved["U"]
        # info_role.code_action = update_data_scope
        user = UserRigth(
            id_role=info_role.id_role,
            value_filter=update_code_filter,
            code_action="U",
            id_organisme=info_role.id_organisme,
        )
        releve = releveRepository.update(releve, user, shape)
    # if its a simple post
    else:
        # set id_digitiser
        releve.id_digitiser = info_role.id_role
        if info_role.value_filter in ("0", "1", "2"):
            # Check if user can add a releve in the current dataset
            allowed = releve.user_is_in_dataset_actor(info_role)
            if not allowed:
                raise InsufficientRightsError(
                    "User {} has no right in dataset {}".format(
                        info_role.id_role, releve.id_dataset
                    ),
                    403,
                )
        DB.session.add(releve)
    DB.session.commit()
    DB.session.flush()

    return releve.get_geofeature()
Exemplo n.º 26
0
def export(info_role):
    """Export data from pr_occtax.export_occtax_sinp view (parameter)

    .. :quickref: Occtax; Export data from pr_occtax.export_occtax_sinp

    :query str format: format of the export ('csv', 'geojson', 'shapefile', 'medias')

    """
    export_view_name = blueprint.config["export_view_name"]
    export_geom_column = blueprint.config["export_geom_columns_name"]
    export_columns = blueprint.config["export_columns"]
    export_srid = blueprint.config["export_srid"]

    export_view = GenericTableGeo(
        tableName=export_view_name,
        schemaName="pr_occtax",
        engine=DB.engine,
        geometry_field=export_geom_column,
        srid=export_srid,
    )

    releve_repository = ReleveRepository(export_view)
    q = releve_repository.get_filtered_query(info_role,
                                             from_generic_table=True)
    q = get_query_occtax_filters(
        request.args,
        export_view,
        q,
        from_generic_table=True,
        obs_txt_column=blueprint.config["export_observer_txt_column"],
    )

    data = q.all()

    file_name = datetime.datetime.now().strftime("%Y_%m_%d_%Hh%Mm%S")
    file_name = filemanager.removeDisallowedFilenameChars(file_name)

    export_format = request.args[
        "format"] if "format" in request.args else "geojson"
    if export_format == "csv":
        columns = (export_columns if len(export_columns) > 0 else
                   [db_col.key for db_col in export_view.db_cols])
        return to_csv_resp(file_name, [export_view.as_dict(d) for d in data],
                           columns, ";")
    elif export_format == "geojson":
        results = FeatureCollection([
            export_view.as_geofeature(d, columns=export_columns) for d in data
        ])
        return to_json_resp(results,
                            as_file=True,
                            filename=file_name,
                            indent=4,
                            extension="geojson")
    #MET 21/10/2020 Ajout d'un export medias
    elif export_format == "medias":
        try:
            releve_repository_for_media = ReleveRepository(TRelevesOccurrence)
            q = releve_repository_for_media.get_filtered_query(info_role)

            parameters = request.args

            # Filters
            q = get_query_occtax_filters(parameters, TRelevesOccurrence, q)
            data = q.all()

            user = info_role
            user_cruved = get_or_fetch_user_cruved(session=session,
                                                   id_role=info_role.id_role,
                                                   module_code="OCCTAX")

            #on crée le dossier s'il n'existe pas
            dir_path = str(ROOT_DIR / "backend/static/medias/exports")
            if not os.path.exists(dir_path):
                os.makedirs(dir_path)
            #on le clean
            filemanager.delete_recursively(dir_path)
            featureCollection = []

            zip_path = dir_path + "/" + file_name + ".zip"
            zp_file = zipfile.ZipFile(zip_path, mode="w")
            for n in data:
                releve_cruved = n.get_releve_cruved(user, user_cruved)
                feature = n.get_geofeature(
                    relationships=('t_occurrences_occtax',
                                   'cor_counting_occtax', 'medias'))
                if 'properties' in feature:
                    if 't_occurrences_occtax' in feature['properties']:
                        for occurence in feature['properties'][
                                't_occurrences_occtax']:
                            for counting in occurence['cor_counting_occtax']:
                                if 'medias' in counting:
                                    for media in counting['medias']:
                                        if media['media_path'] is not None:
                                            file_path = str(
                                                ROOT_DIR / "backend/"
                                            ) + "/" + media['media_path']
                                            if os.path.exists(file_path):
                                                zp_file.write(
                                                    file_path,
                                                    os.path.basename(
                                                        file_path))
                                            #copyfile( file_path, dir_path + "/" + os.path.basename(file_path))
                                            #featureCollection.append(file_path)
            zp_file.close()
            return send_from_directory(dir_path,
                                       file_name + ".zip",
                                       as_attachment=True)
        except GeonatureApiError as e:
            message = str(e)
    else:
        try:
            filemanager.delete_recursively(str(ROOT_DIR /
                                               "backend/static/shapefiles"),
                                           excluded_files=[".gitkeep"])
            db_cols = [
                db_col for db_col in export_view.db_cols
                if db_col.key in export_columns
            ]
            dir_path = str(ROOT_DIR / "backend/static/shapefiles")

            export_view.as_shape(db_cols=db_cols,
                                 data=data,
                                 dir_path=dir_path,
                                 file_name=file_name)

            return send_from_directory(dir_path,
                                       file_name + ".zip",
                                       as_attachment=True)

        except GeonatureApiError as e:
            message = str(e)

        return render_template(
            "error.html",
            error=message,
            redirect=current_app.config["URL_APPLICATION"] + "/#/occtax",
        )
Exemplo n.º 27
0
def insertOrUpdateOneReleve(info_role):
    """
    Route utilisée depuis l'appli mobile => depreciée et non utilisée par l'appli web
    Post one Occtax data (Releve + Occurrence + Counting)

    .. :quickref: Occtax; Post one Occtax data (Releve + Occurrence + Counting)

    **Request JSON object:**

    .. sourcecode:: http

        {
        "geometry":
            {"type":"Point",
            "coordinates":[0.9008789062500001,47.14489748555398]},
            "properties":
                {
                "id_releve_occtax":null,"id_dataset":1,"id_digitiser":1,"date_min":"2019-05-09","date_max":"2019-05-09","hour_min":null,"hour_max":null,"altitude_min":null,"altitude_max":null,"meta_device_entry":"web","comment":null,"id_nomenclature_obs_technique":316,"observers":[1],"observers_txt":null,"id_nomenclature_grp_typ":132,
                "t_occurrences_occtax":[{
                    "id_releve_occtax":null,"id_occurrence_occtax":null,"id_nomenclature_obs_technique":41,"id_nomenclature_bio_condition":157,"id_nomenclature_bio_status":29,"id_nomenclature_naturalness":160,"id_nomenclature_exist_proof":81,"id_nomenclature_observation_status":88,"id_nomenclature_blurring":175,"id_nomenclature_source_status":75,"determiner":null,"id_nomenclature_determination_method":445,"cd_nom":67111,"nom_cite":"Ablette =  <i> Alburnus alburnus (Linnaeus, 1758)</i> - [ES - 67111]","meta_v_taxref":null,"sample_number_proof":null,"comment":null,
                "cor_counting_occtax":[{
                    "id_counting_occtax":null,"id_nomenclature_life_stage":1,"id_nomenclature_sex":171,"id_nomenclature_obj_count":146,"id_nomenclature_type_count":94,"id_occurrence_occtax":null,"count_min":1,"count_max":1
                    }]
                }]
            }
        }

    :returns: GeoJson<TRelevesOccurrence>
    """

    releveRepository = ReleveRepository(TRelevesOccurrence)
    data = dict(request.get_json())
    occurrences_occtax = None
    if "t_occurrences_occtax" in data["properties"]:
        occurrences_occtax = data["properties"]["t_occurrences_occtax"]
        data["properties"].pop("t_occurrences_occtax")
    observersList = None
    if "observers" in data["properties"]:
        observersList = data["properties"]["observers"]
        data["properties"].pop("observers")

    # Test et suppression des propriétés inexistantes de TRelevesOccurrence
    attliste = [k for k in data["properties"]]
    for att in attliste:
        if not getattr(TRelevesOccurrence, att, False):
            data["properties"].pop(att)

    releve = TRelevesOccurrence(**data["properties"])
    shape = asShape(data["geometry"])
    two_dimension_geom = remove_third_dimension(shape)
    releve.geom_4326 = from_shape(two_dimension_geom, srid=4326)

    if observersList is not None:
        observers = DB.session.query(User).filter(User.id_role.in_(observersList)).all()
        for o in observers:
            releve.observers.append(o)

    for occ in occurrences_occtax:
        cor_counting_occtax = []
        if "cor_counting_occtax" in occ:
            cor_counting_occtax = occ["cor_counting_occtax"]
            occ.pop("cor_counting_occtax")

        # Test et suppression
        #   des propriétés inexistantes de TOccurrencesOccurrence
        attliste = [k for k in occ]
        for att in attliste:
            if not getattr(TOccurrencesOccurrence, att, False):
                occ.pop(att)
        # pop the id if None. otherwise DB.merge is not OK
        if "id_occurrence_occtax" in occ and occ["id_occurrence_occtax"] is None:
            occ.pop("id_occurrence_occtax")
        occtax = TOccurrencesOccurrence(**occ)

        for cnt in cor_counting_occtax:
            # Test et suppression
            # des propriétés inexistantes de CorCountingOccurrence
            attliste = [k for k in cnt]
            for att in attliste:
                if not getattr(CorCountingOccurrence, att, False):
                    cnt.pop(att)
            # pop the id if None. otherwise DB.merge is not OK
            if "id_counting_occtax" in cnt and cnt["id_counting_occtax"] is None:
                cnt.pop("id_counting_occtax")
            countingOccurrence = CorCountingOccurrence(**cnt)
            occtax.cor_counting_occtax.append(countingOccurrence)
        releve.t_occurrences_occtax.append(occtax)

    # if its a update
    if releve.id_releve_occtax:
        # get update right of the user
        user_cruved = get_or_fetch_user_cruved(
            session=session, id_role=info_role.id_role, module_code="OCCTAX"
        )
        update_code_filter = user_cruved["U"]
        # info_role.code_action = update_data_scope
        user = UserRigth(
            id_role=info_role.id_role,
            value_filter=update_code_filter,
            code_action="U",
            id_organisme=info_role.id_organisme,
        )
        releve = releveRepository.update(releve, user, shape)
    # if its a simple post
    else:
        # set id_digitiser
        releve.id_digitiser = info_role.id_role
        if info_role.value_filter in ("0", "1", "2"):
            # Check if user can add a releve in the current dataset
            allowed = releve.user_is_in_dataset_actor(info_role)
            if not allowed:
                raise InsufficientRightsError(
                    "User {} has no right in dataset {}".format(
                        info_role.id_role, releve.id_dataset
                    ),
                    403,
                )
        DB.session.add(releve)
    DB.session.commit()
    DB.session.flush()

    return releve.get_geofeature()
Exemplo n.º 28
0
def test(info_role):
    """
    Deprecated
    """

    file_name = datetime.datetime.now().strftime("%Y_%m_%d_%Hh%Mm%S")
    file_name = filemanager.removeDisallowedFilenameChars(file_name)

    releve_repository = ReleveRepository(TRelevesOccurrence)
    q = releve_repository.get_filtered_query(info_role)

    parameters = request.args

    # Filters
    q = get_query_occtax_filters(parameters, TRelevesOccurrence, q)
    data = q.all()

    user = info_role
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCTAX")

    #on crée le dossier s'il n'existe pas
    dir_path = str(ROOT_DIR / "backend/static/medias/exports")
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    #on le clean
    filemanager.delete_recursively(
        str(ROOT_DIR / "backend/static/medias/exports"))
    featureCollection = []
    zip_path = dir_path + "/" + file_name + ".zip"
    zp_file = zipfile.ZipFile(zip_path, mode="w")

    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature(relationships=('t_occurrences_occtax',
                                                  'cor_counting_occtax',
                                                  'medias'))
        if 'properties' in feature:
            if 't_occurrences_occtax' in feature['properties']:
                for occurence in feature['properties']['t_occurrences_occtax']:
                    for counting in occurence['cor_counting_occtax']:
                        if 'medias' in counting:
                            for media in counting['medias']:
                                if media['media_path'] is not None:
                                    file_path = str(
                                        ROOT_DIR /
                                        "backend/") + "/" + media['media_path']
                                    if os.path.exists(file_path):
                                        zp_file.write(
                                            file_path,
                                            os.path.basename(file_path))
                                        #copyfile( file_path, dir_path + "/" + os.path.basename(file_path))
                                    #featureCollection.append(file_path)

                                    #return {"items": media,}
        #    if feature['properties']['t_occurrences_occtax']:
        #        for occurence in feature['properties']['t_occurrences_occtax'] :
        #            featureCollection.append(occurence)
        #featureCollection.append(feature)
    zp_file.close()
    return send_from_directory(dir_path,
                               file_name + ".zip",
                               as_attachment=True)
Exemplo n.º 29
0
def patch_visit(idv, info_role):
    '''
    Mettre à jour une visite
    Si une donnée n'est pas présente dans les objets observer, cor_visit_taxons ou cor_visit_perurbations, elle sera supprimée de la base de données
    '''
    data = dict(request.get_json())

    try:
        existingVisit = TVisitSHT.query.filter_by(id_base_visit = idv).first()
        if(existingVisit == None):
            raise ValueError('This visit does not exist')
    except ValueError:
        resp = jsonify({"error": 'This visit does not exist'})
        resp.status_code = 404
        return resp

    existingVisit = existingVisit.as_dict(recursif=True)
    dateIsUp = data['visit_date_min'] != existingVisit['visit_date_min']

    if dateIsUp:
        check_year_visit(data['id_base_site'], data['visit_date_min'][0:4])


    tab_visit_taxons = []
    tab_observer = []
    tab_perturbation = []

    if 'cor_visit_taxons' in data:
        tab_visit_taxons = data.pop('cor_visit_taxons')
    if 'cor_visit_observer' in data:
        tab_observer = data.pop('cor_visit_observer')
    if 'cor_visit_perturbation' in data:
        tab_perturbation = data.pop('cor_visit_perturbation')

    visit = TVisitSHT(**data)

    DB.session.query(CorVisitPerturbation).filter_by(id_base_visit = idv).delete()
    for per in tab_perturbation:
        visitPer = CorVisitPerturbation(**per)
        visit.cor_visit_perturbation.append(visitPer)

    DB.session.query(CorVisitTaxon).filter_by(id_base_visit = idv).delete()
    for taxon in tab_visit_taxons:
        visitTaxons = CorVisitTaxon(**taxon)
        visit.cor_visit_taxons.append(visitTaxons)

    visit.observers = []
    observers = DB.session.query(User).filter(
        User.id_role.in_(tab_observer)
    ).all()
    for o in observers:
        visit.observers.append(o)

    user_cruved = get_or_fetch_user_cruved(
        session=session,
        id_role=info_role.id_role,
        module_code=blueprint.config['MODULE_CODE']
    )
    update_cruved = user_cruved['U']
    check_user_cruved_visit(info_role, visit, update_cruved)

    mergeVisit = DB.session.merge(visit)

    DB.session.commit()

    return mergeVisit.as_dict(recursif=True)
Exemplo n.º 30
0
def getViewReleveList(info_role):
    """
        Return the list of releves with all occurrences and counting

        .. :quickref: Occtax; Get releves used for frontend map-list


        :query int limit: Number max of results
        :query int offset: Page number to return
        :query int cd_nom: Filter with a taxon cd_nom (multiple)
        :query int observers: Filter with a id_role (multiple)
        :query date_up: Date min of a releve
        :query date_low: Date max of a releve
    

        :query date date_eq: Exact date of a releve
        :query str ordreby: Name of the field to execute order 
        :query order (asc|desc): Way of the order
        :query int organism: Id of the organism (multiple)
        :query any name_of_columns: filter on any columns of the table
            Filtre sur le champ NomChampTableVReleveList

        **Returns:**

        .. sourcecode:: http

            {
                'total': Number total of results,
                'total_filtered': Number of results after filteer ,
                'page': Page number,
                'limit': Limit,
                'items': data on GeoJson format
            }



    """
    releveRepository = ReleveRepository(VReleveList)
    q = releveRepository.get_filtered_query(info_role)

    params = request.args.to_dict()

    nbResultsWithoutFilter = VReleveList.query.count()

    limit = int(params.get("limit")) if params.get("limit") else 100
    page = int(params.get("offset")) if params.get("offset") else 0

    q = get_query_occtax_filters(request.args, VReleveList, q)

    # order by date
    q = q.order_by(VReleveList.date_min.desc())

    nbResults = q.count()

    data = q.limit(limit).offset(page * limit).all()

    user = info_role
    user_cruved = get_or_fetch_user_cruved(session=session,
                                           id_role=info_role.id_role,
                                           module_code="OCCTAX")
    featureCollection = []
    for n in data:
        releve_cruved = n.get_releve_cruved(user, user_cruved)
        feature = n.get_geofeature()
        feature["properties"]["rights"] = releve_cruved
        featureCollection.append(feature)
    return {
        "total": nbResultsWithoutFilter,
        "total_filtered": nbResults,
        "page": page,
        "limit": limit,
        "items": FeatureCollection(featureCollection),
    }