def eggdirectories(self, source, target): """Create egg directory structure and corresponding ``__init__.py`` files. """ if not 'src' in target.anchor: target.anchor['src'] = Directory() package = target.anchor['src'] names = source.name.split('.') for i in range(len(names)): if not names[i] in package: package[names[i]] = Directory() package = package[names[i]] module = python.Module() package['__init__.py'] = module if i < len(names) - 1: if not module.blocks(): block = python.Block() block.text = u"__import__('pkg_resources')" + \ u".declare_namespace(__name__)" module['ns_dec'] = block else: set_copyright(source, module) # store all pyeggs in a token eggtok = token('pyeggs', True, packages=set(), directories=set()) eggtok.packages.add(source) eggtok.directories.add(package) target.finalize(source, package)
def pyclass(self, source, target): """Create python classes. """ if source.stereotype('pyegg:stub'): return # skip class generation if previous custom handler mark this class as # already handled custom_handled = token('custom_handled_classes', True, classes=list()) handled_classes = [str(uuid) for uuid in custom_handled.classes] if str(source.uuid) in handled_classes: return name = source.name module = target.anchor try: set_copyright(source, module) except AttributeError: msg = 'Package "%s" must have either <<pymodule>> or ' + \ '<<pypackage>> stereotype' msg = msg % dotted_path(module) raise ValueError(msg) if module.classes(name): class_ = module.classes(name)[0] target.finalize(source, class_) return class_ = python.Class(name) module[str(class_.uuid)] = class_ if not is_class_a_function(source) \ and not source.parent.stereotype('pyegg:pymodule'): imp = Imports(module.parent['__init__.py']) imp.set(class_base_name(class_), [[class_.classname, None]]) target.finalize(source, class_)
def pymodule(self, source, target): """Create python modules. """ module = python.Module() container = target.anchor container['%s.py' % source.name] = module set_copyright(source, module) # store all pymodules in a token modtok = token('pymodules', True, modules=set()) modtok.modules.add(module) target.finalize(source, module)
def pypackage(self, source, target): """Create python packages. """ if not len(target.anchor): return raise Exception(u"Invalid egg structure. Is ``pyegg`` stereotype " u"applied on root package in UML model?") if not source.name in target.anchor: target.anchor[source.name] = Directory() package = target.anchor[source.name] module = python.Module() package['__init__.py'] = module set_copyright(source, module) target.finalize(source, package)
def zcviewfinalize(self, source, target): """Create zope interface. """ if source.stereotype('pyegg:stub') is not None: return view = source targetview = read_target_node(view, target.target) name = source.name module = targetview.parent imp = Imports(module) imp.set('Products.Five', [['BrowserView', None]]) set_copyright(source, module) if module.classes(name): class_ = module.classes(name)[0] else: class_ = python.Class(name) module[name] = class_ if 'BrowserView' not in targetview.bases: targetview.bases.append('BrowserView')
def zcainterface(self, source, target): """Create zope interface. """ if source.stereotype('pyegg:stub') is not None: return name = source.name module = target.anchor imp = Imports(module) imp.set('zope.interface', [['Interface', None]]) set_copyright(source, module) if module.classes(name): class_ = module.classes(name)[0] else: class_ = python.Class(name) module[name] = class_ # if not class_.bases: # class_.bases.append('Interface') token(str(class_.uuid), True, isInterface=True) target.finalize(source, class_)