Odio configurar cosas, y mas odio olvidarme que mi settings.py de django esta versionado y subir algún password mio a un repo publico.
Así que probé varias soluciones de archivos de conf distribuidos pero todos metían conceptos nuevos que no me interesaba descular.
En fin… hice esto
django-hateconf 
Las premisas eran:
- el setttings.py original es suficiente información para utilizar de templates y de schema para los archivos externos.
- Las conf pueden guardarse en varios formatos a gusto del usuario del proyecto.
Bueno a los bifes:
$ pip install django-hateconf
o
$ easy_install django-hateconf
o bajarlo de aca: https://bitbucket.org/leliel12/django-hateconf/
-
Paso 2: Crear proyecto django
$ django-admin start-project myproject
-
Paso 3: Editar el “settings.py” y agregar a la variable INSTALLED_APPS, django_hateconf.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
"django_hateconf",
)
-
Paso 4: Editar al “settings.py” de myproject y agregar esta variable
SETTINGS_BIND = {
"file":
"archivo.yaml",
"bind":
("DATABASES", "DEBUG"),
"header":
"Este es un archivo de configuracion del proyecto myproject"
}
Esta diccionario tiene las siguientes llaves:
- file: El cual es un path a un archivo que va a contener la configuración que va a utilizar nuestro proyecto. El formato del archivo se deduce desde su extensión (NO es case sensitive); las cuales pueden ser:
- “.yml” o “.yaml” para formato yaml YAML (
- ”.json” para formato JSON (http://www.json.org/).
- ”.xml” para formato XML (http://www.w3.org/XML/).
- ”.cfg” o “.ini” pata formato que consiste en secciones que empiezan con la cabecera “[section]“y continua con combinaciones de “llave = valor” en el estilo
de la RFC 822.
- bind: Es una lista o tupla que contiene los nombres de las variables de settings.py que se deseamos que se configuren desde nuestro archivo. Con este campo, django-hateconf, busca por su nombre a las variables en el settings.py y con su contenido genera un template en el formato especificado en el campo file. Las reglas para el contenido del campo bind son:
- Las variables deben existir en el settings.py
- No se puede “bindear” SETTINGS_BIND
- Si en nuestro archivo declarado en file, por ejemplo, bindeamos la variable “TIME_ZONE” y esta no esta en el campo bind, django-hateconf ignorará el bindeo y se utilizara el valor dentro del settings.py,
- El valor que se asigne a las variables dentro de nuestro file, tiene que ser un valor “casteable” al que tenemos asignado a la misma variable dentro del settings.py. Para entender si decimos que la variable “A = 1″ en nuestro settings.py cualquier cosa que pueda convertirse automaticamente a un “int” puede existir dentro de nuestro archivo declarado en file. Un caso particular es el valor None el cual acepta cualquier objeto sin castearlo cuando se bindea.
- Si el valor es una lista, tupla, diccionario o set; el casteo se hace recursivamente. Asi que los valores internos a estas colecciones también deben ser casteables.
- header: Es el comentario que llevara en la cabecera el archivo declarado en file. Este campo es opcional.
-
Paso 5: Agregar al final de “settings.py” estas dos lineas:
import django_hateconf
django_hateconf.patch(locals())
$ python manage.py settings --sync
Con esto deberia haberse creado un nuevo archivo “archivo.yaml” en la misma carpeta del proyecto exactamente así:
# Este es un archivo de configuracion del proyecto myproject
- DATABASES:
default:
ENGINE: django.db.backends.dummy
HOST: ”
NAME: ”
OPTIONS: {}
PASSWORD: ”
PORT: ”
TEST_CHARSET: null
TEST_COLLATION: null
TEST_MIRROR: null
TEST_NAME: null
TIME_ZONE: America/Chicago
USER: ”
- DEBUG: true
Bueno para configurar su database solo tiene que editar su archivo.yaml.
Las otras opciones que da django hateconf son:
python manage.py settings --path Dice donde esta el archivo de configuración
python manage.py settings --show Muestra el settings ya mergeado.
python manage.py settings --sync Sincroniza los archivos
python manage.py settings --vars Muestra los valores de las variables ya bindeados
python manage.py settings --formats Lista los formatos validos para los archivos de configuración
python manage.py settings --validate Busca errores en nuestro archivo de bindeo
python manage.py settings -h, --help Muestra una ayuda