14
|
1 import imp
|
|
2 import os
|
42
|
3 import sys
|
14
|
4 import tempfile
|
|
5 import urllib2
|
|
6
|
42
|
7 def require(*urls, **filenames):
|
10
|
8 """
|
|
9 import a module from the web
|
|
10 url should be like scheme://host.name/path/to/module.py
|
|
11 """
|
42
|
12
|
|
13 tempdir = tempfile.mkdtemp()
|
|
14 sys.path.insert(0, tempdir)
|
|
15 retval = []
|
|
16
|
|
17 for url in urls:
|
|
18 contents = urllib2.urlopen(url).read()
|
|
19 filename = filenames.get(url, None)
|
|
20 if not filename:
|
|
21 filename = url.rsplit('/', 1)[-1]
|
|
22 module = filename.rsplit('.', 1)[0]
|
|
23 dest = os.path.join(tempdir, filename)
|
|
24 f = file(dest, 'w')
|
|
25 f.write(contents)
|
|
26 f.close()
|
|
27 try:
|
|
28 _module = imp.load_source(module, dest)
|
|
29 except Exception, e:
|
|
30 raise
|
|
31 # import pdb; pdb.set_trace()
|
|
32 retval.append(_module)
|
|
33
|
|
34 sys.path.pop(0)
|
|
35 return retval
|
10
|
36
|
|
37 # TODO: make an equivalent method for a tarball
|