diff --git a/beat/web/databases/migrations/0001_initial.py b/beat/web/databases/migrations/0001_initial.py
index c4f746df379e16e8f70cdabecf5d5de6e9d96baf..15a26287fcaaa9a18981241bf14abc38dc9ca710 100644
--- a/beat/web/databases/migrations/0001_initial.py
+++ b/beat/web/databases/migrations/0001_initial.py
@@ -27,99 +27,269 @@
 
 from __future__ import unicode_literals
 
-from django.db import migrations, models
-import beat.web.code.models
-import beat.web.databases.models
 from django.conf import settings
+from django.db import migrations
+from django.db import models
+
+import beat.web.code.models
 import beat.web.common.models
+import beat.web.databases.models
 
 
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('dataformats', '0001_initial'),
+        ("dataformats", "0001_initial"),
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('team', '0001_initial'),
+        ("team", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Database',
+            name="Database",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('sharing', models.CharField(default='P', max_length=1, choices=[('P', 'Private'), ('S', 'Shared'), ('A', 'Public'), ('U', 'Usable')])),
-                ('name', models.CharField(help_text='The name for this object (space-like characters will be automatically replaced by dashes)', max_length=200)),
-                ('version', models.PositiveIntegerField(default=1, help_text='The version of this object (an integer starting from 1)')),
-                ('short_description', models.CharField(default='', help_text='Describe the object succinctly (try to keep it under 80 characters)', max_length=100, blank=True)),
-                ('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')),
-                ('hash', models.CharField(help_text='Hashed value of the object contents (<a href="https://docs.python.org/2/library/hashlib.html">SHA256, hexadecimal digest</a>). This field is auto-generated and managed by the platform.', max_length=64, editable=False)),
-                ('declaration_file', models.FileField(db_column='declaration', upload_to=beat.web.common.models.get_contribution_declaration_filename, storage=beat.web.databases.models.DatabaseStorage(), max_length=200, blank=True, null=True)),
-                ('description_file', models.FileField(db_column='description', upload_to=beat.web.common.models.get_contribution_description_filename, storage=beat.web.databases.models.DatabaseStorage(), max_length=200, blank=True, null=True)),
-                ('source_code_file', models.FileField(db_column='source_code', upload_to=beat.web.code.models.get_contribution_source_code_filename, storage=beat.web.databases.models.DatabaseStorage(), max_length=200, blank=True, null=True)),
-                ('fork_of', models.ForeignKey(related_name='forks', blank=True, to='databases.Database', null=True, on_delete=models.SET_NULL)),
-                ('previous_version', models.ForeignKey(related_name='next_versions', blank=True, to='databases.Database', null=True, on_delete=models.CASCADE)),
-                ('shared_with', models.ManyToManyField(related_name='shared_databases', to=settings.AUTH_USER_MODEL, blank=True)),
-                ('shared_with_team', models.ManyToManyField(related_name='shared_databases', to='team.Team', blank=True)),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                (
+                    "sharing",
+                    models.CharField(
+                        default="P",
+                        max_length=1,
+                        choices=[
+                            ("P", "Private"),
+                            ("S", "Shared"),
+                            ("A", "Public"),
+                            ("U", "Usable"),
+                        ],
+                    ),
+                ),
+                (
+                    "name",
+                    models.CharField(
+                        help_text="The name for this object (space-like characters will be automatically replaced by dashes)",
+                        max_length=200,
+                    ),
+                ),
+                (
+                    "version",
+                    models.PositiveIntegerField(
+                        default=1,
+                        help_text="The version of this object (an integer starting from 1)",
+                    ),
+                ),
+                (
+                    "short_description",
+                    models.CharField(
+                        default="",
+                        help_text="Describe the object succinctly (try to keep it under 80 characters)",
+                        max_length=100,
+                        blank=True,
+                    ),
+                ),
+                (
+                    "creation_date",
+                    models.DateTimeField(
+                        auto_now_add=True, verbose_name="Creation date"
+                    ),
+                ),
+                (
+                    "hash",
+                    models.CharField(
+                        help_text='Hashed value of the object contents (<a href="https://docs.python.org/2/library/hashlib.html">SHA256, hexadecimal digest</a>). This field is auto-generated and managed by the platform.',
+                        max_length=64,
+                        editable=False,
+                    ),
+                ),
+                (
+                    "declaration_file",
+                    models.FileField(
+                        db_column="declaration",
+                        upload_to=beat.web.common.models.get_contribution_declaration_filename,
+                        storage=beat.web.databases.models.DatabaseStorage(),
+                        max_length=200,
+                        blank=True,
+                        null=True,
+                    ),
+                ),
+                (
+                    "description_file",
+                    models.FileField(
+                        db_column="description",
+                        upload_to=beat.web.common.models.get_contribution_description_filename,
+                        storage=beat.web.databases.models.DatabaseStorage(),
+                        max_length=200,
+                        blank=True,
+                        null=True,
+                    ),
+                ),
+                (
+                    "source_code_file",
+                    models.FileField(
+                        db_column="source_code",
+                        upload_to=beat.web.code.models.get_contribution_source_code_filename,
+                        storage=beat.web.databases.models.DatabaseStorage(),
+                        max_length=200,
+                        blank=True,
+                        null=True,
+                    ),
+                ),
+                (
+                    "fork_of",
+                    models.ForeignKey(
+                        related_name="forks",
+                        blank=True,
+                        to="databases.Database",
+                        null=True,
+                        on_delete=models.SET_NULL,
+                    ),
+                ),
+                (
+                    "previous_version",
+                    models.ForeignKey(
+                        related_name="next_versions",
+                        blank=True,
+                        to="databases.Database",
+                        null=True,
+                        on_delete=models.CASCADE,
+                    ),
+                ),
+                (
+                    "shared_with",
+                    models.ManyToManyField(
+                        related_name="shared_databases",
+                        to=settings.AUTH_USER_MODEL,
+                        blank=True,
+                    ),
+                ),
+                (
+                    "shared_with_team",
+                    models.ManyToManyField(
+                        related_name="shared_databases", to="team.Team", blank=True
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='DatabaseOutput',
+            name="DatabaseOutput",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('name', models.CharField(max_length=200)),
-                ('dataformat', models.ForeignKey(related_name='database_outputs', to='dataformats.DataFormat', on_delete=models.CASCADE)),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                ("name", models.CharField(max_length=200)),
+                (
+                    "dataformat",
+                    models.ForeignKey(
+                        related_name="database_outputs",
+                        to="dataformats.DataFormat",
+                        on_delete=models.CASCADE,
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='DatabaseProtocol',
+            name="DatabaseProtocol",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('name', models.CharField(max_length=200, blank=True)),
-                ('database', models.ForeignKey(related_name='protocols', to='databases.Database', on_delete=models.CASCADE)),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                ("name", models.CharField(max_length=200, blank=True)),
+                (
+                    "database",
+                    models.ForeignKey(
+                        related_name="protocols",
+                        to="databases.Database",
+                        on_delete=models.CASCADE,
+                    ),
+                ),
             ],
-            options={
-                'ordering': ['name'],
-            },
+            options={"ordering": ["name"]},
         ),
         migrations.CreateModel(
-            name='DatabaseSet',
+            name="DatabaseSet",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('name', models.CharField(max_length=200, blank=True)),
-                ('protocol', models.ForeignKey(related_name='sets', to='databases.DatabaseProtocol', on_delete=models.CASCADE)),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                ("name", models.CharField(max_length=200, blank=True)),
+                (
+                    "protocol",
+                    models.ForeignKey(
+                        related_name="sets",
+                        to="databases.DatabaseProtocol",
+                        on_delete=models.CASCADE,
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='DatabaseSetTemplate',
+            name="DatabaseSetTemplate",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('name', models.CharField(unique=True, max_length=200)),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                ("name", models.CharField(unique=True, max_length=200)),
             ],
         ),
         migrations.AddField(
-            model_name='databaseset',
-            name='template',
-            field=models.ForeignKey(related_name='sets', to='databases.DatabaseSetTemplate', on_delete=models.CASCADE),
+            model_name="databaseset",
+            name="template",
+            field=models.ForeignKey(
+                related_name="sets",
+                to="databases.DatabaseSetTemplate",
+                on_delete=models.CASCADE,
+            ),
         ),
         migrations.AddField(
-            model_name='databaseoutput',
-            name='template',
-            field=models.ForeignKey(related_name='outputs', to='databases.DatabaseSetTemplate', on_delete=models.CASCADE),
+            model_name="databaseoutput",
+            name="template",
+            field=models.ForeignKey(
+                related_name="outputs",
+                to="databases.DatabaseSetTemplate",
+                on_delete=models.CASCADE,
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='databaseset',
-            unique_together=set([('protocol', 'name', 'template')]),
+            name="databaseset", unique_together=set([("protocol", "name", "template")]),
         ),
         migrations.AlterUniqueTogether(
-            name='databaseprotocol',
-            unique_together=set([('database', 'name')]),
+            name="databaseprotocol", unique_together=set([("database", "name")]),
         ),
         migrations.AlterUniqueTogether(
-            name='databaseoutput',
-            unique_together=set([('template', 'name', 'dataformat')]),
+            name="databaseoutput",
+            unique_together=set([("template", "name", "dataformat")]),
         ),
         migrations.AlterUniqueTogether(
-            name='database',
-            unique_together=set([('name', 'version')]),
+            name="database", unique_together=set([("name", "version")]),
         ),
     ]
diff --git a/beat/web/databases/migrations/0002_scheduler_addons.py b/beat/web/databases/migrations/0002_scheduler_addons.py
index 4e9fe7730a13d272c124dba88c1e581f787e614d..b7202d09898f18832071f10ccad8a2494e7f6572 100644
--- a/beat/web/databases/migrations/0002_scheduler_addons.py
+++ b/beat/web/databases/migrations/0002_scheduler_addons.py
@@ -23,31 +23,32 @@
 # with the BEAT platform. If not, see http://www.gnu.org/licenses/.           #
 #                                                                             #
 ###############################################################################
-
 from __future__ import unicode_literals
 
-from django.db import migrations, models
+import logging
 
-from ...common.models import get_declaration
+from django.db import migrations
+from django.db import models
 
+from ...common.models import get_declaration
 from ..models import validate_database
 
-import logging
 logger = logging.getLogger(__name__)
 
 
 def refresh_databases(apps, schema_editor):
-    '''Refreshes each database so datasets/outputs are recreated'''
+    """Refreshes each database so datasets/outputs are recreated"""
 
     Database = apps.get_model("databases", "Database")
     DatabaseSetOutput = apps.get_model("databases", "DatabaseSetOutput")
 
     Database.declaration = property(get_declaration)
-    Database.fullname = lambda self: '%s/%d' % (self.name, self.version)
+    Database.fullname = lambda self: "%s/%d" % (self.name, self.version)
 
-    if Database.objects.count(): print('')
+    if Database.objects.count():
+        print("")
 
-    for db in Database.objects.order_by('id'):
+    for db in Database.objects.order_by("id"):
         print("Refreshing protocols for database `%s'..." % db.fullname())
         core = validate_database(db.declaration)
         core.name = db.fullname()
@@ -55,36 +56,62 @@ def refresh_databases(apps, schema_editor):
             for set in proto.sets.all():
                 for output in set.template.outputs.all():
                     try:
-                        DatabaseSetOutput(template=output, set=set,
-                                          hash=core.hash_output(proto.name, set.name,
-                                                                output.name)).save()
+                        DatabaseSetOutput(
+                            template=output,
+                            set=set,
+                            hash=core.hash_output(proto.name, set.name, output.name),
+                        ).save()
                     except KeyError:
-                        logger.warn('Database output %s/%d.%s.%s.%s does ' \
-                                    'not exist' % (db.name, db.version, proto.name,
-                                                   set.name, output.name))
+                        logger.warn(
+                            "Database output %s/%d.%s.%s.%s does "
+                            "not exist"
+                            % (db.name, db.version, proto.name, set.name, output.name)
+                        )
                         continue
 
 
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('dataformats', '0001_initial'),
-        ('databases', '0001_initial'),
+        ("dataformats", "0001_initial"),
+        ("databases", "0001_initial"),
     ]
 
     operations = [
-        migrations.RenameModel('DatabaseOutput', 'DatabaseSetTemplateOutput'),
+        migrations.RenameModel("DatabaseOutput", "DatabaseSetTemplateOutput"),
         migrations.AlterUniqueTogether(
-            name='databasesettemplateoutput',
-            unique_together=set([('template', 'name')]),
+            name="databasesettemplateoutput",
+            unique_together=set([("template", "name")]),
         ),
         migrations.CreateModel(
-            name='DatabaseSetOutput',
+            name="DatabaseSetOutput",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('hash', models.CharField(unique=True, max_length=64)),
-                ('set', models.ForeignKey(related_name='outputs', to='databases.DatabaseSet', on_delete=models.CASCADE)),
-                ('template', models.ForeignKey(related_name='instances', to='databases.DatabaseSetTemplateOutput', on_delete=models.CASCADE)),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                ("hash", models.CharField(unique=True, max_length=64)),
+                (
+                    "set",
+                    models.ForeignKey(
+                        related_name="outputs",
+                        to="databases.DatabaseSet",
+                        on_delete=models.CASCADE,
+                    ),
+                ),
+                (
+                    "template",
+                    models.ForeignKey(
+                        related_name="instances",
+                        to="databases.DatabaseSetTemplateOutput",
+                        on_delete=models.CASCADE,
+                    ),
+                ),
             ],
         ),
         migrations.RunPython(refresh_databases),
diff --git a/beat/web/databases/migrations/0003_auto_20160704_1316.py b/beat/web/databases/migrations/0003_auto_20160704_1316.py
index 575732e942c2085e146b3697b3c75e0c1ff578b5..deb0e0444de508aa9f72abe602a35ff5076af03c 100644
--- a/beat/web/databases/migrations/0003_auto_20160704_1316.py
+++ b/beat/web/databases/migrations/0003_auto_20160704_1316.py
@@ -8,12 +8,11 @@ from django.db import migrations
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('databases', '0002_scheduler_addons'),
+        ("databases", "0002_scheduler_addons"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='database',
-            options={'ordering': ['name', '-version']},
+            name="database", options={"ordering": ["name", "-version"]},
         ),
     ]
diff --git a/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py b/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py
index 35960a975d955dcf8a600f0075bf1465193de8d5..3aac3b1490ddf7a6dc03594548ca808b63748d02 100644
--- a/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py
+++ b/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py
@@ -2,24 +2,22 @@
 # Generated by Django 1.9.13 on 2018-01-25 09:06
 from __future__ import unicode_literals
 
-from django.db import migrations, models
+from django.db import migrations
+from django.db import models
 
 
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('databases', '0003_auto_20160704_1316'),
+        ("databases", "0003_auto_20160704_1316"),
     ]
 
     operations = [
-        migrations.RemoveField(
-            model_name='databasesetoutput',
-            name='hash',
-        ),
+        migrations.RemoveField(model_name="databasesetoutput", name="hash",),
         migrations.AddField(
-            model_name='databaseset',
-            name='hash',
-            field=models.CharField(default='', max_length=64),
+            model_name="databaseset",
+            name="hash",
+            field=models.CharField(default="", max_length=64),
             preserve_default=False,
         ),
     ]
diff --git a/beat/web/databases/migrations/0005_databaseset_data_migration.py b/beat/web/databases/migrations/0005_databaseset_data_migration.py
index 44a24f1c840357d8442504e1f56b9a3d9fcbbdd4..4dc4fa249ceef4fd3bcd466549c978d57c415a7f 100644
--- a/beat/web/databases/migrations/0005_databaseset_data_migration.py
+++ b/beat/web/databases/migrations/0005_databaseset_data_migration.py
@@ -2,33 +2,42 @@
 # Generated by Django 1.9.13 on 2018-01-25 09:06
 from __future__ import unicode_literals
 
-from django.db import migrations, models
+from django.db import migrations
 
 from beat.backend.python.hash import hashDataset
 
 
 def compute_hashes(apps, schema_editor):
-    '''Refreshes each database so datasets/outputs are recreated'''
+    """Refreshes each database so datasets/outputs are recreated"""
 
     DatabaseSet = apps.get_model("databases", "DatabaseSet")
 
     if DatabaseSet.objects.count():
-        print('')
-
-    for db_set in DatabaseSet.objects.order_by('id'):
-        print("Computing hashes for database set '%s/%d/%s/%s'..." % \
-                (db_set.protocol.database.name, db_set.protocol.database.version,
-                 db_set.protocol.name, db_set.name))
-
-        db_set.hash = hashDataset('%s/%d' % (db_set.protocol.database.name, db_set.protocol.database.version),
-                                  db_set.protocol.name, db_set.name)
+        print("")
+
+    for db_set in DatabaseSet.objects.order_by("id"):
+        print(
+            "Computing hashes for database set '%s/%d/%s/%s'..."
+            % (
+                db_set.protocol.database.name,
+                db_set.protocol.database.version,
+                db_set.protocol.name,
+                db_set.name,
+            )
+        )
+
+        db_set.hash = hashDataset(
+            "%s/%d" % (db_set.protocol.database.name, db_set.protocol.database.version),
+            db_set.protocol.name,
+            db_set.name,
+        )
         db_set.save()
 
 
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('databases', '0004_beat_backend_python_1_5_x'),
+        ("databases", "0004_beat_backend_python_1_5_x"),
     ]
 
     operations = [
diff --git a/beat/web/databases/migrations/0006_databaseset_hash_unique.py b/beat/web/databases/migrations/0006_databaseset_hash_unique.py
index 8ce33badee0597b74533ae8b930218e7847362e5..51dab6b5c20d0924ddfca8615636c7a158d0f1a6 100644
--- a/beat/web/databases/migrations/0006_databaseset_hash_unique.py
+++ b/beat/web/databases/migrations/0006_databaseset_hash_unique.py
@@ -2,19 +2,20 @@
 # Generated by Django 1.9.13 on 2018-01-25 09:06
 from __future__ import unicode_literals
 
-from django.db import migrations, models
+from django.db import migrations
+from django.db import models
 
 
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('databases', '0005_databaseset_data_migration'),
+        ("databases", "0005_databaseset_data_migration"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='databaseset',
-            name='hash',
+            model_name="databaseset",
+            name="hash",
             field=models.CharField(max_length=64, unique=True),
             preserve_default=False,
         ),
diff --git a/beat/web/databases/migrations/0007_add_accessibility_date.py b/beat/web/databases/migrations/0007_add_accessibility_date.py
index 802aa1bcd0b7e903e6d51b88638784a6f78aff4d..d128d33a77a664e95182896c5fc0fbcab8c5c640 100644
--- a/beat/web/databases/migrations/0007_add_accessibility_date.py
+++ b/beat/web/databases/migrations/0007_add_accessibility_date.py
@@ -2,7 +2,8 @@
 # Generated by Django 1.11.25 on 2020-02-12 11:22
 from __future__ import unicode_literals
 
-from django.db import migrations, models
+from django.db import migrations
+from django.db import models
 
 
 class Migration(migrations.Migration):