Source code for cdh.vue.components

import os
from typing import Dict, Optional, List

from django.conf import settings
from django.contrib.staticfiles import finders

try:
    from django.apps import apps
except ImportError:
    apps = False


[docs]class VueComponent:
[docs] def __init__( self, name: str, location: str, subcomponents: Optional[List[str]] = None, depends: Optional[List[str]] = None, ): if subcomponents is None: subcomponents = ['subcomponents/*.vue'] self.name = name self.subcomponents = subcomponents self.location = finders.find(location) self._dir = os.path.dirname(self.location) self.depends = depends
[docs] def get_files(self) -> List[str]: locations = [self._dir + os.sep + sub for sub in self.subcomponents] + [self.location] if self.depends: for dependency in self.depends: component = Vue.get_component(dependency) # locations.extend(component.get_files()) locations = component.get_files() + locations return locations
class _VueRegistry: __instance = None @staticmethod def getInstance(): """ Static access method. """ if _VueRegistry.__instance is not None: _VueRegistry() return _VueRegistry.__instance def __init__(self): """ Virtually private constructor. """ if _VueRegistry.__instance is not None: raise Exception("This class is a singleton!") else: _VueRegistry.__instance = self self._components = {} self._loaded = False def _load(self): app_names = settings.INSTALLED_APPS if apps: app_names = [ app_config.name for app_config in apps.get_app_configs() ] # loop through our INSTALLED_APPS for app in app_names: # skip any django apps if app.startswith("django."): continue vue_module = '%s.vue' % app try: __import__(vue_module) except ImportError: pass def add_component(self, component: VueComponent): self._components[component.name] = component def get_component(self, name: str) -> VueComponent: if not self._loaded: self._load() if name in self._components: return self._components[name] raise KeyError("{} is not a registered Vue component!".format(name)) def get_components(self) -> Dict[str, VueComponent]: if not self._loaded: self._load() return self._components Vue = _VueRegistry()