Development #12876
Connecteur CMIS pour déposer un fichier
0%
Description
Pour déposer des fichiers ou aller en chercher, depuis un workflows wcs.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
Je n'avais pas saisi qu'il fallait aussi en chercher.
Du coup le endpoint renvoit dans le json dans 'text' le contenu en base64?
J'ai fait le endpoint pour déposer mais je n'ai pas encore les tests. Est ce que je mets déjà un patch ou j'attends de faire aussi la récupération?
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Sujet changé de Connecteur CMIS à Connecteur CMIS pour déposer un fichier
Limitons ce ticket au dépôt.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Voilà, y'a le dépot pour l'instant.
Du coup pour tester il faut installer Alfresco, la version community https://www.alfresco.com/alfresco-community-download (la version Linux bien entendu :)).
Ensuite il faut suivre http://docs.alfresco.com/community/tasks/simpleinstall-community-lin-text.html (grosso modo lancer un bin et suivre les instructions, c'est tout graphique).
Le numéro de version est bon normalement (5.x).
C'est lancé, sinon pour lancer ensuite il suffit de faire alfresco.sh start.
Pour les tests, le point d'entrée cmis de l'instance est 'http://localhost:8080/alfresco/cmisatom' (adapter en fonction de si vous avez changé les confs). Paramètre cmis_endpoint du connecteur.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Lié à Development #12881: Connecteur CMIS pour récupérer un fichier ajouté
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Petite erreur corrigée
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier
0001-cmis-add-cmis-connector-to-upload-file-12876.patchsupprimé
Mis à jour par Frédéric Péters il y a plus de 7 ans
Le fichier views.py vide peut être laissé de côté.
cmis_client
plutôt que cmisClient
.
username
plutôt que login
.
typo dans plateform
.
Dans cmislib le content type peut être laissé à None, rendre celui-ci optionnel dans le connecteur ?
Retourner quelque chose pour dire que ça a marché ou que ça a échoué (mauvais json en entrée, chemin non existant, etc.)
Idéalement au moins un test.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
Voilà j'ai fait les modifs et comme j'ai mit dans l'autre ticket j'ai tout regroupé ici (depot et retrait de fichier)
Je mets pour l'instant sans les tests comme ça s'il y a un retour avant sur la forme..
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Bon j'ai réouvert l'autre ticket et j'ai refais en sorte que ce commit ne soit que le dépot de fichier.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier
0001-cmis-add-cmis-connector-to-upload-file-12876.patchsupprimé
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
Mis à jour par Thomas Noël il y a plus de 7 ans
Une seule migration nécessaire (initial). Eviter aussi de mettre trop de choses à l'intérieur d'un try/except. Courage :)
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Voilà après les quelques remarques ! patch mis à jour
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier
0001-cmis-add-cmis-connector-to-upload-file-12876.patchsupprimé
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Voilà avec les tests
Mis à jour par Frédéric Péters il y a plus de 7 ans
Manque un entête avec la licence dans les fichiers + une dépendance à python-cmslib dans debian/control.
body = ast.literal_eval(response.body)
Ici aussi, json.load.
Aussi il faudrait limiter l'accès à cette API (perm="can_upload_file", genre).
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
J'ai fait les modifs.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Mon mauvais (my bad) j'avais oublié la dépendance dans debian/control.
Mis à jour par Benjamin Dauvergne il y a plus de 7 ans
De mon point de vue ça manque de contrôle des entrées ici:
data = json.loads(request.body) title = data['filename'] path = data['path'].encode('utf-8') content = base64.b64decode(data['content']) content_type = data['contentType']
Si le contenu n'est pas du JSON ou si une des clé manque ou si la clé content n'est pas du base64.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Hop. Avec les perms, contrôles et modifications des tests en conséquence du coup.
Mis à jour par Thomas Noël il y a plus de 7 ans
- dans settings, ne pas retirer le commentaire "# backoffice templates and static" avant gadjo
- il faudrait renvoyer du 400 quand les données en entrée sont mauvaises
- les help_text sont inutiles
- je ne suis pas très fan des « except Exception as e: » en général, qui vont empecher de remonter des alertes "bas niveau" quand il y aura un vrai problème
- la fonction cmis_connection() a un nom un peu bizarre, parce qu'elle revoie en fait un repository (et pas une "connection")
- dans les tests tu pourrais ajouter quelques plantages que tu as prévus dans le code, en envoyant des mauvais fake_file
- il ne faut pas construire l'url avec reverse, mais en dur, comme ça si on la change un jour par mégarde, le test plantera (regression)
Par ailleurs est-on sûr de toujours vouloir envoyer dans defaultRepository et pas ailleurs (bon, c'est un autre sujet, je ne connais pas bien le cadre d'utilisation de ce connecteur) ?
Mis à jour par Benjamin Dauvergne il y a plus de 7 ans
Thomas Noël a écrit :
Je dirais que:
- il faudrait renvoyer du 400 quand les données en entrée sont mauvaises
non pas de 400, que du 'err': x
on a dit, on laisse les erreurs HTTPs à Django.
Mis à jour par Thomas Noël il y a plus de 7 ans
Arf : « il faudrait renvoyer du 400 quand les données en entrée sont mauvaises » en fait non, je me trompe encore, excuses.
Ce sont nginx ou les middleware de Django qui renvoient les erreurs HTTP : le code de nos connecteurs doit toujours renvoyer 200, mais avec une err (raise ApiError(message)
) le cas échéant.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Voilà ! Enfin.
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Oublié la remarque sur le commentaire du setting pour gadjo.
Mis à jour par Frédéric Péters il y a plus de 7 ans
A-t-on vraiment besoin de urls.py/views.py ?
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
Ça ne permet pas l'affichage du détails?
Ou c'est géré en amont si tu as un whatever-details.html ?
Mis à jour par Frédéric Péters il y a plus de 7 ans
C'est géré via :
url(r'^(?P<connector>[\w,-]+)/(?P<slug>[\w,-]+)/$', GenericConnectorView.as_view(), name='view-connector'),
Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Okay. Du coup en effet les deux fichiers sont inutiles.
Mis à jour par Frédéric Péters il y a plus de 7 ans
Il faut ajouter ça à ton .gitconfig, comme ça quand tu regardes ton patch avec "git show" avant de l'envoyer, il y aura en rouge les espaces de fin de ligne, à supprimer.
[color] branch = auto diff = auto interactive = auto status = auto
La migration annonce une dépendance sur 0003_endpointcheckping
qui n'existe pas encore.
Mis à jour par Frédéric Péters il y a plus de 7 ans
Il faut aussi ajouter PASSERELLE_APP_CMIS_ENABLED = True
au settings.py.
Mis à jour par Frédéric Péters il y a plus de 7 ans
Il faut modifier le _detail.html pour définir un @{% block description %}, pour que le mot de passe n'apparaisse pas. Alternativement, pouvoir marquer ces champs d'une manière ou d'une autre et faire respecter ça à service_view.html.
Mis à jour par Frédéric Péters il y a environ 7 ans
Prendre en compte les derniers commentaires, et les modifs récentes dans passerelle.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Echéance changé de 07 avril 2017 à 26 mai 2017
Échéance discutée par jabber et posée à fin mai.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
instance publique d'Alfresco pour test CMIS: https://www.alfresco.com/cmis
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
Voilà j'ai remis le patch avec un bémol sur mes tests.
J'ai galéré à retrouver le endpoint pour cmis sur alfresco, d'abord sur l'instance publique puis ensuite en local (superbe doc). La lib python cmislib se connecte à partir d'une certaine url (pour l'instant je n'ai vu que des exemples pour alfresco mais bon). C'est plus ou moins une sorte de wsdl (cmisatom).
Mais ça fonctionne, j'ai créé un connecteur avec AccessRight, ApiUser et j'ai pu poser mon fichier.
Mais quand je lance les tests, j'ai un
E RuntimeError: Conflicting 'cmisconnector_users' models in application 'cmis': <class 'passerelle.apps.cmis.models.CmisConnector_users'> and <class 'cmis.models.CmisConnector_users'>et là j'avoue que je sèche sur pourquoi j'ai ce problème (que je n'avais pas avant). Je suis aller voir les changements sur BaseRessource et je ne comprends pas pourquoi cette erreur survient. L'héritage du many-to-many sur ApiUser semble chier à un moment. Je veux bien un conseil (je rappelle que c'est uniquement quand je lance les tests).
Pour tester sur la plateforme en ligne, il faut déclarer le connecteur comme ceci:
CmisConnector.objects.create(cmis_endpoint='https://cmis.alfresco.com/alfresco/cmisatom', username='admin', password='admin')
Dans le payload qui doit ressembler à ça :
fake_file = { 'filename': 'test.txt', 'path': '/Partagé', 'content': base64.b64encode('fake file content.'), 'contentType': 'text/plain' }
Si le path
est à '', j'ai fait en sorte que ça prenne le Folder racine du dépot, donc ça mettra le fichier dedans (la valeur Partagé c'est sur mon local, j'ai un dossier Partagé). Comme on a pas accès au dossiers directement, c'est plus simple pour tester (je suis aller regarder avec cmis ce qu'il y avait sur le repo).
Je me demandais si du coup les tests je les faisais dessus, mais il faudrait supprimer le fichier à chaque fois (et je ne sais pas si cmislib le permet, je vais regarder) et évidemment, si la plateforme disparaît ou tombe, tous les tests foirent. Mais bon
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Avec le patch pardon
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Il y a eu un couac sur mon git désolé je remets le patch.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier
0001-cmis-add-cmis-connector-to-upload-file-12876.patchsupprimé
Mis à jour par Frédéric Péters il y a presque 7 ans
E RuntimeError: Conflicting 'cmisconnector_users' models in application 'cmis': <class 'passerelle.apps.cmis.models.CmisConnector_users'> and <class 'cmis.models.CmisConnector_users'>
C'est parce que d'un côté tu as passerelle.apps.cmis et de l'autre juste cmis. Ma recommandation et d'utiliser passerelle.apps.cmis. partout.
Je me demandais si du coup les tests je les faisais dessus, mais il faudrait supprimer le fichier à chaque fois (et je ne sais pas si cmislib le permet, je vais regarder) et évidemment, si la plateforme disparaît ou tombe, tous les tests foirent. Mais bon
Les tests doivent fonctionner hors ligne, utiliser Mock.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Ok, j'en ai profité pour clean l'import des exceptions (plus court et virer l'import inutile de CmisLibException).
Mis à jour par Frédéric Péters il y a presque 7 ans
cmis_endpoint = models.CharField(max_length=250, verbose_name=_('CMIS endpoint'), help_text=_('URL of the CMIS endpoint'))
Pourquoi pas URLField ?
raise APIError('CmisError : Invalid JSON string sent.')
et les autres; plutôt faire une exception CMISError(APIError) que préfixer les messages avec CmisError. Cela évitera aussi un commentaire sur l'espace en trop devant les :.
repo_name = kwargs.get('repo', False)
Pourquoi "False" ?
if repo_name: for repo in cmis_client.getRepositories(): if repo_name == repo['repositoryName']: return cmis_client.getRepository(repo['repositoryId']) return cmis_client.defaultRepository
Le comportement quand on spécifié un repo_name et qu'il n'existe pas est mauvais : il ne faut pas (surtout silencieusement) retomber sur le dépôt par défaut.
{% block description %} {% endblock %}
Noter pourquoi on refuse d'afficher la description automatique. (parce qu'on ne veut pas afficher le mot de passe) Mais le vrai truc ce serait d'afficher la description, sans le mot de passe. Ça pourrait être fait en gardant le block description natif mais en ajoutant un get_description_fields dans le connecteur.
conn = CmisConnector.objects.create(cmis_endpoint='http://cmis_endpoint.com/cmis', username='admin',
Pour les tests, il faut utiliser example.{net,com,org}, pas inventer des domaines.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Ok pris en compte.
Pour les APIError c'était suite à une discussion sur les erreurs de passerelle, mais en regardant l'historique c'était surtout l'histoire de renvoyer tout le temps 200. Donc c'est changé.
Pour le repo name, j'ai passé ça en argument optionnel du payload (chaîne vide si non trouvée). Si le paramètre est présent et qu'on ne trouve pas de répo je renvoie bien une erreur.
Je considère que l'absence du paramètre repository_name ou une valeur à '' dans le payload revient à choisir le repo par défaut.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Erreur de typo dans le message d'erreur en cas de repository non trouvé.
Désolé pour le spam
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier
0001-cmis-add-cmis-connector-to-upload-file-12876.patchsupprimé
Mis à jour par Frédéric Péters il y a presque 7 ans
{% blocktrans %} The API currently doesn't support all parameters and is limited to the JSON format. {% endblocktrans %}
Me semble un copié/collé sans rapport.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
En effet. J'ai du coup enlevé le block endpoint dans le template.
Mis à jour par Benjamin Dauvergne il y a presque 7 ans
Juste parce que ça fait moche dans mon vim, c'est deux lignes avant un classe ou une fonction de top niveau (dans les tests) et une ligne avant une méthode, sauf en début de classe.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Ok, pris en compte.
Mis à jour par Frédéric Péters il y a presque 7 ans
Application de cmis: add cmis connector to upload file (#12876) .git/rebase-apply/patch:323: new blank line at EOF. + warning: 1 ligne a ajouté des erreurs d'espace.
Il manque dans cmisconnector_detail.html l'info pointant l'endpoint existant (url, méthode HTTP, description du json attendu, etc.).
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
C'est ajouté
Mis à jour par Benjamin Dauvergne il y a presque 7 ans
{% block endpoints %} <ul> <li> <h4>{% trans 'Upload file' %}</h4> {% url "generic-endpoint" connector="cmis" slug=object.slug endpoint="upload_file" as upload_file %} <p> <strong>POST</strong> <a href="{{upload_file}}">{{upload_file}}</a></p> <p> data_send = { 'filename': 'test.txt', 'path': '/a/path', 'content': 'ZmlsZSBjb250ZW50' (base64), 'contentType': 'text/plain' } </p> </li> </ul> {% endblock %}
Il faut utiliser le tag "pre" et pas "p" sinon tu on ne verra pas la formatage de ton exemple de JSON.
Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans
- Fichier 0001-cmis-add-cmis-connector-to-upload-file-12876.patch 0001-cmis-add-cmis-connector-to-upload-file-12876.patch ajouté
Exact, c'est plus clair.
Mis à jour par Benjamin Dauvergne il y a presque 7 ans
Voilà, relecture et correction, http://git.entrouvert.org/passerelle.git/log/?h=wip/relecture-ticket-cmis-12876 . Les tests passent.
Mis à jour par Benjamin Dauvergne il y a presque 7 ans
- Statut changé de En cours à Solution déployée
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Solution déployée à Fermé
cmis: add cmis connector to upload file (#12876)