def __init__(self, name, import_name, parts_templates=('parts.html',)): from flask import Blueprint url_prefix = '/{0}'.format(name) self.parts_templates = list(parts_templates) self.blueprint = Blueprint(name, import_name, static_folder='static', template_folder='templates', url_prefix=url_prefix) self.route = self.blueprint.route self.rendering_adapter = RenderingAdapter() self.container = None self.name = name self.lookup = TemplatePathLookup(dirs=[(self.blueprint.root_path, self.blueprint.template_folder)]) self.module_location = url_prefix + self.blueprint.static_url_path self._module = None self._module_time_stamp = None
class Component: def __init__(self, name, import_name, parts_templates=('parts.html',)): from flask import Blueprint url_prefix = '/{0}'.format(name) self.parts_templates = list(parts_templates) self.blueprint = Blueprint(name, import_name, static_folder='static', template_folder='templates', url_prefix=url_prefix) self.route = self.blueprint.route self.rendering_adapter = RenderingAdapter() self.container = None self.name = name self.lookup = TemplatePathLookup(dirs=[(self.blueprint.root_path, self.blueprint.template_folder)]) self.module_location = url_prefix + self.blueprint.static_url_path self._module = None self._module_time_stamp = None @property def module(self): module_def_path = os.path.join(self.blueprint.static_folder, 'module.json') if self._module_time_stamp is not None: timestamp = os.path.getmtime(module_def_path) if timestamp <= self._module_time_stamp: return self._module if os.path.isfile(module_def_path): self._module_time_stamp = os.path.getmtime(module_def_path) with open(module_def_path) as f: self._module = json.loads(f.read()) return self._module def render_parts(self, name, **context): self._assert_registered() return self.rendering_adapter.render_parts( lookup=self.lookup, template_names=self.parts_templates, part_name=name, **self.container.get_context(context)) def render_template(self, template_name, **context): self._assert_registered() return self.rendering_adapter.render_template( lookup=self.lookup, template_name=template_name, **self.container.get_context(context)) def register(self, container): self._assert_not_registered() self.container = container self.rendering_adapter = container.rendering_adapter self.lookup.parent = container.lookup def _assert_not_registered(self): assert self.container is None, 'Plugin {0} is already registered into container'.format(self.name) def _assert_registered(self): assert self.container is not None, 'Plugin {0} is not registered into container'.format(self.name)