Esempio n. 1
0
File: state.py Progetto: katrid/orun
 def construct_managers(self):
     "Deep-clone the managers using deconstruction"
     # Sort all managers by their creation counter
     sorted_managers = sorted(self.managers, key=lambda v: v[1].creation_counter)
     for mgr_name, manager in sorted_managers:
         mgr_name = force_text(mgr_name)
         as_manager, manager_path, qs_path, args, kwargs = manager.deconstruct()
         if as_manager:
             qs_class = import_string(qs_path)
             yield mgr_name, qs_class.as_manager()
         else:
             manager_class = import_string(manager_path)
             yield mgr_name, manager_class(*args, **kwargs)
Esempio n. 2
0
File: base.py Progetto: katrid/orun
 def get_engine(cls, engine=None):
     if engine is None:
         engine = settings.DEFAULT_REPORT_ENGINE
     if isinstance(engine, str):
         if '.' in engine:
             engine = import_string(engine)
     for e in cls.engines:
         if e.__class__ is engine:
             return e
     return cls.load_engine(engine)
Esempio n. 3
0
def get_hashers():
    hashers = []
    for hasher_path in settings['PASSWORD_HASHERS']:
        hasher_cls = import_string(hasher_path)
        hasher = hasher_cls()
        if not getattr(hasher, 'algorithm'):
            raise ImproperlyConfigured("hasher doesn't specify an "
                                       "algorithm name: %s" % hasher_path)
        hashers.append(hasher)
    return hashers
Esempio n. 4
0
def get_hashers():
    hashers = []
    for hasher_path in settings.PASSWORD_HASHERS:
        hasher_cls = import_string(hasher_path)
        hasher = hasher_cls()
        if not getattr(hasher, 'algorithm'):
            raise ImproperlyConfigured("hasher doesn't specify an "
                                       "algorithm name: %s" % hasher_path)
        hashers.append(hasher)
    return hashers
Esempio n. 5
0
File: utils.py Progetto: katrid/orun
 def routers(self):
     if self._routers is None:
         self._routers = settings.DATABASE_ROUTERS
     routers = []
     for r in self._routers:
         if isinstance(r, str):
             router = import_string(r)()
         else:
             router = r
         routers.append(router)
     return routers
Esempio n. 6
0
 def get_info(self):
     info = self.info
     if self.type_name:
         tp = import_string(self.type_name)
         info = tp.get_info()
     return {
         'id': self.pk,
         'name': gettext(self.name),
         'tag': self.tag,
         'description': self.description,
         'info': info,
     }
Esempio n. 7
0
 def _get_info(self, context):
     from orun.contrib.admin.models.ui import View
     res = super()._get_info(context)
     # it's a system class
     if self.qualname:
         admin_class = import_string(self.qualname)
         res.update(admin_class.render(None))
         del res['qualname']
     view = res.get('view')
     if view and view['id']:
         res['template'] = View.objects.get(pk=view['id']).get_content()
     return res
Esempio n. 8
0
File: utils.py Progetto: katrid/orun
def get_backend(engine):
    backend = 'orun.db.backends.' + engine + '.base.DatabaseWrapper'
    return import_string(backend)
Esempio n. 9
0
    def create(cls, entry, registry=None):
        """
        Factory that creates an app config from an entry in INSTALLED_APPS.
        """
        # create() eventually returns app_config_class(app_name, app_module).
        app_config_class = None
        app_name = None
        app_module = None

        # If import_module succeeds, entry points to the app module.
        try:
            app_module = import_module(entry)
        except Exception:
            pass
        else:
            # If app_module has an apps submodule that defines a single
            # AppConfig subclass, use it automatically.
            # To prevent this, an AppConfig subclass can declare a class
            # variable default = False.
            # If the apps module defines more than one AppConfig subclass,
            # the default one can declare default = True.
            if module_has_submodule(app_module, APPS_MODULE_NAME):
                mod_path = '%s.%s' % (entry, APPS_MODULE_NAME)
                mod = import_module(mod_path)
                # Check if there's exactly one AppConfig candidate,
                # excluding those that explicitly define default = False.
                app_configs = [
                    (name, candidate)
                    for name, candidate in inspect.getmembers(
                        mod, inspect.isclass)
                    if (issubclass(candidate, cls) and candidate is not cls
                        and getattr(candidate, 'default', True))
                ]
                if len(app_configs) == 1:
                    app_config_class = app_configs[0][1]
                    app_config_name = '%s.%s' % (mod_path, app_configs[0][0])
                else:
                    # Check if there's exactly one AppConfig subclass,
                    # among those that explicitly define default = True.
                    app_configs = [(name, candidate)
                                   for name, candidate in app_configs
                                   if getattr(candidate, 'default', False)]
                    if len(app_configs) > 1:
                        candidates = [repr(name) for name, _ in app_configs]
                        raise RuntimeError(
                            '%r declares more than one default AppConfig: '
                            '%s.' % (mod_path, ', '.join(candidates)))
                    elif len(app_configs) == 1:
                        app_config_class = app_configs[0][1]
                        app_config_name = '%s.%s' % (mod_path,
                                                     app_configs[0][0])

            # If app_module specifies a default_app_config, follow the link.
            # default_app_config is deprecated, but still takes over the
            # automatic detection for backwards compatibility during the
            # deprecation period.
            try:
                new_entry = app_module.default_app_config
            except AttributeError:
                # Use the default app config class if we didn't find anything.
                if app_config_class is None:
                    app_config_class = cls
                    app_name = entry
            else:
                entry = new_entry
                app_config_class = None

        # If import_string succeeds, entry is an app config class.
        if app_config_class is None:
            try:
                app_config_class = import_string(entry)
            except Exception:
                pass
        # If both import_module and import_string failed, it means that entry
        # doesn't have a valid value.
        if app_module is None and app_config_class is None:
            # If the last component of entry starts with an uppercase letter,
            # then it was likely intended to be an app config class; if not,
            # an app module. Provide a nice error message in both cases.
            mod_path, _, cls_name = entry.rpartition('.')
            if mod_path and cls_name[0].isupper():
                # We could simply re-trigger the string import exception, but
                # we're going the extra mile and providing a better error
                # message for typos in INSTALLED_APPS.
                # This may raise ImportError, which is the best exception
                # possible if the module at mod_path cannot be imported.
                mod = import_module(mod_path)
                candidates = [
                    repr(name) for name, candidate in inspect.getmembers(
                        mod, inspect.isclass)
                    if issubclass(candidate, cls) and candidate is not cls
                ]
                msg = "Module '%s' does not contain a '%s' class." % (mod_path,
                                                                      cls_name)
                if candidates:
                    msg += ' Choices are: %s.' % ', '.join(candidates)
                raise ImportError(msg)
            else:
                # Re-trigger the module import exception.
                import_module(entry)

        # Check for obvious errors. (This check prevents duck typing, but
        # it could be removed if it became a problem in practice.)
        if not issubclass(app_config_class, AppConfig):
            raise ImproperlyConfigured("'%s' isn't a subclass of AppConfig." %
                                       entry)

        # Obtain app name here rather than in AppClass.__init__ to keep
        # all error checking for entries in INSTALLED_APPS in one place.
        if app_name is None:
            try:
                app_name = app_config_class.name
            except AttributeError:
                raise ImproperlyConfigured(
                    "'%s' must supply a name attribute." % entry)

        # Ensure app_name points to a valid module.
        try:
            app_module = import_module(app_name)
        except ImportError:
            raise ImproperlyConfigured(
                "Cannot import '%s'. Check that '%s.%s.name' is correct." % (
                    app_name,
                    app_config_class.__module__,
                    app_config_class.__qualname__,
                ))

        # Adjust app config dependencies
        app_config = app_config_class(app_name, app_module)
        if app_config.dependencies:
            for dep in app_config.dependencies:
                if dep not in registry.app_configs:
                    registry.app_configs[dep] = cls.create(dep, registry)

        # Entry is a path to an app config class.
        return app_config
Esempio n. 10
0
def load_backend(path):
    return import_string(path)()
Esempio n. 11
0
File: base.py Progetto: katrid/orun
 def load_engine(cls, engine):
     if isinstance(engine, str):
         engine = import_string(engine)
     e = engine()
     cls.engines.append(e)
     return e
Esempio n. 12
0
def get_storage_class(import_path=None):
    return import_string(import_path or settings.DEFAULT_FILE_STORAGE)