2012-06-05 16 views
12

Istnieje project.ini lub production.ini w projekcie piramidy. Mogę dodać własne dane konfiguracyjne w INI plików, takich jak:Jak mogę uzyskać dane ini w piramidzie?

[thrift] 
host = 0.0.0.0 
port = 8080 

i chcę wykorzystać dane konfiguracyjne w jednym z PY plików w projekcie. Jak mogę uzyskać dane bez obiektu żądania? (Widziałem rozwiązanie, które korzysta z żądania).

Odpowiedz

21

Dostęp do ustawień można uzyskać pod numerem request.registry.settings lub pyramid.threadlocal.get_current_registry().settings. Zachowuje się jak słownik.

Jeśli chcesz skorzystać z drugiego, to jest pobieranie ustawień bez żądania, muszę Cię ostrzec. Według the doc:

Ta funkcja powinna być używana bardzo oszczędnie, zazwyczaj tylko jednostka testowania kodu. prawie zawsze błędem jest używanie get_current_registry poza kontekstem testowania, ponieważ jego użycie powoduje, że można napisać kod, który nie może być ani łatwo przetestowany, ani skrypty w wersji .

Każda część kodu, który potrzebuje dostępu do ustawień, jest częścią aplikacji internetowej i powinna uzyskać dostęp do żądania, a nie do jakiegoś magicznie dostępnego globalnego. Możesz myśleć, że masz dobry powód, ale prawdopodobnie jest lepszy sposób. Jeśli chcesz o tym porozmawiać (może w innym pytaniu, jeśli jest to skomplikowane, jak może pomóc jakiś kod), chętnie pomogę ci znaleźć czysty sposób na zrobienie tego.

+1

Dzięki. Edytowane w celu uczynienia go bardziej zrozumiałym w odpowiedzi. Nawiasem mówiąc, rejestr nie jest plikiem ustawień (zobacz http://pyramid.readthedocs.org/en/1.3-branch/glossary.html#term-application-registry). – madjar

+0

Pamiętaj, że aby dodać ustawienie niestandardowe i użyć tej odpowiedzi, nie możesz dodać jej w nowej sekcji. Musisz dodać go do istniejącej sekcji [app: main]. Zobacz [dokumentację] (http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting). – Zitrax

2

Ilekroć zastanawiam się, jak coś zrobić w piramidzie, zazwyczaj odwołuję się do jednego z przykładów piramid na githubie.

Parsing Example Pyramid Config

nie wiem jak "pyrmadic" są ale usaully działać prawidłowo. Tutaj po prostu używają ConfigParser, tak jak w każdym projekcie pythona do parsowania swoich plików .ini

-2

Myśl "python" zamiast "piramida".

import ConfigParser 

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

Piramida używa "PasteDeploy" w ich nieskończonej mądrości. 'ConfigParser' nie działa: nie akceptuje posiadania' .' w nazwach kluczy. – NuclearPeon

+1

Hardcoding to zła praktyka. – karantan