[Zope] Why doesn't this work?
Dylan Reinhardt
zope@dylanreinhardt.com
28 Jul 2003 14:41:46 -0700
You're declaring security, but do you initialize the class to use it?
Put:
--------
Globals.InitializeClass(MyContainer)
--------
after your class definition, at the same level.
Does that do the trick?
HTH,
Dylan
PS - You'll probably want to look into __bobo_traverse__() instead of
__getattr__() when it comes time to move beyond get_obj()
On Mon, 2003-07-28 at 14:28, Terry Hancock wrote:
> This is a simple project example. I'm trying to wrap an object
> generated on the fly and publish methods from it. However,
> as I'm doing it, I get an HTTP authentication challenge, and it
> does not recognize any usernames, including the superuser, so
> I always have to click "cancel" which gives me a "you are not
> allowed to access index_html in this context" in this case.
>
> The main module is included below, and I've put a tar file of
> the product here:
> http://manage.narya.net/Anansi/Download/PBTest.030728.tgz
>
> To test it:
>
> * Add a "My Container" object ("folderish").
> * Inside the "My Container" object, create a python script called
> "test_html", with the following contents:
> """
> return context.get_obj("Green").index_html
> """
> * Access the URL of the test_html script.
>
> What should happen is that the server should return text saying
> "Test version of index_html for Green object."
>
> But what I actually get is a challenge popup, which I can't
> satisfy with any valid usernames on the server, and thus I get the
> message:
> """
> Error Type: Unauthorized
> Error Value: You are not allowed to access index_html in this context
> """
>
> Obviously, there's something incomplete about the PB_Object
> instance, but I can't figure out what it might be.
>
> Source of PBTest.py:
> ---snip------------------------------------------
> # Test returning PB transitory object from a folder-like object.
> # This is a technique I want to use in Narya, but it's running into
> # permissions problems.
> """
> Test PB return object publishing.
> """
>
> # Probably don't need all of these imports -- this is taken from Home.py
>
> # Python Standard Library:
> import string
>
> # Zope:
> import Acquisition
> from Globals import DTMLFile
> from OFS.Folder import Folder
> from OFS.Traversable import Traversable
> from Globals import Persistent
> from OFS.SimpleItem import SimpleItem
> from AccessControl.DTML import DTMLSecurityAPI
> SecurityGetUser = DTMLSecurityAPI.SecurityGetUser
> from AccessControl import ClassSecurityInfo
> import AccessControl
>
> from Interface import Base, Attribute
>
>
> class MyContainer(Folder):
> """
> The container object will contain Zope objects, but also some objects generated on the fly.
> """
> meta_type = "My Container"
>
> security = ClassSecurityInfo()
> security.setDefaultAccess("allow")
>
>
> security.declarePublic("get_obj")
> def get_obj(self, name, REQUEST=None, RESPONSE=None):
> """
> Get an object by name. Probably to be replaced by __getattr__?
> """
> if hasattr(self, name):
> return getattr(self, name)
> elif name in ("Red", "Green", "Blue"):
> return PB_Object(name).__of__(self)
>
> manage_addMyContainerForm = DTMLFile('MyContainerForm', globals())
>
> def manage_addMyContainer(self, id, title='', REQUEST=None):
> """
> Add a new MyContainer folder.
> """
> ob=MyContainer(id, title=title)
> ob.id=str(id)
> ob.title=title
> self._setObject(id, ob)
> ob=self._getOb(id)
>
> if REQUEST is not None:
> return self.manage_main(self, REQUEST, update_menu=1)
>
>
> class PB_Object(Acquisition.Implicit):
> """
> The object to be generated on the fly.
> """
> meta_type = "PB Object"
>
> security = ClassSecurityInfo()
> security.setDefaultAccess("allow")
>
> def __init__(self, pb_name):
> self.pb_name = pb_name
> self.id = pb_name
> self.title = pb_name
>
> security.declarePublic("index_html")
> def index_html(self, REQUEST=None, RESPONSE=None):
> """Silly docstring for index_html"""
> return "Test version of index_html for %s object." % self.pn_name
>
>
> security.declarePublic("getId")
> def getId(self):
> """
> Apparently required but undocumented interface for Zope traversal.
> #$(&#*!!!!
> """
> return self.id
> ---snip----------------------------------------------------
>
> I'd really like to understand what's going on here, so any help
> will be much appreciated.
>
> Cheers,
> Terry
>
> --
> Terry Hancock ( hancock at anansispaceworks.com )
> Anansi Spaceworks http://www.anansispaceworks.com
>
> _______________________________________________
> Zope maillist - Zope@zope.org
> http://mail.zope.org/mailman/listinfo/zope
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope-dev )