Commit 5ba50ad5 authored by Michael Nauge's avatar Michael Nauge
Browse files

Update nklAPI_Datas.py

ajout des fonction collection, status et le get iiif
parent 9071bd1b
......@@ -739,7 +739,7 @@ def delete_datas_metadatas(nklTarget, identifier, dictVals):
# on gère le cas où il n'y a pas de API_KEY ce qui posera problème au server
# mais il nous le fera savoir !
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL}
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL, "accept": "application/json", "Content-Type": "application/json"}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
......@@ -1008,6 +1008,397 @@ def delete_datas_rights(nklTarget, identifier, dictVals):
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
def get_datas_collections(nklTarget, identifier):
"""
Récupération de la liste des collections contenant la donnée
Parameters
nklTarget : OBJ
une instance d'un objet NklTarget permettant de choisir nakala_prod ou nakala_test
identifier : STR
un DATA identifier nakala.
Returns
-------
NklResponse : OBJ
une instance d'un objet NklResponse
- en cas de problème reseau ou de message d'erreur du serveur nakala
l'objet NklResponse.isSuccess=False et le détails de l'erreur en version textuel
sera dans NklResponse.message
- en cas de réussite de la requete
l'objet NklResponse.isSuccess=True et
les métadonnées reçu seront dans
NklResponse.dictVals : un dictionnaire contenant les metadatas obtenus depuis la reponse json du server
"""
url = nklTarget.API_URL+"/datas/"+identifier+"/collections"
print(url)
APIheaders = {}
# on gère le cas où il n'y a pas de API_KEY
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
try :
response = requests.get(url, headers=APIheaders)
# on récupère le code
nklR.code = response.status_code
# 200 le serveur a bien répondu
if response.status_code == 200:
nklR.isSuccess = True
nklR.message="La liste des collections"
# on converti l'objet json retournée en dictionnaire python
nklR.dictVals = json.loads(response.text)
# on retourne l'objet NklResponse maintenant entièrement rempli
return nklR
else:
dicError = json.loads(response.text)
nklR.message=dicError['message']
except requests.exceptions.RequestException as e:
nklR.code=-1
nklR.message=e
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
def post_datas_collections(nklTarget, identifier, listVals):
"""
Ajout d'une donnée dans un ensemble de collections
Parameters
----------
nklTarget : OBJ
une instance d'un objet NklTarget permettant de choisir nakala_prod ou nakala_test
identifier : STR
un DATA identifier nakala.
listVals : list
Liste des identifiants des collections à associer à la donnée
ex: [
"10.34847/nkl.12345678",
"10.34847/nkl.fedcba98"
]
Returns
-------
NklResponse : OBJ
une instance d'un objet NklResponse
- en cas de problème reseau ou de message d'erreur du serveur nakala
l'objet NklResponse.isSuccess=False et le détails de l'erreur en version textuel
sera dans NklResponse.message
- en cas de réussite de la requete
l'objet NklResponse.isSuccess=True et
les métadonnées reçu seront dans
NklResponse.dictVals
"""
url = nklTarget.API_URL+"/datas/"+identifier+"/collections"
APIheaders = {}
# on gère le cas où il n'y a pas de API_KEY ce qui posera problème au server
# mais il nous le fera savoir !
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
try :
response = requests.post(url, data =json.dumps(listVals), headers=APIheaders)
# on récupère le code
nklR.code = response.status_code
# 201 le serveur a bien répondu
if response.status_code == 201:
nklR.isSuccess = True
nklR.message="La donnée a été ajoutée dans les collections"
# on converti l'objet json retournée en dictionnaire python
nklR.dictVals = json.loads(response.text)
return nklR
else:
dicError = json.loads(response.text)
nklR.message=dicError['message']
except requests.exceptions.RequestException as e:
nklR.code=-1
nklR.message=e
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
def delete_datas_collections(nklTarget, identifier, listVals):
"""
Suppression d'une donnée d'un ensemble de collections
L'utilisateur doit au minimum avoir les droits de lecture sur la donnée et être éditeur des différentes collections.
Ni la donnée, ni les collections ne sont supprimées de NAKALA.
Parameters
----------
nklTarget : OBJ
une instance d'un objet NklTarget permettant de choisir nakala_prod ou nakala_test
identifier : STR
un DATA identifier nakala.
listVals : LIST
Liste des identifiants des collections d'où la donnée doit être supprimée
ex: [
"10.34847/nkl.12345678",
"10.34847/nkl.fedcba98"
]
Returns
-------
NklResponse : OBJ
une instance d'un objet NklResponse
- en cas de problème reseau ou de message d'erreur du serveur nakala
l'objet NklResponse.isSuccess=False et le détails de l'erreur en version textuel
sera dans NklResponse.message
- en cas de réussite de la requete
l'objet NklResponse.isSuccess=True et
les métadonnées reçu seront dans
NklResponse.dictVals : un dictionnaire contenant les metadatas obtenus depuis la reponse json du server
ex: {
"id": "b55e770c-849b-11ea-87ea-0242ac1b0003",
"role": "ROLE_READER"
}
"""
url = nklTarget.API_URL+"/datas/"+identifier+"/collections"
APIheaders = {}
# on gère le cas où il n'y a pas de API_KEY ce qui posera problème au server
# mais il nous le fera savoir !
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL, "accept": "application/json", "Content-Type": "application/json"}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
try :
response = requests.delete(url, data =json.dumps(listVals), headers=APIheaders)
# on récupère le code
nklR.code = response.status_code
# 200 le serveur a bien répondu
if response.status_code == 200:
nklR.isSuccess = True
nklR.message="La donnée a été supprimé des collections"
# on converti l'objet json retournée en dictionnaire python
nklR.dictVals = json.loads(response.text)
return nklR
else:
dicError = json.loads(response.text)
nklR.message=dicError['message']
except requests.exceptions.RequestException as e:
nklR.code=-1
nklR.message=e
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
def get_datas_status(nklTarget, identifier):
"""
Récupération du statut d'une donnée
Retourne le statut de la donnée. Le statut peut être:
pending : donnée déposée mais pas encore en ligne
published : donnée publiée
deleted : donnée supprimée
old : ancienne version d'une donnée publiée
Parameters
nklTarget : OBJ
une instance d'un objet NklTarget permettant de choisir nakala_prod ou nakala_test
identifier : STR
un DATA identifier nakala.
Returns
-------
NklResponse : OBJ
une instance d'un objet NklResponse
- en cas de problème reseau ou de message d'erreur du serveur nakala
l'objet NklResponse.isSuccess=False et le détails de l'erreur en version textuel
sera dans NklResponse.message
- en cas de réussite de la requete
l'objet NklResponse.isSuccess=True et
les métadonnées reçu seront dans
NklResponse.dictVals : un dictionnaire contenant les metadatas obtenus depuis la reponse json du server
Attention en cas de réussite dictVals n'est pas un dictionnaire mais simplement une string contrairement à beaucoup d'autres réponses
"""
url = nklTarget.API_URL+"/datas/"+identifier+"/status"
print(url)
APIheaders = {}
# on gère le cas où il n'y a pas de API_KEY
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
try :
response = requests.get(url, headers=APIheaders)
# on récupère le code
nklR.code = response.status_code
# 200 le serveur a bien répondu
if response.status_code == 200:
nklR.isSuccess = True
nklR.message="Statut de la donnée"
# on converti l'objet json retournée en dictionnaire python
nklR.dictVals = json.loads(response.text)
# on retourne l'objet NklResponse maintenant entièrement rempli
return nklR
else:
dicError = json.loads(response.text)
nklR.message=dicError['message']
except requests.exceptions.RequestException as e:
nklR.code=-1
nklR.message=e
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
def put_datas_status(nklTarget, identifier):
"""
Publication d'une donnée
Permet de publier une donnée déposée (non encore publique)
Attention cette opération n'est pas réversible
Parameters
nklTarget : OBJ
une instance d'un objet NklTarget permettant de choisir nakala_prod ou nakala_test
identifier : STR
un DATA identifier nakala
Returns
-------
NklResponse : OBJ
une instance d'un objet NklResponse
- en cas de problème reseau ou de message d'erreur du serveur nakala
l'objet NklResponse.isSuccess=False et le détails de l'erreur en version textuel
sera dans NklResponse.message
- en cas de réussite de la requete
l'objet NklResponse.isSuccess=True et
les métadonnées reçu seront dans
NklResponse.dictVals : un dictionnaire contenant les metadatas obtenus depuis la reponse json du server
"""
url = nklTarget.API_URL+"/datas/"+identifier+"/status/published"
APIheaders = {}
# on gère le cas où la data est public
# et qu'il n'y a donc pas besoin de API_KEY
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
try :
response = requests.put(url, headers=APIheaders)
# on récupère le code
nklR.code = response.status_code
# 204 le serveur a bien appliqué la modificatin
if response.status_code == 204:
nklR.isSuccess = True
nklR.message="Status changé"
# cas de réussite il n'y a rien dans response.txt
#donc on laisse dictVals vide
#nklR.dictVals = json.loads(response.text)
# on retourne l'objet NklResponse maintenant entièrement rempli
return nklR
else:
dicError = json.loads(response.text)
nklR.message=dicError['message']
except requests.exceptions.RequestException as e:
nklR.code=-1
nklR.message=e
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
def get_datas_uploads(nklTarget):
"""
Les fichiers déposés restent dans un espace temporaire le temps qu'ils soient associés à une donnée de Nakala ou soient automatiquement supprimés (toutes les 24 heures)
......@@ -1223,4 +1614,83 @@ def delete_datas_uploads(nklTarget, fileIdentifier):
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
\ No newline at end of file
def get_iiif_infoJson(nklTarget, identifier, fileIdentifier):
"""
IIIF Image API - Information sur l'image "fileIdentifier" de la donnée "identifier"
Parameters
nklTarget : OBJ
une instance d'un objet NklTarget permettant de choisir nakala_prod ou nakala_test
identifier : STR
un DATA identifier nakala
fileIdentifier : STR
un SHA1 file identifier de la data.
Returns
-------
NklResponse : OBJ
une instance d'un objet NklResponse
- en cas de problème reseau ou de message d'erreur du serveur nakala
l'objet NklResponse.isSuccess=False et le détails de l'erreur en version textuel
sera dans NklResponse.message
- en cas de réussite de la requete
l'objet NklResponse.isSuccess=True et
les métadonnées reçu seront dans
NklResponse.dictVals : un dictionnaire contenant les metadatas obtenus depuis la reponse json du server
"""
url = nklTarget.API_URL+"/iiif/"+identifier+"/"+fileIdentifier+"/info.json"
APIheaders = {}
# on gère le cas où il n'y a pas de API_KEY
# ce qui va poser problème pour le serveur nakala
if nklTarget.apiKey_isEmpty()==False:
APIheaders = {"X-API-KEY": nklTarget.API_KEY_NKL}
# création d'une instance d'un objet NklResponse à retourner
nklR = NklResponse()
try :
response = requests.get(url, headers=APIheaders)
# on récupère le code
nklR.code = response.status_code
# 200 le serveur a bien répondu
if response.status_code == 200:
nklR.isSuccess = True
nklR.message="Les informations iiif de l'image"
try:
# on converti l'objet json retournée en dictionnaire python
nklR.dictVals = json.loads(response.text)
except:
pass
# on retourne l'objet NklResponse maintenant entièrement rempli
return nklR
else:
try:
dicError = json.loads(response.text)
nklR.message=dicError['message']
except:
pass
except requests.exceptions.RequestException as e:
nklR.code=-1
nklR.message=e
#on retourne l'objet NklResponse avec erreur (de nakala ou de connexion reseau)
return nklR
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment