From b6f92ae2033a51f1110c44605eb7bebb93fa4558 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Thu, 20 Apr 2023 23:52:17 +0200
Subject: [PATCH] run hooks

---
 contracts/admin.py                            |   5 +-
 .../commands/import_old_contracts.py          | 209 ++++++++++--------
 ..._alter_contractfilingarea_name_and_more.py |  21 +-
 ...alter_contract_cost_unit_other_and_more.py |  86 ++++---
 ..._contract_legal_state_contract_is_valid.py |  13 +-
 contracts/views.py                            |   2 +-
 shared/templatetags/admin_extras.py           |   4 +-
 7 files changed, 188 insertions(+), 152 deletions(-)

diff --git a/contracts/admin.py b/contracts/admin.py
index d9027c2..e020611 100644
--- a/contracts/admin.py
+++ b/contracts/admin.py
@@ -277,10 +277,7 @@ class ContractAdmin(
                 "publishing_rejection_comment",
             )
 
-        if (
-            obj is not None
-            and request.user.has_perm("approve", obj)
-        ):
+        if obj is not None and request.user.has_perm("approve", obj):
             fieldsets.insert(
                 5,
                 ("Schválení", {"fields": ["is_approved"]}),
diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py
index 57b1616..3c406a1 100644
--- a/contracts/management/commands/import_old_contracts.py
+++ b/contracts/management/commands/import_old_contracts.py
@@ -1,17 +1,16 @@
 import io
 import os
 import string
-
 from datetime import date, datetime
 
 import yaml
-
-from ...models import Contract, ContractFilingArea, ContractType
-
 from django.conf import settings
 from django.core.management.base import BaseCommand
+
 from git import Repo
 
+from ...models import Contract, ContractFilingArea, ContractType
+
 
 class Command(BaseCommand):
     help = "Sync contract data from a remote Git repository."
@@ -65,12 +64,12 @@ class Command(BaseCommand):
         # Use Jan 1, 1970 as the default, if any defined year is 0.
         # Use Jan 1, 2100 as the default for infinitely valid contracts.
         split_contents[1] = (
-            split_contents[1].
-            replace("0000-00-00", "1970-01-01").
-            replace("2222-22-22", "2100-01-01").
-            replace("2222-00-00", "2100-01-01").
-            replace("-32", "-31").
-            replace("\t", " ")
+            split_contents[1]
+            .replace("0000-00-00", "1970-01-01")
+            .replace("2222-22-22", "2100-01-01")
+            .replace("2222-00-00", "2100-01-01")
+            .replace("-32", "-31")
+            .replace("\t", " ")
         )
 
         yaml_source = split_contents[1]
@@ -78,7 +77,9 @@ class Command(BaseCommand):
         try:
             parsed_metadata = yaml.safe_load(io.StringIO(yaml_source))
         except yaml.YAMLError as exc:
-            raise ValueError(f"Failed to parse {contract_root} metadata: {exc}.") from exc
+            raise ValueError(
+                f"Failed to parse {contract_root} metadata: {exc}."
+            ) from exc
 
         if parsed_metadata is None:
             raise ValueError(f"Got no metadata from {contract_root}.")
@@ -111,23 +112,28 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Špatně zadaný začátek platnosti: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} has a broken valid start date: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} has a broken valid start date: {value}."
+                                )
+                            )
                 case "datum ukončení":
                     if isinstance(value, date):
                         if date.year not in (1970, 2100):  # Ignore placeholder years
                             contract.valid_end_date = value
                     elif value is not None and (
-                        isinstance(value, str)
-                        and value.lower() != "na dobu neurčitou"
+                        isinstance(value, str) and value.lower() != "na dobu neurčitou"
                     ):
                         observed_issues_count += 1
                         contract.notes += f"Špatně zadaný konec platnosti: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} has a broken valid end date: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} has a broken valid end date: {value}."
+                                )
+                            )
                 case "title":
                     contract.name = value
 
@@ -136,7 +142,8 @@ class Command(BaseCommand):
 
                     if Contract.objects.filter(name=value).exists():
                         is_already_imported = True
-                        if self.verbosity >= 1: self.stdout.write(f"{slug} already exists, skipping.")
+                        if self.verbosity >= 1:
+                            self.stdout.write(f"{slug} already exists, skipping.")
 
                         break
                 case "použité smluvní typy":
@@ -155,9 +162,12 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Špatně zadané typy: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} is missing types - not a list: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} is missing types - not a list: {value}."
+                                )
+                            )
 
                         continue
 
@@ -166,9 +176,12 @@ class Command(BaseCommand):
                             observed_issues_count += 1
                             contract.notes += f"Nezaevidovaný typ: {type_name}\n"
 
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Contract {slug} is missing types - list item is not a string: {value}.")
-                            )
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Contract {slug} is missing types - list item is not a string: {value}."
+                                    )
+                                )
 
                             continue
 
@@ -203,16 +216,15 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Neznámý stav: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} has an invalid state: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} has an invalid state: {value}."
+                                )
+                            )
                 case "náklady":
                     if isinstance(value, str):
-                        formatted_value = (
-                            value.
-                            replace(" ", "").
-                            replace(".00", ".0")
-                        )
+                        formatted_value = value.replace(" ", "").replace(".00", ".0")
 
                         if formatted_value.isnumeric():
                             value = float(formatted_value)
@@ -220,12 +232,17 @@ class Command(BaseCommand):
                     if isinstance(value, (int, float)):
                         if value < 0:
                             observed_issues_count += 1
-                            contract.notes += f"Původní, špatně zadané náklady: {value}\n"
-
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Contract {slug} has an invalid cost amount: {value}.")
+                            contract.notes += (
+                                f"Původní, špatně zadané náklady: {value}\n"
                             )
 
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Contract {slug} has an invalid cost amount: {value}."
+                                    )
+                                )
+
                             continue
 
                         if value != 0:
@@ -241,9 +258,12 @@ class Command(BaseCommand):
                             observed_issues_count += 1
                             contract.notes += f"Původní, neropoznané náklady: {value}\n"
 
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Could not parse cost for contract {slug}: {value}.")
-                            )
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Could not parse cost for contract {slug}: {value}."
+                                    )
+                                )
 
                             continue
 
@@ -253,9 +273,12 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Původní, neropoznané náklady: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Could not parse cost for contract {slug}: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Could not parse cost for contract {slug}: {value}."
+                                )
+                            )
                 case "místo uložení":
                     if isinstance(value, str):
                         value = string.capwords(value)  # Some normalization
@@ -269,9 +292,12 @@ class Command(BaseCommand):
                             observed_issues_count += 1
                             contract.notes += f"Špatně zadaná spisovna: {value}\n"
 
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Contract {slug} has an invalid filing area: {value}.")
-                            )
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Contract {slug} has an invalid filing area: {value}."
+                                    )
+                                )
 
                             continue
 
@@ -298,10 +324,7 @@ class Command(BaseCommand):
             self.already_imported_count += 1
 
     def import_contract_from_files(
-        self,
-        contract_root: str,
-        files: list[str],
-        valid_start_date: datetime
+        self, contract_root: str, files: list[str], valid_start_date: datetime
     ) -> None:
         contract = Contract(notes="")
 
@@ -311,7 +334,7 @@ class Command(BaseCommand):
                     contract_root,
                     file_,
                 ),
-                "r"
+                "r",
             ) as open_file:
                 if file_ == "index.html":
                     metadata_failed = True
@@ -319,11 +342,12 @@ class Command(BaseCommand):
                     try:
                         metadata = self.parse_index(contract_root, open_file)
                     except ValueError as exc:
-                        if self.verbosity >= 1: self.stderr.write(
-                            self.style.WARNING(
-                                f"Could not parse {contract_root} metadata: {exc}"
+                        if self.verbosity >= 1:
+                            self.stderr.write(
+                                self.style.WARNING(
+                                    f"Could not parse {contract_root} metadata: {exc}"
+                                )
                             )
-                        )
 
                         self.fatal_error_count += 1
 
@@ -377,11 +401,12 @@ class Command(BaseCommand):
                         )
 
                         if not os.path.isdir(this_contract_directory):
-                            if self.verbosity >= 1: self.stderr.write(
-                                self.style.WARNING(
-                                    f"{this_contract_directory} is not a directory and thus invalid, skipping."
+                            if self.verbosity >= 1:
+                                self.stderr.write(
+                                    self.style.WARNING(
+                                        f"{this_contract_directory} is not a directory and thus invalid, skipping."
+                                    )
                                 )
-                            )
 
                             self.fatal_error_count += 1
 
@@ -390,7 +415,7 @@ class Command(BaseCommand):
                         valid_start_date = datetime(
                             year=int(year_directory),
                             month=int(month_directory),
-                            day=int(day_directory)
+                            day=int(day_directory),
                         )
 
                         self.import_contract_from_files(
@@ -399,44 +424,44 @@ class Command(BaseCommand):
                             valid_start_date,
                         )
 
-        if self.verbosity >= 1: self.stdout.write(
-            self.style.SUCCESS(
-                "\n"
-                f"Saved a total of {self.normal_import_count + self.partial_import_count} contracts.\n"
-                f"    {self.partial_import_count} contained a total of {self.issue_count} issues.\n"
-                f"    {self.already_imported_count} were already saved previously and skipped.\n"
-                f"    {self.fatal_error_count} potential contracts were unparseable."
+        if self.verbosity >= 1:
+            self.stdout.write(
+                self.style.SUCCESS(
+                    "\n"
+                    f"Saved a total of {self.normal_import_count + self.partial_import_count} contracts.\n"
+                    f"    {self.partial_import_count} contained a total of {self.issue_count} issues.\n"
+                    f"    {self.already_imported_count} were already saved previously and skipped.\n"
+                    f"    {self.fatal_error_count} potential contracts were unparseable."
+                )
             )
-        )
 
     def handle(self, *args, **options) -> None:
         self.verbosity = options["verbosity"]
 
         git_dir = os.path.join(
             os.getcwd(),
-            (
-                options["directory"]
-                if options["directory"] is not None
-                else "git"
-            )
+            (options["directory"] if options["directory"] is not None else "git"),
         )
 
         if os.path.exists(git_dir):
             if not options["existing"]:
-                if self.verbosity >= 1: self.stderr.write(
-                    self.style.ERROR(
-                        f"Temporary git storage directory ({git_dir}) already exists.\n"
-                        "As it could contain other data, it will not be removed.\n"
-                        "Please remove it manually and try again or use the '--existing' "
-                        "argument."
+                if self.verbosity >= 1:
+                    self.stderr.write(
+                        self.style.ERROR(
+                            f"Temporary git storage directory ({git_dir}) already exists.\n"
+                            "As it could contain other data, it will not be removed.\n"
+                            "Please remove it manually and try again or use the '--existing' "
+                            "argument."
+                        )
                     )
-                )
 
                 return
             else:
-                if self.verbosity >= 2: self.stdout.write("Using existing git storage directory.")
+                if self.verbosity >= 2:
+                    self.stdout.write("Using existing git storage directory.")
         else:
-            if self.verbosity >= 2: self.stdout.write("Cloning repository.")
+            if self.verbosity >= 2:
+                self.stdout.write("Cloning repository.")
 
             Repo.clone_from(
                 options["repo_url"],
@@ -444,20 +469,18 @@ class Command(BaseCommand):
                 branch=options["branch"],
             )
 
-            if self.verbosity >= 1: self.stdout.write(
-                self.style.SUCCESS("Finished cloning repository.")
-            )
+            if self.verbosity >= 1:
+                self.stdout.write(self.style.SUCCESS("Finished cloning repository."))
 
         if options["purge"]:
             Contract.objects.filter().delete()
 
-            if self.verbosity >= 1: self.stdout.write(
-                self.style.SUCCESS("Deleted all previous records.")
-            )
+            if self.verbosity >= 1:
+                self.stdout.write(self.style.SUCCESS("Deleted all previous records."))
 
-        if self.verbosity >= 2: self.stdout.write("\n")
+        if self.verbosity >= 2:
+            self.stdout.write("\n")
         self.import_all_contracts(git_dir)
 
-        if self.verbosity >= 1: self.stdout.write(
-            self.style.SUCCESS("\nGit repository sync complete.")
-        )
+        if self.verbosity >= 1:
+            self.stdout.write(self.style.SUCCESS("\nGit repository sync complete."))
diff --git a/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py b/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py
index a836039..b5a5a0b 100644
--- a/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py
+++ b/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py
@@ -4,25 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0049_alter_contract_options'),
+        ("contracts", "0049_alter_contract_options"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contractfilingarea',
-            name='name',
-            field=models.CharField(max_length=128, verbose_name='Jméno'),
+            model_name="contractfilingarea",
+            name="name",
+            field=models.CharField(max_length=128, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractissue',
-            name='name',
-            field=models.CharField(max_length=128, verbose_name='Jméno'),
+            model_name="contractissue",
+            name="name",
+            field=models.CharField(max_length=128, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contracttype',
-            name='name',
-            field=models.CharField(max_length=128, verbose_name='Jméno'),
+            model_name="contracttype",
+            name="name",
+            field=models.CharField(max_length=128, verbose_name="Jméno"),
         ),
     ]
diff --git a/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py b/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py
index a139cef..ce2753c 100644
--- a/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py
+++ b/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py
@@ -4,65 +4,81 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0050_alter_contractfilingarea_name_and_more'),
+        ("contracts", "0050_alter_contractfilingarea_name_and_more"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contract',
-            name='cost_unit_other',
-            field=models.CharField(blank=True, help_text='Je nutno vyplnit v případě, že máš vybranou možnost "jiné" v jednotce nákladů.', max_length=256, null=True, verbose_name='Jednotka nákladů (jiné)'),
+            model_name="contract",
+            name="cost_unit_other",
+            field=models.CharField(
+                blank=True,
+                help_text='Je nutno vyplnit v případě, že máš vybranou možnost "jiné" v jednotce nákladů.',
+                max_length=256,
+                null=True,
+                verbose_name="Jednotka nákladů (jiné)",
+            ),
         ),
         migrations.AlterField(
-            model_name='contract',
-            name='id_number',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Identifikační číslo'),
+            model_name="contract",
+            name="id_number",
+            field=models.CharField(
+                blank=True,
+                max_length=256,
+                null=True,
+                verbose_name="Identifikační číslo",
+            ),
         ),
         migrations.AlterField(
-            model_name='contract',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Název'),
+            model_name="contract",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Název"),
         ),
         migrations.AlterField(
-            model_name='contractapproval',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractapproval",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractee',
-            name='department',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Organizační složka'),
+            model_name="contractee",
+            name="department",
+            field=models.CharField(
+                blank=True, max_length=256, null=True, verbose_name="Organizační složka"
+            ),
         ),
         migrations.AlterField(
-            model_name='contractfile',
-            name='name',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Jméno'),
+            model_name="contractfile",
+            name="name",
+            field=models.CharField(
+                blank=True, max_length=256, null=True, verbose_name="Jméno"
+            ),
         ),
         migrations.AlterField(
-            model_name='contractfilingarea',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractfilingarea",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractintent',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractintent",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractissue',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractissue",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contracttype',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contracttype",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='signee',
-            name='department',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Organizační složka'),
+            model_name="signee",
+            name="department",
+            field=models.CharField(
+                blank=True, max_length=256, null=True, verbose_name="Organizační složka"
+            ),
         ),
     ]
diff --git a/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py b/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py
index d0bdf00..281c718 100644
--- a/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py
+++ b/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py
@@ -4,19 +4,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0051_alter_contract_cost_unit_other_and_more'),
+        ("contracts", "0051_alter_contract_cost_unit_other_and_more"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='contract',
-            name='legal_state',
+            model_name="contract",
+            name="legal_state",
         ),
         migrations.AddField(
-            model_name='contract',
-            name='is_valid',
-            field=models.BooleanField(default=False, verbose_name='Je právně platná'),
+            model_name="contract",
+            name="is_valid",
+            field=models.BooleanField(default=False, verbose_name="Je právně platná"),
         ),
     ]
diff --git a/contracts/views.py b/contracts/views.py
index 21f3a5c..2600535 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -441,5 +441,5 @@ def handle_404(request, exception):
             "description": "",
             "archive_page_exists": archive_response.ok,
             "archive_url": archive_url,
-        }
+        },
     )
diff --git a/shared/templatetags/admin_extras.py b/shared/templatetags/admin_extras.py
index 3840491..d184e7c 100644
--- a/shared/templatetags/admin_extras.py
+++ b/shared/templatetags/admin_extras.py
@@ -30,7 +30,9 @@ def get_fieldsets_and_inlines(context):
                     (FieldsetInlineOrder.FIELDSET, next(adminform))
                 )
             elif choice == FieldsetInlineOrder.INLINE:
-                fieldsets_and_inlines.append((FieldsetInlineOrder.INLINE, next(inlines)))
+                fieldsets_and_inlines.append(
+                    (FieldsetInlineOrder.INLINE, next(inlines))
+                )
         except StopIteration:
             # Missing permissions, ignore and move on
             continue
-- 
GitLab