Ejemplo n.º 1
0
    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})
Ejemplo n.º 2
0
    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'
                }
            })
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
    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))
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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')
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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')
Ejemplo n.º 9
0
    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')
Ejemplo n.º 10
0
    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())
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
0
    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')
Ejemplo n.º 13
0
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),
    )
Ejemplo n.º 14
0
 def test_forbidden_resource_path_traversal(self):
     resource_directory = FilesystemResourceDirectory(test_dir_path)
     self.assertRaises(Forbidden, resource_directory._resolveSubpath,
                       '../../../../setup.py')
Ejemplo n.º 15
0
 def _makeOne(self):
     from plone.resource.directory import FilesystemResourceDirectory
     path = os.path.join(os.path.dirname(__file__), 'resources')
     return FilesystemResourceDirectory(path)