CherryPy结合了基于文件和字典的配置

jam*_*vey 6 python configuration cherrypy

我正在设置一个CherryPy应用程序,并希望将大部分配置设置放在.conf文件中,如下所示:

[global]
server.socketPort = 8080
server.threadPool = 10
server.environment = "production"
Run Code Online (Sandbox Code Playgroud)

但是,我还想在代码中设置一些字典,如下所示:

conf = {'/': {'tools.staticdir.on': True, 
              'tools.staticdir.dir': os.path.join(current_dir, 'templates')}}             

cherrypy.quickstart(HelloWorld(), config=conf)
Run Code Online (Sandbox Code Playgroud)

是否可以将两个配置组合成一个,然后将其传递给config quickstart选项?

fum*_*chu 11

quickstart适用于快速网站.如果你正在做任何像多次配置一样复杂的事情,那么是时候毕业了.查看快速启动功能的源代码(它并不可怕!):您要将其解压缩到启动脚本中.所以不要quickstart写下这个:

cherrypy.config.update(conffile)
cherrypy.config.update(confdict)

app = cherrypy.tree.mount(HelloWorld(), '/', conffile)
app.merge(confdict)

if hasattr(cherrypy.engine, "signal_handler"):
    cherrypy.engine.signal_handler.subscribe()
if hasattr(cherrypy.engine, "console_control_handler"):
    cherrypy.engine.console_control_handler.subscribe()
cherrypy.engine.start()
cherrypy.engine.block()
Run Code Online (Sandbox Code Playgroud)

我们基本上在快速启动代码中添加了两行.首先,我们额外打电话给config.update; 将配置dict合并到全局配置中.第二,app.merge(confdict); 这是为了将多个配置合并到每个应用程序中.

如果您希望文件配置覆盖dict,那么以相反的顺序执行这些操作是完全可以的.HelloWorld._cp_config如文档中所述,坚持基于dict的配置也是可以的.