def grok_dotted_name(dotted_name, grokker, exclude_filter=None, ignore_nonsource=True, **kw): module_info = scan.module_info_from_dotted_name(dotted_name, exclude_filter, ignore_nonsource) grok_package(module_info, grokker, **kw)
def grok_component(name, component, context=None, module_info=None, templates=None, dotted_name=None): if module_info is None: if dotted_name is None: dotted_name = getattr(component, '__grok_module__', None) if dotted_name is None: dotted_name = getattr(component, '__module__', None) module_info = scan.module_info_from_dotted_name(dotted_name) module_info = scan.module_info_from_dotted_name(dotted_name) module = module_info.getModule() if context is not None: grokcore.component.context.set(module, context) if templates is not None: module.__grok_templates__ = templates config = ConfigurationMachine() result = zcml.the_multi_grokker.grok(name, component, module_info=module_info, config=config) config.execute_actions() return result
def getModules(self, package=None): result = [] if package is None: package = self.package info = module_info_from_dotted_name(package.__name__) for submod_info in info.getSubModuleInfos(): if submod_info.isPackage(): result.extend(self.getModules(submod_info.getModule())) continue if not self.pfilter_func(submod_info): continue module = submod_info.getModule() result.append(module) return result
def evolution_scripts(self): script_module = \ module_info_from_dotted_name("ututi.migration") directory = os.path.dirname(script_module.path) script_modules = [] script_pattern = r"(\d{3})_(.*)" for entry in sorted(os.listdir(directory)): name, ext = os.path.splitext(entry) match = re.match(script_pattern, name) if ext == '.py' and match: dotted_name = script_module.dotted_name + '.' + name script_modules.append(module_info_from_dotted_name(dotted_name)) scripts = [] for script in sorted(script_modules, key=lambda s: s.name): match = re.match(script_pattern, script.name) if match: version, name = match.groups() scripts.append(EvolutionScript(int(version), name, script.getModule().upgrade, script.getModule().downgrade)) return scripts
def associate_template(self, factory): component_name = factory.__name__.lower() module_name, design_name = grok.template.bind( default=(None, None)).get(factory) if module_name is None: module_info = factory.module_info design_name = component_name else: module_info = module_info_from_dotted_name(module_name) design_dir = file_template_registry.get_template_dir(module_info) template_path = os.path.join(design_dir, design_name + self.extension) if not os.path.isfile(template_path): raise GrokError(u"Missing template %s for %s" % ( template_path, factory)) factory.__template_path__ = template_path factory.template = TemplateFile(template_path)
def associate_template(module_info, factory, component_name, has_render, has_no_render): """Associate a template to a factory located in the module described by module_info. """ explicit_template = False factory_name = factory.__name__.lower() module_name, template_name = grokcore.view.template.bind( default=(None, None)).get(factory) if template_name is None: # We didn't used grok.template. Default the template name to # the factory name. template_name = factory_name else: # We used grok.template. Use the same module_info to fetch the # template that the module in which the directive have been # used (to get the grok.templatedir value). assert module_name is not None, \ u"module_name cannot be None if template_name is specified." module_info = module_info_from_dotted_name(module_name) explicit_template = True # We used grok.template, to specify a template which is different # than the class name. Check if there is no template with the same # name as the view if factory_name != template_name: try: lookup(module_info, factory_name) raise GrokError("Multiple possible templates for %s %r. It " "uses grok.template('%s'), but there is also " "a template called '%s'." % (component_name, factory, template_name, factory_name), factory) except TemplateLookupError: pass # Check if view already have a template set with template = factory_have_template = ( getattr(factory, 'template', None) is not None and ITemplate.providedBy(factory.template)) # Lookup for a template in the registry try: factory.template = lookup( module_info, template_name, mark_as_associated=True) # If we associate a template, set the static_name to use to # the same package name as where the template is found. factory.__static_name__ = module_info.package_dotted_name # We now have a template. factory_have_template = True except TemplateLookupError: pass if not factory_have_template: # If a template was explicitly asked, error. if explicit_template: raise GrokError( "Template %s for %s %r cannot be found." % (template_name, component_name.title(), factory), factory) # Check for render or error. if has_no_render(factory): raise GrokError( "%s %r has no associated template or 'render' method." % (component_name.title(), factory), factory) if has_render(factory): # Check for have both render and template if factory_have_template: raise GrokError( "Multiple possible ways to render %s %r. " "It has both a 'render' method as well as " "an associated template." % (component_name, factory), factory) # Set static_name to use if no template are found. if getattr(factory, '__static_name__', None) is None: factory.__static_name__ = module_info.package_dotted_name if factory_have_template: factory.template._initFactory(factory)
def grok_dotted_name(dotted_name, grokker, exclude_filter=None, **kw): module_info = scan.module_info_from_dotted_name(dotted_name, exclude_filter) grok_package(module_info, grokker, **kw)
def associate_template(module_info, factory, component_name, has_render, has_no_render): """Associate a template to a factory located in the module described by module_info. """ explicit_template = False factory_name = factory.__name__.lower() module_name, template_name = grokcore.view.template.bind( default=(None, None)).get(factory) if template_name is None: # We didn't used grok.template. Default the template name to # the factory name. template_name = factory_name else: # We used grok.template. Use the same module_info to fetch the # template that the module in which the directive have been # used (to get the grok.templatedir value). assert module_name is not None, \ u"module_name cannot be None if template_name is specified." module_info = module_info_from_dotted_name(module_name) explicit_template = True # We used grok.template, to specify a template which is different # than the class name. Check if there is no template with the same # name as the view if factory_name != template_name: try: lookup(module_info, factory_name) raise GrokError( "Multiple possible templates for %s %r. It " "uses grok.template('%s'), but there is also " "a template called '%s'." % (component_name, factory, template_name, factory_name), factory) except TemplateLookupError: pass # Check if view already have a template set with template = factory_have_template = (getattr(factory, 'template', None) is not None and ITemplate.providedBy(factory.template)) # Lookup for a template in the registry try: factory.template = lookup(module_info, template_name, mark_as_associated=True) # If we associate a template, set the static_name to use to # the same package name as where the template is found. factory.__static_name__ = module_info.package_dotted_name # We now have a template. factory_have_template = True except TemplateLookupError: pass if not factory_have_template: # If a template was explicitly asked, error. if explicit_template: raise GrokError( "Template %s for %s %r cannot be found." % (template_name, component_name.title(), factory), factory) # Check for render or error. if has_no_render(factory): raise GrokError( "%s %r has no associated template or 'render' method." % (component_name.title(), factory), factory) if has_render(factory): # Check for have both render and template if factory_have_template: raise GrokError( "Multiple possible ways to render %s %r. " "It has both a 'render' method as well as " "an associated template." % (component_name, factory), factory) # Set static_name to use if no template are found. if getattr(factory, '__static_name__', None) is None: factory.__static_name__ = module_info.package_dotted_name if factory_have_template: factory.template._initFactory(factory)