def test_exportXML(self):
        from OFS.Folder import Folder
        from OFS.Image import Image
        from OFS.XMLExportImport import exportXML

        connection, app = self._makeJarAndRoot()
        data = open(imagedata, 'rb')

        sub = Folder('sub')
        app._setObject('sub', sub)
        img = Image('image', '', data, 'image/gif')
        sub._setObject('image', img)
        img._setProperty('prop1', 3.14159265359, 'float')
        img._setProperty('prop2', 1, 'int')
        img._setProperty('prop3', 2L**31-1, 'long')
        img._setProperty('prop4', 'xxx', 'string')
        img._setProperty('prop5', ['xxx', 'zzz'], 'lines')
        img._setProperty('prop6', u'xxx', 'unicode')
        img._setProperty('prop7', [u'xxx', u'zzz'], 'ulines')
        img._setProperty('prop8', '<&>', 'string')
        img._setProperty('prop9', u'<&>', 'unicode')
        img._setProperty('prop10', '<]]>', 'string')
        img._setProperty('prop11', u'<]]>', 'unicode')
        img._setProperty('prop12', u'£', 'unicode')
        transaction.savepoint(optimistic=True)
        oid = sub._p_oid

        handle, path = tempfile.mkstemp(suffix='.xml')
        try:
            ostream = os.fdopen(handle,'wb')
            data = exportXML(connection, oid, ostream)
            ostream.close()
        finally:
            os.remove(path)
Example #2
0
 def __init__(self, id, respondent, draft, creation_date):
     Folder.__init__(self, id)
     NyProperties.__init__(self)
     self.respondent = respondent
     self.draft = bool(draft)
     self.modification_time = DateTime()
     self.creation_date = creation_date
    def test_OFS_ObjectManager__importObjectFromFile_xml(self):
        from OFS.DTMLMethod import DTMLMethod
        from OFS.Folder import Folder
        from OFS.XMLExportImport import exportXML

        connection, app = self._makeJarAndRoot()
        dm = DTMLMethod('test')
        dm._setId('test')
        dm.munge(_LONG_DTML)
        app._setObject('test', dm)
        sub = Folder('sub')
        app._setObject('sub', sub)
        transaction.savepoint(optimistic=True) # need an OID!
        oid = dm._p_oid
        sub = app._getOb('sub')

        handle, path = tempfile.mkstemp(suffix='.xml')
        try:
            ostream = os.fdopen(handle,'wb')
            data = exportXML(connection, oid, ostream)
            ostream.close()
            sub._importObjectFromFile(path, 0, 0)
        finally:
            # if this operaiton fails with a 'Permission Denied' error,
            # then comment it out as it's probably masking a failure in
            # the block above.
            os.remove(path)
Example #4
0
 def __init__(self, *args, **kw):
     Folder.__init__(self, *args, **kw)
     SilvaService.__init__(self, *args, **kw)
     self._config_declarations = {}
     self._per_tag_allowed_attr = set(DEFAULT_PER_TAG_WHITELISTS)
     self._allowed_html_attributes = set(DEFAULT_HTML_ATTR_WHITELIST)
     self._allowed_css_attributes = set(DEFAULT_CSS_PROP_WHITELIST)
Example #5
0
 def test_foreign_line_endings(self):
     # Load the various line ending files and get their output
     container = Folder("container_for_execution")
     for fformat in ("unix", "dos", "mac"):
         container._setObject(fformat, self._makeOne(fformat, "test_%s.py" % fformat))
         script = getattr(container, fformat)
         self.assertEqual(script(), fformat)
Example #6
0
def manage_addMounts(dispatcher, paths=(), create_mount_points=True,
                     REQUEST=None):
    """Adds MountedObjects at the requested paths.
    """
    count = 0
    app = dispatcher.getPhysicalRoot()
    for path in paths:
        mo = MountedObject(path)
        mo._create_mount_points = not not create_mount_points
        # Raise an error now if there is any problem.
        mo._test(app)
        blazer = SimpleTrailblazer(app)
        container = blazer.traverseOrConstruct(path, omit_final=1)
        container._p_jar.add(mo)
        loaded = mo.__of__(container)

        # Add a faux object to avoid generating manage_afterAdd() events
        # while appeasing OFS.ObjectManager._setObject(), then discreetly
        # replace the faux object with a MountedObject.
        faux = Folder()
        faux.id = mo.id
        faux.meta_type = loaded.meta_type
        container._setObject(faux.id, faux)
        # DM 2005-05-17: we want to keep our decision about automatic
        #  mount point creation
        #del mo._create_mount_points
        container._setOb(faux.id, mo)
        setMountPoint(container, faux.id, mo)
        count += 1
    if REQUEST is not None:
        REQUEST['RESPONSE'].redirect(
            REQUEST['URL1'] + ('/manage_main?manage_tabs_message='
            'Added %d mount points.' % count))
    def test_pruneMemberData(self):
        # This needs a tad more setup
        from OFS.Folder import Folder
        from ..MembershipTool import MembershipTool
        folder = Folder('test')
        folder._setObject('portal_memberdata', self._makeOne())
        sm = getSiteManager()
        sm.registerUtility(MembershipTool().__of__(folder), IMembershipTool)
        folder._setObject('acl_users', DummyUserFolder())
        tool = folder.portal_memberdata

        # Create some members
        for i in range(20):
            tool.registerMemberData('Dummy_%i' % i, 'user_foo_%i' % i)

        # None of these fake members are in the user folder, which means
        # there are 20 members and 20 "orphans"
        contents = tool.getMemberDataContents()
        info_dict = contents[0]
        self.assertEqual(info_dict['member_count'], 20)
        self.assertEqual(info_dict['orphan_count'], 20)

        # Calling the prune method should delete all orphans, so we end
        # up with no members in the tool.
        tool.pruneMemberDataContents()
        contents = tool.getMemberDataContents()
        info_dict = contents[0]
        self.assertEqual(info_dict['member_count'], 0)
        self.assertEqual(info_dict['orphan_count'], 0)
Example #8
0
    def test_upo_state_after_deactivate(self):
        # An unmanaged persistent object that gets deactivated
        # and reactivated should have the most recent state.
        self.db.setCacheSize(10)  # Don't flush the objects at commit
        conn = self.db.open()
        try:
            app = conn.root()['Application']
            f = Folder()
            f.id = 'Holidays'
            f.stowaway = Folder()
            f.stowaway.id = 'stowaway'
            f.stowaway._prop = 'value1'
            app._setObject(f.id, f, set_owner=0)
            transaction.commit()
            self.assertEqual(f._p_changed, 0)

            self.assertEqual(f.stowaway._p_oid, 'unmanaged')
            f.stowaway._prop = 'value2'
            transaction.commit()
            self.assertEqual(f._p_changed, 0)

            del f.stowaway._p_changed
            self.assertEqual(f.stowaway._p_changed, None)
            self.assertEqual(f.stowaway._prop, 'value2')
        finally:
            conn.close()
Example #9
0
    def test_btreefolder2(self):
        from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2
        conn = self.db.open()
        try:
            app = conn.root()['Application']
            f = BTreeFolder2('Holidays')
            f.id = 'Holidays'
            app._setObject(f.id, f, set_owner=0)
            f2 = Folder()
            f2.id = 'Easter'
            app.Holidays._setObject(f2.id, f2)
            transaction.commit()
            # Verify serialize() found the unmanaged subobjects.
            self.assertEqual(app.Holidays._tree._p_oid, 'unmanaged')
            # Sanity check
            self.assertEqual(app.Holidays.objectCount(), 1)

            conn2 = self.db.open()
            try:
                app2 = conn2.root()['Application']
                self.assert_(app2.Holidays._tree.has_key('Easter'))
                self.assert_(not app2.Holidays.__dict__.has_key('Easter'))
                # Verify deserialize() found the unmanaged subobjects.
                self.assertEqual(app2.Holidays._tree._p_oid, 'unmanaged')
                app2.Holidays._delObject('Easter')
                transaction.commit()
            finally:
                conn2.close()

            # The deletion should be seen by both connections.
            conn.sync()
            self.assertEqual(app.Holidays.objectCount(), 0)

        finally:
            conn.close()
Example #10
0
    def test_anyfolder_storage(self):
        # Try to store a folderish object of an otherwise unknown class
        conn = self.db.open()
        try:
            app = conn.root()['Application']
            f = Folder()
            f.id = 'Holidays'
            app._setObject(f.id, f, set_owner=0)
            transaction.commit()

            f2 = TestFolder("New Year's Eve")
            f2.id = 'NewYear'
            f._setObject(f2.id, f2, set_owner=0)
            transaction.commit()

            # Verify the object is in its own database record
            self.assertNotEqual(f2._p_oid, None)
            f2._p_changed = None
            self.assert_(f2._p_changed is None)

            # Verify the ability to load it
            conn2 = self.db.open()
            try:
                app2 = conn2.root()['Application']
                ff = app2.Holidays.NewYear
                self.assertEqual(ff.title, "New Year's Eve")
                self.assertEqual(ff.__class__, TestFolder)
            finally:
                conn2.close()
        finally:
            conn.close()
Example #11
0
    def test_rename(self):
        conn = self.db.open()
        try:
            app = conn.root()['Application']
            f = Folder()
            f.id = 'Holidays'
            app._setObject(f.id, f, set_owner=0)
            transaction.commit()

            # Do what manage_rename does, without the security checks
            ob = app.Holidays.aq_base
            app._delObject('Holidays')
            ob._setId('HolidayCalendar')
            app._setObject(ob.id, ob, set_owner=0)
            transaction.commit()

            self.assert_(hasattr(app, 'HolidayCalendar'))
            self.assert_(not hasattr(app, 'Holidays'))

            conn2 = self.db.open()
            try:
                app = conn2.root()['Application']
                self.assert_(hasattr(app, 'HolidayCalendar'))
                self.assert_(not hasattr(app, 'Holidays'))
            finally:
                conn2.close()

        finally:
            conn.close()
Example #12
0
    def test_required_tools_missing_acquired_nofail( self ):

        from Products.GenericSetup.tool import TOOLSET_XML
        from Products.GenericSetup.tool import importToolset

        site = self._initSite()
        parent_site = Folder()

        mandatory = AnotherDummyTool()
        mandatory._setId( 'mandatory' )
        parent_site._setObject( 'mandatory', mandatory )

        obligatory = AnotherDummyTool()
        obligatory._setId( 'obligatory' )
        parent_site._setObject( 'obligatory', obligatory )

        site = site.__of__(parent_site)

        # acquiring subobjects of a different class during import
        # should not prevent new objects from being created if they
        # don't exist in the site

        context = DummyImportContext( site, tool=site.setup_tool )
        context._files[ TOOLSET_XML ] = _REQUIRED_TOOLSET_XML

        importToolset( context )

        self.failIf( aq_base( site._getOb( 'mandatory' ) ) is mandatory )
        self.failUnless( isinstance( aq_base( site._getOb( 'mandatory' ) )
                                   , DummyTool ) )

        self.failIf( aq_base( site._getOb( 'obligatory' ) ) is obligatory )
        self.failUnless( isinstance( aq_base( site._getOb( 'obligatory' ) )
                                   , DummyTool ) )
Example #13
0
    def _makeRoot( self ):

        from OFS.Folder import Folder
        root = Folder( 'root' )
        tt = DummyTypesTool()
        root._setObject( 'portal_types', tt )
        return root
Example #14
0
    def test_store(self):
        conn = self.db.open()
        try:
            app = conn.root()['Application']
            f = Folder()
            f.id = 'Holidays'
            app._setObject(f.id, f, set_owner=0)
            transaction.commit()

            f2 = Folder()
            f2.id = 'Christmas'
            f._setObject(f2.id, f2, set_owner=0)
            transaction.commit()

            f3 = Folder()
            f3.id = 'Eve'
            f2._setObject(f3.id, f3, set_owner=0)
            transaction.commit()

            conn2 = self.db.open()
            try:
                app = conn2.root()['Application']
                self.assert_(hasattr(app, 'Holidays'))
                self.assert_(hasattr(app.Holidays, 'Christmas'))
                self.assert_(hasattr(app.Holidays.Christmas, 'Eve'))
                # Verify the same OID is seen in both connections.
                self.assertEqual(app.Holidays._p_oid, f._p_oid)
            finally:
                conn2.close()

        finally:
            conn.close()
Example #15
0
 def testGenerateIdDenialOfServicePrevention(self):
     for n in range(10):
         item = Folder()
         item.id = "item%d" % n
         self.f._setOb(item.id, item)
     self.f.generateId("item", rand_ceiling=20)  # Shouldn't be a problem
     self.assertRaises(ExhaustedUniqueIdsError, self.f.generateId, "item", rand_ceiling=9)
Example #16
0
    def test_forbidden_tools( self ):

        from Products.GenericSetup.tool import TOOLSET_XML
        from Products.GenericSetup.tool import importToolset
        TOOL_IDS = ( 'doomed', 'blasted', 'saved' )

        site = self._initSite()

        for tool_id in TOOL_IDS:
            pseudo = Folder()
            pseudo._setId( tool_id )
            site._setObject( tool_id, pseudo )

        self.assertEqual( len( site.objectIds() ), len( TOOL_IDS ) + 1 )

        for tool_id in TOOL_IDS:
            self.failUnless( tool_id in site.objectIds() )

        context = DummyImportContext( site, tool=site.setup_tool )
        context._files[ TOOLSET_XML ] = _FORBIDDEN_TOOLSET_XML

        importToolset( context )

        self.assertEqual( len( site.objectIds() ), 2 )
        self.failUnless( 'setup_tool' in site.objectIds() )
        self.failUnless( 'saved' in site.objectIds() )
Example #17
0
 def test_foreign_line_endings( self ):
     # Load the various line ending files and get their output
     container = Folder('container_for_execution')
     for fformat in ('unix', 'dos', 'mac'):
         container._setObject(fformat,
             self._makeOne(fformat, 'test_%s.py' % fformat))
         script = getattr(container, fformat)
         self.assertEqual(script(), fformat)
Example #18
0
    def _makeSite( self, title="Don't care" ):

        site = Folder()
        site._setId( 'site' )
        site.title = title

        self.app._setObject( 'site', site )
        return self.app._getOb( 'site' )
 def manage_renameObject(self, id, new_id, REQUEST=None):
     """
     wrap manage_renameObject to deal with registration
     """
     catalog = self._getOb(id)
     self._unregisterMessageCatalog(catalog)
     Folder.manage_renameObject(self, id, new_id, REQUEST=None)
     self._registerMessageCatalog(catalog)
 def __init__(self, id, title, forum, creator=None, commenttext=''):
     Folder.__init__(self, id)
     ContentMock.__init__(self, id, title, creator)
     self.forum = forum
     self.comments = []
     comment = CommentMock(id, title, self, creator, commenttext)
     self.comments.append(comment)
     comment = comment.__of__(self)
     self._setObject(id, comment)
Example #21
0
    def _initSite( self ):

        from Products.CMFSetup.tool import SetupTool
        site = Folder()
        site._setId( 'site' )
        self.root._setObject( 'site', site )
        site = self.root._getOb( 'site' )
        site._setObject( 'portal_setup', SetupTool() )
        return site
Example #22
0
def backupACLUserFolder(context):
    timestamp = datetime.now().strftime('%Y.%d.%m-%H%M%S')
    randomBit = int(random() * 10000)
    backupFolderName = 'backup_acl_users_%s-%d' % (timestamp, randomBit)
    backupFolder = Folder(backupFolderName)
    backupFolder._setObject('acl_users', context.acl_users)
    context._setObject(backupFolder.getId(), backupFolder)
    context._delObject('acl_users')
    return backupFolderName
Example #23
0
    def _initSite( self ):

        from Products.GenericSetup.tool import SetupTool
        site = Folder()
        site._setId( 'site' )
        self.app._setObject( 'site', site )
        site = self.app._getOb( 'site' )
        site._setObject('setup_tool', SetupTool('setup_tool'))
        return site
Example #24
0
 def __init__(self, id, title, description, coverage, keywords, sortorder,
     file, precondition, releasedate, lang):
     """
     Constructor.
     """
     self.save_properties(title, description, coverage, keywords, sortorder,
                          releasedate, lang)
     Folder.__init__(self, id)
     NyProperties.__dict__['__init__'](self)
class VHMAddingTests(unittest.TestCase):

    def setUp(self):
        from OFS.Folder import Folder
        super(VHMAddingTests, self).setUp()
        self.root = Folder('root')

    def _makeOne(self):
        from Products.SiteAccess.VirtualHostMonster import VirtualHostMonster
        return VirtualHostMonster()

    def test_add_with_existing_vhm(self):
        from Products.SiteAccess.VirtualHostMonster import \
            manage_addVirtualHostMonster
        from zExceptions import BadRequest
        vhm1 = self._makeOne()
        vhm1.manage_addToContainer(self.root)

        vhm2 = self._makeOne()
        self.assertRaises(BadRequest, vhm2.manage_addToContainer, self.root)
        self.assertRaises( BadRequest
                         , manage_addVirtualHostMonster
                         , self.root
                         )

    def test_add_id_collision(self):
        from OFS.Folder import Folder
        from Products.SiteAccess.VirtualHostMonster import \
            manage_addVirtualHostMonster
        from zExceptions import BadRequest
        self.root._setObject('VHM', Folder('VHM'))
        vhm1 = self._makeOne()

        self.assertRaises(BadRequest, vhm1.manage_addToContainer, self.root)
        self.assertRaises( BadRequest
                         , manage_addVirtualHostMonster
                         , self.root
                         )

    def test_add_addToContainer(self):
        from ZPublisher.BeforeTraverse import queryBeforeTraverse
        vhm1 = self._makeOne()
        vhm1.manage_addToContainer(self.root)

        self.assertTrue(vhm1.getId() in self.root.objectIds())
        self.assertTrue(queryBeforeTraverse(self.root, vhm1.meta_type))

    def test_add_manage_addVirtualHostMonster(self):
        from Products.SiteAccess.VirtualHostMonster import \
            manage_addVirtualHostMonster
        from Products.SiteAccess.VirtualHostMonster import VirtualHostMonster
        from ZPublisher.BeforeTraverse import queryBeforeTraverse
        manage_addVirtualHostMonster(self.root)

        self.assertTrue(VirtualHostMonster.id in self.root.objectIds())
        hook = queryBeforeTraverse(self.root, VirtualHostMonster.meta_type)
        self.assertTrue(hook)
Example #26
0
 def testReplace(self):
     old_f = Folder()
     old_f.id = 'item'
     inner_f = HBTreeFolder2('inner')
     old_f._setObject(inner_f.id, inner_f)
     self.ff._populateFromFolder(old_f)
     self.assertEqual(self.ff.objectCount(), 1)
     self.assert_(self.ff.has_key('inner'))
     self.assertEqual(self.getBase(self.ff._getOb('inner')), inner_f)
Example #27
0
 def cancelCheckout(self):
     baseline = self._getBaseline()
     notify(event.CancelCheckoutEvent(self.context, baseline))
     wc_container = aq_parent(aq_inner(self.context))
     Folder.manage_delObjects(wc_container, [self.context.getId()])
     if getSecurityManager().checkPermission(permissions.View, baseline):
         return baseline
     else:
         return aq_parent(baseline)
Example #28
0
    def _makeRoot( self ):

        from OFS.Folder import Folder
        sm = getSiteManager()
        root = Folder( 'root' )
        tt = DummyTypesTool()
        root._setObject( 'portal_types', tt )
        sm.registerUtility(root.portal_types, ITypesTool)
        return root
Example #29
0
    def test_generateEXML_unacquired_perm_added_role( self ):

        ACI = 'Access contents information'
        ROLES = [ 'Manager', 'Owner' ]

        site = Folder(id='site').__of__(self.app)
        site.manage_permission( ACI, ROLES )
        configurator = self._makeOne( site ).__of__( site )

        self._compareDOM( configurator.generateXML(), _UNACQUIRED_EXPORT )
Example #30
0
 def manage_afterAdd(self, item, container):
     """ overload manage_afterAdd to finish initialization when the
     transform tool is added
     """
     Folder.manage_afterAdd(self, item, container)
     try:
         initialize(self)
     except TransformException:
         # may fail on copy or zexp import
         pass
Example #31
0
    def setUp(self):
        # Create and enable a local component registry
        site = Folder()
        createComponentRegistry(site)
        setHooks()
        setSite(site)
        sm = getSiteManager()

        tool = DummyTool()
        site._setObject(tool.id, tool)

        tool2 = DummyTool2()
        site._setObject(tool2.id, tool2)

        self._obj = sm
Example #32
0
 def setUp(self):
     f = Folder()
     f.getPhysicalPath = lambda: ()
     f.getPhysicalRoot = lambda f=f: f
     f.composite = Composite()
     f.composite._setId("composite")
     t = ZopePageTemplate(
         id="template", text=template_text, content_type="text/html")
     if t.pt_errors():
         raise SyntaxError(t.pt_errors())
     f.composite.template = t
     f.composite.filled_slots.slot_a = slot_a = Slot("slot_a")
     a1 = ZopePageTemplate(id="a1", text="<b>Slot A</b>")
     f._setObject(a1.id, a1)
     e1 = CompositeElement('e1', f.a1)
     slot_a._setObject(e1.id, e1)
     self.composite = f.composite
     self.old_policy = setSecurityPolicy(PermissiveSecurityPolicy())
     noSecurityManager()
Example #33
0
def addClient(zmscontext, id):
    """
    Add ZMS client.
    """
    request = zmscontext.REQUEST
    home = zmscontext.getHome()
    folder = Folder(id)
    home._setObject(folder.id, folder)
    folder_inst = getattr(home, id)
    request.set('lang_label', zmscontext.getLanguageLabel(request['lang']))
    zms_inst = zmscontext.initZMS(folder_inst, 'content', 'Title of %s' % id,
                                  'Titlealt of %s' % id, request['lang'],
                                  request['lang'], request)
    print("home.id", home.id)
    zms_inst.setConfProperty('Portal.Master', home.id)
    for metaObjId in zmscontext.getMetaobjIds():
        zms_inst.metaobj_manager.acquireMetaobj(metaObjId)
    zmscontext.setConfProperty(
        'Portal.Clients',
        zmscontext.getConfProperty('Portal.Clients', []) + [id])
    return zms_inst
Example #34
0
    def test_getMemberById_chained(self):
        LOCAL_USER_ID = 'user_foo'
        NONLOCAL_USER_ID = 'user_bar'

        self.root._setObject('folder', Folder('folder'))
        site = self._makeSite(self.root.folder)
        tool = site.portal_membership

        local_uf = DummyUserFolder()
        delattr(local_uf, NONLOCAL_USER_ID)
        site._setObject('acl_users', local_uf)

        nonlocal_uf = DummyUserFolder()
        delattr(nonlocal_uf, LOCAL_USER_ID)
        self.root.folder._setObject('acl_users', nonlocal_uf)

        local_member = tool.getMemberById(LOCAL_USER_ID)
        self.assertEqual(local_member.getId(), LOCAL_USER_ID)

        nonlocal_member = tool.getMemberById(NONLOCAL_USER_ID)
        self.assertEqual(nonlocal_member.getId(), NONLOCAL_USER_ID)
Example #35
0
    def _initSite(self, with_icon=False):
        from OFS.Folder import Folder
        from Products.CMFActionIcons.ActionIconsTool import ActionIconsTool

        _setUpDefaultTraversable()

        self.root.site = Folder(id='site')
        site = self.root.site
        tool = ActionIconsTool()
        site._setObject(tool.getId(), tool)

        sm = getSiteManager()
        sm.registerUtility(site.portal_actionicons, IActionIconsTool)

        if with_icon:
            tool.addActionIcon(category=self.CATEGORY,
                               action_id=self.ACTION_ID,
                               title=self.TITLE,
                               priority=self.PRIORITY,
                               icon_expr=self.ICON_EXPR)
        return site
Example #36
0
    def _ensureSnapshotsFolder(self, subdir=None):
        """ Ensure that the appropriate snapshot folder exists.
        """
        path = ['snapshots', self._snapshot_id]

        if subdir is not None:
            path.extend(subdir.split('/'))

        current = self._tool

        for element in path:

            if element not in current.objectIds():
                # No Unicode IDs!
                current._setObject(str(element), Folder(element))
                current = current._getOb(element)
                current.manage_permission(view, ('Manager', 'Owner'), 0)
            else:
                current = current._getOb(element)

        return current
Example #37
0
    def _initSite(self, use_changed=False):
        self.root.site = Folder(id='site')
        site = self.root.site
        cc = site.cookie_authentication = CookieCrumbler('foo_cookiecrumbler')

        sm = getSiteManager()
        sm.registerUtility(site.cookie_authentication, ICookieCrumbler)

        if use_changed:
            cc.auth_cookie = 'value1'
            cc.cache_header_value = 'value2'
            cc.name_cookie = 'value3'
            cc.log_username = 0
            cc.persist_cookie = 'value4'
            cc.pw_cookie = 'value5'
            cc.local_cookie_path = 1
            cc.auto_login_page = 'value6'
            cc.unauth_page = 'value7'
            cc.logout_page = 'value8'

        return site
Example #38
0
    def test_empty_skip_purge(self):

        self.app.site = Folder(id='site')
        site = self.app.site
        original_roles = list(getattr(site, '__ac_roles__', []))[:]
        modified_roles = original_roles[:]
        modified_roles.append('ZZZ')
        site.__ac_roles__ = modified_roles

        context = DummyImportContext(site, False)
        context._files['rolemap.xml'] = _EMPTY_EXPORT

        from Products.GenericSetup.rolemap import importRolemap
        importRolemap(context)

        new_roles = list(getattr(site, '__ac_roles__', []))[:]

        modified_roles.sort()
        new_roles.sort()

        self.assertEqual(modified_roles, new_roles)
Example #39
0
    def testInitializationRaceCondition(self):
        # Tries to exercise a former race condition where
        # FSObject._updateFromFS() set self._parsed before the
        # object was really parsed.
        for n in range(10):
            f = Folder()
            script = FSPythonScript('test1',
                                    join(self.skin_path_name,
                                         'test1.py')).__of__(f)
            res = []

            def call_script(script=script, res=res):
                try:
                    res.append(script())
                except:
                    res.append('%s: %s' % sys.exc_info()[:2])

            start_new_thread(call_script, ())
            call_script()
            while len(res) < 2:
                time.sleep(0.05)
            self.assertEqual(res, ['test1', 'test1'], res)
Example #40
0
    def _initSite( self, foo=2, bar=2 ):

        self.root.site = Folder( id='site' )
        site = self.root.site

        site.portal_membership = DummyMembershipTool()

        site.portal_actions = DummyActionsTool()
        site.portal_actions.addActionProvider( 'portal_actions' )

        if foo > 0:
            site.portal_foo = DummyTool()

        if foo > 1:
            site.portal_foo.addAction( id='foo'
                                    , name='Foo'
                                    , action='foo'
                                    , condition='python:1'
                                    , permission=()
                                    , category='dummy'
                                    , visible=1
                                    )
            site.portal_actions.addActionProvider( 'portal_foo' )

        if bar > 0:
            site.portal_bar = DummyTool()

        if bar > 1:
            site.portal_bar.addAction( id='bar'
                                    , name='Bar'
                                    , action='bar'
                                    , condition='python:0'
                                    , permission=( 'Manage portal', )
                                    , category='dummy'
                                    , visible=0
                                    )
            site.portal_actions.addActionProvider( 'portal_bar' )

        return site
Example #41
0
    def test_unacquired_perm(self):

        ACI = 'Access contents information'
        ROLES = ['Manager', 'Owner', 'ZZZ']

        self.app.site = Folder('site')
        site = self.app.site
        existing_roles = list(getattr(site, '__ac_roles__', []))[:]
        existing_roles.append('ZZZ')
        site.__ac_roles__ = existing_roles
        site.manage_permission(ACI, ROLES)

        context = DummyExportContext(site)

        from Products.GenericSetup.rolemap import exportRolemap
        exportRolemap(context)

        self.assertEqual(len(context._wrote), 1)
        filename, text, content_type = context._wrote[0]
        self.assertEqual(filename, 'rolemap.xml')
        self._compareDOM(text, _COMBINED_EXPORT)
        self.assertEqual(content_type, 'text/xml')
Example #42
0
    def test_existing_roles_missing_xml_doesnt_purge(self):
        # LP # 279294
        ACI = 'Access contents information'
        VIEW = 'View'

        self.app.site = Folder(id='site')
        site = self.app.site  # wrap
        original_roles = list(getattr(site, '__ac_roles__', []))[:]
        modified_roles = original_roles[:]
        modified_roles.append('ZZZ')

        site.__ac_roles__ = modified_roles
        site.manage_permission(VIEW, ())
        site.manage_permission(ACI, ('Manager', 'ZZZ'))

        existing_allowed = [
            x['name'] for x in site.rolesOfPermission(ACI) if x['selected']
        ]

        self.assertEqual(existing_allowed, ['Manager', 'ZZZ'])

        context = DummyImportContext(site, True)
        #context._files[ 'rolemap.xml' ] = _EMPTY_EXPORT # no file!

        from Products.GenericSetup.rolemap import importRolemap
        importRolemap(context)

        new_roles = list(getattr(site, '__ac_roles__', []))[:]

        modified_roles.sort()
        new_roles.sort()

        self.assertEqual(modified_roles, new_roles)

        new_allowed = [
            x['name'] for x in site.rolesOfPermission(ACI) if x['selected']
        ]

        self.assertEqual(new_allowed, existing_allowed)
Example #43
0
    def test_createMemberArea_chained(self):
        LOCAL_USER_ID = 'user_foo'
        NONLOCAL_USER_ID = 'user_bar'

        self.app._setObject('folder', Folder('folder'))
        site = self._makeSite(self.app.folder)
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))

        local_uf = DummyUserFolder()
        delattr(local_uf, NONLOCAL_USER_ID)
        acl_users = site._setObject('acl_users', local_uf)

        nonlocal_uf = DummyUserFolder()
        delattr(nonlocal_uf, LOCAL_USER_ID)
        self.app.folder._setObject('acl_users', nonlocal_uf)

        newSecurityManager(None, acl_users.all_powerful_Oz)
        mtool.createMemberArea(NONLOCAL_USER_ID)
        self.assertTrue(hasattr(members.aq_self, NONLOCAL_USER_ID))
        mtool.createMemberArea(LOCAL_USER_ID)
        self.assertTrue(hasattr(members.aq_self, LOCAL_USER_ID))
Example #44
0
    def _initSite(self, foo=2):

        self.root.site = Folder(id='site')
        site = self.root.site

        site.dummy = DummyObject(id='dummy')
        site.dummy.foobarbaz = ('Foo', 'Bar', 'Baz')

        if foo > 0:
            site.dummy._setProperty('foo_boolean', '', 'boolean')
            site.dummy._setProperty('foo_date', '', 'date')
            site.dummy._setProperty('foo_float', '', 'float')
            site.dummy._setProperty('foo_int', '', 'int')
            site.dummy._setProperty('foo_lines', '', 'lines')
            site.dummy._setProperty('foo_long', '', 'long')
            site.dummy._setProperty('foo_string', '', 'string')
            site.dummy._setProperty('foo_text', '', 'text')
            site.dummy._setProperty('foo_tokens', (), 'tokens')
            site.dummy._setProperty('foo_selection', 'foobarbaz', 'selection')
            site.dummy._setProperty('foo_mselection', 'foobarbaz',
                                    'multiple selection')
            site.dummy._setProperty('foo_boolean0', '', 'boolean')

        if foo > 1:
            site.dummy._updateProperty('foo_boolean', 'True')
            site.dummy._updateProperty('foo_date', '2000/01/01')
            site.dummy._updateProperty('foo_float', '1.1')
            site.dummy._updateProperty('foo_int', '1')
            site.dummy._updateProperty('foo_lines', 'Foo\nLines')
            site.dummy._updateProperty('foo_long', '1')
            site.dummy._updateProperty('foo_string', 'Foo String')
            site.dummy._updateProperty('foo_text', 'Foo\nText')
            site.dummy._updateProperty('foo_tokens', ('Foo', 'Tokens'))
            site.dummy._updateProperty('foo_selection', 'Foo')
            site.dummy._updateProperty('foo_mselection', ('Foo', 'Baz'))
            site.dummy.foo_boolean0 = 0

        return site
Example #45
0
    def _make_composite(self):
        from OFS.Folder import Folder
        from ZPublisher.HTTPRequest import HTTPRequest
        from ZPublisher.HTTPRequest import HTTPResponse
        from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
        from Products.CompositePage.composite import Composite
        from Products.CompositePage.element import CompositeElement
        from Products.CompositePage.slot import Slot

        TEMPLATE_TEXT = '\n'.join((
            '<html>',
            '<body>',
            """<div tal:replace="structure slot: slot_a (top) """
            """'Top News Stories'">slot_a</div>""",
            """<span tal:replace="structure slot: slot_b """
            """'Other News'">slot_b</span>""",
            '<div tal:replace="structure context/slots/slot_c">slot_c</div>',
            '</body>',
            '</html>',
        ))
        f = Folder()
        f.getPhysicalPath = lambda: ()
        f.getPhysicalRoot = lambda f=f: f
        req = f.REQUEST = HTTPRequest('', dict(HTTP_HOST='localhost:8080'), {})
        req.response = HTTPResponse()
        f.composite = Composite()
        f.composite._setId("composite")
        t = ZopePageTemplate(id="template",
                             text=TEMPLATE_TEXT,
                             content_type="text/html")
        f.composite.template = t
        f.composite.filled_slots.slot_a = slot_a = Slot("slot_a")
        t = f.composite.template
        if t.pt_errors():
            raise SyntaxError(t.pt_errors())
        a1 = ZopePageTemplate(id="a1", text="<b>Slot A</b>")
        f._setObject(a1.id, a1)
        e1 = CompositeElement('e1', f.a1)
        slot_a._setObject(e1.id, e1)
        return f.composite
Example #46
0
    def test_createMemberArea_chained(self):
        LOCAL_USER_ID = 'user_foo'
        NONLOCAL_USER_ID = 'user_bar'

        self.root._setObject('folder', Folder('folder'))
        site = self._makeSite(self.root.folder)
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        getSiteManager().registerUtility(DummyTool(), IWorkflowTool)

        local_uf = DummyUserFolder()
        delattr(local_uf, NONLOCAL_USER_ID)
        acl_users = site._setObject('acl_users', local_uf)

        nonlocal_uf = DummyUserFolder()
        delattr(nonlocal_uf, LOCAL_USER_ID)
        self.root.folder._setObject('acl_users', nonlocal_uf)

        newSecurityManager(None, acl_users.all_powerful_Oz)
        mtool.createMemberArea(NONLOCAL_USER_ID)
        self.failUnless(hasattr(members.aq_self, NONLOCAL_USER_ID))
        mtool.createMemberArea(LOCAL_USER_ID)
        self.failUnless(hasattr(members.aq_self, LOCAL_USER_ID))
Example #47
0
    def testLogCatalogErrors(self):
        # Mutilate the logger so we can capture output silently
        from Products.QueueCatalog.QueueCatalog import logger
        logger.propagate = 0
        fake_file = cStringIO.StringIO()
        fake_log_handler = logging.StreamHandler(fake_file)
        logger.addHandler(fake_log_handler)

        # Now do our bidding
        app = self.app
        app.f1 = Folder()
        app.f1.id = 'f1'
        app.queue_cat.catalog_object(app.f1)
        app.real_cat.catalog_object = lambda: None  # raises TypeError
        app.queue_cat.process()
        del app.real_cat.catalog_object

        # See what the fake file contains, and then rewind for reuse
        output = fake_file.getvalue()
        self.failUnless(output.startswith('error cataloging object'))
        fake_file.seek(0)

        app.queue_cat.setImmediateRemoval(False)
        app.queue_cat.uncatalog_object(app.queue_cat.uidForObject(app.f1))
        app.real_cat.uncatalog_object = lambda: None  # raises TypeError
        app.queue_cat.process()
        del app.real_cat.uncatalog_object

        # See what the fake file contains, and then rewind for reuse
        output = fake_file.getvalue()
        self.failUnless(output.startswith('error uncataloging object'))
        fake_file.close()

        # cleanup the logger
        fake_log_handler.close()
        logger.removeHandler(fake_log_handler)
        logger.propagate = 1
Example #48
0
    def setUpZope(self, app, configurationContext):
        """Set up the additional products required for the collective.js) site chosen.
        until the setup of the Plone site testing layer.
        """
        self.app = app
        self.browser = Browser(app)
        # old zope2 style products
        for product in TESTED_PRODUCTS:
            z2.installProduct(product)

        # ----------------------------------------------------------------------
        # Import all our python modules required by our packages
        # ---------------------------------------------------------------------

        # -----------------------------------------------------------------------
        # Load our own chosen
        # -----------------------------------------------------------------------
        import collective.js.chosen
        self.loadZCML('configure.zcml', package=collective.js.chosen)

        # ------------------------------------------------------------------------
        # - Load the python packages that are registered as Zope2 Products
        #   which can't happen until we have loaded the package ZCML.
        # ------------------------------------------------------------------------

        z2.installProduct(app, 'collective.js.chosen')

        # -------------------------------------------------------------------------
        # support for sessions without invalidreferences if using zeo temp storage
        # -------------------------------------------------------------------------
        app.REQUEST['SESSION'] = self.Session()
        if not hasattr(app, 'temp_folder'):
            tf = Folder('temp_folder')
            app._setObject('temp_folder', tf)
            transaction.commit()
        ztc.utils.setupCoreSessions(app)
Example #49
0
    def _initSite(self, foo=2):
        site = self.root.site = Folder(id='site')
        ctool = site.portal_catalog = CatalogTool()

        for obj_id in ctool.objectIds():
            ctool._delObject(obj_id)
        for idx_id in ctool.indexes():
            ctool.delIndex(idx_id)
        for col in ctool.schema()[:]:
            ctool.delColumn(col)

        if foo > 0:
            ctool._setObject('foo_plexicon', PLexicon('foo_plexicon'))
            lex = ctool.foo_plexicon
            lex._pipeline = (Splitter(), CaseNormalizer(), StopWordRemover())

            extra = _extra()
            extra.lexicon_id = 'foo_plexicon'
            extra.index_type = 'Okapi BM25 Rank'
            ctool.addIndex('foo_zctext', 'ZCTextIndex', extra)

            ctool.addColumn('foo_zctext')

        return site
Example #50
0
 def testMetadataOnce(self):
     # this behavior is important to reduce conflict errors.
     app = self.app
     app.queue_cat.setImmediateMetadataUpdate(True)
     app.queue_cat.setProcessAllIndexes(False)
     app.real_cat.addColumn('title')
     app.f1 = Folder()
     app.f1.id = 'f1'
     app.f1.title = 'Joe'
     app.queue_cat.catalog_object(app.f1)  # metadata should change
     res = app.queue_cat.searchResults(id='f1')[0]
     self.assertEqual(res.title, 'Joe')
     app.f1.title = 'Betty'
     app.queue_cat.process()  # metadata should not change
     res = app.queue_cat.searchResults(id='f1')[0]
     self.assertEqual(res.title, 'Joe')
     # now we'll change the policy
     app.queue_cat.setImmediateMetadataUpdate(False)
     app.queue_cat.catalog_object(app.f1)  # metadata should not change
     res = app.queue_cat.searchResults(id='f1')[0]
     self.assertEqual(res.title, 'Joe')
     app.queue_cat.process()  # metadata should change
     res = app.queue_cat.searchResults(id='f1')[0]
     self.assertEqual(res.title, 'Betty')
Example #51
0
    def registerUtility(self, interface, utility, name=''):
        # I think you are *really* supposed to:
        # 1. Check if there is a "registrations" object for utilities.
        # 2. If not create one.
        # 3. Get it.
        # 4. Create a registration object for the utility.
        # 5. Rgister the registration object in the registrations.
        # But that is quite complex, and Jim sais he wants to change that
        # anyway, and in any case the way you would normally do this in Zope3
        # and Five would probably differ anyway, so, here is this new
        # Five-only, easy to use method!

        utilities = getattr(self.context, 'utilities', None)
        if utilities is None:
            from OFS.Folder import Folder
            self.context._setObject('utilities', Folder('utilities'))
            utilities = self.context.utilities

        if name == '':
            # Singletons. Only one per interface allowed, so, let's call it
            # by the interface.
            name = interface.getName()

        utilities._setObject(name, utility)
Example #52
0
    def test_unacquired_permission_added_role_skip_purge_encode_ascii(self):

        ACI = 'Access contents information'
        VIEW = 'View'

        self.app.site = Folder(id='site')
        site = self.app.site
        site.manage_permission(VIEW, ())

        existing_allowed = [
            x['name'] for x in site.rolesOfPermission(ACI) if x['selected']
        ]

        self.assertEqual(existing_allowed, ['Manager'])

        self.failUnless(site.acquiredRolesAreUsedBy(ACI))
        self.failIf(site.acquiredRolesAreUsedBy(VIEW))

        self.failIf(site._has_user_defined_role('ZZZ'))

        context = DummyImportContext(site, False, encoding='ascii')
        context._files['rolemap.xml'] = _COMBINED_EXPORT

        from Products.GenericSetup.rolemap import importRolemap
        importRolemap(context)

        self.failUnless(site._has_user_defined_role('ZZZ'))

        new_allowed = [
            x['name'] for x in site.rolesOfPermission(ACI) if x['selected']
        ]

        self.assertEqual(new_allowed, ['Manager', 'Owner', 'ZZZ'])

        self.failIf(site.acquiredRolesAreUsedBy(ACI))
        self.failIf(site.acquiredRolesAreUsedBy(VIEW))
Example #53
0
    def test_acquire_without_dav(self):
        container = Container('container')

        outer = Folder('outer')
        outer._setObject('item', SimpleItem('item'))
        outer._setOb('container', container)

        request = DAVTestRequest(environ={
            'URL': 'http://site/test',
            'REQUEST_METHOD': 'GET'
        })
        request.maybe_webdav_client = False

        traversal = DexterityPublishTraverse(container.__of__(outer), request)

        r = traversal.publishTraverse(request, 'item')

        self.assertEqual(r.aq_base, outer['item'].aq_base)
        self.assertEqual(container, r.aq_parent)
Example #54
0
    def test_no_acquire_dav(self):
        container = Container('container')

        outer = Folder('outer')
        outer._setOb('item', SimpleItem('item'))
        outer._setOb('container', container)

        request = DAVTestRequest(environ={
            'URL': 'http://site/test',
            'REQUEST_METHOD': 'PUT'
        })
        request.maybe_webdav_client = True

        traversal = DexterityPublishTraverse(container.__of__(outer), request)

        r = traversal.publishTraverse(request, 'item')

        self.assertTrue(isinstance(r, NullResource))
        self.assertEqual(container, r.aq_parent)
class SQLConnectionIdsTests(unittest.TestCase):

    def setUp(self):
        from OFS.Folder import Folder
        from Products.ZSQLMethods.tests.dummy import DummySQLConnection
        super(SQLConnectionIdsTests, self).setUp()

        self.root = Folder('root')
        conn1 = DummySQLConnection('conn1', 'Title1')
        self.root._setObject('conn1', conn1)
        self.root._setObject('child1', Folder('child1'))
        conn2 = DummySQLConnection('conn2', 'Title2')
        self.root.child1._setObject('conn2', conn2)
        self.root._setObject('child2', Folder('child2'))
        conn3 = DummySQLConnection('conn3')
        self.root.child2._setObject('conn3', conn3)
        self.root.child1._setObject('grandchild1', Folder('grandchild1'))
        conn4 = DummySQLConnection('conn4')
        self.root.child1.grandchild1._setObject('conn4', conn4)

    def test_SQLConnectionIDs(self):
        from Products.ZSQLMethods.SQL import SQLConnectionIDs

        self.assertEqual( SQLConnectionIDs(self.root)
                        , [('Title1 (conn1)', 'conn1')]
                        )
        self.assertEqual( SQLConnectionIDs(self.root.child1)
                        , [ ('Title1 (conn1)', 'conn1')
                          , ('Title2 (conn2)', 'conn2')
                          ]
                        )
        self.assertEqual( SQLConnectionIDs(self.root.child1.grandchild1)
                        , [ ('Title1 (conn1)', 'conn1')
                          , ('Title2 (conn2)', 'conn2')
                          , ('conn4', 'conn4')
                          ]
                        )
        self.assertEqual( SQLConnectionIDs(self.root.child2)
                        , [ ('Title1 (conn1)', 'conn1')
                          , ('conn3', 'conn3')
                          ]
                        )
Example #56
0
 def test_setSecurityProfile(self):
     from Products.LDAPUserFolder.LDAPMemberDataTool import LDAPMemberDataTool
     folder = Folder('test')
     folder._setOb('portal_memberdata', LDAPMemberDataTool())
     folder._setOb('acl_users', LDAPDummyUserFolder())
     user = LDAPDummyUser('bob', 'pw', ['Role'], ['domain'])
     folder.acl_users._addUser(user)
     user = folder.acl_users.getUser(user.getId())
     member = folder.portal_memberdata.wrapUser(user)
     member.setSecurityProfile(password='******')
     self.assertEqual(user.__, 'newpw')
     self.assertEqual(list(user.roles), ['Role'])
     self.assertEqual(list(user.domains), ['domain'])
     member.setSecurityProfile(roles=['NewRole'])
     self.assertEqual(user.__, 'newpw')
     self.assertEqual(list(user.roles), ['NewRole'])
     self.assertEqual(list(user.domains), ['domain'])
     member.setSecurityProfile(domains=['newdomain'])
     self.assertEqual(user.__, 'newpw')
     self.assertEqual(list(user.roles), ['NewRole'])
     self.assertEqual(list(user.domains), ['newdomain'])
Example #57
0
    def test_before_traverse_hooks(self):
        from OFS.Folder import Folder
        container = Folder()
        cc = self._makeOne()

        marker = []
        bt_before = getattr(container, '__before_traverse__', marker)
        self.failUnless(bt_before is marker)

        container._setObject(cc.id, cc)

        bt_added = getattr(container, '__before_traverse__')
        self.assertEqual(len(bt_added.items()), 1)
        k, v = bt_added.items()[0]
        self.failUnless(k[1].startswith(self._getTargetClass().meta_type))
        self.assertEqual(v.name, cc.id)

        container._delObject(cc.id)

        bt_removed = getattr(container, '__before_traverse__')
        self.assertEqual(len(bt_removed.items()), 0)
Example #58
0
    def test_restrict_output(self):
        from naaya.core.zope2util import ofs_walk
        fol = Folder('fol').__of__(Folder('root'))
        fol2 = Folder('fol2')
        item = SimpleItem('item')
        fol._setObject('item', item)
        fol._setObject('fol2', fol2)

        class IMyItem(interface.Interface):
            pass

        class IMyItem2(interface.Interface):
            pass

        # we call with 2 interfaces to make sure "OR" logic is applied
        walk = lambda: list(ofs_walk(fol, [IMyItem, IMyItem2]))

        self.assertEqual(walk(), [])

        interface.alsoProvides(item, IMyItem)
        self.assertEqual(walk(), [item])

        interface.alsoProvides(fol2, IMyItem)
        self.assertEqual(walk(), [item, fol2])
Example #59
0
    def test_listPermissions_nooverrides(self):

        site = Folder(id='site').__of__(self.app)
        configurator = self._makeOne(site)

        self.assertEqual(len(configurator.listPermissions()), 0)
Example #60
0
    def setUp(self):
        from Products.CMFCore.DirectoryView import DirectoryView

        _DVRegistrySetup.setUp(self)
        self._obj = DirectoryView('foo_directoryview').__of__(Folder())
        self._XML = _DIRECTORYVIEW_XML