Source code for awsfabrictasks.conf

import sys
from os.path import expanduser, join, exists, dirname
from pprint import pprint
from fabric.api import task, env
from warnings import warn

import default_settings

__all__ = ['Settings', 'print_settings', 'default_settings']



def import_module(name, package=None):
    __import__(name)
    return sys.modules[name]

[docs]class Settings(object): """ Settings object inspired by django.conf.settings. """ def __init__(self): self._apply_settings_from_module(default_settings) self._is_loaded = False def __getattribute__(self, attr): """ Load settings automatically the first time an uppercase attribute (setting) is requested. """ if attr.upper() == attr: if not self._is_loaded: if hasattr(env, 'awsfab_settings_module'): self.load(env.awsfab_settings_module) else: warn('Could not find the env.awsfab_settings_module. Make sure you run run awsfab tasks using the ``awsfab`` command (not fab)?') return super(Settings, self).__getattribute__(attr) def load(self, settings_module): if self._is_loaded: raise Exception('Can only load settings once.') custom_settings = import_module(settings_module) self._apply_settings_from_module(custom_settings) try: local_settings = import_module(settings_module + '_local') except ImportError: pass else: self._apply_settings_from_module(local_settings) self._is_loaded = True def _apply_settings_from_module(self, settings_module): for setting in dir(settings_module): if setting == setting.upper(): setattr(self, setting, getattr(settings_module, setting))
[docs] def as_dict(self): """ Get all settings (uppercase attributes on this object) as a dict. """ dct = {} for attrname, value in self.__dict__.iteritems(): if attrname.upper() == attrname: dct[attrname] = value return dct
[docs] def pprint(self): """ Prettyprint the settings. """ pprint(self.as_dict())
awsfab_settings = Settings() @task @task def print_default_settings(): """ Print ``default_settings.py``. """ path = join(dirname(default_settings.__file__), 'default_settings.py') print open(path).read()

Project Versions