I'm attempting to run offline unit tests (via PyUnit, importing the Zope module with Zope turned off) against some functionality I've written via Python Scripts. The error messages are not helping much, and the online tests work fine, so I'm at a loss to troubleshoot this. Any suggestions on how to interpret the following, or pointers to Zope troubleshooting resources that would help, would be greatly appreciated. Essentially, I have a /lib/issue/add_issue Python script which takes a string argument and creates a new folder by that name in a certain path. The add_issue script acts under a proxy to run as a Manager. Run: 4 ; Failures: 0; Errors: 1 There was 1 error: 1) issues.issuesTest.runTest Traceback (innermost last): File "issues.py", line 45, in runTest id.append(libissue.add_issue(self.type)) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/Products/PythonScripts/PythonScript.py", line 330, in _exec result = apply(f, args, kw) File "Script (Python)", line 32, in add_issue File "/usr/lib/zope/lib/python/OFS/PropertyManager.py", line 355, in manage_changeProperties return self.manage_propertiesForm(self,REQUEST,manage_tabs_message=message) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 337, in __render_with_namespace__ return self._bindAndExec((), namevals, namespace) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Let.py", line 146, in render else: d[name]=expr(md) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 334, in eval return eval(code,globals,d) File "<string>", line 0, in ? File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 127, in careful_getattr try: v=getattr(inst, name) AttributeError: 'None' object has no attribute 'get' -- -- John R. Daily jdaily@progeny.com Systems Programmer Progeny Linux Systems Master of the ephemeral epiphany
Hi John... This might have to do with the fact that PythonScripts are looking for REQUEST. When you do "import Zope; app=Zope.app()", a REQUEST cannot be acquired through objects in the system. In normal operation, they can be. Here's a way around it: import ZODB # this is "magical", unfortunately import os from os import environ from sys import stdin from ZPublisher.HTTPRequest import HTTPRequest from ZPublisher.HTTPResponse import HTTPResponse from ZPublisher.BaseRequest import RequestContainer def makerequest(app): resp = HTTPResponse() environ['SERVER_NAME']='foo' environ['SERVER_PORT']='80' environ['REQUEST_METHOD'] = 'GET' req = HTTPRequest(stdin, environ, resp) return app.__of__(RequestContainer(REQUEST = req)) class ATest(TestCase): def setUp(self): import Zope self.app = makerequest(Zope.app()) self.app will be bound to a Zope instance with a fake request in all your test cases now. ----- Original Message ----- From: "John R. Daily" <jdaily@progeny.com> To: <zope@zope.org> Sent: Monday, February 26, 2001 1:13 PM Subject: [Zope] Offline testing
I'm attempting to run offline unit tests (via PyUnit, importing the Zope module with Zope turned off) against some functionality I've written via Python Scripts. The error messages are not helping much, and the online tests work fine, so I'm at a loss to troubleshoot this.
Any suggestions on how to interpret the following, or pointers to Zope troubleshooting resources that would help, would be greatly appreciated.
Essentially, I have a /lib/issue/add_issue Python script which takes a string argument and creates a new folder by that name in a certain path. The add_issue script acts under a proxy to run as a Manager.
Run: 4 ; Failures: 0; Errors: 1 There was 1 error: 1) issues.issuesTest.runTest Traceback (innermost last): File "issues.py", line 45, in runTest id.append(libissue.add_issue(self.type)) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/Products/PythonScripts/PythonScript.py", line 330, in _exec result = apply(f, args, kw) File "Script (Python)", line 32, in add_issue File "/usr/lib/zope/lib/python/OFS/PropertyManager.py", line 355, in manage_changeProperties return self.manage_propertiesForm(self,REQUEST,manage_tabs_message=message) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 337, in __render_with_namespace__ return self._bindAndExec((), namevals, namespace) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Let.py", line 146, in render else: d[name]=expr(md) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 334, in eval return eval(code,globals,d) File "<string>", line 0, in ? File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 127, in careful_getattr try: v=getattr(inst, name) AttributeError: 'None' object has no attribute 'get'
-- -- John R. Daily jdaily@progeny.com Systems Programmer Progeny Linux Systems Master of the ephemeral epiphany
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
This might have to do with the fact that PythonScripts are looking for REQUEST. When you do "import Zope; app=Zope.app()", a REQUEST cannot be acquired through objects in the system. In normal operation, they can be. Here's a way around it:
<snip> If there are any dependencies on the request object, they likely revolve around security. I added your code, and at least the error message has changed. Now I'm getting a KeyError on URL1. I've tried defining it as an attribute of both resp and req with no success. Any suggestions, or pointers to further documentation on creating fake REQUEST objects? -John
I'm still having difficulty setting up a REQUEST object properly. I added the following line so that I would hopefully have URLn values set: environ['SERVER_URL'] = 'http://foo/foo' And now I'm getting the included error, which as far as I can tell seems to be the result of missing URL information. The UNITTEST documentation refers to Zope.debug() as a way to get around these issues, but I don't want to invoke a URL directly; I want to test the individual functions I've defined in Zope. Does anyone have any further examples of importing Zope and HTTPRequest and setting up fake requests? My internet searches are not pulling up much with "import HTTPRequest". -John -- Traceback (innermost last): File "<stdin>", line 1, in ? File "issues.py", line 61, in runTest id.append(libissue.add_issue(self.type)) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/Products/PythonScripts/PythonScript.py", line 330, in _exec result = apply(f, args, kw) File "Script (Python)", line 24, in add_issue File "/usr/lib/zope/lib/python/OFS/PropertyManager.py", line 355, in manage_changeProperties return self.manage_propertiesForm(self,REQUEST,manage_tabs_message=message) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 337, in __render_with_namespace__ return self._bindAndExec((), namevals, namespace) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_With.py", line 146, in render try: return render_blocks(self.section, md) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Var.py", line 271, in render val = md[name] File "/usr/lib/zope/lib/python/OFS/Application.py", line 255, in PrincipiaTime return apply(DateTime, args) TypeError: function requires at least 1 argument; 0 given
Hi John...
This might have to do with the fact that PythonScripts are looking for REQUEST. When you do "import Zope; app=Zope.app()", a REQUEST cannot be acquired through objects in the system. In normal operation, they can be. Here's a way around it:
import ZODB # this is "magical", unfortunately import os from os import environ from sys import stdin from ZPublisher.HTTPRequest import HTTPRequest from ZPublisher.HTTPResponse import HTTPResponse from ZPublisher.BaseRequest import RequestContainer
def makerequest(app): resp = HTTPResponse() environ['SERVER_NAME']='foo' environ['SERVER_PORT']='80' environ['REQUEST_METHOD'] = 'GET' req = HTTPRequest(stdin, environ, resp) return app.__of__(RequestContainer(REQUEST = req))
class ATest(TestCase): def setUp(self): import Zope self.app = makerequest(Zope.app())
self.app will be bound to a Zope instance with a fake request in all your test cases now.
----- Original Message ----- From: "John R. Daily" <jdaily@progeny.com> To: <zope@zope.org> Sent: Monday, February 26, 2001 1:13 PM Subject: [Zope] Offline testing
I'm attempting to run offline unit tests (via PyUnit, importing the Zope module with Zope turned off) against some functionality I've written via Python Scripts. The error messages are not helping much, and the online tests work fine, so I'm at a loss to troubleshoot this.
Any suggestions on how to interpret the following, or pointers to Zope troubleshooting resources that would help, would be greatly appreciated.
Essentially, I have a /lib/issue/add_issue Python script which takes a string argument and creates a new folder by that name in a certain path. The add_issue script acts under a proxy to run as a Manager.
Run: 4 ; Failures: 0; Errors: 1 There was 1 error: 1) issues.issuesTest.runTest Traceback (innermost last): File "issues.py", line 45, in runTest id.append(libissue.add_issue(self.type)) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/Products/PythonScripts/PythonScript.py", line 330, in _exec result = apply(f, args, kw) File "Script (Python)", line 32, in add_issue File "/usr/lib/zope/lib/python/OFS/PropertyManager.py", line 355, in manage_changeProperties return self.manage_propertiesForm(self,REQUEST,manage_tabs_message=message) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__ return self._bindAndExec(args, kw, None) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 337, in __render_with_namespace__ return self._bindAndExec((), namevals, namespace) File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec return self._exec(bound_data, args, kw) File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec try: result = render_blocks(self._v_blocks, ns) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Let.py", line 146, in render else: d[name]=expr(md) File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 334, in eval return eval(code,globals,d) File "<string>", line 0, in ? File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 127, in careful_getattr try: v=getattr(inst, name) AttributeError: 'None' object has no attribute 'get'
-- -- John R. Daily jdaily@progeny.com Systems Programmer Progeny Linux Systems Master of the ephemeral epiphany
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
participants (2)
-
Chris McDonough -
John R. Daily