import datetime
import json
import numpy as np
import requests
import yaml
from json import dump
# from palangre_syc.json_construction import pretty_print
# from json_construction import pretty_print
# from api_traitement.apiFunctions import errorFilter
# def is_valid(token):
# """ Fonction qui teste si le token est encore valide
# Args:
# token (str): _description_
# """
# api_base = 'https://observe.ob7.ird.fr/observeweb/api/public/init/information?'
# # Constitution du lien url pour accéder à l'API et fermer la connexion
# api_url = api_base + 'authenticationToken=' + token
# response = requests.get(api_url)
# print("reponse of is valid function ", response.status_code)
# return response.status_code == 200
# def get_token():
# """ Fonction qui regarde s'il existe un token, s'il est valide, ou en créé un le cas échéant
# Returns:
# str: valid token
# """
# try:
# with open('token.yml', 'r') as file :
# data = yaml.safe_load(file)
# token = data['token']
# except:
# token = None
# if not is_valid(token):
# print("Token not valid", token)
# api_base = 'https://observe.ob7.ird.fr/observeweb/api/public/init/open?'
# api_modelVersion = 'config.modelVersion=9.2.3&'
# api_login = 'config.login=technicienweb&'
# api_password = 'config.password=wpF3NITE&'
# api_databaseName = 'config.databaseName=test&'
# api_referential = 'referentialLocale=FR'
# # Constitution du lien url pour accéder à l'API et donc générer un token
# api_url = api_base + api_modelVersion + api_login + api_password + api_databaseName + api_referential
# response = requests.get(api_url)
# # si la réponse est un succès, on extrait que le Token
# if response.status_code == 200:
# data_from_api = response.json()
# token = data_from_api['authenticationToken']
# else:
# token = None
# data = {'token' : token}
# with open('token.yml', 'w') as outfile:
# yaml.dump(data, outfile, default_flow_style=False)
# return token
# def get_referential_ll():
# """ Fonction qui récupère les données issues du référentiel de palangre
# Returns:
# json: referentiel palangre
# """
# api_base = 'https://observe.ob7.ird.fr/observeweb/api/public/referential/ll?'
# api_token = 'authenticationToken=' + get_token() +'&'
# api_infos = 'config.loadReferential=&config.recursive=&config.prettyPrint=true&config.serializeNulls=&referentialLocale='
# # Constitution du lien url pour accéder à l'API et donc générer un token
# api_url = api_base + api_token + api_infos
# response = requests.get(api_url, timeout=15)
# # si la réponse est un succès, on extrait que le Token
# if response.status_code == 200:
# data_ref_ll = response.json()
# with open('data_ll.json', 'w', encoding='utf-8') as f:
# dump(data_ref_ll, f, ensure_ascii=False, indent=4)
# else:
# data_ref_ll = None
# return data_ref_ll
# def get_referential_common():
# """ fonction qui récupères les données issues du référentiel commun
# Returns:
# json: referentiel commun
# """
# api_base = 'https://observe.ob7.ird.fr/observeweb/api/public/referential/common?'
# api_Token = 'authenticationToken=' + get_token() +'&'
# api_infos = 'config.loadReferential=&config.recursive=&config.prettyPrint=true&config.serializeNulls=&referentialLocale='
# # Constitution du lien url pour accéder à l'API et donc générer un token
# api_url = api_base + api_Token + api_infos
# response = requests.get(api_url, timeout=15)
# # si la réponse est un succès, on extrait que le Token
# if response.status_code == 200:
# data_ref_common = response.json()
# with open('data_common.json', 'w', encoding='utf-8') as f:
# dump(data_ref_common, f, ensure_ascii=False, indent=4)
# else:
# data_ref_common = None
# return data_ref_common
# def close(token):
# """
# Fonction qui fmer un token
# """
# api_base = 'https://observe.ob7.ird.fr/observeweb/api/public/init/close?'
# # Constitution du lien url pour accéder à l'API et fermer la connexion
# api_url = api_base + 'authenticationToken=' + token
# response = requests.get(api_url, timeout=15)
# print("reponse of close function ", response.status_code)
# return response.status_code
[docs]
def serialize(obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
if isinstance(obj, np.int64):
return int(obj)
return str(obj)
# raise TypeError("Type not serializable")
# def get_one(token, url_base, route, topiaid):
# """ Fonction qui interroge la base de données pour récupérer toutes les données relatives à un topiaid et une route
# Args:
# token (str): token
# url_base: chemin d'accès à la connexion ('https://observe.ob7.ird.fr/observeweb/api/public')
# route: chemin d'accès plus précis (par ex : '/data/ll/common/Trip/')
# topiaid: topiaid avec des '-' à la place des '#'
# Returns:
# file.json: informations relatives au topiaid fourni
# """
# headers = {
# 'authenticationToken': token,
# }
# params = {
# 'config.recursive' : 'true',
# }
# url = url_base + route + topiaid
# response = requests.get(url, headers=headers, params = params, timeout=15)
# # response.raise_for_status() # Lève une exception en cas d'erreur HTTP
# if response.status_code == 200 :
# with open(file = "media/temporary_files/previoustrip.json", mode = "w") as outfile:
# outfile.write(response.text)
# return response.content
# else:
# return None
# def get_trip(token, url_base, topiaid):
# headers = {
# 'authenticationToken': token,
# }
# params = {
# 'config.recursive' : 'true',
# }
# url = url_base + '/data/ll/common/Trip/' + topiaid
# response = requests.get(url, headers=headers, params = params, timeout=15)
# # response.raise_for_status() # Lève une exception en cas d'erreur HTTP
# if response.status_code == 200 :
# # print("response status == 200 so tempfile created")
# # with open(file = "previoustrip.json", mode = "w") as outfile:
# # outfile.write(response.text)
# return response.content
# else:
# return None
[docs]
def update_trip(token, data, url_base, topiaid):
"""Fonction qui met à jour un trip dans la base de données, donc supprime le trip existant pour insérer le nouveau data_json sous le même topiaid
Args:
token (str): token
data (json): json file qu'on envoie dans la base
url_base (str): 'https://observe.ob7.ird.fr/observeweb/api/public' base de connexion à l'api
topiaid du trip que l'on veut update (l'ancienne version sera supprimée)
Returns:
"""
data_json = json.dumps(data, default=serialize)
headers = {
"Content-Type": "application/json",
'authenticationToken': token,
}
url = url_base + '/data/ll/common/Trip/' + topiaid
print("PUT for updating the data")
# pretty_print(data)
response = requests.put(url, data=data_json, headers=headers, timeout=15)
print("Code resultat de la requete", response.status_code)
print("url envoyé : ", url)
if response.status_code == 200:
return ("Logbook inséré avec success", 1)
else:
with open(file = "media/temporary_files/errorupdate.json", mode = "w") as outfile:
outfile.write(response.text)
# def send_trip(token, data, url_base):
# """_summary_
# Args:
# token (str): token valide
# data (json): json file
# url_base (str): 'https://observe.ob7.ird.fr/observeweb/api/public' base de connexion à l'api
# Returns:
# text message: logbook bien inséré, ou bien un json d'erreur
# """
# data_json = json.dumps(data, default=serialize)
# headers = {
# "Content-Type": "application/json",
# 'authenticationToken': token
# }
# url = url_base + '/data/ll/common/Trip'
# print("Post")
# # pretty_print(data)
# res = requests.post(url, data=data_json, headers=headers, timeout=30)
# print("Code resultat de la requete", res.status_code)
# print("url envoyé : ", url)
# if res.status_code == 200:
# return ("Logbook inséré avec success", 1)
# else:
# with open(file = "media/temporary_files/error.json", mode = "w") as outfile:
# outfile.write(res.text)
[docs]
def trip_for_prog_vessel(token, url_base, vessel_id, programme_topiaid):
"""
Pour un navire et un programme donnée, renvoie le topiaid du dernier trip saisi
Args:
token
url_base: 'https://observe.ob7.ird.fr/observeweb/api/public'
vessel_id: topiaid du navire (avec les '-')
programme_topiaid: topiaid du programme choisi (avec les '-')
Returns:
trip topiaid
"""
# api_base = 'https://observe.ob7.ird.fr/observeweb/api/'
api_trip = '/data/ll/common/Trip?authenticationToken='
api_vessel_filter = '&filters.vessel_id='
api_programme_filter = '&filters.logbookProgram_id='
api_ordeer_filter = '&orders.endDate=DESC'
api_trip_request = url_base + api_trip + token + api_vessel_filter + vessel_id + api_programme_filter + programme_topiaid + api_ordeer_filter
response = requests.get(api_trip_request, timeout=15)
return response.content
# def table_trip(token, url_base, vessel_id, programme_topiaid):
# """
# Pour un navire et un programme donnée, renvoie le topiaid du dernier trip saisi
# Args:
# token
# url_base: 'https://observe.ob7.ird.fr/observeweb/api/public'
# vessel_id: topiaid du navire (avec les '-')
# programme_topiaid: topiaid du programme choisi (avec les '-')
# Returns:
# trip topiaid
# """
# # api_base = 'https://observe.ob7.ird.fr/observeweb/api/'
# api_trip = '/data/ll/common/Trip?authenticationToken='
# api_vessel_filter = '&filters.vessel_id='
# api_programme_filter = '&filters.logbookProgram_id='
# api_ordeer_filter = '&orders.endDate=DESC'
# api_trip_request = url_base + api_trip + token + api_vessel_filter + vessel_id + api_programme_filter + programme_topiaid + api_ordeer_filter
# response = requests.get(api_trip_request, timeout=15)
# return response.content
# def load_json_file(file_path):
# try:
# with open(file_path, 'r') as file:
# # a voir s'il faut ajouter '.decode('utf8')'
# data = json.load(file)
# return data
# except FileNotFoundError:
# print(f"File '{file_path}' not found.")
# return None
# except json.JSONDecodeError as e:
# print(f"Error decoding JSON file '{file_path}': {e}")
# return None