def discover(directories, index, filterfunc=lambda filename: True): """Import and initialize modules from `directories` list. :param directories: list of directories :param index: index function""" def find(directories, filterfunc): """Discover and yield python modules (aka files that endswith .py) if `filterfunc` returns True for that filename.""" for directory in directories: for root, dirs, files in os.walk(directory): for fname in files: if fname.endswith('.py') and filterfunc(join(root, fname)): yield join(root, fname) for filename in find(directories, filterfunc): modname, ext = os.path.splitext(os.path.basename(rchop(filename, os.sep + '__init__.py'))) fp, path, descr = imp.find_module(modname, directories) prefix = commonprefix((PATH, filename)) if prefix: modname = 'acrylamid.' modname += rchop(filename[len(prefix):].replace(os.sep, '.'), '.py') try: mod = sys.modules[modname] except KeyError: try: mod = imp.load_module(modname, fp, path, descr) except (ImportError, SyntaxError, ValueError) as e: log.exception('%r %s: %s', modname, e.__class__.__name__, e) continue index(mod)
def permalink(self): """Actual permanent link, depends on entry's property and ``permalink_format``. If you set permalink in the YAML header, we use this as permalink otherwise the URL without trailing *index.html.*""" try: return self.props['permalink'] except KeyError: return expand(rchop(self.props['%s_permalink' % self.type], 'index.html'), self)