Commit b55624a0 authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

Added get_app_paths() to the AppCache.

This method is useful to discover files inside apps.
parent 09d05686
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
from functools import wraps

from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
from django.db.models.loading import get_apps, get_app, get_models, get_model, register_models
from django.db.models.loading import get_apps, get_app_paths, get_app, get_models, get_model, register_models
from django.db.models.query import Q
from django.db.models.expressions import F
from django.db.models.manager import Manager
+21 −1
Original line number Diff line number Diff line
@@ -130,7 +130,9 @@ class AppCache(object):
        return self.loaded

    def get_apps(self):
        "Returns a list of all installed modules that contain models."
        """
        Returns a list of all installed modules that contain models.
        """
        self._populate()

        # Ensure the returned list is always in the same order (with new apps
@@ -140,6 +142,23 @@ class AppCache(object):
        apps.sort()
        return [elt[1] for elt in apps]

    def get_app_paths(self):
        """
        Returns a list of paths to all installed apps.

        Useful for discovering files at conventional locations inside apps
        (static files, templates, etc.)
        """
        self._populate()

        app_paths = []
        for app in self.get_apps():
            if hasattr(app, '__path__'):        # models/__init__.py package
                app_paths.extend([upath(path) for path in app.__path__])
            else:                               # models.py module
                app_paths.append(upath(app.__file__))
        return app_paths

    def get_app(self, app_label, emptyOK=False):
        """
        Returns the module containing the models for the given app_label. If
@@ -260,6 +279,7 @@ cache = AppCache()
# These methods were always module level, so are kept that way for backwards
# compatibility.
get_apps = cache.get_apps
get_app_paths = cache.get_app_paths
get_app = cache.get_app
get_app_errors = cache.get_app_errors
get_models = cache.get_models