2012-06-05 4 views
12

C'è un file development.ini o production.ini in un progetto piramidale. Aggiungo i miei dati di configurazione nel file INI come:come posso ottenere i dati ini nella piramide?

[thrift] 
host = 0.0.0.0 
port = 8080 

e voglio utilizzare i dati di configurazione in uno dei file py nel progetto. Come posso ottenere i dati senza l'oggetto richiesta? (Ho visto una soluzione che utilizza la richiesta.)

risposta

21

È possibile accedere alle impostazioni su request.registry.settings o pyramid.threadlocal.get_current_registry().settings. Si comporta come un dizionario.

Se si desidera utilizzare il secondo, ovvero ottenere le impostazioni senza la richiesta, è necessario avvisare l'utente. Secondo the doc:

Questa funzione deve essere utilizzata estremamente moderazione, di solito solo in unità codice di test. è quasi sempre un errore usare sempre get_current_registry al di fuori di un contesto di test perché il suo utilizzo rende possibile scrivere codice che non può essere né facilmente testato né programmato.

Qualsiasi parte del codice che ha bisogno di accedere alle impostazioni fa parte dell'applicazione Web e deve accedere alla richiesta, non a magicamente accessibile globalmente. Potresti pensare di avere una buona ragione, ma probabilmente c'è un modo migliore. Se vuoi discuterne (magari in un'altra domanda se è complessa, come potrebbe aiutare qualche codice), sarò lieto di aiutarti a trovare un modo pulito per farlo.

+1

Grazie. Modificato per renderlo più chiaro nella risposta. A proposito, il registro non è il file delle impostazioni (vedi http://pyramid.readthedocs.org/en/1.3-branch/glossary.html#term-application-registry). – madjar

+0

Si noti che per aggiungere un'impostazione personalizzata e utilizzare questa risposta non è possibile aggiungerla in una nuova sezione. Devi aggiungerlo alla sezione [app: main] esistente. Vedi [la documentazione] (http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting). – Zitrax

2

Ogni volta che mi chiedo come fare qualcosa in piramide, di solito mi riferisco a uno degli esempi piramidali su github.

Parsing Example Pyramid Config

Io non so come "pyrmadic" sono, ma hanno usaully funzionare bene. Qui usano semplicemente ConfigParser proprio come in qualsiasi progetto python per analizzare i file .ini

-2

Pensate a "python" piuttosto che a "piramide".

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read('development.ini') 
db_url = config.get('app:main', 'sqlalchemy.url') 
+1

Pyramid usa 'PasteDeploy' nella loro infinita saggezza. 'ConfigParser' non funzionerà: non accetta '.' nei nomi delle chiavi. – NuclearPeon

+1

Hardcoding è una cattiva pratica. – karantan