class TabBlockController(BlockController): grok.adapts(TabBlock, Interface, IHTTPRequest) def __init__(self, block, context, request): super(TabBlockController, self).__init__(block, context, request) self._references = ReferenceSet(self.context, block.identifier) def editable(self): return True @apply def content(): def getter(self): return self._references.get() def setter(self, value): self._references.set(value) return property(getter, setter) def remove(self): self._references.clear() def render(self, view=None): return TabRenderer(self.content, self.request)()
def get_references(self, name): ref_set = ReferenceSet(self.context, name) options = self.getOptions() exported = self.getExported() have_external = 0 root = exported.root for reference in ref_set.get_references(): if not options.external_rendering: if not reference.target_id: # The reference is broken. Return an empty path. yield "" if not reference.is_target_inside_container(root): if options.external_references: have_external += 1 continue else: raise ExternalReferenceError( _(u"External references"), self.context, reference.target, root) # Add root path id as it is always mentioned in exports path = [root.getId()] + reference.relative_path_to(root) yield '/'.join(canonical_tuple_path(path)) else: # Return url to the target yield absoluteURL(reference.target, exported.request) if have_external: # Report the collected problems. exported.reportProblem( (u'Content contains {0} reference(s) pointing outside ' + u'of the export.').format( have_external), self.context)
def __call__(self, value): multiple = bool(self.field._field.get_value('multiple')) if isinstance(value, ReferencesSolver): value.defer(self.__call__, not multiple, self.context) return if value is None: value = [] elif multiple: assert isinstance(value, list) else: assert ISilvaObject.providedBy(value) value = [value] if self.identifier in self.content.__dict__: identifier = self.content.__dict__[self.identifier] else: identifier = unicode(uuid.uuid1()) self.content.__dict__[self.identifier] = identifier self.content._p_changed = True references = ReferenceSet(self.context, identifier) references.set(value)
def test_source_asset(self): importer = self.assertImportFile( 'test_import_source_asset.silvaxml', ['/root/folder', '/root/folder/asset']) self.assertEqual(importer.getProblems(), []) asset = self.root.folder.asset self.assertTrue(verifyObject(ISourceAsset, asset)) version = asset.get_editable() self.assertTrue(verifyObject(ISourceAssetVersion, version)) source = version.get_source() self.assertEquals('cs_toc', source.getId()) params = version.get_parameters() self.assertIn(self.root.folder, ReferenceSet(version, params.paths)) self.assertEquals(set(['Silva Folder']), set(params.toc_types))
def test_source_asset_unknown_parameters(self): """This export contains extra unknown parameters. """ importer = self.assertImportFile( 'test_import_source_asset_unknown_parameters.silvaxml', ['/root/folder', '/root/folder/asset']) self.assertEqual(importer.getProblems(), []) asset = self.root.folder.asset self.assertTrue(verifyObject(ISourceAsset, asset)) version = asset.get_editable() self.assertTrue(verifyObject(ISourceAssetVersion, version)) source = version.get_source() self.assertEqual(source.getId(), 'cs_toc') params = version.get_parameters() self.assertIn(self.root.folder, ReferenceSet(version, params.paths)) self.assertEqual(set(params.toc_types), set(['Silva Folder'])) self.assertIs(getattr(params, 'space_depth', None), None)
def __init__(self, block, context, request): super(TabBlockController, self).__init__(block, context, request) self._references = ReferenceSet(self.context, block.identifier)
def delete(self): if self.identifier in self.content.__dict__: identifier = self.content.__dict__[self.identifier] references = ReferenceSet(self.context, identifier) references.set([]) del self.content.__dict__[self.identifier]