aboutsummaryrefslogtreecommitdiffstats
path: root/github3/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'github3/config.py')
-rw-r--r--github3/config.py61
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