-
Notifications
You must be signed in to change notification settings - Fork 21
/
config.py
75 lines (58 loc) · 2.05 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
# encoding: utf-8
import urllib2
import traceback
import sys
project_name = 'kodo-python'
project_dependencies = \
[
'waf-tools',
'boost',
'gtest',
]
# Importing a dynamically generated module
# Python recipe from http://code.activestate.com/recipes/82234
def importCode(code, name, add_to_sys_modules=0):
"""
Import dynamically generated code as a module. code is the
object containing the code (a string, a file handle or an
actual compiled code object, same types as accepted by an
exec statement). The name is the name to give to the module,
and the final argument says wheter to add it to sys.modules
or not. If it is added, a subsequent import statement using
name will return this module. If it is not added to sys.modules
import will try to load it in the normal fashion.
import foo
is equivalent to
foofile = open("/path/to/foo.py")
foo = importCode(foofile,"foo",1)
Returns a newly generated module.
"""
import imp
module = imp.new_module(name)
exec code in module.__dict__
if add_to_sys_modules:
sys.modules[name] = module
return module
if __name__ == '__main__':
print('Updating Smart Project Config Tool...')
url = "https://raw.github.com/steinwurf/steinwurf-labs/" \
"master/config_helper/config-impl.py"
try:
# Fetch the code file from the given url
req = urllib2.Request(url)
response = urllib2.urlopen(req)
code = response.read()
print("Update complete. Code size: {}\n".format(len(code)))
try:
# Import the code string as a module
mod = importCode(code, "config_helper")
# Run the actual config tool from the dynamic module
mod.config_tool(project_dependencies)
except:
print("Unexpected error:")
print traceback.format_exc()
except Exception as e:
print("Could not fetch code file from:\n\t{}".format(url))
print(e)
raw_input('Press ENTER to exit...')