datasets_api.migrations package

Submodules

datasets_api.migrations.0001_initial module

class datasets_api.migrations.0001_initial.Migration(name, app_label)[source]

Bases: Migration

dependencies = []
initial = True
operations = [<CreateModel  name='Dataset', fields=[('id', <django.db.models.fields.AutoField>), ('dataset_id', <django.db.models.fields.TextField>)], options={'permissions': (('view', 'View dataset'),)}>]

datasets_api.migrations.0002_dataset_groups module

class datasets_api.migrations.0002_dataset_groups.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('auth', '0012_alter_user_first_name_max_length'), ('datasets_api', '0001_initial')]
operations = [<AddField  model_name='dataset', name='groups', field=<django.db.models.fields.related.ManyToManyField>>]

datasets_api.migrations.0003_alter_dataset_options module

class datasets_api.migrations.0003_alter_dataset_options.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0002_dataset_groups')]
operations = [<AlterModelOptions  name='dataset', options={}>]

datasets_api.migrations.0004_dataset_broken module

class datasets_api.migrations.0004_dataset_broken.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0003_alter_dataset_options')]
operations = [<AddField  model_name='dataset', name='broken', field=<django.db.models.fields.BooleanField>>]

datasets_api.migrations.0005_dataset_dataset_name module

class datasets_api.migrations.0005_dataset_dataset_name.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0004_dataset_broken')]
operations = [<AddField  model_name='dataset', name='dataset_name', field=<django.db.models.fields.TextField>>]

datasets_api.migrations.0006_datasethierarchy module

class datasets_api.migrations.0006_datasethierarchy.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0005_dataset_dataset_name')]
operations = [<CreateModel  name='DatasetHierarchy', fields=[('id', <django.db.models.fields.AutoField>), ('ancestor', <django.db.models.fields.related.ForeignKey>), ('descendant', <django.db.models.fields.related.ForeignKey>)]>]

datasets_api.migrations.0007_datasethierarchy_direct module

class datasets_api.migrations.0007_datasethierarchy_direct.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0006_datasethierarchy')]
operations = [<AddField  model_name='datasethierarchy', name='direct', field=<django.db.models.fields.BooleanField>, preserve_default=False>]

datasets_api.migrations.0008_datasethierarchy_instance_id module

class datasets_api.migrations.0008_datasethierarchy_instance_id.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0007_datasethierarchy_direct')]
operations = [<AddField  model_name='datasethierarchy', name='instance_id', field=<django.db.models.fields.TextField>, preserve_default=False>]

datasets_api.migrations.0009_dataset_dataset_id_unique module

class datasets_api.migrations.0009_dataset_dataset_id_unique.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0008_datasethierarchy_instance_id')]
operations = [<RunPython <function dedupe_datasets>, <function RunPython.noop>>, <AlterField  model_name='dataset', name='dataset_id', field=<django.db.models.fields.CharField>>]
datasets_api.migrations.0009_dataset_dataset_id_unique.dedupe_datasets(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor) None[source]

datasets_api.migrations.0010_identifier_fields_to_charfield module

Convert identifier columns from TEXT to VARCHAR(255).

Background (iossifovlab/gpf#836):

  • The previous shape of migration 0009 set Dataset.dataset_id to TextField(unique=True). On MySQL/MariaDB that produces TEXT UNIQUE and fails at apply time with:

    MySQLdb.OperationalError: (1170, "BLOB/TEXT column 'dataset_id'
    used in key specification without a key length")
    

    0009 has therefore been amended in place to CharField(max_length=255, unique=True) so fresh MySQL deploys (and fresh deploys on every backend) get the right schema.

  • Dataset.dataset_name and DatasetHierarchy.instance_id were also TextField for no good reason — they are short identifiers. This migration switches them to CharField(max_length=255).

  • For existing Postgres deploys (e.g. SFARI / gain-web’s gpfwa) that already applied the old 0009 against TEXT, the column is still TEXT UNIQUE. The AlterField for dataset_id here is a no-op against the Django model state (0009 already declares CharField(max_length=255, unique=True)), but schema_editor emits the actual ALTER COLUMN ... TYPE VARCHAR(255) SQL against the DB, converting the column in place. On fresh deploys the column is already VARCHAR(255) UNIQUE and the alter is a cheap no-op.

The same logic applies to dataset_name and instance_id: the model state in 0005 / 0008 still says TextField, so this migration is the one that records the switch to CharField for those two.

class datasets_api.migrations.0010_identifier_fields_to_charfield.Migration(name, app_label)[source]

Bases: Migration

dependencies = [('datasets_api', '0009_dataset_dataset_id_unique')]
operations = [<AlterField  model_name='dataset', name='dataset_id', field=<django.db.models.fields.CharField>>, <AlterField  model_name='dataset', name='dataset_name', field=<django.db.models.fields.CharField>>, <AlterField  model_name='datasethierarchy', name='instance_id', field=<django.db.models.fields.CharField>>]

Module contents