Changeset 1990
- Timestamp:
- 06/25/08 23:21:25
- Files:
-
- trunk/cherrypy/__init__.py (modified) (2 diffs)
- trunk/cherrypy/test/test_core.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/__init__.py
r1989 r1990 404 404 def expose(func=None, alias=None): 405 405 """Expose the function, optionally providing an alias or set of aliases.""" 406 407 406 def expose_(func): 408 407 func.exposed = True … … 417 416 import sys, types 418 417 if isinstance(func, (types.FunctionType, types.MethodType)): 419 # expose is being called directly, before the method has been bound420 parents = sys._getframe(1).f_locals421 return expose_(func)422 else:423 418 if alias is None: 424 # expose is being called as a decorator "@expose"419 # @expose 425 420 func.exposed = True 426 421 return func 427 422 else: 428 # expose is returning a decorator "@expose(alias=...)" 423 # func = expose(func, alias) 424 parents = sys._getframe(1).f_locals 425 return expose_(func) 426 elif func is None: 427 if alias is None: 428 # @expose() 429 429 parents = sys._getframe(1).f_locals 430 430 return expose_ 431 else: 432 # @expose(alias="alias") or 433 # @expose(alias=["alias1", "alias2"]) 434 parents = sys._getframe(1).f_locals 435 return expose_ 436 else: 437 # @expose("alias") or 438 # @expose(["alias1", "alias2"]) 439 parents = sys._getframe(1).f_locals 440 alias = func 441 return expose_ 442 431 443 432 444 def url(path="", qs="", script_name=None, base=None, relative=None): trunk/cherrypy/test/test_core.py
r1984 r1990 6 6 import os 7 7 localDir = os.path.dirname(__file__) 8 import sys 8 9 import types 9 10 … … 415 416 cherrypy.request.asdf = "rassfrassin" 416 417 return existing 418 419 if sys.version_info >= (2, 5): 420 from cherrypy.test import py25 421 Root.expose_dec = py25.ExposeExamples() 417 422 418 423 cherrypy.config.update({ … … 1072 1077 self.getPage('/url/?path_info=/page1&relative=server') 1073 1078 self.assertBody('/page1') 1079 1080 def test_expose_decorator(self): 1081 if not sys.version_info >= (2, 5): 1082 print "skipped (Python 2.5+ only)", 1083 return 1084 1085 # Test @expose 1086 self.getPage("/expose_dec/no_call") 1087 self.assertStatus(200) 1088 self.assertBody("Mr E. R. Bradshaw") 1089 1090 # Test @expose() 1091 self.getPage("/expose_dec/call_empty") 1092 self.assertStatus(200) 1093 self.assertBody("Mrs. B.J. Smegma") 1094 1095 # Test @expose("alias") 1096 self.getPage("/expose_dec/call_alias") 1097 self.assertStatus(200) 1098 self.assertBody("Mr Nesbitt") 1099 # Does the original name work? 1100 self.getPage("/expose_dec/nesbitt") 1101 self.assertStatus(200) 1102 self.assertBody("Mr Nesbitt") 1103 1104 # Test @expose(["alias1", "alias2"]) 1105 self.getPage("/expose_dec/alias1") 1106 self.assertStatus(200) 1107 self.assertBody("Mr Ken Andrews") 1108 self.getPage("/expose_dec/alias2") 1109 self.assertStatus(200) 1110 self.assertBody("Mr Ken Andrews") 1111 # Does the original name work? 1112 self.getPage("/expose_dec/andrews") 1113 self.assertStatus(200) 1114 self.assertBody("Mr Ken Andrews") 1115 1116 # Test @expose(alias="alias") 1117 self.getPage("/expose_dec/alias3") 1118 self.assertStatus(200) 1119 self.assertBody("Mr. and Mrs. Watson") 1074 1120 1075 1121

