예제 #1
0
def main():
    if len(sys.argv) == 1:
        raise Exception('expected one argument: concept name is missing!')

    if not os.path.isdir(OUTPUT_DIR):
        raise Exception(
            f'concept dir {OUTPUT_DIR} cannot be found. Did you run the script from the root directory of the project?'
        )

    concept_name = sys.argv[1]
    p = inflect.engine()
    concept_name_plural = p.plural(concept_name)
    concept_name_camelcase_upper = case_conversion.pascalcase(concept_name)
    concept_name_camelcase_upper_plural = case_conversion.pascalcase(
        concept_name_plural)
    extra_context = {
        'concept_name': concept_name,
        'concept_names': concept_name_plural,
        'ConceptName': concept_name_camelcase_upper,
        'ConceptNames': concept_name_camelcase_upper_plural
    }
    run_cookiecutter('cookiecutter/concept',
                     output_dir=OUTPUT_DIR,
                     no_input=True,
                     extra_context=extra_context)

    concept_location = os.path.join(OUTPUT_DIR, concept_name)
    print(
        f"generated concept {concept_location}, tests are located at tests/{concept_name}"
    )
예제 #2
0
def main():
    if len(sys.argv) == 1:
        raise Exception('expected one argument: concept name is missing!')

    candidate_app_packages = [p for p in Path.cwd().glob('src/ekklesia_*') if not '.' in p.name]
    if not candidate_app_packages:
        raise Exception('app package in src cannot be found. Did you run the script from the root directory of a ekklesia project?')
    if len(candidate_app_packages) > 1:
        raise Exception('Multiple candidates for the app package in src!')

    app_package = candidate_app_packages[0]
    concepts_package = app_package / 'concepts'
    concept_name = sys.argv[1]

    concept_name_plural = inflection.pluralize(concept_name)
    concept_name_camelcase_upper = case_conversion.pascalcase(concept_name)
    concept_name_camelcase_upper_plural = case_conversion.pascalcase(concept_name_plural)

    extra_context = {
        'app_package': app_package.name,
        'concept_name': concept_name,
        'concept_names': concept_name_plural,
        'ConceptName': concept_name_camelcase_upper,
        'ConceptNames': concept_name_camelcase_upper_plural
    }

    run_cookiecutter(COOKIECUTTER_TEMPLATE, output_dir=concepts_package, no_input=True, extra_context=extra_context)

    print(f"generated concept {concepts_package / concept_name}, tests are located at tests/concepts/{concept_name}")
예제 #3
0
def user_import(module_key, class_sufix, import_maper, default_path, enabled):
    ''' import a provider defined by the user '''
    if module_key in import_maper:
        import_path = import_maper[module_key]

        cwd = os.getcwd()

        if cwd not in sys.path:
            sys.path.insert(0, cwd)
    elif module_key in enabled:
        import_path = default_path + '.' + module_key
    else:
        raise MisconfiguredProvider(
            'Provider {} not enabled'.format(module_key))

    cls_name = pascalcase(module_key) + class_sufix

    try:
        mod = import_module(import_path)
        cls = getattr(mod, cls_name)
    except ModuleNotFoundError:
        raise MisconfiguredProvider(
            'Could not import provider module {}'.format(import_path))
    except AttributeError:
        raise MisconfiguredProvider('Provider does not define class {}'.format(
            cls_name, ))

    return cls
예제 #4
0
파일: inputs.py 프로젝트: tracsa/cacahuate
def make_input(
    element=None,
    context=None,
    input_type=None,
    input_data=None,
):
    ''' returns a build Input object given an Element object '''
    input_type = input_type
    if element:
        input_type = element.getAttribute('type')

    if input_type not in INPUTS:
        raise ValueError(
            'Class definition not found for input: {}'.format(input_type))

    class_name = pascalcase(input_type) + 'Input'
    available_classes = __import__(__name__).inputs

    actual_class = getattr(available_classes, class_name)

    return actual_class(
        element=element,
        context=context or {},
        **(input_data or {}),
    )
예제 #5
0
def prepare_renderer(configurator):
    """Prepare rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'view'
    view_name = configurator.variables['view_name'].strip('_')
    normalized_view_name = cc.snakecase(view_name)
    configurator.variables['view_name_normalized'] = normalized_view_name
    if configurator.variables['view_python_class']:
        python_class_name = configurator.variables[
            'view_python_class_name'].strip('_')  # NOQA: E501
        configurator.variables[
            'view_python_class_name'] = cc.pascalcase(  # NOQA: E501
                python_class_name, )
        view_python_file_name = cc.snakecase(python_class_name)
        configurator.variables['view_python_file_name'] = view_python_file_name
        view_name_from_input = normalized_view_name.replace('_', '-')
        view_name_from_python_class = view_python_file_name.replace('_', '-')
        if view_name_from_input != view_name_from_python_class:
            configurator.variables['view_name'] = view_name_from_input
    else:
        configurator.variables['view_python_file_name'] = view_name

    if not configurator.variables['view_template']:
        configurator.variables['view_template_name'] = view_name

    configurator.target_directory = configurator.variables['package_folder']
예제 #6
0
def prepare_renderer(configurator):
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'behavior'
    behavior_name = configurator.variables['behavior_name'].strip('_')
    configurator.variables['behavior_name_klass'] = cc.pascalcase(
        behavior_name)
    configurator.variables['behavior_name_normalized'] = cc.snakecase(  # NOQA: E501
        behavior_name)
    configurator.target_directory = configurator.variables['package_folder']
예제 #7
0
def pre_renderer(configurator):
    """Some variables to make templating easier.
    """
    # get package-name from user-input
    package_dir = os.path.basename(configurator.target_directory)
    nested = bool(len(package_dir.split('.')) == 3)
    configurator.variables['package.nested'] = nested
    configurator.variables['package.namespace'] = package_dir.split('.')[0]
    if nested:
        namespace2 = package_dir.split('.')[1]
    else:
        namespace2 = None
    configurator.variables['package.namespace2'] = namespace2
    configurator.variables['package.name'] = package_dir.split('.')[-1]

    if nested:
        dottedname = '{0}.{1}.{2}'.format(
            configurator.variables['package.namespace'],
            configurator.variables['package.namespace2'],
            configurator.variables['package.name'],
        )
    else:
        dottedname = '{0}.{1}'.format(
            configurator.variables['package.namespace'],
            configurator.variables['package.name'],
        )

    # package.dottedname = 'collective.foo.something'
    configurator.variables['package.dottedname'] = dottedname

    # package.uppercasename = 'COLLECTIVE_FOO_SOMETHING'
    configurator.variables['package.uppercasename'] = \
        configurator.variables['package.dottedname'].replace('.', '_').upper()

    camelcasename = cc.pascalcase(dottedname)
    browserlayer = '{0}Layer'.format(camelcasename)

    # package.browserlayer = 'CollectiveFooSomethingLayer'
    configurator.variables['package.browserlayer'] = browserlayer

    # package.longname = 'collectivefoosomething'
    configurator.variables['package.longname'] = camelcasename.lower()

    # jenkins.directories = 'collective/foo/something'
    configurator.variables['jenkins.directories'] = dottedname.replace(
        '.', '/')  # NOQA: E501

    # namespace_packages = "['collective', 'collective.foo']"
    if nested:
        namespace_packages = "'{0}', '{0}.{1}'".format(
            configurator.variables['package.namespace'],
            configurator.variables['package.namespace2'],
        )
    else:
        namespace_packages = "'{0}'".format(
            configurator.variables['package.namespace'], )
    configurator.variables['package.namespace_packages'] = namespace_packages
예제 #8
0
def prepare_renderer(configurator):
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'behavior'
    behavior_name = configurator.variables['behavior_name'].strip('_')
    configurator.variables['behavior_name_klass'] = cc.pascalcase(
        behavior_name)
    configurator.variables[
        'behavior_name_normalized'] = cc.snakecase(  # NOQA: E501
            behavior_name)
    configurator.target_directory = configurator.variables['package_folder']
예제 #9
0
def prepare_renderer(configurator):
    """Prepare rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'viewlet'
    viewlet_name = configurator.variables['viewlet_name'].strip('_')
    normalized_viewlet_name = cc.snakecase(viewlet_name)
    configurator.variables['viewlet_name_normalized'] = normalized_viewlet_name
    if not configurator.variables['viewlet_template']:
        configurator.variables['viewlet_template_name'] = normalized_viewlet_name  # NOQA: E501
    python_class_name = configurator.variables['viewlet_python_class_name'].strip('_')  # NOQA: E501
    configurator.variables['viewlet_python_class_name'] = cc.pascalcase(      # NOQA: E501
        python_class_name,
    )
    viewlet_python_file_name = cc.snakecase(viewlet_name)
    configurator.variables['viewlet_python_file_name'] = viewlet_python_file_name    # NOQA: E501
    configurator.target_directory = configurator.variables['package_folder']
    package_name = configurator.variables['package.dottedname'].replace('.', '_')  # NOQA: E501
    browser_layer = cc.pascalcase(package_name)
    configurator.variables['browser_layer'] = 'I{0}Layer'.format(browser_layer)
예제 #10
0
파일: node.py 프로젝트: cnpoe/cacahuate
def make_node(element, xmliter) -> Node:
    ''' returns a build Node object given an Element object '''
    if element.tagName not in NODES:
        raise ValueError('Class definition not found for node: {}'.format(
            element.tagName))

    class_name = pascalcase(element.tagName)
    available_classes = __import__(__name__).node

    return getattr(available_classes, class_name)(element, xmliter)
예제 #11
0
파일: inputs.py 프로젝트: cnpoe/cacahuate
def make_input(element):
    ''' returns a build Input object given an Element object '''
    classattr = element.getAttribute('type')

    if classattr not in INPUTS:
        raise ValueError(
            'Class definition not found for input: {}'.format(classattr))

    class_name = pascalcase(classattr) + 'Input'
    available_classes = __import__(__name__).inputs

    return getattr(available_classes, class_name)(element)
예제 #12
0
def prepare_renderer(configurator):
    """Prepare rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'portlet'
    portlet_name = configurator.variables['portlet_name']
    normalized_portlet_name = cc.snakecase(slugify(portlet_name))  # NOQA: E501
    configurator.variables['portlet_name_normalized'] = normalized_portlet_name
    portlet_config_name = cc.pascalcase(normalized_portlet_name)
    configurator.variables[
        'portlet_configuration_name'] = u'{0}.portlets.{1}'.format(  # NOQA: E501
            configurator.variables['package.dottedname'],
            portlet_config_name,
        )
    configurator.variables['data_provider_class_name'] = u'I{0}Portlet'.format(
        portlet_config_name, )
    configurator.target_directory = configurator.variables['package_folder']
    package_name = configurator.variables['package.dottedname'].replace(
        '.', '_')  # NOQA: E501
    browser_layer = cc.pascalcase(package_name)
    configurator.variables['browser_layer'] = u'I{0}Layer'.format(
        browser_layer, )
예제 #13
0
def prepare_renderer(configurator):
    """Prepare rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'portlet'
    portlet_name = configurator.variables['portlet_name']
    normalized_portlet_name = cc.snakecase(slugify(portlet_name))  # NOQA: E501
    configurator.variables['portlet_name_normalized'] = normalized_portlet_name
    portlet_config_name = cc.pascalcase(normalized_portlet_name)
    configurator.variables['portlet_configuration_name'] = u'{0}.portlets.{1}'.format(  # NOQA: E501
        configurator.variables['package.dottedname'],
        portlet_config_name,
    )
    configurator.variables['data_provider_class_name'] = u'I{0}Portlet'.format(
        portlet_config_name,
    )
    configurator.target_directory = configurator.variables['package_folder']
    package_name = configurator.variables['package.dottedname'].replace('.', '_')  # NOQA: E501
    browser_layer = cc.pascalcase(package_name)
    configurator.variables['browser_layer'] = u'I{0}Layer'.format(
        browser_layer,
    )
예제 #14
0
def prepare_renderer(configurator):
    """Prepare rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'content_type'
    type_name = configurator.variables['dexterity_type_name']
    dx_type_name_klass = cc.pascalcase(type_name, )
    configurator.variables['dexterity_type_name_klass'] = dx_type_name_klass
    dx_type_fti_file_name = type_name.replace(' ', '_')
    configurator.variables[
        'dexterity_type_fti_file_name'] = dx_type_fti_file_name  # NOQA: E501
    dx_type_name_normalized = cc.snakecase(dx_type_fti_file_name)
    configurator.variables[
        'dexterity_type_name_normalized'] = dx_type_name_normalized  # NOQA: E501
    configurator.target_directory = configurator.variables['package_folder']
예제 #15
0
def pre_renderer(configurator):
    """Pre rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'restapi_service'
    name = configurator.variables['service_name'].strip('_')
    name_normalized = cc.snakecase(name)
    configurator.variables['service_name_normalized'] = name_normalized
    class_name = configurator.variables['service_class_name'].strip(
        '_')  # NOQA: E501
    configurator.variables['service_class_name'] = cc.pascalcase(  # NOQA: E501
        class_name, )
    configurator.variables['service_class_name_normalized'] = cc.snakecase(
        class_name, )
    configurator.target_directory = configurator.variables['package_folder']
예제 #16
0
def pre_renderer(configurator):
    """Pre rendering."""
    configurator = base_prepare_renderer(configurator)
    configurator.variables['template_id'] = 'restapi_service'
    name = configurator.variables['service_name'].strip('_')
    name_normalized = cc.snakecase(name)
    configurator.variables['service_name_normalized'] = name_normalized
    class_name = configurator.variables['service_class_name'].strip('_')  # NOQA: E501
    configurator.variables['service_class_name'] = cc.pascalcase(     # NOQA: E501
        class_name,
    )
    configurator.variables['service_class_name_normalized'] = cc.snakecase(
        class_name,
    )
    configurator.target_directory = configurator.variables['package_folder']
예제 #17
0
파일: handler.py 프로젝트: tracsa/charpe
    def get_medium(self, name):
        if name not in self.handlers:
            module_name = 'charpe.mediums.{}_handler'.format(name)
            class_name = pascalcase(name) + 'Handler'

            try:
                module = import_module(module_name)
                self.handlers[name] = getattr(module, class_name)(self.config)
            except ImportError:
                raise MisconfiguredProvider(
                    'Could not import provider module {}'.format(module_name))
            except AttributeError:
                raise MisconfiguredProvider(
                    'Provider module {} does not define class {}'.format(
                        module_name,
                        class_name,
                    ))

        return self.handlers[name]
예제 #18
0
def get_normalized_classname(name):
    normalized_name = cc.pascalcase(name)
    return normalized_name
예제 #19
0
def get_normalized_classname(name):
    normalized_name = cc.pascalcase(name)
    return normalized_name