Exemplo n.º 1
0
 def store(self):
     self._data.extend(self._new_data)
     metadata = get_project_metadata(find_project_basedir('.'))
     metadata.update({'messages': list(self._data)})
     with open(os.path.join(find_project_basedir('.'), '.leapp/info'),
               'w') as f:
         json.dump(metadata, f, indent=2)
Exemplo n.º 2
0
def cli(args):
    base_dir = find_project_basedir('.')
    repository = scan_repo(base_dir)
    repository.load()

    actors = [actor for actor in repository.actors]
    models = [model for model in get_models() if _is_local(base_dir, model)]
    topics = [topic for topic in get_topics() if _is_local(base_dir, topic)]
    tags = [tag for tag in get_tags() if _is_local(base_dir, tag)]
    if not args.json:
        _print_group('Models', models)
        _print_group('Topics', topics)
        _print_group('Actors',
                     actors,
                     name_resolver=lambda x: x.class_name,
                     path_resolver=_get_actor_path)
        _print_group('Tags', tags)
    else:
        output = {
            'project': get_project_name(base_dir),
            'base_dir': base_dir,
            'topics':
            {topic.__name__: _get_topic_details(topic)
             for topic in topics},
            'models':
            {model.__name__: _get_model_details(model)
             for model in models},
            'actors':
            {actor.class_name: _get_actor_details(actor)
             for actor in actors},
            'tags': {tag.name: _get_tag_details(tag)
                     for tag in tags}
        }
        json_mod.dump(output, sys.stdout, indent=2)
Exemplo n.º 3
0
def cli(args):
    basedir = find_project_basedir('.')
    if not basedir:
        raise UsageError(
            'This command must be executed from the project directory')

    basedir = os.path.join(basedir, 'tags')
    if not os.path.isdir(basedir):
        os.mkdir(basedir)

    tag_path = os.path.join(basedir, args.tag_name.lower() + '.py')
    if os.path.exists(tag_path):
        raise UsageError("File already exists: {}".format(tag_path))

    with open(tag_path, 'w') as f:
        f.write('''from leapp.tags import Tag


class {tag_name}Tag(Tag):
    name = '{tag}'
'''.format(tag_name=make_class_name(args.tag_name),
           tag=make_name(args.tag_name)))

    sys.stdout.write("New tag {} has been created in {}\n".format(
        make_class_name(args.tag_name), os.path.realpath(tag_path)))
Exemplo n.º 4
0
def cli(params):
    configure_logger()
    repository = scan_repo(find_project_basedir('.'))
    repository.load()
    for wf in leapp.workflows.get_workflows():
        if wf.name.lower() == params.name.lower():
            wf().run(until_phase=params.until_phase, until_actor=params.until_actor)
Exemplo n.º 5
0
def cli(args):
    class_name = args.class_name
    short_name = args.short_name
    name = args.name
    base_dir = find_project_basedir('.')
    workflows_dir = os.path.join(base_dir, 'workflows')

    class_name = class_name or make_class_name(name)
    short_name = short_name or make_name(name)

    if not os.path.exists(workflows_dir):
        os.mkdir(workflows_dir)

    workflow_path = os.path.join(workflows_dir, make_name(name) + '.py')
    if not os.path.exists(workflow_path):
        with open(workflow_path, 'w') as f:
            f.write(
                """from leapp.workflows import Workflow, Phase, Flags, Filter, Policies
from leapp.tags import FactsTag, {workflow_class}Tag, CommonFactsTag, ChecksTag, CommonChecksTag


class {workflow_class}Workflow(Workflow):
    name = '{workflow_name}'
    tag =  {workflow_class}Tag
    short_name = '{workflow_short_name}'
    description = '''No description has been provided for the {workflow_name} workflow.'''

    class FactsCollection(Phase):
        name = 'Facts collection'
        filter = Filter(
            tags=(({workflow_class}Tag, FactsTag),
                  (CommonFactsTag,)))
        policies = Policies(
            error=Policies.Errors.FailPhase,
            retry=Policies.Retry.Phase)
        flags = Flags()

    class Checks(Phase):
        name = 'Checks'
        filter = Filter(
            tags=(({workflow_class}Tag, ChecksTag),
                   (CommonChecksTag,)))
        policies = Policies(
            error=Policies.Errors.FailPhase,
            retry=Policies.Retry.Phase)
        flags = Flags()
""".format(workflow_name=name,
            workflow_class=class_name,
            workflow_short_name=short_name))
Exemplo n.º 6
0
def cli(args):
    log = configure_logger()
    basedir = find_project_basedir('.')
    repository = scan_repo(basedir)
    repository.load()

    messaging = ProjectLocalMessaging()
    messaging.load()
    actor_logger = log.getChild('actors')

    repository.lookup_actor(args.actor_name)(messaging=messaging, logger=actor_logger).run()
    if args.save_output:
        messaging.store()
    if args.print_output:
        json.dump(messaging.get_new(), sys.stdout, indent=2)
Exemplo n.º 7
0
def cli(args):
    class_name = args.class_name
    short_name = args.short_name
    name = args.name
    base_dir = find_project_basedir('.')
    workflows_dir = os.path.join(base_dir, 'workflows')

    class_name = class_name or make_class_name(name)
    short_name = short_name or make_name(name)

    if not os.path.exists(workflows_dir):
        os.mkdir(workflows_dir)

    workflow_path = os.path.join(workflows_dir, make_name(name) + '.py')
    if not os.path.exists(workflow_path):
        with open(workflow_path, 'w') as f:
            f.write("""from leapp.workflows import Workflow
from leapp.workflows.phases import Phase
from leapp.workflows.flags import Flags
from leapp.workflows.filters import Filter
from leapp.workflows.tagfilters import TagFilter
from leapp.workflows.policies import Policies
from leapp.tags import {workflow_class}Tag


class {workflow_class}Workflow(Workflow):
    name = '{workflow_name}'
    tag =  {workflow_class}Tag
    short_name = '{workflow_short_name}'
    description = '''No description has been provided for the {workflow_name} workflow.'''

    # Template for phase definition - The order in which the phase classes are defined
    # within the Workflow class represents the execution order
    #
    # class PhaseName(Phase):
    #    name = 'phase_name'
    #    filter = TagFilter(PhaseTag)
    #    policies = Policies(Policies.Errors.FailPhase,
    #                        Policies.Retry.Phase)
    #    flags = Flags()
""".format(workflow_name=name, workflow_class=class_name, workflow_short_name=short_name))
    sys.stdout.write("New workflow {} has been created in {}\n".format(class_name,
                                                                       os.path.realpath(workflow_path)))
Exemplo n.º 8
0
def cli(args):
    model_name = args.model_name
    basedir = find_project_basedir('.')

    basedir = os.path.join(basedir, 'models')
    if not os.path.isdir(basedir):
        os.mkdir(basedir)

    model_path = os.path.join(basedir, model_name.lower() + '.py')
    if os.path.exists(model_path):
        raise UsageError("File already exists: {}".format(model_path))

    with open(model_path, 'w') as f:
        f.write('''from leapp.models import Model, fields


class {model_name}(Model):
    topic = None #  TODO: import appropriate topic and set it here
'''.format(model_name=make_class_name(model_name)))

    sys.stdout.write("New model {} has been created in {}\n".format(
        make_class_name(model_name), os.path.realpath(model_path)))
Exemplo n.º 9
0
def cli(args):
    actor_name = args.actor_name
    basedir = find_project_basedir('.')

    actors_dir = os.path.join(basedir, 'actors')
    if not os.path.isdir(actors_dir):
        os.mkdir(actors_dir)

    actor_dir = os.path.join(actors_dir, actor_name.lower())
    if not os.path.isdir(actor_dir):
        os.mkdir(actor_dir)

    actor_test_dir = os.path.join(actor_dir, 'tests')
    if not os.path.isdir(actor_test_dir):
        os.mkdir(actor_test_dir)

    actor_path = os.path.join(actor_dir, 'actor.py')
    if os.path.exists(actor_path):
        raise UsageError("File already exists: {}".format(actor_path))

    with open(actor_path, 'w') as f:
        f.write('''from leapp.actors import Actor


class {actor_class}(Actor):
    name = '{actor_name}'
    description = 'For the actor {actor_name} has been no description provided.'
    consumes = ()
    produces = ()
    tags = ()

    def process(self):
        pass
'''.format(actor_class=make_class_name(actor_name),
           actor_name=make_name(actor_name)))

    sys.stdout.write("New actor {} has been created at {}\n".format(
        make_class_name(actor_name), os.path.realpath(actor_path)))
Exemplo n.º 10
0
def cli(args):
    topic_name = args.topic_name
    basedir = find_project_basedir('.')

    basedir = os.path.join(basedir, 'topics')
    if not os.path.isdir(basedir):
        os.mkdir(basedir)

    topic_path = os.path.join(basedir, topic_name.lower() + '.py')
    if os.path.exists(topic_path):
        raise UsageError("File already exists: {}".format(topic_path))

    topic_path = os.path.join(basedir, topic_name.lower() + '.py')
    with open(topic_path, 'w') as f:
        f.write('''from leapp.topics import Topic


class {topic_name}Topic(Topic):
    name = '{topic}'
'''.format(topic_name=make_class_name(topic_name),
           topic=make_name(topic_name)))

    sys.stdout.write("New topic {} has been created in {}\n".format(
        make_class_name(topic_name), os.path.realpath(topic_path)))
Exemplo n.º 11
0
def _get_class_file(cls, project_relative=True):
    path = os.path.abspath(sys.modules[cls.__module__].__file__.replace(
        '.pyc', '.py'))
    return os.path.relpath(
        path,
        find_project_basedir('.') if project_relative else os.getcwd())
Exemplo n.º 12
0
def _get_actor_path(actor, project_relative=True):
    path = actor.directory
    return os.path.relpath(
        path,
        find_project_basedir('.') if project_relative else os.getcwd())
Exemplo n.º 13
0
 def load(self):
     self._data = self._manager.list(
         get_project_metadata(find_project_basedir('.'))['messages'])
Exemplo n.º 14
0
def cli(args, extra):
    load_all_from(find_project_basedir('.'))
    wf = leapp.workflows.IPUWorkflow()
    print(wf.initial, wf.consumes, wf.produces)
    json.dump(names(wf.phase_actors), sys.stdout, indent=2)
    sys.stdout.write('\n')