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