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)
Esempio n. 5
0
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 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_)