Robert Brewer avatar Robert Brewer committed 0343e41

More-explicit error when illegally passing positional arguments to tool decorators. Also, a new tool test for multiple decorators with kwargs.

Comments (0)

Files changed (2)

             del conf["on"]
         return conf
     
-    def __call__(self, **kwargs):
+    def __call__(self, *args, **kwargs):
         """Compile-time decorator (turn on the tool in config).
         
         For example:
                 return cherrypy.request.base
             whats_my_base.exposed = True
         """
+        if args:
+            raise TypeError("The %r Tool does not accept positional "
+                            "arguments; you must use keyword arguments."
+                            % self._name)
         def wrapper(f):
             if not hasattr(f, "_cp_config"):
                 f._cp_config = {}

test/test_tools.py

             return cherrypy.request.body
         pipe.exposed = True
         pipe._cp_config = {'hooks.before_request_body': pipe_body}
+        
+        # Multiple decorators; include kwargs just for fun.
+        def decorated_euro(self):
+            yield u"Hello,"
+            yield u"world"
+            yield europoundUnicode
+        decorated_euro.exposed = True
+        decorated_euro = tools.gzip(compress_level=6)(decorated_euro)
+        decorated_euro = tools.encode(errors='ignore')(decorated_euro)
     
     root = Root()
     
         
         self.getPage("/euro", headers=[("Accept-Encoding", "gzip")])
         self.assertInBody(zbuf.getvalue()[:3])
+        
+        zbuf = StringIO.StringIO()
+        zfile = gzip.GzipFile(mode='wb', fileobj=zbuf, compresslevel=6)
+        zfile.write(expectedResult)
+        zfile.close()
+        
+        self.getPage("/decorated_euro", headers=[("Accept-Encoding", "gzip")])
+        self.assertInBody(zbuf.getvalue()[:3])
     
     def testBareHooks(self):
         content = "bit of a pain in me gulliver"
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.