def test_registry(self): """Test the different lookup methods on the registry. """ self.assertTrue(verifyObject(IDesignLookup, design_registry)) demo_designs = design_registry.lookup_design(self.root.page) demo_designs_by_id = {} self.assertEqual(len(demo_designs), 4) for design in demo_designs: self.assertTrue(verifyClass(IDesign, design)) demo_designs_by_id[design.get_design_identifier()] = design self.assertEqual(len(demo_designs_by_id), 4) # Test lookup_design_by_name self.assertIn('demo.one_column', demo_designs_by_id) self.assertIs( design_registry.lookup_design_by_name('demo.one_column'), demo_designs_by_id['demo.one_column']) # Test lookup_design_by_addable self.assertItemsEqual( design_registry.lookup_design_by_addable( self.root, extensionRegistry.get_addable('Mockup Page')), demo_designs)
def default_designs(form): registry = getUtility(IDesignLookup) design = None if isinstance(form, SMIAddForm): design = registry.default_design_by_addable( form.context, extensionRegistry.get_addable(form._content_type)) else: design = registry.default_design(form.context) if design is not None: return design return silvaforms.NO_VALUE
def design_source(form): """Source vocabulary for design. """ registry = getUtility(IDesignLookup) candidates = [] blacklist_identifier = None current_identifier = None if isinstance(form, SMIAddForm): candidates = registry.lookup_design_by_addable( form.context, extensionRegistry.get_addable(form._content_type)) else: candidates = registry.lookup_design(form.context) content = form.getContent() current = content.get_design() if current is not None: current_identifier = current.get_design_identifier() if IDesign.providedBy(content): # You cannot set a design used by this design here. blacklist_identifier = content.get_design_identifier() get_icon = IIconResolver(form.request).get_identifier_url def make_terms(): for candidate in candidates: namespace = 'silva.core.contentlayout.designs' if IPageModelVersion.providedBy(candidate): namespace = 'silva.core.contentlayout.models' candidate_identifier = candidate.get_design_identifier() used_candidates = candidate.get_all_design_identifiers() if (blacklist_identifier is not None and blacklist_identifier in used_candidates and candidate_identifier != current_identifier): continue if used_candidates: identifier = (namespace, used_candidates[-1]) else: identifier = ('default', namespace) icon = get_icon(identifier, default=namespace) yield Term(value=candidate, token=candidate_identifier, title=candidate.get_design_title(), icon=icon) return Vocabulary(list(make_terms()))
def _add(self, parent, data): """Purely create the object. This method can be overriden to support custom creation needs. """ # Search for an addable and a factory addable = extensionRegistry.get_addable(self._content_type) if not addable: raise ValueError(u"Content factory cannot be found. ") factory = getattr( resolve(addable['instance'].__module__), getFactoryName(addable['instance'])) # Build the content identifier = str(data.getWithDefault('id')) factory(parent, identifier, data.getWithDefault('title')) content = getattr(parent, identifier) self._edit(parent, content, data) return content
def get_content_class(content_type): #XXX: is this the correct way addable = extensionRegistry.get_addable(content_type) if addable is None: raise ValueError('Unknow content type %s' % content_type) return addable['instance']
def update(self): addable = extensionRegistry.get_addable(self.view._content_type) self.name = addable.get('name') self.description = addable.get('doc') self.icon = IIconResolver(self.request).get_tag( identifier=addable.get('name'))