Example #1
0
def custom_sql_for_model(model, style, connection):
    opts = model._meta
    app_dir = os.path.normpath(os.path.join(os.path.dirname(models.get_app(model._meta.app_label).__file__), 'sql'))
    output = []

    # Post-creation SQL should come before any initial SQL data is loaded.
    # However, this should not be done for models that are unmanaged or
    # for fields that are part of a parent model (via model inheritance).
    if opts.managed:
        post_sql_fields = [f for f in opts.local_fields if hasattr(f, 'post_create_sql')]
        for f in post_sql_fields:
            output.extend(f.post_create_sql(style, model._meta.db_table))

    # Some backends can't execute more than one SQL statement at a time,
    # so split into separate statements.
    statements = re.compile(r";[ \t]*$", re.M)

    # Find custom SQL, if it's available.
    backend_name = connection.settings_dict['ENGINE'].split('.')[-1]
    sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), backend_name)),
                 os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
    for sql_file in sql_files:
        if os.path.exists(sql_file):
            fp = open(sql_file, 'U')
            for statement in statements.split(fp.read().decode(settings.FILE_CHARSET)):
                # Remove any comments from the file
                statement = re.sub(r"--.*([\n\Z]|$)", "", statement)
                if statement.strip():
                    output.append(statement + ";")
            fp.close()

    return output
Example #2
0
 def handle(self, *app_labels, **options):
     from google.appengine._internal.django.db import models
     if not app_labels:
         raise CommandError('Enter at least one appname.')
     try:
         app_list = [models.get_app(app_label) for app_label in app_labels]
     except (ImproperlyConfigured, ImportError), e:
         raise CommandError("%s. Are you sure your INSTALLED_APPS setting is correct?" % e)
Example #3
0
 def handle(self, *app_labels, **options):
     from google.appengine._internal.django.db import models
     if not app_labels:
         raise CommandError('Enter at least one appname.')
     try:
         app_list = [models.get_app(app_label) for app_label in app_labels]
     except (ImproperlyConfigured, ImportError), e:
         raise CommandError(
             "%s. Are you sure your INSTALLED_APPS setting is correct?" % e)
Example #4
0
 def handle(self, *app_labels, **options):
     from google.appengine._internal.django.db import models
     if not app_labels:
         raise CommandError('Enter at least one appname.')
     try:
         app_list = [models.get_app(app_label) for app_label in app_labels]
     except (ImproperlyConfigured, ImportError) as e:
         raise CommandError(
             "%s. Are you sure your INSTALLED_APPS setting is correct?" % e)
     output = []
     for app in app_list:
         app_output = self.handle_app(app, **options)
         if app_output:
             output.append(app_output)
     return '\n'.join(output)
Example #5
0
def custom_sql_for_model(model, style, connection):
    opts = model._meta
    app_dir = os.path.normpath(
        os.path.join(
            os.path.dirname(models.get_app(model._meta.app_label).__file__),
            'sql'))
    output = []

    # Post-creation SQL should come before any initial SQL data is loaded.
    # However, this should not be done for models that are unmanaged or
    # for fields that are part of a parent model (via model inheritance).
    if opts.managed:
        post_sql_fields = [
            f for f in opts.local_fields if hasattr(f, 'post_create_sql')
        ]
        for f in post_sql_fields:
            output.extend(f.post_create_sql(style, model._meta.db_table))

    # Some backends can't execute more than one SQL statement at a time,
    # so split into separate statements.
    statements = re.compile(r";[ \t]*$", re.M)

    # Find custom SQL, if it's available.
    backend_name = connection.settings_dict['ENGINE'].split('.')[-1]
    sql_files = [
        os.path.join(app_dir,
                     "%s.%s.sql" % (opts.object_name.lower(), backend_name)),
        os.path.join(app_dir, "%s.sql" % opts.object_name.lower())
    ]
    for sql_file in sql_files:
        if os.path.exists(sql_file):
            fp = open(sql_file, 'U')
            for statement in statements.split(fp.read().decode(
                    settings.FILE_CHARSET)):
                # Remove any comments from the file
                statement = re.sub(ur"--.*([\n\Z]|$)", "", statement)
                if statement.strip():
                    output.append(statement + u";")
            fp.close()

    return output
Example #6
0
    def handle(self, *app_labels, **options):
        from google.appengine._internal.django.db.models import get_app, get_apps, get_models, get_model

        format = options.get('format','json')
        indent = options.get('indent',None)
        using = options.get('database', DEFAULT_DB_ALIAS)
        connection = connections[using]
        exclude = options.get('exclude',[])
        show_traceback = options.get('traceback', False)
        use_natural_keys = options.get('use_natural_keys', False)

        excluded_apps = set(get_app(app_label) for app_label in exclude)

        if len(app_labels) == 0:
            app_list = SortedDict((app, None) for app in get_apps() if app not in excluded_apps)
        else:
            app_list = SortedDict()
            for label in app_labels:
                try:
                    app_label, model_label = label.split('.')
                    try:
                        app = get_app(app_label)
                    except ImproperlyConfigured:
                        raise CommandError("Unknown application: %s" % app_label)

                    model = get_model(app_label, model_label)
                    if model is None:
                        raise CommandError("Unknown model: %s.%s" % (app_label, model_label))

                    if app in app_list.keys():
                        if app_list[app] and model not in app_list[app]:
                            app_list[app].append(model)
                    else:
                        app_list[app] = [model]
                except ValueError:
                    # This is just an app - no model qualifier
                    app_label = label
                    try:
                        app = get_app(app_label)
                    except ImproperlyConfigured:
                        raise CommandError("Unknown application: %s" % app_label)
                    app_list[app] = None

        # Check that the serialization format exists; this is a shortcut to
        # avoid collating all the objects and _then_ failing.
        if format not in serializers.get_public_serializer_formats():
            raise CommandError("Unknown serialization format: %s" % format)

        try:
            serializers.get_serializer(format)
        except KeyError:
            raise CommandError("Unknown serialization format: %s" % format)

        # Now collate the objects to be serialized.
        objects = []
        for model in sort_dependencies(app_list.items()):
            if not model._meta.proxy and router.allow_syncdb(using, model):
                objects.extend(model._default_manager.using(using).all())

        try:
            return serializers.serialize(format, objects, indent=indent,
                        use_natural_keys=use_natural_keys)
        except Exception, e:
            if show_traceback:
                raise
            raise CommandError("Unable to serialize database: %s" % e)