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 })
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())
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())
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, )
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 })
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())
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, })
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 })
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, })
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', ())
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 })
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 })
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, })
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 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 upgrade(context, logger=None): setup = getToolByName(context, 'portal_setup') setup.runAllImportStepsFromProfile(PROFILE_ID) cookWhenChangingSettings(api.portal.get())
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
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
def upgrade(context, logger=None): cookWhenChangingSettings(portal.get())
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())
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']
def upgrade(context, logger=None): setup = getToolByName(context, 'portal_setup') setup.runAllImportStepsFromProfile('profile-Products.PloneKeywordManager:default') setup.runAllImportStepsFromProfile(PROFILE_ID) cookWhenChangingSettings(api.portal.get())