mirror of
https://github.com/kennethreitz/python-github3.git
synced 2026-06-05 23:10:17 +00:00
config
This commit is contained in:
@@ -0,0 +1,57 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
github3.config
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This module provides the Github3 settings feature set.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Settings(object):
|
||||||
|
_singleton = {}
|
||||||
|
|
||||||
|
# attributes with defaults
|
||||||
|
__attrs__ = []
|
||||||
|
|
||||||
|
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.verbose = False
|
||||||
Reference in New Issue
Block a user