From 42241a124d9ca567dfdbce7a5e061b135f622484 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Wed, 7 Jul 2021 17:34:26 +0200 Subject: [PATCH] cmis: add check_status method (#41986) --- passerelle/apps/cmis/models.py | 16 ++++++++++++---- tests/test_cmis.py | 12 ++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/passerelle/apps/cmis/models.py b/passerelle/apps/cmis/models.py index a96d7c73..2e5ffaaa 100644 --- a/passerelle/apps/cmis/models.py +++ b/passerelle/apps/cmis/models.py @@ -29,6 +29,7 @@ from cmislib.exceptions import ( UpdateConflictException, ) from django.db import models +from django.utils.functional import cached_property from django.utils.six import BytesIO from django.utils.six.moves.urllib import error as urllib2 from django.utils.translation import ugettext_lazy as _ @@ -84,6 +85,10 @@ class CmisConnector(BaseResource): class Meta: verbose_name = _('CMIS connector') + def check_status(self): + cmis_gateway = CMISGateway(self.cmis_endpoint, self.username, self.password, self.logger) + cmis_gateway.repo + @endpoint( perm='can_access', post={ @@ -157,22 +162,25 @@ class CMISGateway(object): self._cmis_client = CmisClient(cmis_endpoint, username, password) self._logger = logger + @cached_property + def repo(self): + return self._cmis_client.defaultRepository + def _get_or_create_folder(self, file_path): - repo = self._cmis_client.defaultRepository try: self._logger.debug("searching '%s'" % file_path) - res = repo.getObjectByPath(file_path) + res = self.repo.getObjectByPath(file_path) self._logger.debug("'%s' found" % file_path) return res except ObjectNotFoundException: self._logger.debug("'%s' not found" % file_path) basepath = "" - folder = repo.rootFolder + folder = self.repo.rootFolder for path_part in file_path.strip('/').split('/'): basepath += '/%s' % path_part try: self._logger.debug("searching '%s'" % basepath) - folder = repo.getObjectByPath(basepath) + folder = self.repo.getObjectByPath(basepath) self._logger.debug("'%s' found" % basepath) except ObjectNotFoundException: self._logger.debug("'%s' not found" % basepath) diff --git a/tests/test_cmis.py b/tests/test_cmis.py index d9c575a9..5e1cca14 100644 --- a/tests/test_cmis.py +++ b/tests/test_cmis.py @@ -582,3 +582,15 @@ def test_raw_uploadfile(mocked_request, app, setup): assert json_result['err'] == 0 assert json_result['data']['properties']['cmis:objectTypeId'] == "cmis:document" assert json_result['data']['properties']['cmis:name'] == file_name + + +def test_cmis_check_status(app, setup, monkeypatch): + cmis_gateway = Mock() + type(cmis_gateway).repo = mock.PropertyMock(side_effect=CmisException) + cmis_gateway_cls = Mock(return_value=cmis_gateway) + import passerelle.apps.cmis.models + + monkeypatch.setattr(passerelle.apps.cmis.models, 'CMISGateway', cmis_gateway_cls) + + with pytest.raises(CmisException): + setup.check_status() -- 2.20.1