durusmail: quixote-users: Building a community
Building a community
2003-01-02
2003-01-02
2003-01-02
2003-01-02
2003-01-02
2003-01-04
2003-01-04
Building a community
Tom Jenkins
2003-01-04
Neil Schemenauer wrote:
> On Sat, Jan 04, 2003 at 12:04:27PM -0500, Tom Jenkins wrote:
>
>>The problem is for the url: /department/1/agency/5 the traversal stops
>>at 'agency' with a TraversalError exception raised.  In Publisher's
>>get_component method the container is checked for the existence of
>>_q_exports.  The bound method 'agency' does not have this and so it
>>fails.
>>
>>What I did instead was give DepartmentUI a _q_getname method.  i check
>>for the explicit string 'agency'
>
>
> I think a better solution would be to add "_q_exports = ['agency']" to
> DepartmentUI  and "_q_exports = ['showSomeInfo']" to AgencyUI.  Adding a
> _q_getname seems like overkill.
>

Hi Neil,
well my original (non-working) version had the following

class DepartmentUI:
     _q_exports = ['view', 'showAgencies', 'agency']
     ...
     def view(self, request):
        ''' show some stuff here '''
        return someFormatStuff(self)

     def agency(self, request):
        ''' return an AgencyUI instance '''
        return AgencyUI(self.department)

     def showAgencies(self, request
        return someOtherFormatStuff(self)

class AgencyUI:
     _q_exports = ['view']
     ...
     def view(self, request):
         ''' show some agency stuff'''
         return someAgencyStuff(self)
     ...

now when i tried hitting
    /department/2/agency/4/view
I would get an exception in Publisher on

         # First security check: if the container doesn't even have an
         # _q_exports list, fail now: all Quixote-traversable namespaces
         # (modules, packages, instances) must have an export list!

         if not hasattr(container, '_q_exports'):
             raise errors.TraversalError(
                         private_msg="%r has no _q_exports list" %
container)

at the time of failure,
container =  and
component = 4

(sorry i don't have the log of the actual output, but i do know it was
identified as DepartmentUI's bound method agency)

i doesn't look like during the transversal any methods are called
(except for the _q_getname method) so the AgencyUI instance never gets
returned and placed in the namespace_stack.

Gotta run to dinner.  thanks for the time

Tom


reply