diff options
Diffstat (limited to 'github3/config.py')
-rw-r--r-- | github3/config.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/github3/config.py b/github3/config.py new file mode 100644 index 0000000..3a9705c --- /dev/null +++ b/github3/config.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +""" +github3.config +~~~~~~~~~~~~~~ + +This module provides the GitHub3 settings feature set. + +:copyright: (c) 2011 by Kenneth Reitz. +:license: ISC, see LICENSE for more details. +""" + + +class Settings(object): + _singleton = dict() + + # attributes with defaults + __attrs__ = ('timeout',) + + def __init__(self, **kwargs): + super(Settings, self).__init__() + + self.__dict__ = self._singleton + + + def __call__(self, *args, **kwargs): + # new instance of class to call + r = self.__class__() + + # cache previous settings for __exit__ + r.__cache = self.__dict__.copy() + map(self.__cache.setdefault, self.__attrs__) + + # set new settings + self.__dict__.update(*args, **kwargs) + + return r + + + def __enter__(self): + pass + + + def __exit__(self, *args): + + # restore cached copy + self.__dict__.update(self.__cache.copy()) + del self.__cache + + + def __getattribute__(self, key): + if key in object.__getattribute__(self, '__attrs__'): + try: + return object.__getattribute__(self, key) + except AttributeError: + return None + return object.__getattribute__(self, key) + + +settings = Settings() +settings.domain = 'https://api.github.com'
\ No newline at end of file |