Skip to content
Extraits de code Groupes Projets
Valider 49a7893d rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[add] search API function

parent 3972d41a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -18,23 +18,17 @@ _logger = logging.getLogger(__name__) ...@@ -18,23 +18,17 @@ _logger = logging.getLogger(__name__)
class CgscopAlfresco(models.AbstractModel): class CgscopAlfresco(models.AbstractModel):
"""Appelle l'API alfresco et implémente les fonctions suivantes :
alfresco_list_docs : liste les documents
"""
_name = "cgscop.alfresco" _name = "cgscop.alfresco"
_description = "Connecteur Alfresco" _description = "Connecteur Alfresco"
def alfresco_get_by_url(self, url, call_type, json=None, files=None): def alfresco_get_by_url(self, url, call_type, json=None, files=None):
"""Création de la requête à Alfresco """
Création de la requête à Alfresco
:param url: action API Alfresco :param url: action API Alfresco
:param call_type: post/get :param call_type: post/get
:param json: data to post :param json: data to post
:param files: byte to upload :param files: byte to upload
:param data: data to post :param data: data to post
@return response au format JSON @return response au format JSON
""" """
_logger.info("Calling %s" % url) _logger.info("Calling %s" % url)
...@@ -81,6 +75,7 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -81,6 +75,7 @@ class CgscopAlfresco(models.AbstractModel):
timeout=15, timeout=15,
) )
except Exception as err: except Exception as err:
print(err)
_logger.warning( _logger.warning(
"Erreur de connexion. URL: %s", "Erreur de connexion. URL: %s",
err.__str__(), err.__str__(),
...@@ -103,17 +98,20 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -103,17 +98,20 @@ class CgscopAlfresco(models.AbstractModel):
return response return response
# Get Methods # ------------------------------------------------------
# API GET Methods
# ------------------------------------------------------
def alfresco_list_docs(self, node_id): def alfresco_list_docs(self, node_id):
"""Liste les documents pour un organisme (raison sociale) """
:param name: raison sociale de la structure Liste les documents pour un organisme (raison sociale)
:param node_id: noderef du dossier
""" """
url = "/alfresco/s/erp/listedocuments?nodeId=" + node_id url = "/alfresco/s/erp/listedocuments?nodeId=" + node_id
return self.alfresco_get_by_url(url=url, call_type="get").json() return self.alfresco_get_by_url(url=url, call_type="get").json()
def alfresco_list_type(self): def alfresco_list_type(self):
"""Liste le valeurs du formulaire de dépôt d'un nouveau document """
Liste les valeurs du formulaire de dépôt d'un nouveau document
@return: dict des valeurs possibles pour période, validité, type @return: dict des valeurs possibles pour période, validité, type
""" """
url = "/alfresco/s/api/properties?nsp=crm&n=document" url = "/alfresco/s/api/properties?nsp=crm&n=document"
...@@ -126,14 +124,16 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -126,14 +124,16 @@ class CgscopAlfresco(models.AbstractModel):
} }
def alfresco_get_doc(self, nodeRef): def alfresco_get_doc(self, nodeRef):
"""Retourne le contenu d'un document en base64 """
Retourne le contenu d'un document en base64
:param nodeRef: id Alfresco :param nodeRef: id Alfresco
""" """
url = "/alfresco/s/document/" + nodeRef url = "/alfresco/s/document/" + nodeRef
return self.alfresco_get_by_url(url=url, call_type="get").json() return self.alfresco_get_by_url(url=url, call_type="get").json()
def alfresco_get_ticket(self, username): def alfresco_get_ticket(self, username):
"""Liste les documents pour un organisme (raison sociale) """
Récupère le ticket de session de l'utilisateur
:param username : username de l'utilisateur :param username : username de l'utilisateur
""" """
url = "/alfresco/s/authentifier-entantque?compte=" + username url = "/alfresco/s/authentifier-entantque?compte=" + username
...@@ -142,12 +142,13 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -142,12 +142,13 @@ class CgscopAlfresco(models.AbstractModel):
root = tree.getroot() root = tree.getroot()
return root[0].text return root[0].text
# Post Methods # ------------------------------------------------------
# API POST Methods
# ------------------------------------------------------
def alfresco_create_organism(self, partner): def alfresco_create_organism(self, partner):
"""Création d'un dossier Organisme """
Création d'un dossier Organisme
:param partner: objet Odoo créé :param partner: objet Odoo créé
@return: id Alfresco (nodeRef) du dossier @return: id Alfresco (nodeRef) du dossier
""" """
url = "/alfresco/s/erp/createdossierorganisme" url = "/alfresco/s/erp/createdossierorganisme"
...@@ -163,10 +164,9 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -163,10 +164,9 @@ class CgscopAlfresco(models.AbstractModel):
) )
def alfresco_update_organism(self, partner): def alfresco_update_organism(self, partner):
"""Mise à jour d'un dossier Organisme """
Mise à jour d'un dossier Organisme
:param partner : objet Odoo créé :param partner : objet Odoo créé
@return : id Alfresco (nodeRef) du dossier @return : id Alfresco (nodeRef) du dossier
""" """
url = "/alfresco/s/erp/updatedossierorganisme/" + partner.id_alfresco url = "/alfresco/s/erp/updatedossierorganisme/" + partner.id_alfresco
...@@ -181,31 +181,54 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -181,31 +181,54 @@ class CgscopAlfresco(models.AbstractModel):
self.alfresco_get_by_url(url=url, call_type="post", json=json).json() self.alfresco_get_by_url(url=url, call_type="post", json=json).json()
) )
# Delete Methods def push_alfresco_file_api(self, file, name, metadata=None, folder=None):
def alfresco_remove(self, nodeRef):
"""Supprime un document d'Alfresco
:param id_doc: id du document Alfresco
""" """
url = "/alfresco/s/document/" + nodeRef Ajoute un fichier sur la GED Alfresco
return self.alfresco_get_by_url(url=url, call_type="delete").json() """
if not folder:
raise exceptions.ValidationError(
_("Le dossier parent n'existe pas ou n'est pas renseigné !")
)
# Others url = (
def get_allowed_values(self, list_type, value): "/alfresco/api/-default-/public/alfresco/versions/1/nodes/%s/children?majorVersion=true"
"""Fonction qui itère dans l'objet retourné""" % folder
list_selected = list(filter(lambda i: i["name"] == value, list_type))
return (
list_selected[0]
.get("constraints")[0]
.get("parameters")[0]
.get("allowedValues")
) )
_logger.info("Chargement document Alfresco : %s" % name)
def get_nodeRef(self, result): content_type = "multipart/form-data"
"""Renvoie la référence Alfresco d'un JSON contenant au premier
niveau la clé "nodeRef" puis supprime le chemin du workspace params = {
"name": name,
"nodeType": "cmis:document",
"overwrite": True,
"properties": metadata,
}
files = {"filedata": (name, file, content_type, params)}
return self.alfresco_get_by_url(url=url, call_type="post", files=files).json()
def alfresco_query_search(self, query=None):
""" """
return result.get("nodeRef", "").replace("workspace://SpacesStore/", "") Appelle l'API Search Alfresco
:params query: dictionnaire de la recherche souhaitée
"""
url = "/alfresco/api/-default-/public/search/versions/1/search"
return self.alfresco_get_by_url(url=url, call_type="post", json=query).json()
# ------------------------------------------------------
# API DELETE Methods
# ------------------------------------------------------
def alfresco_remove(self, nodeRef):
"""
Supprime un document d'Alfresco
:param nodeRef : nodeRef du document Alfresco
"""
url = "/alfresco/s/document/" + nodeRef
return self.alfresco_get_by_url(url=url, call_type="delete").json()
# ------------------------------------------------------
# CMIS Methods
# ------------------------------------------------------
def push_alfresco_file(self, file, name, metadata=None, backend=None, folder=None): def push_alfresco_file(self, file, name, metadata=None, backend=None, folder=None):
""" """
Ajoute un fichier sur la GED Alfresco Ajoute un fichier sur la GED Alfresco
...@@ -257,29 +280,24 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -257,29 +280,24 @@ class CgscopAlfresco(models.AbstractModel):
except Exception as e: except Exception as e:
raise exceptions.ValidationError(e) raise exceptions.ValidationError(e)
def push_alfresco_file_api(self, file, name, metadata=None, folder=None): # ------------------------------------------------------
# Common function
# ------------------------------------------------------
def get_allowed_values(self, list_type, value):
""" """
Ajoute un fichier sur la GED Alfresco Fonction qui itère dans l'objet retourné
@return: fonction get_partner_files() de res.partner
""" """
if not folder: list_selected = list(filter(lambda i: i["name"] == value, list_type))
raise exceptions.ValidationError( return (
_("Le dossier parent n'existe pas ou n'est pas renseigné !") list_selected[0]
) .get("constraints")[0]
.get("parameters")[0]
url = ( .get("allowedValues")
"/alfresco/api/-default-/public/alfresco/versions/1/nodes/%s/children?majorVersion=true"
% folder
) )
_logger.info("Chargement document Alfresco : %s" % name)
content_type = "multipart/form-data"
params = { def get_nodeRef(self, result):
"name": name, """
"nodeType": "cmis:document", Renvoie la référence Alfresco d'un JSON contenant au premier
"overwrite": True, niveau la clé "nodeRef" puis supprime le chemin du workspace
"properties": metadata, """
} return result.get("nodeRef", "").replace("workspace://SpacesStore/", "")
files = {"filedata": (name, file, content_type, params)}
return self.alfresco_get_by_url(url=url, call_type="post", files=files).json()
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter