def test_config(self):
     from textwrap import dedent
     conf = dedent('\n        [DEFAULT]\n        dir = "/some/dir"\n        my.dir = %(dir)s + "/sub"\n\n        [my]\n        my.dir = %(dir)s + "/my/dir"\n        my.dir2 = %(my.dir)s + \'/dir2\'\n\n        ')
     fp = StringIO(conf)
     cherrypy.config.update(fp)
     self.assertEqual(cherrypy.config['my']['my.dir'], '/some/dir/my/dir')
     self.assertEqual(cherrypy.config['my']['my.dir2'], '/some/dir/my/dir/dir2')
Beispiel #2
0
 def stats(self, filename, sortby='cumulative'):
     """:rtype stats(index): output of print_stats() for the given profile.
     """
     sio = StringIO()
     if sys.version_info >= (2, 5):
         s = pstats.Stats(os.path.join(self.path, filename), stream=sio)
         s.strip_dirs()
         s.sort_stats(sortby)
         s.print_stats()
     else:
         # pstats.Stats before Python 2.5 didn't take a 'stream' arg,
         # but just printed to stdout. So re-route stdout.
         s = pstats.Stats(os.path.join(self.path, filename))
         s.strip_dirs()
         s.sort_stats(sortby)
         oldout = sys.stdout
         try:
             sys.stdout = sio
             s.print_stats()
         finally:
             sys.stdout = oldout
     response = sio.getvalue()
     sio.close()
     return response
Beispiel #3
0
 def stats(self, filename, sortby='cumulative'):
     """:rtype stats(index): output of print_stats() for the given profile.
     """
     sio = StringIO()
     if sys.version_info >= (2, 5):
         s = pstats.Stats(os.path.join(self.path, filename), stream=sio)
         s.strip_dirs()
         s.sort_stats(sortby)
         s.print_stats()
     else:
         # pstats.Stats before Python 2.5 didn't take a 'stream' arg,
         # but just printed to stdout. So re-route stdout.
         s = pstats.Stats(os.path.join(self.path, filename))
         s.strip_dirs()
         s.sort_stats(sortby)
         oldout = sys.stdout
         try:
             sys.stdout = sio
             s.print_stats()
         finally:
             sys.stdout = oldout
     response = sio.getvalue()
     sio.close()
     return response
Beispiel #4
0
    def test_config(self):
        from textwrap import dedent

        # variable substitution with [DEFAULT]
        conf = dedent("""
        [DEFAULT]
        dir = "/some/dir"
        my.dir = %(dir)s + "/sub"

        [my]
        my.dir = %(dir)s + "/my/dir"
        my.dir2 = %(my.dir)s + '/dir2'

        """)

        fp = StringIO(conf)

        cherrypy.config.update(fp)
        self.assertEqual(cherrypy.config["my"]["my.dir"], "/some/dir/my/dir")
        self.assertEqual(cherrypy.config["my"]["my.dir2"], "/some/dir/my/dir/dir2")
Beispiel #5
0
def setup_server():
    class Root:

        _cp_config = {'foo': 'this', 'bar': 'that'}

        def __init__(self):
            cherrypy.config.namespaces['db'] = self.db_namespace

        def db_namespace(self, k, v):
            if k == "scheme":
                self.db = v

        # @cherrypy.expose(alias=('global_', 'xyz'))
        def index(self, key):
            return cherrypy.request.config.get(key, "None")

        index = cherrypy.expose(index, alias=('global_', 'xyz'))

        def repr(self, key):
            return repr(cherrypy.request.config.get(key, None))

        repr.exposed = True

        def dbscheme(self):
            return self.db

        dbscheme.exposed = True

        def plain(self, x):
            return x

        plain.exposed = True
        plain._cp_config = {'request.body.attempt_charsets': ['utf-16']}

        favicon_ico = cherrypy.tools.staticfile.handler(
            filename=os.path.join(localDir, '../favicon.ico'))

    class Foo:

        _cp_config = {'foo': 'this2', 'baz': 'that2'}

        def index(self, key):
            return cherrypy.request.config.get(key, "None")

        index.exposed = True
        nex = index

        def silly(self):
            return 'Hello world'

        silly.exposed = True
        silly._cp_config = {'response.headers.X-silly': 'sillyval'}

        # Test the expose and config decorators
        @cherrypy.expose
        @cherrypy.config(foo='this3', **{'bax': 'this4'})
        def bar(self, key):
            return repr(cherrypy.request.config.get(key, None))

    class Another:
        def index(self, key):
            return str(cherrypy.request.config.get(key, "None"))

        index.exposed = True

    def raw_namespace(key, value):
        if key == 'input.map':
            handler = cherrypy.request.handler

            def wrapper():
                params = cherrypy.request.params
                for name, coercer in list(value.items()):
                    try:
                        params[name] = coercer(params[name])
                    except KeyError:
                        pass
                return handler()

            cherrypy.request.handler = wrapper
        elif key == 'output':
            handler = cherrypy.request.handler

            def wrapper():
                # 'value' is a type (like int or str).
                return value(handler())

            cherrypy.request.handler = wrapper

    class Raw:

        _cp_config = {'raw.output': repr}

        def incr(self, num):
            return num + 1

        incr.exposed = True
        incr._cp_config = {'raw.input.map': {'num': int}}

    ioconf = StringIO("""
[/]
neg: -1234
filename: os.path.join(sys.prefix, "hello.py")
thing1: cherrypy.lib.httputil.response_codes[404]
thing2: __import__('cherrypy.tutorial', globals(), locals(), ['']).thing2
complex: 3+2j
ones: "11"
twos: "22"
stradd: %%(ones)s + %%(twos)s + "33"

[/favicon.ico]
tools.staticfile.filename = %r
""" % os.path.join(localDir, 'static/dirback.jpg'))

    root = Root()
    root.foo = Foo()
    root.raw = Raw()
    app = cherrypy.tree.mount(root, config=ioconf)
    app.request_class.namespaces['raw'] = raw_namespace

    cherrypy.tree.mount(Another(), "/another")
    cherrypy.config.update({
        'luxuryyacht': 'throatwobblermangrove',
        'db.scheme': r"sqlite///memory",
    })