def get_handle(self):
        """ Return Connector handle """

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IConnectorSettings)

        root_url = settings.connector_url
        username = settings.connector_username
        password = settings.connector_password or ''

        if settings.connector_dexterity_subpath:
            url = '{}/{}'.format(root_url,
                                 settings.connector_dexterity_subpath)
        else:
            url = root_url
        try:
            return get_fs_wrapper(url,
                                  credentials=dict(username=username,
                                                   password=password))
        except fs.errors.ResourceNotFoundError:
            root_handle = get_fs_wrapper(root_url,
                                         credentials=dict(username=username,
                                                          password=password))
            root_handle.makedir(settings.connector_dexterity_subpath, True,
                                True)
            return get_fs_wrapper(url,
                                  credentials=dict(username=username,
                                                   password=password))
    def webdav_handle(self, subpath=None):
        """ Return WebDAV handle to root of configured connector object
            including configured webdav_subpath.
        """

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IWebdavSettings)

        adapted = IConnector(self)

        url = adapted.webdav_url or settings.webdav_url

        if adapted.webdav_subpath:
            url += '/{}'.format(adapted.webdav_subpath)

        if subpath:
            url += '/{}'.format(urllib.quote(subpath))

        # system-wide credentials
        username = settings.webdav_username
        password = settings.webdav_password or ''

        # local credentials override the system credentials
        if adapted.webdav_url:
            username = adapted.webdav_username or ''
            password = adapted.webdav_password or ''

        try:
            return get_fs_wrapper(url, credentials=dict(username=username, password=password))
        except fs.errors.ResourceNotFoundError:
            LOG.error(u'Error accessing {}::{}::{}'.format(
                self.absolute_url(), url, self.REQUEST.get('HTTP_USER_AGENT')), exc_info=True)
            raise zExceptions.NotFound(url)
        except fs.errors.ResourceInvalidError:
            parts = url.rsplit('/', 1)
            wrapper = get_fs_wrapper(parts[0], credentials=dict(username=username, password=password))
            wrapper.__leaf__ = True
            wrapper.__leaf_filename__ = parts[1]
            return wrapper
        except fs.errors.RemoteConnectionError as e:
            #  LOG.error(u'Error accessing {}::{}::{}'.format(self.absolute_url(), url, self.REQUEST.get('HTTP_USER_AGENT')), exc_info=True)
            exc = RuntimeError(url)
            exc.url = url
            raise exc
        except Exception as e:
            LOG.error(u'Error accessing {}::{}::{}'.format(
                self.absolute_url(), url, self.REQUEST.get('HTTP_USER_AGENT')), exc_info=True)
            e.url = url
            raise e
Example #3
0
    def setUpPloneSite(self, portal):
        # Install into Plone site using portal_setup
        applyProfile(portal, 'xmldirector.plonecore:testing')
        portal.acl_users.userFolderAddUser('god', 'dummy', ['Manager'], [])
        portal.acl_users.userFolderAddUser('god2', 'dummy', ['Manager'], [])
        setRoles(portal, 'god', ['Manager'])
        setRoles(portal, 'god2', ['Manager'])
        login(portal, 'god')

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IWebdavSettings)
        settings.webdav_username = unicode(WEBDAV_USERNAME)
        settings.webdav_password = unicode(WEBDAV_PASSWORD)
        settings.webdav_url = unicode(WEBDAV_URL)
        self.testing_directory = settings.webdav_dexterity_subpath = u'testing-dexterity-{}'.format(
            uuid.uuid4())

        handle = get_fs_wrapper(WEBDAV_URL, credentials=dict(username=WEBDAV_USERNAME,
                                                             password=WEBDAV_PASSWORD))
        if not handle.exists(self.testing_directory):
            handle.makedir(self.testing_directory)

        self.connector = plone.api.content.create(
            container=portal,
            type='xmldirector.plonecore.connector',
            id='connector')
Example #4
0
    def setUpPloneSite(self, portal):
        # Install into Plone site using portal_setup
        applyProfile(portal, 'xmldirector.plonecore:testing')
        portal.acl_users.userFolderAddUser('god', 'dummy', ['Manager'], [])
        portal.acl_users.userFolderAddUser('god2', 'dummy', ['Manager'], [])
        setRoles(portal, 'god', ['Manager'])
        setRoles(portal, 'god2', ['Manager'])
        login(portal, 'god')

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IConnectorSettings)
        settings.connector_username = unicode(CONNECTOR_USERNAME)
        settings.connector_password = unicode(CONNECTOR_PASSWORD)
        settings.connector_url = unicode(CONNECTOR_URL)
        self.testing_directory = settings.connector_dexterity_subpath = u'testing-dexterity-{}'.format(
            uuid.uuid4())

        handle = get_fs_wrapper(CONNECTOR_URL,
                                credentials=dict(username=CONNECTOR_USERNAME,
                                                 password=CONNECTOR_PASSWORD))
        if not handle.exists(self.testing_directory):
            handle.makedir(self.testing_directory)

        self.connector = plone.api.content.create(
            container=portal,
            type='xmldirector.plonecore.connector',
            id='connector')
 def webdav_handle(self):
     """ Return webdav handle as property """
     from xmldirector.plonecore.fswrapper import get_fs_wrapper
     if self.context:
         context = self.context
     else:
         try:
             context = plone.api.portal.get().REQUEST.PUBLISHED.context
         except AttributeError:
             context = None
     if context:
         context_webdav_url = getattr(context, 'webdav_url', None)
         if context_webdav_url:
             username = context.webdav_username
             password = context.webdav_password
             if username and password:
                 return get_fs_wrapper(context_webdav_url, credentials=dict(username=username, password=password))
             else:
                 return get_fs_wrapper(context_webdav_url)
     return getUtility(IWebdavHandle).webdav_handle()
Example #6
0
    def tearDownZope(self, app):

        handle = get_fs_wrapper(WEBDAV_URL, credentials=dict(username=WEBDAV_USERNAME,
                                                             password=WEBDAV_PASSWORD))
        if handle.exists(self.testing_directory):
            try:
                handle.removedir(
                    self.testing_directory, recursive=True, force=True)
            except Exception as e:
                LOG.error('tearDownZope() failed ({})'.format(e))
        z2.uninstallProduct(app, 'xmldirector.plonecore')
Example #7
0
    def tearDownZope(self, app):

        handle = get_fs_wrapper(CONNECTOR_URL,
                                credentials=dict(username=CONNECTOR_USERNAME,
                                                 password=CONNECTOR_PASSWORD))
        if handle.exists(self.testing_directory):
            try:
                handle.removedir(self.testing_directory,
                                 recursive=True,
                                 force=True)
            except Exception as e:
                LOG.error('tearDownZope() failed ({})'.format(e))
        z2.uninstallProduct(app, 'xmldirector.plonecore')
    def webdav_handle(self):
        """ Return WebDAV handle """

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IWebdavSettings)

        root_url = settings.webdav_url
        username = settings.webdav_username
        password = settings.webdav_password or ''

        if settings.webdav_dexterity_subpath:
            url = '{}/{}'.format(root_url, settings.webdav_dexterity_subpath)
        else:
            url = root_url
        try:
            return get_fs_wrapper(url, credentials=dict(username=username,
                                                        password=password))
        except fs.errors.ResourceNotFoundError:
            root_handle = get_fs_wrapper(root_url, credentials=dict(username=username,
                                                                    password=password))
            root_handle.makedir(settings.webdav_dexterity_subpath, True, True)
            return get_fs_wrapper(url, credentials=dict(username=username,
                                                        password=password))
 def get_handle(self):
     """ Return webdav handle as property """
     from xmldirector.plonecore.fswrapper import get_fs_wrapper
     if self.context:
         context = self.context
     else:
         try:
             context = plone.api.portal.get().REQUEST.PUBLISHED.context
         except AttributeError:
             context = None
     if context:
         context_connector_url = getattr(context, 'connector_url', None)
         if context_connector_url:
             username = context.connector_username
             password = context.connector_password
             if username and password:
                 return get_fs_wrapper(context_connector_url,
                                       credentials=dict(username=username,
                                                        password=password),
                                       context=self.context)
             else:
                 return get_fs_wrapper(context_connector_url,
                                       context=self.context)
     return getUtility(IConnectorHandle).get_handle()
    def get_handle(self, subpath=None, create_if_not_existing=False):
        """ Return WebDAV handle to root of configured connector object
            including configured connector_subpath.
        """

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IConnectorSettings)

        adapted = IConnector(self)

        url = adapted.connector_url or settings.connector_url

        if adapted.connector_subpath:
            url += '/{}'.format(adapted.connector_subpath)

        if subpath:
            url += '/{}'.format(urllib.quote(subpath))

        # system-wide credentials
        username = settings.connector_username
        password = settings.connector_password or ''

        # local credentials override the system credentials
        if adapted.connector_url:
            username = adapted.connector_username or ''
            password = adapted.connector_password or ''

        if create_if_not_existing:
            util = getUtility(IConnectorHandle)
            handle = util.get_handle()
            if not handle.exists(adapted.connector_subpath):
                handle.makedir(adapted.connector_subpath, recursive=True)
            url = '{}/{}'.format(handle.url.strip('/'),
                                 adapted.connector_subpath)

        try:
            return get_fs_wrapper(url, credentials=dict(username=username, password=password), context=self)
        except fs.errors.ResourceNotFoundError:
            LOG.warn(u'Error accessing {}::{}::{}'.format(
                self.absolute_url(), url, self.REQUEST.get('HTTP_USER_AGENT')), exc_info=True)
            raise zExceptions.NotFound(url)
        except fs.errors.ResourceInvalidError:
            parts = url.rsplit('/', 1)
            wrapper = get_fs_wrapper(parts[0], credentials=dict(
                username=username, password=password),
                context=self)
            wrapper.__leaf__ = True
            wrapper.__leaf_filename__ = parts[1]
            return wrapper
        except fs.errors.RemoteConnectionError as e:
            #  LOG.error(u'Error accessing {}::{}::{}'.format(
            #    self.absolute_url(),
            #    url,
            #   self.REQUEST.get('HTTP_USER_AGENT')),
            #    exc_info=True)
            exc = RuntimeError(url)
            exc.url = url
            raise exc
        except Exception as e:
            print repr(e)
            LOG.warn(u'Error accessing {}::{}::{}'.format(
                self.absolute_url(), url, self.REQUEST.get('HTTP_USER_AGENT')), exc_info=True)
            e.url = url
            raise e