diff options
author | kali <kali@leap.se> | 2012-08-24 01:01:06 +0900 |
---|---|---|
committer | kali <kali@leap.se> | 2012-08-24 01:01:06 +0900 |
commit | c2955d9655e3e7ccb3c5fc9e7d00a0d493d48a40 (patch) | |
tree | ff21bf162a97b0cc448775d597b619226f191dfc /src/leap/base/config.py | |
parent | bd154da54eb022d12d225a84cea1053f868eab56 (diff) | |
parent | dc10833bedcdecf081a7c79678614c5521445164 (diff) |
Merge branch 'get-definition.json' into providers-static
adjusted some loose ends to make tests pass again.
this merge is still half-baked regarding functionality:
I've left in place old Configuration class used by
some tests antialias did on his branch. I plan to merge
that functionality with the more recent JSONConfig
and Spec classes.
Conflicts:
src/leap/base/configuration.py
src/leap/eip/config.py
src/leap/eip/tests/test_config.py
Diffstat (limited to 'src/leap/base/config.py')
-rw-r--r-- | src/leap/base/config.py | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 9493d511..dbd2e2c0 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -167,6 +167,7 @@ def get_config_json(config_file=None): @rtype: dictionary """ if not config_file: + #TODO: NOT SURE WHAT this default should be, if anything fpath = get_config_file('eip.json') if not os.path.isfile(fpath): dpath, cfile = os.path.split(fpath) @@ -174,11 +175,11 @@ def get_config_json(config_file=None): mkdir_p(dpath) with open(fpath, 'wb') as configfile: configfile.flush() - config_file = open(fpath) + return json.load(open(fpath)) - config = json.load(config_file) - - return config + else: + #TODO: add validity checks of file + return json.load(open(config_file)) def get_definition_file(url=None): @@ -187,3 +188,65 @@ def get_definition_file(url=None): #TODO: determine good default location of definition file. r = requests.get(url) return r.json + + +def is_internet_up(): + """TODO: Build more robust network diagnosis capabilities + """ + try: + requests.get('http://128.30.52.45', timeout=1) + return True + except requests.Timeout: # as err: + pass + return False + +# +# XXX merge conflict +# tests are still using this deprecated Configuration object. +# moving it here transiently until I clean merge commit. +# -- kali 2012-08-24 00:32 +# + + +class Configuration(object): + """ + All configurations (providers et al) will be managed in this class. + """ + def __init__(self, provider_url=None): + try: + self.providers = {} + self.error = False + provider_file = self.check_and_get_definition_file(provider_url) + self.providers['default'] = get_config_json(provider_file) + except (requests.HTTPError, requests.RequestException) as e: + self.error = e.message + except requests.ConnectionError as e: + if e.message == "[Errno 113] No route to host": + if not is_internet_up: + self.error = "No valid internet connection found" + else: + self.error = "Provider server appears currently down." + + def check_and_get_definition_file(self, provider_url): + """ + checks if provider definition.json file is present. + if not downloads one from the web. + """ + default_provider_path = get_default_provider_path() + + if not os.path.isdir(default_provider_path): + mkdir_p(default_provider_path) + + definition_file = get_config_file( + 'definition.json', + folder=default_provider_path) + + if os.path.isfile(definition_file): + return + + else: + r = requests.get(provider_url) + r.raise_for_status() + with open(definition_file, 'wb') as f: + f.write(json.dumps(r.json, indent=4)) + return definition_file |