# Copyright (c) 2010 Clovis Fabricio Costa - All rights reserved
# Distribution allowed under MIT license
"""
This module can give you an infinite arsenal of python functions and classes!
Save this as activestate.py
Then you can run:
>>> from activestate.recipe194373 import mreplace
>>> print mreplace('ectave steta racipas rock!', ('a', 'e'), ('e', 'a'))
active state recipes rock!
"""
import sys
import imp
import re
import urllib2
if __name__ == '__main__':
raise ImportError("This module can't be executed directly - it should be imported")
class RecipeImporter(object):
_regex = re.compile('%s\.recipe(\d+)' % re.escape(__name__))
url = 'http://code.activestate.com/recipes/%s/download/1/'
def find_module(self, name, pathlist):
if name == __name__:
return self
base, sep, part = name.partition('.')
if part.startswith('recipe'):
return self
def _create_module(self, modulename):
mod = imp.new_module(modulename)
mod.__file__ = "<(%s)>" % (modulename,)
mod.__loader__ = self
sys.modules[modulename] = mod
return mod
def load_module(self, fullname):
if fullname in sys.modules:
mod = sys.modules[fullname]
else:
mod = self._get_module(fullname)
return mod
def _get_module(self, fullname):
if fullname == __name__:
mod = self._create_module(fullname)
mod.__path__ = []
else:
m = self._regex.match(fullname)
if m:
try:
code = urllib2.urlopen(self.url % m.groups()).read()
except (urllib2.HTTPError, urllib2.URLError) as e:
raise ImportError("Can't load recipe %s: %s" %
(m.group(1), e))
mod = self._create_module(fullname)
exec code in mod.__dict__
else:
raise ImportError("Don't know how to import %r" % (fullname,))
return mod
sys.meta_path.append(RecipeImporter())
__path__ = []