Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 1990

Show
Ignore:
Timestamp:
06/25/08 23:21:25
Author:
fumanchu
Message:

Fix for #826 (@cherrypy.expose() fails with no argument).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/__init__.py

    r1989 r1990  
    404404def expose(func=None, alias=None): 
    405405    """Expose the function, optionally providing an alias or set of aliases.""" 
    406      
    407406    def expose_(func): 
    408407        func.exposed = True 
     
    417416    import sys, types 
    418417    if isinstance(func, (types.FunctionType, types.MethodType)): 
    419         # expose is being called directly, before the method has been bound 
    420         parents = sys._getframe(1).f_locals 
    421         return expose_(func) 
    422     else: 
    423418        if alias is None: 
    424             # expose is being called as a decorator "@expose" 
     419            # @expose 
    425420            func.exposed = True 
    426421            return func 
    427422        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() 
    429429            parents = sys._getframe(1).f_locals 
    430430            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 
    431443 
    432444def url(path="", qs="", script_name=None, base=None, relative=None): 
  • trunk/cherrypy/test/test_core.py

    r1984 r1990  
    66import os 
    77localDir = os.path.dirname(__file__) 
     8import sys 
    89import types 
    910 
     
    415416            cherrypy.request.asdf = "rassfrassin" 
    416417            return existing 
     418     
     419    if sys.version_info >= (2, 5): 
     420        from cherrypy.test import py25 
     421        Root.expose_dec = py25.ExposeExamples() 
    417422     
    418423    cherrypy.config.update({ 
     
    10721077        self.getPage('/url/?path_info=/page1&relative=server') 
    10731078        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") 
    10741120 
    10751121 

Hosted by WebFaction

Log in as guest/cpguest to create tickets