def test_cook_only_css(self):
        registry = getUtility(IRegistry)
        bundles = registry.collectionOfInterface(IBundleRegistry,
                                                 prefix="plone.bundles")
        bundle = bundles.add('foobar')
        bundle.jscompilation = ''
        bundle.csscompilation = '++plone++static/foobar-compiled.css'

        resources = registry.collectionOfInterface(IResourceRegistry,
                                                   prefix="plone.resources")
        resource = resources.add('foobar')

        resource.css = ['++plone++static/foobar.min.css']
        bundle.resources = ['foobar']

        persistent_directory = getUtility(IResourceDirectory,
                                          name="persistent")
        if OVERRIDE_RESOURCE_DIRECTORY_NAME not in persistent_directory:
            persistent_directory.makeDirectory(
                OVERRIDE_RESOURCE_DIRECTORY_NAME)
        container = persistent_directory[OVERRIDE_RESOURCE_DIRECTORY_NAME]
        container.makeDirectory('static')
        directory = container['static']
        directory.writeFile('foobar.min.css', 'body {\ncolor: red;\n}')

        cookWhenChangingSettings(self.portal, bundle)

        resp_css = subrequest('{0}/++plone++static/foobar-compiled.css'.format(
            self.portal.absolute_url()))
        self.assertIn(b'body {\ncolor: red;\n}', resp_css.getBody())
    def save_registry(self):
        req = self.request

        if req.get('resources') and req.get('bundles'):
            self.update_registry_collection(
                IResourceRegistry, "plone.resources",
                json.loads(req.get('resources')))
            self.update_registry_collection(
                IBundleRegistry, "plone.bundles",
                json.loads(req.get('bundles')))

        if self.request.form.get('development', '').lower() == 'true':
            self.registry['plone.resources.development'] = True
        else:
            self.registry['plone.resources.development'] = False

        # it'd be difficult to know if the legacy bundle settings
        # changed or not so we need to just set the last import date
        # back so it gets re-built
        self.registry.records[
            'plone.resources.last_legacy_import'].value = datetime.now()
        cookWhenChangingSettings(self.context)

        return json.dumps({
            'success': True
        })
示例#3
0
    def get_data(self, bundle, result):
        bundle_name = bundle.__prefix__.split('/', 1)[1].rstrip('.')
        if self.development is False:
            if bundle.compile is False:
                # Its a legacy css bundle
                if not bundle.last_compilation or self.last_legacy_import > bundle.last_compilation:
                    # We need to compile
                    cookWhenChangingSettings(self.context, bundle)
            if bundle.jscompilation:
                result.append({
                    'bundle': bundle_name,
                    'conditionalcomment': bundle.conditionalcomment,
                    'src': '%s/%s?version=%s' % (
                        self.portal_url, bundle.jscompilation,
                        bundle.last_compilation)
                })
        else:
            resources = self.get_resources()
            for resource in bundle.resources:
                if resource in resources:
                    script = resources[resource]
                    if script.js:
                        url = urlparse(script.js)
                        if url.netloc == '':
                            # Local
                            src = "%s/%s" % (self.portal_url, script.js)
                        else:
                            src = "%s" % (script.js)

                        data = {
                            'bundle': bundle_name,
                            'conditionalcomment': bundle.conditionalcomment,  # noqa
                            'src': src}
                        result.append(data)
    def get_data(self, bundle, result):
        """
        Gets the needed information for the bundle
        and stores it on the result list
        """
        bundle_name = bundle.__prefix__.split(
            '/',
            1)[1].rstrip('.') if bundle else 'none'
        if self.develop_bundle(bundle, 'develop_css'):
            self.resources = self.get_resources()
            # The bundle resources
            for resource in bundle.resources:
                if resource in self.resources:
                    style = self.resources[resource]
                    for data in self.get_urls(style, bundle):
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle
                if not bundle.last_compilation\
                        or self.last_legacy_import > bundle.last_compilation:
                    # We need to compile
                    cookWhenChangingSettings(self.context, bundle)

            if bundle.csscompilation:
                result.append({
                    'bundle': bundle_name,
                    'rel': 'stylesheet',
                    'conditionalcomment': bundle.conditionalcomment,
                    'src': '%s/%s?version=%s' % (
                        self.site_url,
                        bundle.csscompilation,
                        bundle.last_compilation
                    )
                })
    def test_error(self):
        registry = getUtility(IRegistry)
        bundles = registry.collectionOfInterface(IBundleRegistry,
                                                 prefix="plone.bundles")
        bundle = bundles.add('foobar')
        bundle.jscompilation = '++plone++static/foobar-compiled.js'
        bundle.csscompilation = '++plone++static/foobar-compiled.css'

        resources = registry.collectionOfInterface(IResourceRegistry,
                                                   prefix="plone.resources")
        resource = resources.add('foobar')

        resource.js = '++plone++static/foobar.js'
        bundle.resources = ['foobar']

        persistent_directory = getUtility(
            IResourceDirectory, name="persistent")
        if OVERRIDE_RESOURCE_DIRECTORY_NAME not in persistent_directory:
            persistent_directory.makeDirectory(
                OVERRIDE_RESOURCE_DIRECTORY_NAME)
        container = persistent_directory[OVERRIDE_RESOURCE_DIRECTORY_NAME]
        container.makeDirectory('static')
        directory = container['static']
        directory.writeFile('foobar.js', 'sdlfk ldsf lksdjfl s')

        cookWhenChangingSettings(self.portal, bundle)
        resp = subrequest(
            '{0}/++plone++static/foobar-compiled.js'.format(
                self.portal.absolute_url()
            )
        )
        self.assertTrue('error cooking' in resp.getBody())
示例#6
0
    def get_data(self, bundle, result):
        """
        Gets the needed information for the bundle
        and stores it on the result list
        """
        bundle_name = bundle.__prefix__.split(
            '/', 1)[1].rstrip('.') if bundle else 'none'
        if self.develop_bundle(bundle, 'develop_css'):
            self.resources = self.get_resources()
            # The bundle resources
            for resource in bundle.resources:
                if resource in self.resources:
                    style = self.resources[resource]
                    for data in self.get_urls(style, bundle):
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle
                if not bundle.last_compilation\
                        or self.last_legacy_import > bundle.last_compilation:
                    # We need to compile
                    cookWhenChangingSettings(self.context, bundle)

            if bundle.csscompilation:
                result.append({
                    'bundle':
                    bundle_name,
                    'rel':
                    'stylesheet',
                    'conditionalcomment':
                    bundle.conditionalcomment,
                    'src':
                    '%s/%s?version=%s' % (self.site_url, bundle.csscompilation,
                                          bundle.last_compilation)
                })
    def test_error(self):
        registry = getUtility(IRegistry)
        bundles = registry.collectionOfInterface(IBundleRegistry,
                                                 prefix="plone.bundles")
        bundle = bundles.add('foobar')
        bundle.jscompilation = '++plone++static/foobar-compiled.js'
        bundle.csscompilation = '++plone++static/foobar-compiled.css'

        resources = registry.collectionOfInterface(IResourceRegistry,
                                                   prefix="plone.resources")
        resource = resources.add('foobar')

        resource.js = '++plone++static/foobar.js'
        bundle.resources = ['foobar']

        persistent_directory = getUtility(IResourceDirectory,
                                          name="persistent")
        if OVERRIDE_RESOURCE_DIRECTORY_NAME not in persistent_directory:
            persistent_directory.makeDirectory(
                OVERRIDE_RESOURCE_DIRECTORY_NAME)
        container = persistent_directory[OVERRIDE_RESOURCE_DIRECTORY_NAME]
        container.makeDirectory('static')
        directory = container['static']
        directory.writeFile('foobar.js', 'sdlfk ldsf lksdjfl s')

        cookWhenChangingSettings(self.portal, bundle)
        resp = subrequest('{0}/++plone++static/foobar-compiled.js'.format(
            self.portal.absolute_url()))
        self.assertTrue('error cooking' in resp.getBody())
示例#8
0
    def save_registry(self):
        req = self.request

        if req.get('resources') and req.get('bundles'):
            self.update_registry_collection(
                IResourceRegistry, "plone.resources",
                json.loads(req.get('resources')))
            self.update_registry_collection(
                IBundleRegistry, "plone.bundles",
                json.loads(req.get('bundles')))

        if self.request.form.get('development', '').lower() == 'true':
            self.registry['plone.resources.development'] = True
        else:
            self.registry['plone.resources.development'] = False

        # it'd be difficult to know if the legacy bundle settings
        # changed or not so we need to just set the last import date
        # back so it gets re-built
        self.registry.records[
            'plone.resources.last_legacy_import'].value = datetime.now()
        cookWhenChangingSettings(self.context)

        return json.dumps({
            'success': True
        })
示例#9
0
def upgrade(context, logger=None):
    setup = getToolByName(context, 'portal_setup')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    cookWhenChangingSettings(api.portal.get())

    setup.runImportStepFromProfile(
        'profile-collective.elasticsearch:default',
        'plone.app.registry',
        run_dependencies=False,
    )
示例#10
0
    def get_data(self, bundle, result):
        bundle_name = bundle.__prefix__.split('/', 1)[1].rstrip('.')
        if self.develop_bundle(bundle, 'develop_javascript'):
            # Bundle development mode
            resources = self.get_resources()
            for resource in bundle.resources:
                if resource in resources:
                    script = resources[resource]
                    if script.js:
                        url = urlparse(script.js)
                        if url.netloc == '':
                            # Local
                            src = "%s/%s" % (self.site_url, script.js)
                        else:
                            src = "%s" % (script.js)

                        data = {
                            'bundle': bundle_name,
                            'conditionalcomment':
                            bundle.conditionalcomment,  # noqa
                            'src': src,
                            # Reset RequireJS if bundle is in non-compile to
                            # avoid "Mismatched anonymous define()" in legacy
                            # scripts.
                            'resetrjs': bundle.compile is False
                        }
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle OR compiling is happening outside of
                # plone
                if ((not bundle.last_compilation
                     or self.last_legacy_import > bundle.last_compilation)
                        and bundle.resources):
                    # We need to combine files. It's possible no resources are defined
                    # because the compiling is done outside of plone
                    cookWhenChangingSettings(self.context, bundle)
            if bundle.jscompilation:
                js_path = bundle.jscompilation
                if '++plone++' in js_path:
                    resource_path = js_path.split('++plone++')[-1]
                    resource_name, resource_filepath = resource_path.split(
                        '/', 1)
                    js_location = '%s/++plone++%s/++unique++%s/%s' % (
                        self.site_url, resource_name,
                        quote(str(bundle.last_compilation)), resource_filepath)
                else:
                    js_location = '%s/%s?version=%s' % (
                        self.site_url, bundle.jscompilation,
                        quote(str(bundle.last_compilation)))
                result.append({
                    'bundle': bundle_name,
                    'conditionalcomment': bundle.conditionalcomment,
                    'src': js_location
                })
示例#11
0
def upgrade(context, logger=None):
    setup = getToolByName(context, 'portal_setup')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    # Reindex events that have recurrences
    brains = api.content.find(portal_type='Event')
    for brain in brains:
        obj = brain.getObject()  # unfortunate but necessary
        if hasattr(obj, 'recurrence') and obj.recurrence is not None:
            log.info('reindexing recurrence of %s' % brain.Title)
            obj.reindexObject(idxs=['recurrence'])
    cookWhenChangingSettings(api.portal.get())
示例#12
0
    def get_data(self, bundle, result):
        if self.develop_bundle(bundle, 'develop_javascript'):
            # Bundle development mode
            self._add_resources(
                bundle.resources,
                result,
                bundle_name=bundle.name,
                resetrjs=bundle.compile is False,
                conditionalcomment=bundle.conditionalcomment,
            )
            return
        if (
            not bundle.compile and
            (
                not bundle.last_compilation or
                self.last_legacy_import > bundle.last_compilation
            ) and
            bundle.resources
        ):
            # Its a legacy bundle OR compiling is happening outside of plone

            # We need to combine files. It's possible no resources are
            # defined because the compiling is done outside of plone
            cookWhenChangingSettings(self.context, bundle)
        if bundle.jscompilation:
            js_path = bundle.jscompilation
            if '++plone++' in js_path:
                resource_path = js_path.split('++plone++')[-1]
                resource_name, resource_filepath = resource_path.split(
                    '/', 1)
                js_location = '{}/++plone++{}/++unique++{}/{}'.format(
                    self.site_url,
                    resource_name,
                    parse.quote(str(bundle.last_compilation)),
                    resource_filepath
                )
            else:
                js_location = '{}/{}?version={}'.format(
                    self.site_url,
                    bundle.jscompilation,
                    parse.quote(str(bundle.last_compilation))
                )

            load_async = 'async' if getattr(bundle, 'load_async', None) else None  # noqa
            load_defer = 'defer' if getattr(bundle, 'load_defer', None) else None  # noqa

            result.append({
                'bundle': bundle.name,
                'conditionalcomment': bundle.conditionalcomment,
                'src': js_location,
                'async': load_async,
                'defer': load_defer,
            })
示例#13
0
    def get_data(self, bundle, result):
        bundle_name = bundle.__prefix__.split('/', 1)[1].rstrip('.')
        if self.develop_bundle(bundle, 'develop_javascript'):
            resources = self.get_resources()
            for resource in bundle.resources:
                if resource in resources:
                    script = resources[resource]
                    if script.js:
                        url = urlparse(script.js)
                        if url.netloc == '':
                            # Local
                            src = "%s/%s" % (self.site_url, script.js)
                        else:
                            src = "%s" % (script.js)

                        data = {
                            'bundle': bundle_name,
                            'conditionalcomment': bundle.conditionalcomment,  # noqa
                            'src': src}
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle OR compiling is happening outside of
                # plone
                if ((not bundle.last_compilation
                        or self.last_legacy_import > bundle.last_compilation)
                        and bundle.resources):
                    # We need to combine files. It's possible no resources are defined
                    # because the compiling is done outside of plone
                    cookWhenChangingSettings(self.context, bundle)
            if bundle.jscompilation:
                js_path = bundle.jscompilation
                if '++plone++' in js_path:
                    resource_path = js_path.split('++plone++')[-1]
                    resource_name, resource_filepath = resource_path.split(
                        '/', 1)
                    js_location = '%s/++plone++%s/++unique++%s/%s' % (
                        self.site_url,
                        resource_name,
                        quote(str(bundle.last_compilation)),
                        resource_filepath
                    )
                else:
                    js_location = '%s/%s?version=%s' % (
                        self.site_url,
                        bundle.jscompilation,
                        quote(str(bundle.last_compilation))
                    )
                result.append({
                    'bundle': bundle_name,
                    'conditionalcomment': bundle.conditionalcomment,
                    'src': js_location
                })
示例#14
0
    def get_data(self, bundle, result):
        if self.develop_bundle(bundle, 'develop_javascript'):
            # Bundle development mode
            self._add_resources(
                bundle.resources,
                result,
                bundle_name=bundle.name,
                resetrjs=bundle.compile is False,
                conditionalcomment=bundle.conditionalcomment,
            )
            return
        if (
            not bundle.compile and
            (
                not bundle.last_compilation or
                self.last_legacy_import > bundle.last_compilation
            ) and
            bundle.resources
        ):
            # Its a legacy bundle OR compiling is happening outside of plone

            # We need to combine files. It's possible no resources are
            # defined because the compiling is done outside of plone
            cookWhenChangingSettings(self.context, bundle)
        if bundle.jscompilation:
            js_path = bundle.jscompilation
            if '++plone++' in js_path:
                resource_path = js_path.split('++plone++')[-1]
                resource_name, resource_filepath = resource_path.split(
                    '/', 1)
                js_location = '{0}/++plone++{1}/++unique++{2}/{3}'.format(
                    self.site_url,
                    resource_name,
                    parse.quote(str(bundle.last_compilation)),
                    resource_filepath
                )
            else:
                js_location = '{0}/{1}?version={2}'.format(
                    self.site_url,
                    bundle.jscompilation,
                    parse.quote(str(bundle.last_compilation))
                )

            load_async = 'async' if getattr(bundle, 'load_async', None) else None  # noqa
            load_defer = 'defer' if getattr(bundle, 'load_defer', None) else None  # noqa

            result.append({
                'bundle': bundle.name,
                'conditionalcomment': bundle.conditionalcomment,
                'src': js_location,
                'async': load_async,
                'defer': load_defer,
            })
示例#15
0
def upgrade(context, logger=None):
    # This value is being converted to a tuple, hold onto it or it will get
    # overwritten
    backend_url = api.portal.get_registry_record('plone.backend_url') or None

    setup = getToolByName(context, 'portal_setup')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    cookWhenChangingSettings(api.portal.get())

    if isinstance(backend_url, tuple):
        pass
    elif isinstance(backend_url, unicode):
        api.portal.set_registry_record('plone.backend_url', (backend_url, ))
    else:
        api.portal.set_registry_record('plone.backend_url', ())
示例#16
0
    def get_data(self, bundle, result):
        """
        Gets the needed information for the bundle
        and stores it on the result list
        """
        if self.develop_bundle(bundle, 'develop_css'):
            self.resources = self.get_resources()
            # The bundle resources
            for resource in bundle.resources:
                if resource in self.resources:
                    style = self.resources[resource]
                    for data in self.get_urls(style, bundle):
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle
                if not bundle.last_compilation\
                        or self.last_legacy_import > bundle.last_compilation:
                    # We need to compile
                    cookWhenChangingSettings(self.context, bundle)

            if bundle.csscompilation:
                css_path = bundle.csscompilation
                if '++plone++' in css_path:
                    resource_path = css_path.split('++plone++')[-1]
                    resource_name, resource_filepath = resource_path.split(
                        '/', 1)
                    css_location = '{}/++plone++{}/++unique++{}/{}'.format(
                        self.site_url,
                        resource_name,
                        parse.quote(str(bundle.last_compilation)),
                        resource_filepath
                    )
                else:
                    css_location = '{}/{}?version={}'.format(
                        self.site_url,
                        bundle.csscompilation,
                        parse.quote(str(bundle.last_compilation))
                    )
                result.append({
                    'bundle': bundle.name,
                    'rel': 'stylesheet',
                    'conditionalcomment': bundle.conditionalcomment,
                    'src': css_location
                })
示例#17
0
    def get_data(self, bundle, result):
        """
        Gets the needed information for the bundle
        and stores it on the result list
        """
        if self.develop_bundle(bundle, 'develop_css'):
            self.resources = self.get_resources()
            # The bundle resources
            for resource in bundle.resources:
                if resource in self.resources:
                    style = self.resources[resource]
                    for data in self.get_urls(style, bundle):
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle
                if not bundle.last_compilation\
                        or self.last_legacy_import > bundle.last_compilation:
                    # We need to compile
                    cookWhenChangingSettings(self.context, bundle)

            if bundle.csscompilation:
                css_path = bundle.csscompilation
                if '++plone++' in css_path:
                    resource_path = css_path.split('++plone++')[-1]
                    resource_name, resource_filepath = resource_path.split(
                        '/', 1)
                    css_location = '%s/++plone++%s/++unique++%s/%s' % (
                        self.site_url,
                        resource_name,
                        quote(str(bundle.last_compilation)),
                        resource_filepath
                    )
                else:
                    css_location = '%s/%s?version=%s' % (
                        self.site_url,
                        bundle.csscompilation,
                        quote(str(bundle.last_compilation))
                    )
                result.append({
                    'bundle': bundle.name,
                    'rel': 'stylesheet',
                    'conditionalcomment': bundle.conditionalcomment,
                    'src': css_location
                })
示例#18
0
    def get_data(self, bundle, result):
        """
        Gets the needed information for the bundle
        and stores it on the result list
        """
        if self.develop_bundle(bundle, "develop_css"):
            self.resources = self.get_resources()
            # The bundle resources
            for resource in bundle.resources:
                if resource in self.resources:
                    style = self.resources[resource]
                    for data in self.get_urls(style, bundle):
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle
                if (not bundle.last_compilation
                        or self.last_legacy_import > bundle.last_compilation):
                    # We need to compile
                    cookWhenChangingSettings(self.context, bundle)

            if bundle.csscompilation:
                css_path = bundle.csscompilation
                if "++plone++" in css_path:
                    resource_path = css_path.split("++plone++")[-1]
                    resource_name, resource_filepath = resource_path.split(
                        "/", 1)
                    css_location = "{}/++plone++{}/++unique++{}/{}".format(
                        self.site_url,
                        resource_name,
                        parse.quote(str(bundle.last_compilation)),
                        resource_filepath,
                    )
                else:
                    css_location = "{}/{}?version={}".format(
                        self.site_url,
                        bundle.csscompilation,
                        parse.quote(str(bundle.last_compilation)),
                    )
                result.append({
                    "bundle": bundle.name,
                    "rel": "stylesheet",
                    "conditionalcomment": bundle.conditionalcomment,
                    "src": css_location,
                })
示例#19
0
    def get_data(self, bundle, result):
        bundle_name = bundle.__prefix__.split('/', 1)[1].rstrip('.')
        if self.develop_bundle(bundle, 'develop_javascript'):
            resources = self.get_resources()
            for resource in bundle.resources:
                if resource in resources:
                    script = resources[resource]
                    if script.js:
                        url = urlparse(script.js)
                        if url.netloc == '':
                            # Local
                            src = "%s/%s" % (self.portal_url, script.js)
                        else:
                            src = "%s" % (script.js)

                        data = {
                            'bundle': bundle_name,
                            'conditionalcomment':
                            bundle.conditionalcomment,  # noqa
                            'src': src
                        }
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle OR compiling is happening outside of plone
                if ((not bundle.last_compilation
                     or self.last_legacy_import > bundle.last_compilation)
                        and bundle.resources):
                    # We need to combine files. It's possible no resources are defined
                    # because the compiling is done outside of plone
                    cookWhenChangingSettings(self.context, bundle)
            if bundle.jscompilation:
                result.append({
                    'bundle':
                    bundle_name,
                    'conditionalcomment':
                    bundle.conditionalcomment,
                    'src':
                    '%s/%s?version=%s' %
                    (self.portal_url, bundle.jscompilation,
                     bundle.last_compilation)
                })
    def test_dont_minify_already_minified(self):
        registry = getUtility(IRegistry)
        bundles = registry.collectionOfInterface(IBundleRegistry,
                                                 prefix="plone.bundles")
        bundle = bundles.add('foobar')
        bundle.jscompilation = '++plone++static/foobar-compiled.js'
        bundle.csscompilation = '++plone++static/foobar-compiled.css'

        resources = registry.collectionOfInterface(IResourceRegistry,
                                                   prefix="plone.resources")
        resource = resources.add('foobar')

        resource.js = '++plone++static/foobar.min.js'
        resource.css = ['++plone++static/foobar.min.css']
        bundle.resources = ['foobar']

        persistent_directory = getUtility(
            IResourceDirectory, name="persistent")
        if OVERRIDE_RESOURCE_DIRECTORY_NAME not in persistent_directory:
            persistent_directory.makeDirectory(
                OVERRIDE_RESOURCE_DIRECTORY_NAME)
        container = persistent_directory[OVERRIDE_RESOURCE_DIRECTORY_NAME]
        container.makeDirectory('static')
        directory = container['static']
        directory.writeFile('foobar.min.js', 'alert("Hi!");\n\nalert("Ho!");')
        directory.writeFile('foobar.min.css', 'body {\ncolor: blue;\n}')

        cookWhenChangingSettings(self.portal, bundle)

        resp_js = subrequest(
            '{0}/++plone++static/foobar-compiled.js'.format(
                self.portal.absolute_url()
            )
        )
        self.assertTrue('alert("Hi!");\n\nalert("Ho!");' in resp_js.getBody())

        resp_css = subrequest(
            '{0}/++plone++static/foobar-compiled.css'.format(
                self.portal.absolute_url()
            )
        )
        self.assertTrue('body {\ncolor: blue;\n}' in resp_css.getBody())
    def test_cooking_missing(self):
        registry = getUtility(IRegistry)
        bundles = registry.collectionOfInterface(IBundleRegistry,
                                                 prefix="plone.bundles")
        bundle = bundles.add('foobar')
        bundle.jscompilation = '++plone++static/foobar-compiled.js'
        bundle.csscompilation = '++plone++static/foobar-compiled.css'

        resources = registry.collectionOfInterface(IResourceRegistry,
                                                   prefix="plone.resources")
        resource = resources.add('foobar')

        resource.js = '++plone++static/foobar.js'
        bundle.resources = ['foobar']

        cookWhenChangingSettings(self.portal, bundle)
        resp = subrequest(
            '%s/++plone++static/foobar-compiled.js' % self.portal.absolute_url())

        self.assertTrue('Could not find resource' in resp.getBody())
    def test_cooking_missing(self):
        registry = getUtility(IRegistry)
        bundles = registry.collectionOfInterface(IBundleRegistry,
                                                 prefix="plone.bundles")
        bundle = bundles.add('foobar')
        bundle.jscompilation = '++plone++static/foobar-compiled.js'
        bundle.csscompilation = '++plone++static/foobar-compiled.css'

        resources = registry.collectionOfInterface(IResourceRegistry,
                                                   prefix="plone.resources")
        resource = resources.add('foobar')

        resource.js = '++plone++static/foobar.js'
        bundle.resources = ['foobar']

        cookWhenChangingSettings(self.portal, bundle)
        resp = subrequest(
            '%s/++plone++static/foobar-compiled.js' % self.portal.absolute_url())

        self.assertTrue('Could not find resource' in resp.getBody())
示例#23
0
    def get_data(self, bundle, result):
        bundle_name = bundle.__prefix__.split("/", 1)[1].rstrip(".")
        if self.develop_bundle(bundle, "develop_javascript"):
            resources = self.get_resources()
            for resource in bundle.resources:
                if resource in resources:
                    script = resources[resource]
                    if script.js:
                        url = urlparse(script.js)
                        if url.netloc == "":
                            # Local
                            src = "%s/%s" % (self.portal_url, script.js)
                        else:
                            src = "%s" % (script.js)

                        data = {
                            "bundle": bundle_name,
                            "conditionalcomment": bundle.conditionalcomment,  # noqa
                            "src": src,
                        }
                        result.append(data)
        else:
            if bundle.compile is False:
                # Its a legacy css bundle OR compiling is happening outside of plone
                if (
                    not bundle.last_compilation or self.last_legacy_import > bundle.last_compilation
                ) and bundle.resources:
                    # We need to combine files. It's possible no resources are defined
                    # because the compiling is done outside of plone
                    cookWhenChangingSettings(self.context, bundle)
            if bundle.jscompilation:
                result.append(
                    {
                        "bundle": bundle_name,
                        "conditionalcomment": bundle.conditionalcomment,
                        "src": "%s/%s?version=%s" % (self.portal_url, bundle.jscompilation, bundle.last_compilation),
                    }
                )
示例#24
0
def upgrade(context, logger=None):
    setup = getToolByName(context, 'portal_setup')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    cookWhenChangingSettings(api.portal.get())
示例#25
0
def upgrade(site, logger=None):
    setup = getToolByName(site, 'portal_setup')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    cookWhenChangingSettings(site)
    recursive_index(site)
    def _importNode(self, node):
        """Import the object from the DOM node.
        """
        if self.registry is None:
            # Upgrade 3.x no registry there
            return
        resources = self.registry.collectionOfInterface(
            IResourceRegistry, prefix="plone.resources", check=False)

        bundles = self.registry.collectionOfInterface(IBundleRegistry,
                                                      prefix="plone.bundles",
                                                      check=False)
        if 'plone-legacy' in bundles:
            legacy = bundles['plone-legacy']
        else:
            legacy = bundles.setdefault('plone-legacy')
            legacy.resources = []
            legacy.enabled = True

        for child in node.childNodes:
            if child.nodeName != self.resource_type:
                continue

            data = {}
            add = True
            remove = False
            position = res_id = None
            for key, value in child.attributes.items():
                key = str(key)
                if key == 'update':
                    continue
                if key == 'remove' and value in (True, 'true', 'True'):
                    add = False
                    remove = True
                    continue
                if key in ('position-before', 'insert-before'):
                    position = ('before',
                                queryUtility(IIDNormalizer).normalize(
                                    str(value)))
                    continue
                if key in ('position-after', 'insert-after'):
                    position = ('after', queryUtility(IIDNormalizer).normalize(
                        str(value)))
                    continue
                if key in ('position-top', 'insert-top'):
                    position = ('*', )
                    continue
                if key in ('position-bottom', 'insert-bottom'):
                    position = ('', )
                    continue
                if key == 'id':
                    if value in self.resource_blacklist:
                        add = False
                        data.clear()
                        break
                    res_id = queryUtility(IIDNormalizer).normalize(str(value))
                    data['url'] = str(value)
                elif value.lower() == 'false':
                    data[key] = False
                elif value.lower() == 'true':
                    data[key] = True
                else:
                    try:
                        data[key] = int(value)
                    except ValueError:
                        data[key] = str(value)

            if add:
                proxy = resources.setdefault(res_id)
                if self.resource_type == 'javascript':
                    proxy.js = data['url']
                elif self.resource_type == 'stylesheet':
                    proxy.css = [data['url']]
                if 'enabled' in data and not data['enabled']:
                    # if we are disabling it, we need to remove from legacy resources
                    if res_id in legacy.resources:
                        legacy.resources.remove(res_id)
                    continue
                if res_id in legacy.resources:
                    # remove here so we can possible re-insert into whatever
                    # position is preferred below and then we do not
                    # re-add same resource multiple times
                    legacy.resources.remove(res_id)
                if position is None:
                    position = ('', )
                if position[0] == '*':
                    legacy.resources.insert(0, res_id)
                elif position[0] == '':
                    legacy.resources.append(res_id)
                elif position[0] == 'after':
                    if position[1] in legacy.resources:
                        legacy.resources.insert(
                            legacy.resources.index(position[1]) + 1, res_id)
                    else:
                        legacy.resources.append(res_id)
                elif position[0] == 'before':
                    if position[1] in legacy.resources:
                        legacy.resources.insert(
                            legacy.resources.index(position[1]) + 1, res_id)
                    else:
                        legacy.resources.append(res_id)

            if remove:
                if res_id in legacy.resources:
                    legacy.resources.remove(res_id)
                if res_id in resources:
                    del resources[res_id]

            # make sure to trigger committing to db
            # not sure this is necessary...
            legacy.resources = legacy.resources

        if 'plone.resources.last_legacy_import' in self.registry.records:  # noqa
            self.registry.records[
                'plone.resources.last_legacy_import'].value = datetime.now()
            try:
                cookWhenChangingSettings(self.context, legacy)
            except (AssertionError, ComponentLookupError):
                # zope.globalrequest and the site might not be setup, don't error out
                pass
示例#27
0
def cook_js_resources(context, logger=None):
    cookWhenChangingSettings(api.portal.get())
    def _importNode(self, node):
        """Import the object from the DOM node.
        """
        if self.registry is None:
            # Upgrade 3.x no registry there
            return
        resources = self.registry.collectionOfInterface(
            IResourceRegistry, prefix="plone.resources", check=False)

        bundles = self.registry.collectionOfInterface(
            IBundleRegistry, prefix="plone.bundles", check=False)
        if 'plone-legacy' in bundles:
            legacy = bundles['plone-legacy']
        else:
            legacy = bundles.setdefault('plone-legacy')
            legacy.resources = []
            legacy.enabled = True

        for child in node.childNodes:
            if child.nodeName != self.resource_type:
                continue

            data = {}
            add = True
            remove = False
            position = res_id = None
            for key, value in child.attributes.items():
                key = str(key)
                if key == 'update':
                    continue
                if key == 'remove' and value in (True, 'true', 'True'):
                    add = False
                    remove = True
                    continue
                if key in ('position-before', 'insert-before'):
                    position = ('before', queryUtility(
                        IIDNormalizer).normalize(str(value)))
                    continue
                if key in ('position-after', 'insert-after'):
                    position = ('after', queryUtility(
                        IIDNormalizer).normalize(str(value)))
                    continue
                if key in ('position-top', 'insert-top'):
                    position = ('*',)
                    continue
                if key in ('position-bottom', 'insert-bottom'):
                    position = ('',)
                    continue
                if key == 'id':
                    if value in self.resource_blacklist:
                        add = False
                        data.clear()
                        break
                    res_id = queryUtility(IIDNormalizer).normalize(str(value))
                    data['url'] = str(value)
                elif value.lower() == 'false':
                    data[key] = False
                elif value.lower() == 'true':
                    data[key] = True
                else:
                    try:
                        data[key] = int(value)
                    except ValueError:
                        data[key] = str(value)

            if add:
                proxy = resources.setdefault(res_id)
                if self.resource_type == 'javascript':
                    proxy.js = data['url']
                elif self.resource_type == 'stylesheet':
                    proxy.css = [data['url']]
                if 'enabled' in data and not data['enabled']:
                    # if we are disabling it, we need to remove from legacy resources
                    if res_id in legacy.resources:
                        legacy.resources.remove(res_id)
                    continue
                if res_id in legacy.resources:
                    # remove here so we can possible re-insert into whatever
                    # position is preferred below and then we do not
                    # re-add same resource multiple times
                    legacy.resources.remove(res_id)
                if position is None:
                    position = ('',)
                if position[0] == '*':
                    legacy.resources.insert(0, res_id)
                elif position[0] == '':
                    legacy.resources.append(res_id)
                elif position[0] == 'after':
                    if position[1] in legacy.resources:
                        legacy.resources.insert(
                            legacy.resources.index(position[1]) + 1,
                            res_id)
                    else:
                        legacy.resources.append(res_id)
                elif position[0] == 'before':
                    if position[1] in legacy.resources:
                        legacy.resources.insert(
                            legacy.resources.index(position[1]) + 1,
                            res_id)
                    else:
                        legacy.resources.append(res_id)

            if remove:
                if res_id in legacy.resources:
                    legacy.resources.remove(res_id)
                if res_id in resources:
                    del resources[res_id]

            # make sure to trigger committing to db
            # not sure this is necessary...
            legacy.resources = legacy.resources

        if 'plone.resources.last_legacy_import' in self.registry.records:  # noqa
            self.registry.records[
                'plone.resources.last_legacy_import'
            ].value = datetime.now()
            try:
                cookWhenChangingSettings(self.context, legacy)
            except (AssertionError, ComponentLookupError):
                # zope.globalrequest and the site might not be setup, don't error out
                pass
示例#29
0
 def upgrade(context, logger=None):
     cookWhenChangingSettings(portal.get())
示例#30
0
 def upgrade_function(site, logger=None):
     setup = getToolByName(site, 'portal_setup')
     full_profile_id = 'profile-castle.cms:{}'.format(profile_id)
     setup.runAllImportStepsFromProfile(full_profile_id)
     cookWhenChangingSettings(portal.get())
示例#31
0
def upgrade(context, logger=None):
    setup = getToolByName(context, 'portal_setup')
    setup.runAllImportStepsFromProfile(
        'profile-Products.PloneKeywordManager:default')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    cookWhenChangingSettings(api.portal.get())

    # upgrade upload fields
    registry = getUtility(IRegistry)

    if not registry.get('castle.file_upload_fields', None):
        # can be None or [] so we don't do an `is None` check here
        required_upload_fields = registry.get(
            'castle.required_file_upload_fields', []) or []
        registry['castle.file_upload_fields'] = [{
            u'name':
            u'title',
            u'label':
            u'Title',
            u'widget':
            u'text',
            u'required':
            unicode('title' in required_upload_fields).lower(),
            u'for-file-types':
            u'*'
        }, {
            u'name':
            u'description',
            u'label':
            u'Summary',
            u'widget':
            u'textarea',
            u'required':
            unicode('description' in required_upload_fields).lower(),
            u'for-file-types':
            u'*'
        }, {
            u'name':
            u'tags',
            u'label':
            u'Tags',
            u'widget':
            u'tags',
            u'required':
            unicode('tags' in required_upload_fields).lower(),
            u'for-file-types':
            u'*'
        }, {
            u'name':
            u'youtube_url',
            u'label':
            u'Youtube URL',
            u'widget':
            u'text',
            u'required':
            unicode('youtube_url' in required_upload_fields).lower(),
            u'for-file-types':
            u'video'
        }]
        if 'castle.required_file_upload_fields' in registry.records._fields:
            del registry.records['castle.required_file_upload_fields']
示例#32
0
def upgrade(context, logger=None):
    setup = getToolByName(context, 'portal_setup')
    setup.runAllImportStepsFromProfile('profile-Products.PloneKeywordManager:default')
    setup.runAllImportStepsFromProfile(PROFILE_ID)
    cookWhenChangingSettings(api.portal.get())