예제 #1
0
    def handle_noargs(self, **options):
        self.style = color_style()

        self.stdout.write("Running Django's own validation:")
        self.validate(display_num_errors=True)

        for model in get_models():
            if hasattr(model, '_create_content_base'):
                self.validate_base_model(model)

            if hasattr(model, '_feincms_content_models'):
                self.validate_content_type(model)
예제 #2
0
    def handle_noargs(self, **options):
        self.style = color_style()

        self.stdout.write("Running Django's own validation:")
        self.validate(display_num_errors=True)

        for model in get_models():
            if hasattr(model, '_create_content_base'):
                self.validate_base_model(model)

            if hasattr(model, '_feincms_content_models'):
                self.validate_content_type(model)
예제 #3
0
def ensure_completely_loaded(force=False):
    """
    This method ensures all models are completely loaded

    FeinCMS requires Django to be completely initialized before proceeding,
    because of the extension mechanism and the dynamically created content
    types.

    For more informations, have a look at issue #23 on github:
    http://github.com/feincms/feincms/issues#issue/23
    """

    global COMPLETELY_LOADED
    if COMPLETELY_LOADED and not force:
        return True

    try:
        from django.apps import apps
    except ImportError:
        from django.db.models import loading as apps
    else:
        # Django 1.7 and up
        if not apps.ready:
            return

    # Ensure meta information concerning related fields is up-to-date.
    # Upon accessing the related fields information from Model._meta,
    # the related fields are cached and never refreshed again (because
    # models and model relations are defined upon import time, if you
    # do not fumble around with models like we do in FeinCMS.)
    #
    # Here we flush the caches rather than actually _filling them so
    # that relations defined after all content types registrations
    # don't miss out.
    import django
    if django.get_version() < '1.8':

        from feincms._internal import get_models
        for model in get_models():
            for cache_name in (
                    '_field_cache', '_field_name_cache', '_m2m_cache',
                    '_related_objects_cache', '_related_many_to_many_cache',
                    '_name_map'):
                try:
                    delattr(model._meta, cache_name)
                except AttributeError:
                    pass

            # Randomly call some cache filling methods
            # http://goo.gl/XNI2qz
            model._meta._fill_fields_cache()

        # Calls to get_models(...) are cached by the arguments used in the
        # call.  This cache is normally cleared in loading.register_models(),
        # but we invalidate the get_models() cache, by calling get_models above
        # before all apps have loaded. (Django's load_app() doesn't clear the
        # get_models cache as it perhaps should). So instead we clear the
        # get_models cache again here. If we don't do this, Django 1.5 chokes
        # on a model validation error (Django 1.4 doesn't exhibit this
        # problem).  See Issue #323 on github.
        if hasattr(apps, 'cache'):
            try:
                apps.cache.get_models.cache_clear()  # Django 1.7+
            except AttributeError:
                apps.cache._get_models_cache.clear()  # Django 1.6-

    if hasattr(apps, 'ready'):
        if apps.ready:
            COMPLETELY_LOADED = True
    elif apps.app_cache_ready():
            COMPLETELY_LOADED = True

    return True