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
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')
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()
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')
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