Jan Hackel wrote:
Some days ago I ran into the same problem, and have been pointed to this thread. Maybe you are interested in my solution. It's ugly, but I needed it for a test-case, where I wanted to access "@@plone_context_state/is_view_template":
>>> from ZPublisher.HTTPRequest import HTTPRequest >>> from ZPublisher.HTTPResponse import HTTPResponse >>> from Products.PloneTestCase import PloneTestCase >>> import base64 >>> user_id = PloneTestCase.default_user >>> password = PloneTestCase.default_password >>> encoded = base64.encodestring( '%s:%s' % ( user_id, password ) ) >>> auth_header = 'basic %s' % encoded >>> resp = HTTPResponse() >>> env={'SERVER_URL':'http://nohost/plone', ... 'URL':'http://nohost/plone', ... 'HTTP_AUTHORIZATION': auth_header, ... 'REQUEST_METHOD': 'GET', ... 'steps': [], ... '_hacked_path': 0, ... '_test_counter': 0, ... } >>> request = HTTPRequest(stdin=None, environ=env, response=resp) >>> request['PARENTS'] = [self.getPortal()] >>> contextState = request.traverse("weblog/issue193/" ... "@@plone_context_state") >>> request['ACTUAL_URL'] = 'http://nohost/weblog/issue193' >>> contextState.is_view_template() True >>> request.close()
For this, you should possibly use zope.testbrowser (and Products.Five.testbrowser). The reason you needed this particular hack was that the is_view_template() method looks at the url quite specifically. For most cases, context.restrictedTraverse('@@plone_context_state') would've worked. Martin -- Author of `Professional Plone Development`, a book for developers who want to work with Plone. See http://martinaspeli.net/plone-book