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

Changeset 306

Show
Ignore:
Timestamp:
06/14/05 02:31:52
Author:
fumanchu
Message:

1. Removed base module and class "basefilter"
2. Cut baseline response time by 30% again.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/ooconf/cherrypy/_cpconfig.py

    r305 r306  
    22import ConfigParser 
    33 
    4 cpg = None # delayed import 
    54import _cputil, cperror 
    65from lib import autoreload 
    76 
     7cpg = None # delayed import 
     8def init(): 
     9    global cpg 
     10    if not cpg: 
     11        import cpg 
     12    reset() 
     13 
     14def reset(useDefaults=True): 
     15    _settings.clear() 
     16    _settings[cpg] = defaultGlobal.copy() 
     17 
     18# This _settings dict holds the settings metadata for all cpg objects. 
     19# Keys are objects in the cpg.root tree, and values are dicts. 
     20_settings = {} 
    821 
    922defaultGlobal = { 
     
    3649    } 
    3750 
    38 # This settings dict holds the settings metadata for all cpg objects. 
    39 # Keys are objects in the cpg.root tree, and values are dicts. 
    40 settings = {} 
    41  
    4251 
    4352def update(updateMap=None, file=None): 
     
    5059 
    5160def _update(updateMap): 
    52     global cpg 
    53     if not cpg: 
    54         import cpg 
    5561    import _cphttptools 
    5662     
    5763    for section, valueMap in updateMap.iteritems(): 
    5864        if section == 'global': 
    59             if cpg not in settings: 
    60                 settings[cpg] = defaultGlobal.copy() 
    61             bucket = settings[cpg] 
     65            bucket = _settings[cpg] 
    6266        else: 
    6367            try: 
     
    7377                objectTrail.pop() 
    7478            obj = objectTrail[-1] 
    75             bucket = settings.setdefault(obj, {}) 
     79            bucket = _settings.setdefault(obj, {}) 
    7680        bucket.update(valueMap) 
    7781         
    78         if cpg.config.get('server.environment') == 'development': 
     82        env = valueMap.get('server.environment') 
     83        if env == 'development': 
    7984            # In "dev" environment, log everything by default 
    80             bucket["logDebugInfoFilter.on"] = True 
     85            bucket.setdefault("logDebugInfoFilter.on", True) 
     86        else: 
     87            bucket.setdefault("logDebugInfoFilter.on", False) 
    8188 
    8289 
    8390def get(key, defaultValue=None): 
    84     global cpg 
    85     if not cpg: 
    86         import cpg 
     91    # This incantation seems to be fastest. 
     92    s = getattr(getattr(cpg, "request", None), "settings", None) 
    8793     
    88     try: 
    89         s = cpg.request.settings 
    90     except AttributeError: 
     94    if s is None: 
    9195        # Config is being retrieved outside of a request. 
    9296        # Return config for cpg ("global"). 
    93         if cpg not in settings: 
    94             settings[cpg] = defaultGlobal.copy() 
    95         s = settings[cpg] 
     97        s = _settings[cpg] 
    9698    return s.get(key, defaultValue) 
    9799 
    98100def collapsedSettings(objectTrail): 
    99101    """Collapse all 'settings' in objectTrail into a single dict.""" 
    100     if cpg not in settings: 
    101         settings[cpg] = defaultGlobal.copy() 
    102     result = settings[cpg].copy() 
     102    result = _settings[cpg].copy() 
    103103    for obj in objectTrail: 
    104         s = settings.setdefault(obj, {}) 
     104        s = _settings.setdefault(obj, {}) 
    105105        if s: 
    106106            result.update(s) 
     
    139139        configParser.read(configFile) 
    140140 
    141     # Load INI file into cpg.configMap 
     141    # Load INI file into configMap 
    142142    configMap = {} 
    143143    for section in configParser.sections(): 
  • branches/ooconf/cherrypy/_cphttptools.py

    r305 r306  
    3434import mimetypes, Cookie, urlparse 
    3535import cpg, _cputil, cperror, _cpdefaults 
    36 from lib.filter import basefilter 
    3736 
    3837from BaseHTTPServer import BaseHTTPRequestHandler 
     
    6564         
    6665        # Prepare cpg.request variables 
    67         cpg.request.remoteAddr = clientAddress 
    68         cpg.request.remoteHost = remoteHost 
    69         cpg.request.paramList = [] # Only used for Xml-Rpc 
    70         cpg.request.filenameMap = {} 
    71         cpg.request.fileTypeMap = {} 
    72         cpg.request.headerMap = {} 
    73         cpg.request.requestLine = requestLine 
    74         cpg.request.simpleCookie = Cookie.SimpleCookie() 
    75         cpg.request.isStatic = False 
    76         cpg.request.rfile = self.rfile 
     66        req = cpg.request 
     67        req.remoteAddr = clientAddress 
     68        req.remoteHost = remoteHost 
     69        req.paramList = [] # Only used for Xml-Rpc 
     70        req.filenameMap = {} 
     71        req.fileTypeMap = {} 
     72        req.headerMap = {} 
     73        req.requestLine = requestLine 
     74        req.simpleCookie = Cookie.SimpleCookie() 
     75        req.isStatic = False 
     76        req.rfile = self.rfile 
    7777         
    7878        # Prepare cpg.response variables 
    79         cpg.response.status = None 
    80         cpg.response.headers = None 
    81         cpg.response.body = None 
     79        resp = cpg.response 
     80        resp.status = None 
     81        resp.headers = None 
     82        resp.body = None 
    8283         
    8384        year, month, day, hh, mm, ss, wd, y, z = time.gmtime(time.time()) 
    8485        date = ("%s, %02d %3s %4d %02d:%02d:%02d GMT" % 
    8586                (weekdayname[wd], day, monthname[month], year, hh, mm, ss)) 
    86         cpg.response.headerMap = { 
     87        resp.headerMap = { 
    8788            "Content-Type": "text/html", 
    8889            "Server": "CherryPy/" + cpg.__version__, 
     
    9192            "Content-Length": 0 
    9293        } 
    93         cpg.response.simpleCookie = Cookie.SimpleCookie() 
     94        resp.simpleCookie = Cookie.SimpleCookie() 
    9495         
    9596        self.run() 
     
    104105                    main, virtualPathList = self.findMain() 
    105106                     
    106                     # Look these up again, because objectTrail is now set 
    107                     collectFilters(
     107                    # Look up again, since cpg.request.settings is now set 
     108                    collectFilters(True
    108109                     
    109110                    applyFilters('beforeRequestBody') 
     
    170171        cpg.request.browserUrl = cpg.request.base + path 
    171172         
    172         # Change objectPath in filters to change 
    173         # the object that will get rendered 
    174         cpg.request.objectPath = None 
    175          
    176173        # Save original values (in case they get modified by filters) 
    177174        cpg.request.originalPath = cpg.request.path 
     
    180177     
    181178    def findMain(self): 
    182         path = cpg.request.path 
    183         # Remove leading and trailing slash 
    184         path = path.strip("/") 
    185         # Replace quoted chars (eg %20) from url 
    186         path = urllib.unquote(path) 
    187          
    188179        try: 
    189             path = cpg.request.objectPath or cpg.request.path 
     180            path = cpg.request.path 
    190181            objectTrail, vpath, isIndex = mapPathToObject(path) 
    191182             
     
    250241 
    251242 
    252 def collectFilters(): 
     243def collectFilters(use_request_settings=False): 
     244    # This method gets called a *lot* so heavy optimization is needed. 
     245    if use_request_settings: 
     246        get = cpg.request.settings.get 
     247    else: 
     248        get = cpg.config._settings[cpg].get 
     249     
    253250    result = [] 
    254251    for f in _cpdefaults._cpDefaultInputFilterList: 
    255252        name = f.__class__.__name__ 
    256253        name = name[0].lower() + name[1:] 
    257         if cpg.config.get(name + ".on", False): 
     254        if get(name + ".on", False): 
    258255            result.append(f) 
    259256    cpg.request.defInputFilters = result 
     
    265262        name = f.__class__.__name__ 
    266263        name = name[0].lower() + name[1:] 
    267         if cpg.config.get(name + ".on", False): 
     264        if get(name + ".on", False): 
    268265            result.append(f) 
    269266    cpg.request.defOutputFilters = result 
     
    453450    # Also, a method has to have ".exposed = True" in order to be exposed 
    454451     
    455     originalPath = path 
    456452    # Remove leading and trailing slash 
    457453    path = path.strip("/") 
  • branches/ooconf/cherrypy/cpg.py

    r267 r306  
    3838import _cpserver as server 
    3939import _cpconfig as config 
     40config.init() 
    4041 
    4142# decorator function for exposing methods 
  • branches/ooconf/cherrypy/lib/filter/baseurlfilter.py

    r305 r306  
    2727""" 
    2828 
    29 from basefilter import BaseFilter 
    3029 
    31 class BaseUrlFilter(BaseFilter)
     30class BaseUrlFilter
    3231    """Filter that changes the base URL. 
    3332     
  • branches/ooconf/cherrypy/lib/filter/cachefilter.py

    r305 r306  
    3131import time 
    3232 
    33 import basefilter 
    3433 
    3534def defaultCacheKey(): 
     
    105104 
    106105 
    107 class CacheFilter(basefilter.BaseFilter)
     106class CacheFilter
    108107    """If the page is already stored in the cache, serves the contents. 
    109108    If the page is not in the cache, caches the output. 
  • branches/ooconf/cherrypy/lib/filter/decodingfilter.py

    r305 r306  
    2727""" 
    2828 
    29 from basefilter import BaseFilter 
    3029 
    31 class DecodingFilter(BaseFilter)
     30class DecodingFilter
    3231    """Automatically decodes request parameters (except uploads).""" 
    3332     
  • branches/ooconf/cherrypy/lib/filter/encodingfilter.py

    r305 r306  
    2727""" 
    2828 
    29 from basefilter import BaseFilter 
    3029 
    31 class EncodingFilter(BaseFilter)
     30class EncodingFilter
    3231    """Filter that automatically encodes the response.""" 
    3332     
  • branches/ooconf/cherrypy/lib/filter/gzipfilter.py

    r305 r306  
    3030import struct 
    3131import time 
    32 from basefilter import BaseFilter 
    3332 
    34 class GzipFilter(BaseFilter)
     33class GzipFilter
    3534    """Filter that gzips the response.""" 
    3635     
  • branches/ooconf/cherrypy/lib/filter/logdebuginfofilter.py

    r305 r306  
    2828 
    2929import time, StringIO, pickle 
    30 from basefilter import BaseFilter 
    3130 
    32 class LogDebugInfoFilter(BaseFilter)
     31class LogDebugInfoFilter
    3332    """Filter that adds debug information to the page""" 
    3433     
  • branches/ooconf/cherrypy/lib/filter/nsgmlsfilter.py

    r305 r306  
    2727""" 
    2828 
    29 import os, cgi, StringIO, traceback 
    30 from basefilter import BaseFilter 
     29import os, cgi 
    3130 
    32 class NsgmlsFilter(BaseFilter)
     31class NsgmlsFilter
    3332    """Filter that runs the response through Nsgmls. 
    3433    """ 
  • branches/ooconf/cherrypy/lib/filter/sessionauthenticatefilter.py

    r299 r306  
    2727""" 
    2828 
    29 from basefilter import BaseFilter 
    3029 
    3130def loginScreen(fromPage, login = '', errorMsg = ''): 
     
    4342 
    4443 
    45 class SessionAuthenticateFilter(BaseFilter)
     44class SessionAuthenticateFilter
    4645    """ 
    4746    Filter that adds debug information to the page 
  • branches/ooconf/cherrypy/lib/filter/sessionfilter/sessionfilter.py

    r305 r306  
    11 
    2 from cherrypy.lib.filter.basefilter import BaseFilter 
    32import cherrypy.cpg 
    43 
     
    6059    return sessions 
    6160 
    62 class SessionFilter(BaseFilter)
     61class SessionFilter
    6362    """ 
    6463    Input filter - get the sessionId (or generate a new one) and load up the session data 
  • branches/ooconf/cherrypy/lib/filter/tidyfilter.py

    r305 r306  
    2828 
    2929import os, cgi, StringIO, traceback 
    30 from basefilter import BaseFilter 
    3130 
    32 class TidyFilter(BaseFilter)
     31class TidyFilter
    3332    """Filter that runs the response through Tidy. 
    3433     
  • branches/ooconf/cherrypy/lib/filter/virtualhostfilter.py

    r305 r306  
    2727""" 
    2828 
    29 import basefilter 
    3029 
    31 class VirtualHostFilter(basefilter.BaseFilter)
     30class VirtualHostFilter
    3231    """Filter that changes the ObjectPath based on the Host. 
    3332     
     
    3938        # We have to dynamically import cpg because Python can't handle 
    4039        #   circular module imports :-( 
    41         global cpg, _cphttptools 
    42         from cherrypy import cpg, _cphttptools 
     40        global cpg 
     41        from cherrypy import cpg 
    4342         
    4443        prefix = cpg.config.get('virtualHostFilter.prefix', '/') 
    45         # Store the original path in an attr which app code can see 
    46         p = cpg.request.originalPath = cpg.request.path 
    47         cpg.request.path = prefix + p 
     44        cpg.request.path = prefix + cpg.request.path 
    4845 
  • branches/ooconf/cherrypy/lib/filter/xmlrpcfilter.py

    r305 r306  
    103103###################################################################### 
    104104 
    105 from basefilter import BaseFilter 
    106105import xmlrpclib 
    107106 
    108 class XmlRpcFilter(BaseFilter)
     107class XmlRpcFilter
    109108    """Converts XMLRPC to CherryPy2 object system and vice-versa. 
    110109     
  • branches/ooconf/cherrypy/test/test.py

    r304 r306  
    178178            # Must run each module in a separate suite, 
    179179            # because each module uses/overwrites cpg globals. 
    180             cpg.config.settings.clear(
     180            cpg.config.reset(False
    181181            cpg.config.update({'global': server_conf.copy()}) 
    182182            suite = CPTestLoader.loadTestsFromName(testmod) 
  • branches/ooconf/cherrypy/test/test_core.py

    r304 r306  
    163163        helper.request("/foo/bar") 
    164164        self.assertEqual(cpg.response.body, "that2this4") 
     165##     
     166##    def testRepeatedRequests(self): 
     167##        def _mini(): 
     168##            for trial in xrange(100): 
     169##                helper.request("/") 
     170##        from cherrypy.lib import profiler 
     171##        p = profiler.Profiler() 
     172##        p.run(_mini) 
    165173     
    166174    def testStatus(self): 
  • branches/ooconf/cherrypy/test/test_tutorials.py

    r304 r306  
    4242def load_tut_module(tutorialName): 
    4343    """Import or reload tutorial module as needed.""" 
    44     cpg.config.settings.clear(
     44    cpg.config.reset(False
    4545    cpg.config.update({'global': server_conf.copy()}) 
    4646     
  • branches/ooconf/cherrypy/tutorial/tutorial.conf

    r242 r306  
    1 [/
     1[global
    22server.socketPort = 8080 
    33server.threadPool = 10 
    44server.environment = "production" 
    55session.storageType= "ram" 
     6# server.logToScreen = False 

Hosted by WebFaction

Log in as guest/cpguest to create tickets