Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Ruff for Python static analysis and formatting #1784

Merged
merged 25 commits into from
Jan 22, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d1f9fff
Use Ruff for Python static analysis and formatting
brianhelba Nov 3, 2023
7b6d475
Fix I002 Missing required import
brianhelba Jan 3, 2024
ca96bf1
Fix I001 Import block is un-sorted or un-formatted
brianhelba Nov 3, 2023
56cb741
Fix TCH001 Move application import into a type-checking block
brianhelba Jan 3, 2024
f7302f5
Fix TCH002 Move third-party import into a type-checking block
brianhelba Nov 3, 2023
8385608
Fix TCH003 Move standard library import into a type-checking block
brianhelba Nov 6, 2023
08414c1
Fix UP035 Import from `collections.abc` instead
brianhelba Nov 29, 2023
a077734
Fix UP037 Remove quotes from type annotation
brianhelba Jan 3, 2024
665c364
Ignore BLE001 Do not catch blind exception
brianhelba Nov 7, 2023
1e86e6b
Ignore SLF001 Private member accessed
brianhelba Nov 7, 2023
fc7af42
Ignore DJ001 Disallow null CharField
brianhelba Dec 15, 2023
5d3cd61
Ignore N806 Variable in function should be lowercase
brianhelba Nov 30, 2023
876b587
Ignore PLW0127 Self-assignment of variable
brianhelba Nov 30, 2023
ee3e6c1
Ignore ARG004 Unused static method argument
brianhelba Dec 1, 2023
5b5d637
Ignore C901 function is too complex
brianhelba Dec 1, 2023
9ea1dca
Ignore PLR0913 Too many arguments in function definition
brianhelba Dec 1, 2023
78dd350
Ignore PLR2004 Magic value used in comparison
brianhelba Dec 8, 2023
ddda096
Ignore S608 Possible SQL injection vector through string-based query …
brianhelba Dec 8, 2023
3a4eac4
Apply "ruff format"
brianhelba Dec 14, 2023
08a5ded
Fix RUF100 Unused `noqa` directive
brianhelba Nov 29, 2023
c9392ec
Manually fix line lengths
brianhelba Dec 14, 2023
7122589
Ignore PTH119 use `pathlib` instead of `os.path`
mvandenburgh Jan 22, 2024
eeeddfe
Fix N818 Exception name should be named with an Error suffix
mvandenburgh Jan 22, 2024
098a054
Fix RSE102 Unnecessary parentheses on raised exception
mvandenburgh Jan 22, 2024
4da4109
Fix DJ008 Model does not define `__str__` method
mvandenburgh Jan 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Manually fix line lengths
  • Loading branch information
brianhelba authored and mvandenburgh committed Jan 22, 2024
commit c9392ecbb3c65ebda82f039edceaea386c2b50b3
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
@click.argument('to_version')
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}'
f'Migrating published version {dandiset}/{published_version} '
f'metadata to version {to_version}'
)
version = Version.objects.exclude(version='draft').get(
dandiset=dandiset, version=published_version
Expand Down
5 changes: 4 additions & 1 deletion dandiapi/api/models/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,10 @@ def _populate_metadata(self):
'version': self.version,
'id': f'DANDI:{self.dandiset.identifier}/{self.version}',
'repository': settings.DANDI_WEB_APP_URL,
'url': f'{settings.DANDI_WEB_APP_URL}/dandiset/{self.dandiset.identifier}/{self.version}',
'url': (
f'{settings.DANDI_WEB_APP_URL}/dandiset/'
f'{self.dandiset.identifier}/{self.version}'
),
'dateCreated': self.dandiset.created.isoformat(),
}

Expand Down
7 changes: 4 additions & 3 deletions dandiapi/api/services/metadata/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,10 @@ def _build_validatable_version_metadata(version: Version) -> dict:
metadata_for_validation[
'id'
] = f'DANDI:{publishable_version.dandiset.identifier}/{publishable_version.version}'
metadata_for_validation[
'url'
] = f'{settings.DANDI_WEB_APP_URL}/dandiset/{publishable_version.dandiset.identifier}/{publishable_version.version}'
metadata_for_validation['url'] = (
f'{settings.DANDI_WEB_APP_URL}/dandiset/'
f'{publishable_version.dandiset.identifier}/{publishable_version.version}'
)
metadata_for_validation['doi'] = '10.80507/dandi.123456/0.123456.1234'
metadata_for_validation['assetsSummary'] = {
'schemaKey': 'AssetsSummary',
Expand Down
298 changes: 143 additions & 155 deletions dandiapi/api/tests/test_dandiset.py
Original file line number Diff line number Diff line change
Expand Up @@ -374,45 +374,42 @@ def test_dandiset_rest_create(api_client, user):
# Verify that computed metadata was injected
year = datetime.datetime.now(datetime.UTC).year
url = f'{settings.DANDI_WEB_APP_URL}/dandiset/{dandiset.identifier}/draft'
assert (
dandiset.draft_version.metadata
== {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': DANDISET_SCHEMA_ID_RE,
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'{user.last_name}, {user.first_name} ({year}) {name} '
f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:OpenAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Doe, John',
'email': user.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}
)
assert dandiset.draft_version.metadata == {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': DANDISET_SCHEMA_ID_RE,
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'{user.last_name}, {user.first_name} ({year}) {name} '
f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:OpenAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Doe, John',
'email': user.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}


@pytest.mark.django_db()
Expand Down Expand Up @@ -470,45 +467,42 @@ def test_dandiset_rest_create_with_identifier(api_client, admin_user):
# Verify that computed metadata was injected
year = datetime.datetime.now(datetime.UTC).year
url = f'{settings.DANDI_WEB_APP_URL}/dandiset/{dandiset.identifier}/draft'
assert (
dandiset.draft_version.metadata
== {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': f'DANDI:{identifier}',
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'{admin_user.last_name}, {admin_user.first_name} ({year}) {name} '
f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:OpenAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Doe, John',
'email': admin_user.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}
)
assert dandiset.draft_version.metadata == {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': f'DANDI:{identifier}',
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'{admin_user.last_name}, {admin_user.first_name} ({year}) {name} '
f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:OpenAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Doe, John',
'email': admin_user.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}


@pytest.mark.django_db()
Expand Down Expand Up @@ -580,44 +574,41 @@ def test_dandiset_rest_create_with_contributor(api_client, admin_user):
# Verify that computed metadata was injected
year = datetime.datetime.now(datetime.UTC).year
url = f'{settings.DANDI_WEB_APP_URL}/dandiset/{dandiset.identifier}/draft'
assert (
dandiset.draft_version.metadata
== {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': f'DANDI:{identifier}',
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'Jane Doe ({year}) {name} ' f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:OpenAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Jane Doe',
'email': 'jane.doe@kitware.com',
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}
)
assert dandiset.draft_version.metadata == {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': f'DANDI:{identifier}',
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'Jane Doe ({year}) {name} ' f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:OpenAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Jane Doe',
'email': 'jane.doe@kitware.com',
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}


@pytest.mark.django_db()
Expand Down Expand Up @@ -673,45 +664,42 @@ def test_dandiset_rest_create_embargoed(api_client, user):
# Verify that computed metadata was injected
year = datetime.datetime.now(datetime.UTC).year
url = f'{settings.DANDI_WEB_APP_URL}/dandiset/{dandiset.identifier}/draft'
assert (
dandiset.draft_version.metadata
== {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': DANDISET_SCHEMA_ID_RE,
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'{user.last_name}, {user.first_name} ({year}) {name} '
f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:EmbargoedAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Doe, John',
'email': user.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}
)
assert dandiset.draft_version.metadata == {
**metadata,
'manifestLocation': [
f'{settings.DANDI_API_URL}/api/dandisets/{dandiset.identifier}/versions/draft/assets/'
],
'name': name,
'identifier': DANDISET_SCHEMA_ID_RE,
'id': f'DANDI:{dandiset.identifier}/draft',
'version': 'draft',
'url': url,
'dateCreated': UTC_ISO_TIMESTAMP_RE,
'citation': (
f'{user.last_name}, {user.first_name} ({year}) {name} '
f'(Version draft) [Data set]. DANDI archive. {url}'
),
'@context': f'https://raw.githubusercontent.com/dandi/schema/master/releases/{settings.DANDI_SCHEMA_VERSION}/context.json',
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'schemaKey': 'Dandiset',
'access': [{'schemaKey': 'AccessRequirements', 'status': 'dandi:EmbargoedAccess'}],
'repository': settings.DANDI_WEB_APP_URL,
'contributor': [
{
'name': 'Doe, John',
'email': user.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
}
],
'assetsSummary': {
'schemaKey': 'AssetsSummary',
'numberOfBytes': 0,
'numberOfFiles': 0,
},
}


@pytest.mark.django_db()
Expand Down
Loading
Loading