diff --git a/models/api_alfresco.py b/models/api_alfresco.py index e1d82ee9a22aedef57d62cba50b348b0263c72c5..0c45cc5f842dac07b07f1f0d57e963b9ee04de56 100644 --- a/models/api_alfresco.py +++ b/models/api_alfresco.py @@ -18,23 +18,17 @@ _logger = logging.getLogger(__name__) class CgscopAlfresco(models.AbstractModel): - """Appelle l'API alfresco et implémente les fonctions suivantes : - - alfresco_list_docs : liste les documents - """ - _name = "cgscop.alfresco" _description = "Connecteur Alfresco" 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 call_type: post/get :param json: data to post :param files: byte to upload :param data: data to post - @return response au format JSON """ _logger.info("Calling %s" % url) @@ -81,6 +75,7 @@ class CgscopAlfresco(models.AbstractModel): timeout=15, ) except Exception as err: + print(err) _logger.warning( "Erreur de connexion. URL: %s", err.__str__(), @@ -103,17 +98,20 @@ class CgscopAlfresco(models.AbstractModel): return response - # Get Methods + # ------------------------------------------------------ + # API GET Methods + # ------------------------------------------------------ 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 return self.alfresco_get_by_url(url=url, call_type="get").json() 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 """ url = "/alfresco/s/api/properties?nsp=crm&n=document" @@ -126,15 +124,17 @@ class CgscopAlfresco(models.AbstractModel): } 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 """ url = "/alfresco/s/document/" + nodeRef return self.alfresco_get_by_url(url=url, call_type="get").json() def alfresco_get_ticket(self, username): - """Liste les documents pour un organisme (raison sociale) - :param username: username de l'utilisateur + """ + Récupère le ticket de session de l'utilisateur + :param username : username de l'utilisateur """ url = "/alfresco/s/authentifier-entantque?compte=" + username result = self.alfresco_get_by_url(url=url, call_type="get") @@ -142,12 +142,13 @@ class CgscopAlfresco(models.AbstractModel): root = tree.getroot() return root[0].text - # Post Methods + # ------------------------------------------------------ + # API POST Methods + # ------------------------------------------------------ def alfresco_create_organism(self, partner): - """Création d'un dossier Organisme - + """ + Création d'un dossier Organisme :param partner: objet Odoo créé - @return: id Alfresco (nodeRef) du dossier """ url = "/alfresco/s/erp/createdossierorganisme" @@ -163,11 +164,10 @@ class CgscopAlfresco(models.AbstractModel): ) def alfresco_update_organism(self, partner): - """Mise à jour d'un dossier Organisme - - :param partner: objet Odoo créé - - @return: id Alfresco (nodeRef) du dossier + """ + Mise à jour d'un dossier Organisme + :param partner : objet Odoo créé + @return : id Alfresco (nodeRef) du dossier """ url = "/alfresco/s/erp/updatedossierorganisme/" + partner.id_alfresco json = { @@ -181,31 +181,54 @@ class CgscopAlfresco(models.AbstractModel): self.alfresco_get_by_url(url=url, call_type="post", json=json).json() ) - # Delete Methods - def alfresco_remove(self, nodeRef): - """Supprime un document d'Alfresco - :param id_doc: id du document Alfresco + def push_alfresco_file_api(self, file, name, metadata=None, folder=None): """ - url = "/alfresco/s/document/" + nodeRef - return self.alfresco_get_by_url(url=url, call_type="delete").json() + Ajoute un fichier sur la GED Alfresco + """ + if not folder: + raise exceptions.ValidationError( + _("Le dossier parent n'existe pas ou n'est pas renseigné !") + ) - # Others - def get_allowed_values(self, list_type, value): - """Fonction qui itère dans l'objet retourné""" - list_selected = list(filter(lambda i: i["name"] == value, list_type)) - return ( - list_selected[0] - .get("constraints")[0] - .get("parameters")[0] - .get("allowedValues") + url = ( + "/alfresco/api/-default-/public/alfresco/versions/1/nodes/%s/children?majorVersion=true" + % folder ) + _logger.info("Chargement document Alfresco : %s" % name) - def get_nodeRef(self, result): - """Renvoie la référence Alfresco d'un JSON contenant au premier - niveau la clé "nodeRef" puis supprime le chemin du workspace + content_type = "multipart/form-data" + + 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): """ Ajoute un fichier sur la GED Alfresco @@ -257,29 +280,24 @@ class CgscopAlfresco(models.AbstractModel): except Exception as 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 - @return: fonction get_partner_files() de res.partner + Fonction qui itère dans l'objet retourné """ - if not folder: - raise exceptions.ValidationError( - _("Le dossier parent n'existe pas ou n'est pas renseigné !") - ) - - url = ( - "/alfresco/api/-default-/public/alfresco/versions/1/nodes/%s/children?majorVersion=true" - % 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) - - content_type = "multipart/form-data" - 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 get_nodeRef(self, result): + """ + Renvoie la référence Alfresco d'un JSON contenant au premier + niveau la clé "nodeRef" puis supprime le chemin du workspace + """ + return result.get("nodeRef", "").replace("workspace://SpacesStore/", "")