[ https://issues.apache.org/jira/browse/MODPYTHON-152?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Graham Dumpleton closed MODPYTHON-152. -------------------------------------- > req.main/prev from subrequest should yield true Python request object. > ---------------------------------------------------------------------- > > Key: MODPYTHON-152 > URL: https://issues.apache.org/jira/browse/MODPYTHON-152 > Project: mod_python > Issue Type: Improvement > Components: core > Reporter: Graham Dumpleton > Assigned To: Graham Dumpleton > Fix For: 3.3 > > > When a sub request is triggered using req.internal_redirect(), it is possible > to access the details of the request_rec for the parent request by acessing > req.main. Access will be via an instance of the Python request object > wrapper, but rather than it referring to the actual Python request object > wrapper instance that may have already been created for the parent request, a > new instance is created. This means that a sub request cannot access > attributes that may have been explicitly added to the Python request object > wrapper in the main request. > For example, in a parent request Python handler it may have gone: > req.session = Session.Session(req) > ... > req.internal_redirect(...) > In the sub request, it is not currently possible to do something like: > req.session = req.prev.session > where it is a reasonable expectation that trying to access parent request > would allow added attributes to be seen. > What would need to be done is for actions associated with accessing req.main, > req.prev and req.next to use the get_request_object() function to get hold of > request object so that if one already exists, it will be used and if not one > will be created. > Whether this could be done though would depend on what happens when a sub > request is actually processed within the context of a distinct Python > interpreter. Would there be issues with the Python request object wrapper > being used from two distinct Python interpreters, especially where a > multithreaded MPM were being used. > If this isn't a problem, the next issue is how get_request_object() requires > that the interpreter name and phase be supplied with the supplied values > overriding those already in the request object. > For interpreter name this would be a problem as accessing the main request > object from a sub request in a different interpreter would change the value > of interpreter seen by the parent request when it gets control back. > The solution to this should perhaps be that the interpreter name should not > even be stored in the request object wrapper to begin with. Instead, when > req.interpreter is accessed, internally to mod_python it should map this to > retrieving the value of apache.interpreter. This would eliminate the need for > the interpreter name to even be supplied to get_request_object(), simplifying > its calling interface. > As to the phase attribute, all that is probably required is that when access > req.main, req.next or req.prev it passes in phase as a NULL pointer. By doing > this it wouldn't override any existing value if the request object already > existed. If the request object didn't exist, then req.phase would return > None. This latter situation would only exist where the internal redirect was > performed by something other than mod_python. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.