def test_moveable(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') mover = IObjectMover(file) self.failUnless(mover.moveable())
def test_copyfolderfromroot(self): root = self.rootFolder target = traverse(root, '/folder2') source = traverse(root, '/folder1') copier = IObjectCopier(source) copier.copyTo(target) self.assertTrue('folder1' in target)
def test_movefolderfromroot(self): root = self.rootFolder target = traverse(root, '/folder2') source = traverse(root, '/folder1') mover = IObjectMover(source) mover.moveTo(target) self.assertTrue('folder1' in target)
def test_movefoldertosibling(self): root = self.rootFolder target = traverse(root, '/folder2') source = traverse(root, '/folder1/folder1_1') mover = IObjectMover(source) mover.moveTo(target) self.failUnless('folder1_1' in target)
def test_omitted_value(self): self.getRootFolder()['test'] = DatetimeTest() transaction.commit() # remember default values object = traverse(self.getRootFolder(), 'test') d1 = object.d1 d2 = object.d2 self.assert_(d2 is not None) d3 = object.d3 # submit change with only d2 present -- note that required # field d1 is omitted, which should not cause a validation error response = self.publish('/test/edit.html', form={ 'UPDATE_SUBMIT': '', 'field.d2': '' }) self.assertEqual(response.getStatus(), 200) self.assert_(updatedMsgExists(response.getBody())) # check new value in object object = traverse(self.getRootFolder(), 'test') self.assertEqual(object.d1, d1) self.assert_(object.d2 is None) self.assertEqual(object.d3, d3)
def test_movefolderfromroot2(self): root = self.rootFolder target = traverse(root, '/folder2/folder2_1/folder2_1_1') source = traverse(root, '/folder1') mover = IObjectMover(source) mover.moveTo(target) self.failUnless('folder1' in target)
def test_copyable(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) self.failUnless(copier.copyable())
def test_copyfolderfromroot2(self): root = self.rootFolder target = traverse(root, '/folder2/folder2_1/folder2_1_1') source = traverse(root, '/folder1') copier = IObjectCopier(source) copier.copyTo(target) self.failUnless('folder1' in target)
def __call__(self): """Create breadcrumbs for an interface object. The breadcrumbs are rooted at the code browser. """ docroot = findAPIDocumentationRoot(self.context) codeModule = traverse(docroot, "Code") crumbs = [{ 'name': _('[top]'), 'url': absoluteURL(codeModule, self.request) }] # We need the __module__ of the interface, not of a location proxy, # so we have to remove all proxies. iface = removeAllProxies(self.context) mod_names = iface.__module__.split('.') obj = codeModule for name in mod_names: try: obj = traverse(obj, name) except KeyError: # pragma: no cover # An unknown (root) module, such as logging continue crumbs.append({ 'name': name, 'url': absoluteURL(obj, self.request) }) crumbs.append({ 'name': iface.__name__, 'url': absoluteURL(self.context, self.request) }) return crumbs
def test_omitted_value(self): self.getRootFolder()['test'] = TextTest() transaction.commit() # confirm default values object = traverse(self.getRootFolder(), 'test') self.assertEqual(object.s1, '') self.assertEqual(object.s2, u'foo') self.assert_(object.s3 is None) # submit change with only s2 present -- note that required # field s1 is omitted, which should not cause a validation error response = self.publish('/test/edit.html', form={ 'UPDATE_SUBMIT': '', 'field.s2': u'bar' }) self.assertEqual(response.getStatus(), 200) self.assert_(updatedMsgExists(response.getBody())) # check new values in object object = traverse(self.getRootFolder(), 'test') self.assertEqual(object.s1, '') self.assertEqual(object.s2, u'bar') self.assert_(object.s3 is None)
def test_omitted_value(self): self.getRootFolder()['test'] = DecimalTest() transaction.commit() # confirm default values object = traverse(self.getRootFolder(), 'test') self.assert_(object.f1 is None) self.assertEqual(object.f2, decimal.Decimal("1.1")) self.assertEqual(object.f3, decimal.Decimal("2.1")) # submit change with only f2 present -- note that required # field f1 is omitted, which should not cause a validation error response = self.publish('/test/edit.html', form={ 'UPDATE_SUBMIT': '', 'field.f2': '' }) self.assertEqual(response.getStatus(), 200) self.assert_(updatedMsgExists(response.getBody())) # check new value in object object = traverse(self.getRootFolder(), 'test') self.assert_(object.f1 is None) self.assert_(object.f2 is None) self.assertEqual(object.f3, decimal.Decimal("2.1"))
def test_copyableTo(self): # A file should be copyable to a folder that has an # object with the same id. root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) self.failUnless(copier.copyableTo(container, 'file1'))
def test_copytosamewithnewname(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) copier.copyTo(container, 'file2') self.failUnless('file1' in container) self.failUnless('file2' in container)
def test_movefoldertosame2(self): # Should be a noop, because "moving" to same location root = self.rootFolder target = traverse(root, '/folder1/folder1_1') source = traverse(root, '/folder1/folder1_1/folder1_1_1') mover = IObjectMover(source) mover.moveTo(target) self.failUnless('folder1_1_1' in target) self.assertEquals(len(target), 1)
def test_movetosamewithnewname(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') mover = IObjectMover(file) mover.moveTo(container, 'file2') self.failIf('file1' in container) self.failUnless('file2' in container)
def test_copytosame(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) copier.copyTo(container, 'file1') self.assertTrue('file1' in container) self.assertTrue('file1-2' in container)
def test_moveableTo(self): # A file should be moveable to a folder that has an # object with the same id. root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') mover = IObjectMover(file) self.assertTrue(mover.moveableTo(container, 'file1'))
def test_movetootherwithnewname(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() target = traverse(root, 'folder2') file = traverse(root, 'folder1/file1') mover = IObjectMover(file) mover.moveTo(target, 'file2') self.assertFalse('file1' in container) self.assertTrue('file2' in target)
def test_movetoother(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() target = traverse(root, 'folder2') file = traverse(root, 'folder1/file1') mover = IObjectMover(file) mover.moveTo(target, 'file1') self.failIf('file1' in container) self.failUnless('file1' in target)
def test_copytootherwithnewname(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() target = traverse(root, 'folder2') file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) copier.copyTo(target, 'file2') self.assertTrue('file1' in container) self.assertTrue('file2' in target)
def test_movetosame(self): # Should be a noop, because "moving" to same location root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() file = traverse(root, 'folder1/file1') mover = IObjectMover(file) mover.moveTo(container, 'file1') self.failUnless('file1' in container) self.assertEquals(len(container), 2)
def test_copytoother(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() target = traverse(root, 'folder2') file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) copier.copyTo(target, 'file1') self.failUnless('file1' in container) self.failUnless('file1' in target)
def testCutFolder3(self): container = traverse(self.rootFolder, '/folder1/folder1_1') target = traverse(self.rootFolder, '/folder2/folder2_1') fc = self._TestView__newView(container) tg = self._TestView__newView(target) ids = ['folder1_1_1'] fc.request.form['ids'] = ids fc.cutObjects() tg.pasteObjects() self.failIf('folder1_1_1' in container) self.failIf('folder1_1_1' not in target)
def test_notify(self): for setup in (lambda: None), self.createRootFolder, self.createRFAndSM: setup() bootStrapSubscriber(EventStub(self.db)) cx = self.db.open() root = cx.root() root_folder = root.get(ZopePublication.root_name, None) self.assertTrue(IRootFolder.providedBy(root_folder)) package_name = '/++etc++site/default' traverse(root_folder, package_name) cx.close()
def setPath(self): test_path = self.getPath() if test_path: try: api.traverse(self.context, '++resource++' + test_path, request=self.request) except LocationError: log.exception("Translation for requested language does " "not exist") test_path = None return test_path or self.default_path
def test_copytootherwithnamecollision(self): root = self.rootFolder container = traverse(root, 'folder1') container['file1'] = File() target = traverse(root, 'folder2') target['file1'] = File() file = traverse(root, 'folder1/file1') copier = IObjectCopier(file) copier.copyTo(target, 'file1') # we do it twice, just to test auto-name generation copier.copyTo(target, 'file1') self.failUnless('file1' in container) self.failUnless('file1' in target) self.failUnless('file1-2' in target) self.failUnless('file1-3' in target)
def hasClipboardContents(self): """Interogate the ``PrinicipalAnnotation`` to see if clipboard contents exist.""" if not self.isPasteable: return False # touch at least one item in clipboard to confirm contents items = self.clipboard.getContents() for item in items: try: api.traverse(self.context, item['target']) except TraversalError: pass else: return True return False
def icon(self): if self._icon is None: return None icon = self._icon if (callable(icon)): icon = icon() return traverse(self.context, icon, icon, self.request)
def children_utility(self, container): """Return an XML document that contains the children of an object.""" result = [] keys = list(container.keys()) # include the site manager keys.append(u'++etc++site') # dont get children if we get more than 1000 objects if len(keys)>=1000: keys = [u'++etc++site'] for name in keys: # Only include items we can traverse to item = traverse(container, name, None) if item is None: continue iconUrl = self.getIconUrl(item) item_len = self.getLengthOf(item) if item_len >= 0: result.append(xmlEscape( u'<collection name=%s length=%s icon_url=%s/>', name, item_len, iconUrl)) else: result.append(xmlEscape( u'<item name=%s icon_url=%s/>', name, iconUrl)) return u' '.join(result)
def setUp(self): setup.placefulSetUp() self.rootFolder = setup.buildSampleFolderTree() gsm = getGlobalSiteManager() de_catalog = MessageCatalog("de", "default") de_catalog.setMessage("short_greeting", "Hallo!", 10) de_catalog.setMessage("long_greeting", "Guten Tag!", 10) # register global translation domain and add the catalog. domain = GlobalTranslationDomain("default") domain.addCatalog(de_catalog) gsm.registerUtility(domain, ITranslationDomain, "default") # create a local site manager and add a local translation domain td = TranslationDomain() td.domain = "default" de_catalog = MessageCatalog("de", "default") de_catalog.setMessage("short_greeting", "Hallo Welt!", 10) td["de-default-1"] = de_catalog mgr = setup.createSiteManager(traverse(self.rootFolder, "folder1")) setup.addUtility(mgr, "default", interfaces.ILocalTranslationDomain, td) self.trans1 = td self.trans = domain
def getResources(self): resources = [] append = resources.append for path in self._paths: append(api.traverse(self.context, '++resource++' + path, request=self.request)) return resources
def setUp(self): psetup = PlacefulSetup() self.sm = psetup.setUp(True, True) self.rootFolder = psetup.rootFolder setUpSiteManagerLookup() import zope.i18n.interfaces import zope.i18n.negotiator provideUtility(zope.i18n.negotiator.negotiator, zope.i18n.interfaces.INegotiator) gsm = getGlobalSiteManager() de_catalog = MessageCatalog('de', 'default') de_catalog.setMessage('short_greeting', 'Hallo!', 10) de_catalog.setMessage('long_greeting', 'Guten Tag!', 10) # register global translation domain and add the catalog. domain = GlobalTranslationDomain('default') domain.addCatalog(de_catalog) gsm.registerUtility(domain, ITranslationDomain, 'default') # create a local site manager and add a local translation domain td = TranslationDomain() td.domain = 'default' de_catalog = MessageCatalog('de', 'default') de_catalog.setMessage('short_greeting', 'Hallo Welt!', 10) td['de-default-1'] = de_catalog mgr = createSiteManager(traverse(self.rootFolder, 'folder1')) mgr['default']['default'] = td mgr.registerUtility(mgr['default']['default'], ITranslationDomain, 'default') self.trans1 = td self.trans = domain
def test_alternative_missing_value(self): """Tests the addition of an empty value at the top of the dropdown that, when selected, updates the field with field.missing_value. """ self.getRootFolder()['test'] = IntTest2() # note alt. class transaction.commit() # display edit form response = self.publish('/test/edit.html') self.assertEqual(response.getStatus(), 200) # confirm that i1 is has a blank item at top with value="" self.assert_( patternExists('<select id="field.i1" name="field.i1" .*>', response.getBody())) self.assert_( patternExists('<option value="">.*</option>', response.getBody())) self.assert_( patternExists('<option selected="selected" value="10">10</option>', response.getBody())) # submit form as if top item is selected response = self.publish('/test/edit.html', form={ 'UPDATE_SUBMIT': '', 'field.i1-empty-marker': '1' }) self.assertEqual(response.getStatus(), 200) self.assert_(updatedMsgExists(response.getBody())) # confirm new value is -1 -- i1.missing_value object = traverse(self.getRootFolder(), 'test') self.assertEqual(object.i1, -1)
def pasteable(self): """Decide if there is anything to paste """ target = self.context clipboard = getPrincipalClipboard(self.request) items = clipboard.getContents() for item in items: try: obj = traverse(target, item['target']) except TraversalError: pass else: if item['action'] == 'cut': mover = IObjectMover(obj) moveableTo = self.safe_getattr(mover, 'moveableTo', None) if moveableTo is None or not moveableTo(target): return False elif item['action'] == 'copy': copier = IObjectCopier(obj) copyableTo = self.safe_getattr(copier, 'copyableTo', None) if copyableTo is None or not copyableTo(target): return False else: raise return True
def setUp(self): setup.placefulSetUp() self.rootFolder = setup.buildSampleFolderTree() gsm = getGlobalSiteManager() de_catalog = MessageCatalog('de', 'default') de_catalog.setMessage('short_greeting', 'Hallo!', 10) de_catalog.setMessage('long_greeting', 'Guten Tag!', 10) # register global translation domain and add the catalog. domain = GlobalTranslationDomain('default') domain.addCatalog(de_catalog) gsm.registerUtility(domain, ITranslationDomain, 'default') # create a local site manager and add a local translation domain td = TranslationDomain() td.domain = 'default' de_catalog = MessageCatalog('de', 'default') de_catalog.setMessage('short_greeting', 'Hallo Welt!', 10) td['de-default-1'] = de_catalog mgr = setup.createSiteManager(traverse(self.rootFolder, 'folder1')) setup.addUtility( mgr, 'default', interfaces.ILocalTranslationDomain, td) self.trans1 = td self.trans = domain
def testCutFolder(self): container = traverse(self.rootFolder, 'folder1') fc = self._TestView__newView(container) ids = ['folder1_1'] fc.request.form['ids'] = ids fc.cutObjects() fc.pasteObjects() self.failIf('folder1_1' not in container)
def getResources(self): resources = [] append = resources.append for path in self._paths: append( api.traverse(self.context, '++resource++' + path, request=self.request)) return resources
def hasClipboardContents(self): """Interogate the ``PrinicipalAnnotation`` to see if clipboard contents exist.""" if not self.supportsPaste: return False # touch at least one item to in clipboard confirm contents clipboard = getPrincipalClipboard(self.request) items = clipboard.getContents() for item in items: try: traverse(self.context, item['target']) except TraversalError: pass else: return True return False
def __get__(self, inst, cls=None): if inst is None: return self try: # Use __dict__ directly to avoid infinite recursion root = inst.__dict__['rootFolder'] except KeyError: root = inst.rootFolder = setup.buildSampleFolderTree() return traverse(root, self.path)
def test(self): from schooltool.app.security import authSetUpSubscriber self.assertRaises(ComponentLookupError, self.app.getSiteManager) event = ObjectAddedEvent(self.app) authSetUpSubscriber(self.app, event) auth = traverse(self.app, '++etc++site/default/SchoolToolAuth') auth1 = getUtility(IAuthentication, context=self.app) self.assert_(auth is auth1) # If we fire the event again, it does not fail. Such events # are fired when the object is copied and pasted. authSetUpSubscriber(self.app, event)
def getResources(self): resources = [] append = resources.append for item in self._items: info = {} info['url'] = api.traverse(self.context, '++resource++' + item.get('path'), request=self.request) info['media'] = item.get('media', 'all') info['rel'] = item.get('rel', 'stylesheet') append(info) return resources
def testCutPaste(self): container = traverse(self.rootFolder, 'folder1') fc = self._TestView__newView(container) ids = ['document1', 'document2'] for id in ids: document = Document() container[id] = document fc.request.form['ids'] = ids fc.cutObjects() fc.pasteObjects() self.failIf('document1' not in container) self.failIf('document2' not in container)
def getResources(self): """ Retrieve all the resources in our desired paths using the :class:`++resource++ namespace <zope.traversing.namespace.resource>` """ resources = [] append = resources.append for path in self._paths: append( api.traverse(self.context, '++resource++' + path, request=self.request)) return resources