def test_get_zodb_resources_filter(self): app = self.layer['app'] foo = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'foo')) provideUtility(foo, provides=IResourceDirectory, name=u'++demo++foo') manifestTest = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'manifest-test')) provideUtility(manifestTest, provides=IResourceDirectory, name=u'++demo++manifest-test') root = BTreeFolder2('portal_resources') app._setOb('portal_resources', root) root._setOb('demo', BTreeFolder2('demo')) root['demo']._setOb('bar', BTreeFolder2('bar')) root['demo']._setOb('baz', BTreeFolder2('baz')) persistentDir = PersistentResourceDirectory(root) provideUtility(persistentDir, provides=IResourceDirectory, name=u'persistent') resources = getZODBResources(TEST_FORMAT, filter=lambda dir: dir.__name__ != 'baz') self.assertEqual(resources, {'bar': None})
def test_get_all_resources(self): app = self.layer['app'] foo = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'foo')) provideUtility(foo, provides=IResourceDirectory, name=u'++demo++foo') manifestTest = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'manifest-test')) provideUtility(manifestTest, provides=IResourceDirectory, name=u'++demo++manifest-test') root = BTreeFolder2('portal_resources') app._setOb('portal_resources', root) root._setOb('demo', BTreeFolder2('demo')) root['demo']._setOb('bar', BTreeFolder2('bar')) persistentDir = PersistentResourceDirectory(root) provideUtility(persistentDir, provides=IResourceDirectory, name=u'persistent') resources = getAllResources(TEST_FORMAT) self.assertEqual( resources, { 'bar': None, 'foo': None, 'manifest-test': { 'bar': 'baz', 'description': None, 'title': 'Manifest test' } })
def test_traverse_unique_resource_marks_request(self): dir = FilesystemResourceDirectory(test_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'') res = self.app.restrictedTraverse( '++demo++foo/++unique++bar/test.html') self.assertTrue(IUniqueResourceRequest.providedBy(self.app.REQUEST))
def test_traverse_packaged_type_specific_file(self): dir = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'foo')) provideUtility(dir, provides=IResourceDirectory, name=u'++demo++foo') res = self.app.restrictedTraverse('++demo++foo/test.html') self.assertTrue(isinstance(res, FilesystemFile))
def setUp(self): # Enable debug mode always to ensure cache is disabled by default Globals.DevelopmentMode = True self.settings = getUtility(IRegistry).forInterface(IThemeSettings) self.settings.enabled = True createThemeFromTemplate(title="linked", description="Generated from test") test_theme_name = createThemeFromTemplate( title="rapidotest", description="Generated from test") theme = getTheme(test_theme_name) applyTheme(theme) import transaction transaction.commit() self.portal = self.layer['portal'] package_dir_path = os.path.join(test_dir_path, 'other') dir = FilesystemResourceDirectory(package_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'++theme++other') self.browser = Browser(self.layer['app']) self.browser.handleErrors = False
def test_traverse_global_directory(self): dir = FilesystemResourceDirectory(test_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'') res = self.app.restrictedTraverse('++demo++foo') self.assertTrue(res.directory.endswith('resources/demo/foo')) self.assertRaises(NotFound, self.app.restrictedTraverse, '++demo++bar')
def test_publish_resource(self): dir = FilesystemResourceDirectory(test_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'') browser = z2.Browser(self.app) browser.handleErrors = False browser.open(self.app.absolute_url() + '/++demo++foo/test.html') self.assertEqual('asdf', browser.contents)
def test_traverse_packaged_type_specific_directory(self): dir = FilesystemResourceDirectory(test_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'++demo++foo') res = self.app.restrictedTraverse('++demo++foo') self.assertTrue(res.directory.endswith('resources')) self.assertRaises(NotFound, self.app.restrictedTraverse, '++demo++asdf')
def setUp(self): self.app = self.layer.get('app') zca.pushGlobalRegistry() # set up all three types of directory package_dir_path = os.path.join(test_dir_path, 'demo', 'foo') self.package_dir = dir = FilesystemResourceDirectory(package_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'++demo++foo') self.global_dir = dir = FilesystemResourceDirectory(test_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'') root = BTreeFolder2('portal_resources') self.app._setOb('portal_resources', root) root._setOb('demo', BTreeFolder2('demo')) root.demo._setOb('foo', BTreeFolder2('foo')) self.zodb_dir = dir = PersistentResourceDirectory(root) provideUtility(dir, provides=IResourceDirectory, name=u'persistent') # We don't want a false positive for the following. provideUtility(dir, provides=IResourceDirectory, name=u'++bogus++foo')
def test_traverse_global_directory(self): dir = FilesystemResourceDirectory(test_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'') out = StringIO() request = self.layer['request'] response = request.response response.stdout = out zipview = self.app.unrestrictedTraverse('++demo++foo/@@download-zip') zipview() zf = zipfile.ZipFile(out) self.assertTrue('foo/test.html' in zf.namelist()) self.assertEqual('asdf', zf.open('foo/test.html').read())
def setUpZope(self, app, configurationContext): import plone.resource xmlconfig.file('configure.zcml', plone.resource, context=configurationContext) # Load ZCML for this package import collective.assets resources_dir = mkdtemp() directory = FilesystemResourceDirectory(resources_dir, u'') gsm = getGlobalSiteManager() gsm.registerUtility(directory, IResourceDirectory, name=u'') xmlconfig.file('configure.zcml', collective.assets, context=configurationContext)
def setUp(self): # Enable debug mode always to ensure cache is disabled by default Globals.DevelopmentMode = True self.settings = getUtility(IRegistry).forInterface(IThemeSettings) self.settings.enabled = True theme = getTheme('rapido.plone.tests') applyTheme(theme) import transaction transaction.commit() self.portal = self.layer['portal'] package_dir_path = os.path.join(test_dir_path, 'other') dir = FilesystemResourceDirectory(package_dir_path) provideUtility(dir, provides=IResourceDirectory, name=u'++theme++other')
def registerResourceDirectory(_context, directory, name=None, type=None): """ Register a new resource directory. The actual ZCA registrations are deferred so that conflicts can be resolved via zope.configuration's discriminator machinery. """ if _context.package and os.path.isabs(directory): raise ConfigurationError('Resource directories in distributions must ' 'be specified as relative paths.') elif _context.package: directory = _context.path(directory) elif not _context.package and not os.path.isabs(directory): raise ConfigurationError('Global resource directories must be ' 'specified as absolute paths.') # TODO: make sure this works in Windows if '..' in directory.split('/'): raise ConfigurationError('Traversing to parent directories ' 'via .. is not allowed.') if not os.path.exists(directory): raise IOError, 'Directory not found: %s' % directory if name is None and _context.package: name = _context.package.__name__ if type: identifier = '++%s++%s' % (type, name or '') else: if _context.package: raise ConfigurationError('Resource directories in distributions ' 'must have a specified resource type.') identifier = name or '' directory = os.path.sep.join(directory.split('/')) directory = FilesystemResourceDirectory(directory, name) _context.action( discriminator=('plone:static', identifier), callable=handler, args=('registerUtility', directory, IResourceDirectory, identifier), )
def test_forbidden_resource_path_traversal(self): resource_directory = FilesystemResourceDirectory(test_dir_path) self.assertRaises(Forbidden, resource_directory._resolveSubpath, '../../../../setup.py')
def _makeOne(self): from plone.resource.directory import FilesystemResourceDirectory path = os.path.join(os.path.dirname(__file__), 'resources') return FilesystemResourceDirectory(path)