From fd1e0c08012e29ca4706d26014c447655e3b6a77 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Wed, 29 Nov 2023 19:13:37 -0500 Subject: [PATCH] Fix FBT001 Boolean-typed positional argument in function definition This explicitly expects Django signals and Click options to be called with keyword arguments. --- dandiapi/api/asset_paths.py | 2 +- dandiapi/api/management/commands/cleanup_blobs.py | 2 +- dandiapi/api/management/commands/collect_garbage.py | 2 +- dandiapi/api/management/commands/create_dev_dandiset.py | 2 +- dandiapi/api/management/commands/depose_placeholder.py | 2 +- .../commands/migrate_published_version_metadata.py | 2 +- .../api/management/commands/migrate_version_metadata.py | 2 +- dandiapi/api/management/commands/revalidate.py | 2 +- dandiapi/api/services/version/metadata.py | 2 +- dandiapi/api/signals.py | 6 +++--- dandiapi/api/user_migration.py | 2 +- dandiapi/zarr/management/commands/ingest_dandiset_zarrs.py | 2 +- dandiapi/zarr/management/commands/rename_ngff.py | 2 +- dandiapi/zarr/tasks/__init__.py | 2 +- scripts/delete_from_versioned_bucket.py | 2 +- scripts/papertrail.py | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dandiapi/api/asset_paths.py b/dandiapi/api/asset_paths.py index 5ac209bd6..bfbe092cd 100644 --- a/dandiapi/api/asset_paths.py +++ b/dandiapi/api/asset_paths.py @@ -30,7 +30,7 @@ def extract_paths(path: str) -> list[str]: return nodepaths -def get_root_paths_many(versions: QuerySet[Version], join_assets=False) -> QuerySet[AssetPath]: +def get_root_paths_many(versions: QuerySet[Version], *, join_assets=False) -> QuerySet[AssetPath]: """Return all root paths for all provided versions.""" qs = AssetPath.objects.get_queryset() diff --git a/dandiapi/api/management/commands/cleanup_blobs.py b/dandiapi/api/management/commands/cleanup_blobs.py index aecff99ca..bec0976f7 100644 --- a/dandiapi/api/management/commands/cleanup_blobs.py +++ b/dandiapi/api/management/commands/cleanup_blobs.py @@ -14,7 +14,7 @@ def s3_client(): @click.command() @click.option('--delete', is_flag=True, default=False) -def cleanup_blobs(delete: bool): +def cleanup_blobs(*, delete: bool): client = s3_client() # Ignore pagination for now, hopefully there aren't enough objects to matter objs = client.list_object_versions(Bucket=BUCKET, Prefix='dev/') diff --git a/dandiapi/api/management/commands/collect_garbage.py b/dandiapi/api/management/commands/collect_garbage.py index a03a51fb8..a2878363f 100644 --- a/dandiapi/api/management/commands/collect_garbage.py +++ b/dandiapi/api/management/commands/collect_garbage.py @@ -15,7 +15,7 @@ def echo_report(): @click.option('--assetblobs', is_flag=True, default=False, help='Delete AssetBlobs') @click.option('--uploads', is_flag=True, default=False, help='Delete Uploads') @click.option('--s3blobs', is_flag=True, default=False, help='Delete S3 Blobs') -def collect_garbage(assets: bool, assetblobs: bool, uploads: bool, s3blobs: bool): +def collect_garbage(*, assets: bool, assetblobs: bool, uploads: bool, s3blobs: bool): """Manually run garbage collection on the database.""" # Log how many things there are before deleting them doing_deletes = assets or assetblobs or uploads or s3blobs diff --git a/dandiapi/api/management/commands/create_dev_dandiset.py b/dandiapi/api/management/commands/create_dev_dandiset.py index 54f6e6d61..a07bfdc40 100644 --- a/dandiapi/api/management/commands/create_dev_dandiset.py +++ b/dandiapi/api/management/commands/create_dev_dandiset.py @@ -15,7 +15,7 @@ @click.command() @click.option('--name', default='Development Dandiset') @click.option('--owner', 'email', required=True, help='The email address of the owner') -def create_dev_dandiset(name: str, email: str): +def create_dev_dandiset(*, name: str, email: str): owner = User.objects.get(email=email) version_metadata = { diff --git a/dandiapi/api/management/commands/depose_placeholder.py b/dandiapi/api/management/commands/depose_placeholder.py index 69278d15b..8b1c9501a 100644 --- a/dandiapi/api/management/commands/depose_placeholder.py +++ b/dandiapi/api/management/commands/depose_placeholder.py @@ -7,7 +7,7 @@ @click.command() @click.argument('placeholder_email') @click.argument('github_email') -def depose_placeholder(placeholder_email: str, github_email: str): +def depose_placeholder(*, placeholder_email: str, github_email: str): placeholder_user = User.objects.get(email=placeholder_email) github_user = User.objects.get(email=github_email) diff --git a/dandiapi/api/management/commands/migrate_published_version_metadata.py b/dandiapi/api/management/commands/migrate_published_version_metadata.py index 010f8141e..6b331f951 100644 --- a/dandiapi/api/management/commands/migrate_published_version_metadata.py +++ b/dandiapi/api/management/commands/migrate_published_version_metadata.py @@ -12,7 +12,7 @@ @click.argument('dandiset') @click.argument('published_version') @click.argument('to_version') -def migrate_published_version_metadata(dandiset: str, published_version: str, to_version: str): +def migrate_published_version_metadata(*, dandiset: str, published_version: str, to_version: str): click.echo( f'Migrating published version {dandiset}/{published_version} metadata to version {to_version}' # noqa: E501 ) diff --git a/dandiapi/api/management/commands/migrate_version_metadata.py b/dandiapi/api/management/commands/migrate_version_metadata.py index 45cc2e99d..89f91ce15 100644 --- a/dandiapi/api/management/commands/migrate_version_metadata.py +++ b/dandiapi/api/management/commands/migrate_version_metadata.py @@ -6,7 +6,7 @@ @click.command() @click.argument('to_version') -def migrate_version_metadata(to_version: str): +def migrate_version_metadata(*, to_version: str): click.echo(f'Migrating all version metadata to version {to_version}') for version in Version.objects.filter(version='draft'): click.echo(f'Migrating {version.dandiset.identifier}/{version.version}') diff --git a/dandiapi/api/management/commands/revalidate.py b/dandiapi/api/management/commands/revalidate.py index 13b139f42..3c9008bb7 100644 --- a/dandiapi/api/management/commands/revalidate.py +++ b/dandiapi/api/management/commands/revalidate.py @@ -9,7 +9,7 @@ @click.option('--versions', is_flag=True, default=False) @click.option('--revalidate-all', is_flag=True, default=False) @click.option('--dry-run', is_flag=True, default=False) -def revalidate(assets: bool, versions: bool, revalidate_all: bool, dry_run: bool): +def revalidate(*, assets: bool, versions: bool, revalidate_all: bool, dry_run: bool): """ Revalidate all Versions and Assets. diff --git a/dandiapi/api/services/version/metadata.py b/dandiapi/api/services/version/metadata.py index 7007a9255..8e91b1186 100644 --- a/dandiapi/api/services/version/metadata.py +++ b/dandiapi/api/services/version/metadata.py @@ -5,7 +5,7 @@ def _normalize_version_metadata( - raw_version_metadata: dict, embargo: bool, name: str, email: str + raw_version_metadata: dict, embargo: bool, name: str, email: str # noqa: FBT001 ) -> dict: """ Take raw version metadata and convert it into something suitable to be used in a formal Version. diff --git a/dandiapi/api/signals.py b/dandiapi/api/signals.py index 54e00e8ed..1eed71f00 100644 --- a/dandiapi/api/signals.py +++ b/dandiapi/api/signals.py @@ -9,20 +9,20 @@ @receiver(check_request_enabled, dispatch_uid='cors_allow_anyone_read_only') -def cors_allow_anyone_read_only(sender, request, **kwargs): +def cors_allow_anyone_read_only(*, sender, request, **kwargs): """Allow any read-only request from any origin.""" return request.method in ('GET', 'HEAD', 'OPTIONS') @receiver(post_save, sender=settings.AUTH_USER_MODEL, dispatch_uid='create_auth_token') -def create_auth_token(sender, instance=None, created=False, **kwargs): +def create_auth_token(*, sender, instance=None, created=False, **kwargs): """Create an auth token for every new user.""" if created: Token.objects.create(user=instance) @receiver(user_signed_up) -def user_signed_up_listener(sender, user, **kwargs): +def user_signed_up_listener(*, sender, user, **kwargs): """Create UserMetadata whenever a user signs up.""" if settings.AUTO_APPROVE_USERS: status = UserMetadata.Status.APPROVED diff --git a/dandiapi/api/user_migration.py b/dandiapi/api/user_migration.py index 90381ab8c..628039a92 100644 --- a/dandiapi/api/user_migration.py +++ b/dandiapi/api/user_migration.py @@ -39,6 +39,6 @@ def depose_placeholder(user): @receiver(user_logged_in) -def user_log_in_listener(sender, user, **kwargs): +def user_log_in_listener(*, sender, user, **kwargs): """Attempt replace a placeholder user every time a real user logs in.""" depose_placeholder(user) diff --git a/dandiapi/zarr/management/commands/ingest_dandiset_zarrs.py b/dandiapi/zarr/management/commands/ingest_dandiset_zarrs.py index 9acb8a74a..92f6adecb 100644 --- a/dandiapi/zarr/management/commands/ingest_dandiset_zarrs.py +++ b/dandiapi/zarr/management/commands/ingest_dandiset_zarrs.py @@ -6,5 +6,5 @@ @click.command() @click.argument('dandiset_id', type=str) @click.option('-f', '--force', help='Force re-ingestion', is_flag=True) -def ingest_dandiset_zarrs(dandiset_id: str, **kwargs): +def ingest_dandiset_zarrs(*, dandiset_id: str, **kwargs): _ingest_dandiset_zarrs(dandiset_id=int(dandiset_id.lstrip('0')), **kwargs) diff --git a/dandiapi/zarr/management/commands/rename_ngff.py b/dandiapi/zarr/management/commands/rename_ngff.py index 4b23b1a5f..db78fccfc 100644 --- a/dandiapi/zarr/management/commands/rename_ngff.py +++ b/dandiapi/zarr/management/commands/rename_ngff.py @@ -8,7 +8,7 @@ @click.command() @click.argument('dandiset_id', type=int, required=False) -def rename_ngff(dandiset_id: int | None): +def rename_ngff(*, dandiset_id: int | None): """ Change extension of all .ngff ZarrArchives (plus their associated Asset paths) to .ome.zarr. diff --git a/dandiapi/zarr/tasks/__init__.py b/dandiapi/zarr/tasks/__init__.py index ccc1ece46..8cc999d3b 100644 --- a/dandiapi/zarr/tasks/__init__.py +++ b/dandiapi/zarr/tasks/__init__.py @@ -14,7 +14,7 @@ @shared_task(queue='ingest_zarr_archive', time_limit=3600) -def ingest_zarr_archive(zarr_id: str, force: bool = False): +def ingest_zarr_archive(zarr_id: str, *, force: bool = False): # Ensure zarr is in pending state before proceeding with transaction.atomic(): zarr: ZarrArchive = ZarrArchive.objects.select_for_update().get(zarr_id=zarr_id) diff --git a/scripts/delete_from_versioned_bucket.py b/scripts/delete_from_versioned_bucket.py index 65dd6e7be..4266d1f14 100644 --- a/scripts/delete_from_versioned_bucket.py +++ b/scripts/delete_from_versioned_bucket.py @@ -35,7 +35,7 @@ def delete_version(bucket, thing): @click.option('--prefix', prompt='Path to delete', help='The prefix to delete all files under') @click.option('--force', is_flag=True, help='Skip confirmation prompts') @click.option('--threads', prompt='Threads', default=30, help='How many threads to use') -def delete_objects(profile: str, bucket: str, prefix: str, force: bool, threads: int): +def delete_objects(*, profile: str, bucket: str, prefix: str, force: bool, threads: int): session = boto3.Session(profile_name=profile) s3 = session.resource('s3') bucket = s3.Bucket(bucket) diff --git a/scripts/papertrail.py b/scripts/papertrail.py index be77919c1..72f4c2570 100755 --- a/scripts/papertrail.py +++ b/scripts/papertrail.py @@ -31,7 +31,7 @@ @click.option( '-o', '--out', 'output_file', help='The output file', default='logs.tsv.gz', show_default=True ) -def cli(start, end, force, amend, output_file): +def cli(*, start, end, force, amend, output_file): if PAPERTRAIL_TOKEN is None: raise ClickException( 'Must set the PAPERTRAIL_APIKEY environment variable. '