def test_idempotent(self): mod = Module(None, 'codemodule', zope.app.apidoc.codemodule) before = len(mod) self.assertGreater(before, 0) self.assertTrue(mod._package) mod._Module__needsSetup = True mod._Module__setup() self.assertEqual(len(mod), before)
def test_module_with_file_of_none(self): # Sometimes namespace packages have this, # especially on Python 3.7. class Mod(object): __file__ = None __name__ = 'name' mod = Mod() mod.__doc__ = 'A module' inst = Module(None, 'name', mod) self.assertEqual(mod.__doc__, inst.getDocString())
def __init__(self, dotted_path): self.path = dotted_path self.klass = resolve(self.path) self.module_path, self.name = dotted_path.rsplit('.', 1) self.module = resolve(self.module_path) mod_apidoc = Module(None, None, self.module, False) self.apidoc = Class(mod_apidoc, self.name, self.klass)
def __init__(self, dotted_path): self.path = dotted_path self._module = resolve(self.path) # In apidoc packages are handled like modules... self.apidoc = Module(None, None, self._module, True)
class DocGrokPackage(DocGrok): """This doctor cares for python packages. """ path = None apidoc = None _traversal_root = None def __init__(self, dotted_path): self.path = dotted_path self._module = resolve(self.path) # In apidoc packages are handled like modules... self.apidoc = Module(None, None, self._module, True) def getDocString(self): return self.apidoc.getDocString() def getFilePath(self): ob = resolve(self.path) return os.path.dirname(ob.__file__) + '/' def _getModuleInfos(self, filter_func=lambda x: x): """Get modules and packages of a package. The filter function will be applied to a list of modules and packages of type grok.scan.ModuleInfo. """ ob = resolve(self.path) filename = ob.__file__ module_info = ModuleInfo(filename, self.path) infos = module_info.getSubModuleInfos() if filter_func is not None: infos = filter(filter_func, infos) result = [] for info in infos: subresult = {} # Build a url string from dotted path... mod_path = "docgrok" for path_part in info.dotted_name.split('.'): mod_path = os.path.join(mod_path, path_part) subresult = { 'url': mod_path, 'name': info.name, 'dotted_name': info.dotted_name } result.append(subresult) return result def getModuleInfos(self): """Get the modules inside a package. """ filter_func = lambda x: not x.isPackage() return self._getModuleInfos(filter_func) def getSubPackageInfos(self): """Get the subpackages inside a package. """ filter_func = lambda x: x.isPackage() return self._getModuleInfos(filter_func) def getTextFiles(self): """Get the text files inside a package. """ filter_func = lambda x: x.isinstance(TextFile) return self._getModuleInfos(filter_func) def getChildren(self): result = self.apidoc.items() result.sort(lambda x, y: cmp(x[0], y[0])) return result