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()))
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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']
Ejemplo n.º 6
0
 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'))