def create_concrete_observer(base_observer_name):
    print(
        'You are creating a concrete class for Observer in Observer pattern.')

    observer = meta_class.MetaClass()

    class_name = 'ConcreteObserver'

    commands = [class_name]
    wrap(observer._add_class_name, commands)

    base_names = [base_observer_name]
    commands = generate_commands_add_base(base_names)
    wrap(observer._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, False)

    curr_func = 'update'
    curr_params = ['arg']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(observer._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, False)
    print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    return observer
def create_concrete_visitor(base_visitor_name, n_visit_func):
    print('You are creating a concrete visitor class for Visitor pattern.')

    concrete_visitor = meta_class.MetaClass()

    concrete_visitor._add_class_name()

    class_name = concrete_visitor.name

    base_classes = [base_visitor_name]
    commands = generate_commands_add_base(base_classes)
    wrap(concrete_visitor._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    concrete_visitor._add_base_names()

    for i in range(n_visit_func):
        curr_func = f'visit_concrete_element_{i}'
        curr_params = [f'concrete_element_{i}']
        curr_decors = []
        commands = generate_commands_add_func(curr_func, curr_params,
                                              curr_decors)
        wrap(concrete_visitor._add_method, commands)
        print_class_must_have_func(class_name, curr_func, curr_params, True)
        concrete_visitor._add_args_to_method(curr_func)
        print_class_must_have_decors(class_name, curr_func, curr_decors, True)
        concrete_visitor._add_method_decorator(curr_func)

    concrete_visitor._add_methods()

    return concrete_visitor
def create_template(n_steps=2):
    print('You are creating a Template class for Template method pattern.')

    template = meta_class.MetaClass()

    class_name = 'TemplateMethod'

    commands = [class_name]
    wrap(template._add_class_name, commands)

    base_classes = ['ABCMeta']
    commands = generate_commands_add_base(base_classes)
    wrap(template._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, False)

    curr_func = 'template_method'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(template._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, False)
    print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    for i in range(n_steps):
        curr_func = f'_primitive_operation_{i}'
        curr_params = []
        curr_decors = ['abstractmethod']
        commands = generate_commands_add_func(curr_func, curr_params,
                                              curr_decors)
        wrap(template._add_method, commands)
        print_class_must_have_func(class_name, curr_func, curr_params, False)
        print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    return template
def create_base_visitor():
    print('You are creating a base visitor class for Visitor pattern.')

    base_visitor = meta_class.MetaClass()

    base_visitor._add_class_name()

    class_name = base_visitor.name

    base_classes = ['ABC']
    commands = generate_commands_add_base(base_classes)
    wrap(base_visitor._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    base_visitor._add_base_names()

    n_visit_func = int(input('How many visitor functions do you want: '))
    for i in range(n_visit_func):
        curr_func = f'visit_concrete_element_{i}'
        curr_params = [f'concrete_element_{i}']
        curr_decors = ['abstractmethod']
        commands = generate_commands_add_func(curr_func, curr_params,
                                              curr_decors)
        wrap(base_visitor._add_method, commands)
        print_class_must_have_func(class_name, curr_func, curr_params, True)
        base_visitor._add_args_to_method(curr_func)
        print_class_must_have_decors(class_name, curr_func, curr_decors, True)
        base_visitor._add_method_decorator(curr_func)

    base_visitor._add_methods()

    return base_visitor, n_visit_func
def create_concrete_state(base_state_name):
    print('You are creating a concrete class for State in State pattern.')

    state = meta_class.MetaClass()

    state._add_class_name()
    class_name = state.name

    base_names = [base_state_name]
    commands = generate_commands_add_base(base_names)
    wrap(state._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, True)
    state._add_base_names()

    curr_func = 'handle'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(state._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    state._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    state._add_method_decorator(curr_func)

    state._add_methods()

    return state
Beispiel #6
0
def create_concrete_strategy(base_state_name, concrete_state_name):
    print(
        'You are creating a concrete class for Strategy in Strategy pattern.')

    strategy = meta_class.MetaClass()

    class_name = concrete_state_name

    commands = [class_name]
    wrap(strategy._add_class_name, commands)

    base_names = [base_state_name]
    commands = generate_commands_add_base(base_names)
    wrap(strategy._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, False)

    curr_func = 'algorithm_interface'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(strategy._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, False)
    print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    return strategy
def create_concrete_class(base_name, n_steps):
    print('You are creating a concrete class for Template method pattern.')

    concrete = meta_class.MetaClass()

    concrete._add_class_name()
    class_name = concrete.name

    base_names = [base_name]
    commands = generate_commands_add_base(base_names)
    wrap(concrete._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, True)
    concrete._add_base_names()

    for i in range(n_steps):
        curr_func = f'_primitive_operation_{i}'
        curr_params = []
        curr_decors = []
        commands = generate_commands_add_func(curr_func, curr_params,
                                              curr_decors)
        wrap(concrete._add_method, commands)
        print_class_must_have_func(class_name, curr_func, curr_params, True)
        concrete._add_args_to_method(curr_func)
        print_class_must_have_decors(class_name, curr_func, curr_decors, True)
        concrete._add_method_decorator(curr_func)

    concrete._add_methods()

    return concrete
def create_observer():
    print('You are creating a base class for Observer in Observer pattern.')

    observer = meta_class.MetaClass()

    observer._add_class_name()
    class_name = observer.name

    base_names = ['ABC']
    commands = generate_commands_add_base(base_names)
    wrap(observer._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, True)
    observer._add_base_names()

    curr_func = '__init__'
    curr_params = ['_subject', '_observer_state']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(observer._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    observer._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    observer._add_method_decorator(curr_func)

    curr_func = 'update'
    curr_params = ['arg']
    curr_decors = ['abstractmethod']
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(observer._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    observer._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    observer._add_method_decorator(curr_func)

    return observer
Beispiel #9
0
def create_context():
    print('You are creating a context class for State pattern.')

    context = meta_class.MetaClass()

    class_name = 'Context'

    commands = [class_name]
    wrap(context._add_class_name, commands)

    base_classes = []
    commands = generate_commands_add_base(base_classes)
    wrap(context._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, False)

    curr_func = '__init__'
    curr_params = ['state']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(context._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, False)
    print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    curr_func = 'request'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(context._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, False)
    print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    return context
def create_base_element():
    print('You are creating a base element class for Visitor pattern.')

    base_element = meta_class.MetaClass()

    base_element._add_class_name()

    class_name = base_element.name

    base_classes = ['ABC']
    commands = generate_commands_add_base(base_classes)
    wrap(base_element._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    base_element._add_base_names()

    curr_func = 'accept'
    curr_params = ['visitor']
    curr_decors = ['abstractmethod']
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(base_element._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    base_element._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    base_element._add_method_decorator(curr_func)

    base_element._add_methods()

    return base_element
def create_base_strategy():
    print('You are creating a base class for Strategy in Strategy pattern.')

    strategy = meta_class.MetaClass()

    strategy._add_class_name()
    class_name = strategy.name

    base_names = ['ABC']
    commands = generate_commands_add_base(base_names)
    wrap(strategy._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, True)
    strategy._add_base_names()

    curr_func = 'algorithm_interface'
    curr_params = []
    curr_decors = ['abstractmethod']
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(strategy._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    strategy._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    strategy._add_method_decorator(curr_func)

    strategy._add_methods()

    return strategy
def create_template():
    print('You are creating a Template class for Template method pattern.')

    template = meta_class.MetaClass()

    template._add_class_name()
    class_name = template.name

    base_classes = ['ABC']
    commands = generate_commands_add_base(base_classes)
    wrap(template._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    template._add_base_names()

    curr_func = 'template_method'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(template._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    template._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    template._add_method_decorator(curr_func)

    n_steps = int(input('How many algorithm steps do you want: '))
    for i in range(n_steps):
        curr_func = f'_primitive_operation_{i}'
        curr_params = []
        curr_decors = ['abstractmethod']
        commands = generate_commands_add_func(curr_func, curr_params,
                                              curr_decors)
        wrap(template._add_method, commands)
        print_class_must_have_func(class_name, curr_func, curr_params, True)
        template._add_args_to_method(curr_func)
        print_class_must_have_decors(class_name, curr_func, curr_decors, True)
        template._add_method_decorator(curr_func)

    template._add_methods()

    return template, n_steps
def create_servant(strategy_name):
    print(
        'You are creating a servant class for the composition of Servant and Strategy.'
    )

    servant = meta_class.MetaClass()

    servant._add_class_name()

    class_name = servant.name

    base_classes = []
    commands = generate_commands_add_base(base_classes)
    wrap(servant._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    servant._add_base_names()

    curr_func = f'set_{strategy_name}'
    curr_params = [f'{strategy_name}_instance', 'new_strategy']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(servant._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    servant._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    servant._add_method_decorator(curr_func)

    curr_func = f'set_context_interface'
    curr_params = [f'{strategy_name}_instance', 'new_context_interface']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(servant._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    servant._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    servant._add_method_decorator(curr_func)

    servant._add_methods()

    return servant
def create_context():
    print('You are creating a context class for State in composition of State and Template Method.')

    context = meta_class.MetaClass()

    context._add_class_name()

    class_name = context.name

    base_classes = []
    commands = generate_commands_add_base(base_classes)
    wrap(context._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    context._add_base_names()

    curr_func = '__init__'
    curr_params = ['state']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(context._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    context._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    context._add_method_decorator(curr_func)

    curr_func = 'request'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(context._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    context._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    context._add_method_decorator(curr_func)

    context._add_methods()

    return context
def create_base_state():
    print('You are creating a base class for State in composition of State and Template Method.')

    state = meta_class.MetaClass()

    state._add_class_name()
    class_name = state.name

    base_names = ['ABC']
    commands = generate_commands_add_base(base_names)
    wrap(state._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, True)
    state._add_base_names()

    curr_func = '__init__'
    curr_params = ['template_method_instance']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(state._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    state._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    state._add_method_decorator(curr_func)

    curr_func = 'handle'
    curr_params = []
    curr_decors = ['abstractmethod']
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(state._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    state._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    state._add_method_decorator(curr_func)

    state._add_methods()

    return state
def create_context():
    print('You are creating a context class for Strategy pattern.')

    context = meta_class.MetaClass()

    context._add_class_name()
    class_name = context.name

    base_classes = []
    commands = generate_commands_add_base(base_classes)
    wrap(context._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    context._add_base_names()

    curr_func = '__init__'
    curr_params = ['strategy']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(context._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    context._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    context._add_method_decorator(curr_func)

    curr_func = 'context_interface'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(context._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    context._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    context._add_method_decorator(curr_func)

    context._add_methods()

    return context
Beispiel #17
0
def create_base_state():
    print('You are creating a base class for State in State pattern.')

    state = meta_class.MetaClass()

    class_name = 'BaseState'

    commands = [class_name]
    wrap(state._add_class_name, commands)

    base_names = ['ABCMeta']
    commands = generate_commands_add_base(base_names)
    wrap(state._add_base_names, commands)
    print_class_must_have_base(class_name, base_names, False)

    curr_func = 'handle'
    curr_params = []
    curr_decors = ['abstractmethod']
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(state._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, False)
    print_class_must_have_decors(class_name, curr_func, curr_decors, False)

    return state
def create_subject():
    print('You are creating a Subject class for Observer pattern.')

    subject = meta_class.MetaClass()

    subject._add_class_name()
    class_name = subject.name

    base_classes = []
    commands = generate_commands_add_base(base_classes)
    wrap(subject._add_base_names, commands)
    print_class_must_have_base(class_name, base_classes, True)
    subject._add_base_names()

    curr_func = '__init__'
    curr_params = ['observers', 'state']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(subject._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    subject._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    subject._add_method_decorator(curr_func)

    curr_func = 'attach'
    curr_params = ['observer']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(subject._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    subject._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    subject._add_method_decorator(curr_func)

    curr_func = 'detach'
    curr_params = ['observer']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(subject._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    subject._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    subject._add_method_decorator(curr_func)

    curr_func = '_notify'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(subject._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    subject._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    subject._add_method_decorator(curr_func)

    curr_func = 'set_state'
    curr_params = ['new_state']
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(subject._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    subject._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    subject._add_method_decorator(curr_func)

    curr_func = 'get_state'
    curr_params = []
    curr_decors = []
    commands = generate_commands_add_func(curr_func, curr_params, curr_decors)
    wrap(subject._add_method, commands)
    print_class_must_have_func(class_name, curr_func, curr_params, True)
    subject._add_args_to_method(curr_func)
    print_class_must_have_decors(class_name, curr_func, curr_decors, True)
    subject._add_method_decorator(curr_func)

    return subject