2010-10-21 5 views
6

J'installe une application CherryPy et je voudrais avoir la majorité de mes paramètres de configuration dans un fichier .conf comme ceci:CherryPy combiner fichier et configuration à base de dictionnaire

[global] 
server.socketPort = 8080 
server.threadPool = 10 
server.environment = "production" 

Cependant, je voudrais aussi installer un peu avec un dictionnaire dans le code comme ceci:

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

cherrypy.quickstart(HelloWorld(), config=conf) 

Est-il possible de combiner les deux configs en un seul et passer ensuite dans l'option de démarrage rapide de configuration?

Répondre

11

quickstart est pour les sites rapides. Si vous faites quelque chose d'aussi complexe que d'avoir plusieurs configurations, il est temps d'obtenir votre diplôme. Regardez le code source de la fonction quickstart (ce n'est pas effrayant!): Vous allez décompresser cela dans votre script de démarrage. Ainsi, au lieu de quickstart, écrire ceci:

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() 

Nous avons essentiellement ajouté deux lignes au code de démarrage rapide. D'abord, nous avons un appel supplémentaire à config.update; qui fusionne le dict de config dans la config globale. Deuxièmement, app.merge(confdict); C'est pour fusionner plusieurs configurations dans chaque application.

Il est parfaitement OK de les faire dans l'ordre inverse si vous voulez que le fichier config remplace le dict. Il est également possible de coller la configuration dict-based dans HelloWorld._cp_config comme described dans les docs.

+0

Fonctionne très bien. Merci! – jamesaharvey

2

Il s'agit de deux configurations différentes. Cherrypy a deux configurations: l'une est la configuration globale et l'autre est la configuration de l'application. Vous pouvez utiliser les deux normalement:

cherrypy.config.update('my_file.ini') 
cherrypy.quickstart(HelloWorld(), config=conf) 

S'il vous plaît noter que votre fichier de configuration exemple est mauvais - au lieu de server.socketPort il devrait être server.socket_port et au lieu de server.threadPool il devrait être server.threadpool. Vérifiez config docs pour plus d'informations.

+0

Ok, mais ce que je veux vraiment faire est de spécifier la plupart des valeurs de configuration dans le fichier my_file.ini, avec quelques autres qui nécessitent du code. Est-il possible de faire les deux? – jamesaharvey

Questions connexes