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}" )
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}")
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
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 {}), )
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']
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']
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
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']
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)
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)
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)
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, )
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, )
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']
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']
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']
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]
def get_normalized_classname(name): normalized_name = cc.pascalcase(name) return normalized_name
def get_normalized_classname(name): normalized_name = cc.pascalcase(name) return normalized_name