Skip to content

Commit c1a0215

Browse files
committed
fixup linting
1 parent 4d9afc4 commit c1a0215

File tree

9 files changed

+58
-75
lines changed

9 files changed

+58
-75
lines changed

dandiapi/api/datacite.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,15 @@
3131
logger = logging.getLogger(__name__)
3232

3333

34-
3534
def block_during_test(fn):
36-
"""
37-
Datacite API should not be called
38-
"""
35+
"""Datacite API should not be called."""
36+
3937
@wraps(fn)
4038
def wrapper(*args, **kwargs):
41-
if "pytest" in sys.modules:
42-
raise RuntimeError(f"DOI calls to {fn.__name__} blocked during test.")
39+
if 'pytest' in sys.modules:
40+
raise RuntimeError(f'DOI calls to {fn.__name__} blocked during test.')
4341
return fn(*args, **kwargs)
42+
4443
return wrapper
4544

4645

@@ -73,13 +72,13 @@ def format_doi(self, dandiset_id: str, version_id: str | None = None) -> str:
7372
Formatted DOI string.
7473
"""
7574
if version_id:
76-
# TODO(asmaco) replace "dandi" with non-hardcoded ID_PATTERN
75+
# TODO(asmaco): replace "dandi" with non-hardcoded ID_PATTERN
7776
# https://github.com/dandi/dandi-schema/pull/294/files#diff-43c9cc813638d87fd33e527a7baccb2fd7dff85595a7e686bfaf61f0409bd403R47
7877
return f'{self.api_prefix}/dandi.{dandiset_id}/{version_id}'
7978
return f'{self.api_prefix}/dandi.{dandiset_id}'
8079

8180
def generate_doi_data(
82-
self, version: Version, version_doi: bool = True, event: str | None = None
81+
self, version: Version, *, version_doi: bool = True, event: str | None = None
8382
) -> tuple[str, dict]:
8483
"""
8584
Generate DOI data for a version or dandiset.
@@ -95,8 +94,9 @@ def generate_doi_data(
9594
Returns:
9695
Tuple of (doi_string, datacite_payload)
9796
"""
98-
# TODO(asmacdo) if not datacite configured make sure we dont save any dois to model
97+
# TODO(asmacdo): if not datacite configured make sure we dont save any dois to model
9998
from dandischema.datacite import to_datacite
99+
100100
dandiset_id = version.dandiset.identifier
101101
version_id = version.version
102102
metadata = copy.deepcopy(version.metadata)
@@ -158,7 +158,7 @@ def create_or_update_doi(self, original_datacite_payload: dict) -> str | None:
158158
)
159159
response.raise_for_status()
160160
# Return early on success
161-
return doi
161+
return doi # noqa: TRY300
162162
except requests.exceptions.HTTPError as e:
163163
# HTTP 422 status code means DOI already exists
164164
already_exists_code = 422
@@ -174,8 +174,7 @@ def create_or_update_doi(self, original_datacite_payload: dict) -> str | None:
174174
timeout=self.timeout,
175175
)
176176
update_response.raise_for_status()
177-
# Success with update
178-
return doi
177+
return doi # noqa: TRY300
179178
except Exception:
180179
error_details = f'Failed to update existing DOI {doi}'
181180
if e.response and hasattr(e.response, 'text'):
@@ -259,5 +258,3 @@ def delete_or_hide_doi(self, doi: str) -> None:
259258
return
260259
logger.exception('Failed to delete or hide DOI %s', doi)
261260
raise
262-
263-

dandiapi/api/doi.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import logging
1111
from typing import TYPE_CHECKING
1212

13-
from django.conf import settings
14-
1513
from dandiapi.api.datacite import DataCiteClient
1614

1715
if TYPE_CHECKING:
@@ -111,7 +109,7 @@ def _handle_publication_dois(version_id: int) -> None:
111109
draft_version = version.dandiset.draft_version
112110

113111
# Check if this is the first publication (no prior DOI in draft version)
114-
# TODO(asmacdo) not true anymore, we need to check the db.
112+
# TODO(asmacdo): not true anymore, we need to check the db.
115113
# if draft_version.dandiset.versions.exclude(version='draft').exists():
116114
is_first_publication = draft_version.doi is None
117115

@@ -137,7 +135,7 @@ def _handle_publication_dois(version_id: int) -> None:
137135
)
138136

139137
# Create or update the DOIs
140-
# TODO(asmacdo) we need to try:except here, so dandiset doi doesnt block version doi
138+
# TODO(asmacdo): we need to try:except here, so dandiset doi doesn't block version doi
141139
datacite_client.create_or_update_doi(dandiset_doi_payload)
142140
datacite_client.create_or_update_doi(version_doi_payload)
143141

dandiapi/api/services/dandiset/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from __future__ import annotations
22

3-
import logging
4-
53
from django.db import transaction
64

75
from dandiapi.api import doi
@@ -19,8 +17,6 @@
1917
from dandiapi.api.services.version.metadata import _normalize_version_metadata
2018
from dandiapi.api.tasks import create_dandiset_draft_doi_task
2119

22-
logger = logging.getLogger(__name__)
23-
2420

2521
def create_dandiset(
2622
*,

dandiapi/api/services/publish/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from django.db import transaction
99
from more_itertools import ichunked
1010

11-
from dandiapi.api import doi
1211
from dandiapi.api.asset_paths import add_version_asset_paths
1312
from dandiapi.api.models import Asset, Dandiset, Version
1413
from dandiapi.api.services import audit

dandiapi/api/tests/test_dandiset.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,9 @@ def test_dandiset_rest_create_with_invalid_identifier(api_client, admin_user):
756756
(Dandiset.EmbargoStatus.UNEMBARGOING, False, '10.48324/dandi.000123'),
757757
],
758758
)
759-
def test_dandiset_rest_delete(api_client, draft_version_factory, user, embargo_status, success, doi, mocker):
759+
def test_dandiset_rest_delete(
760+
api_client, draft_version_factory, user, embargo_status, success, doi, mocker
761+
):
760762
api_client.force_authenticate(user=user)
761763

762764
mock_delete_doi = mocker.patch('dandiapi.api.doi.delete_or_hide_doi')

dandiapi/api/tests/test_datacite.py

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
from __future__ import annotations
22

3-
import pytest
4-
import requests
53
from django.conf import settings
4+
import pytest
65
from requests.exceptions import HTTPError
76

8-
from dandiapi.api.datacite import DataCiteClient, DANDI_DOI_SETTINGS
7+
from dandiapi.api.datacite import DataCiteClient
8+
99

10-
# Mock individual HTTP methods for safety
1110
@pytest.fixture(autouse=True)
1211
def mock_requests(mocker):
1312
"""Mock individual request methods for all tests to prevent actual HTTP calls."""
@@ -31,9 +30,7 @@ def datacite_client():
3130

3231
@pytest.fixture
3332
def datacite_client_unsafe():
34-
"""
35-
Bypass safety feature that prevents API calls to datacite during tests.
36-
"""
33+
"""Bypass safety feature that prevents API calls to datacite during tests."""
3734
client = DataCiteClient()
3835
if hasattr(client.create_or_update_doi, '__wrapped__'):
3936
client.create_or_update_doi = client.create_or_update_doi.__wrapped__.__get__(client)
@@ -96,7 +93,9 @@ def test_generate_doi_data(datacite_client, published_version, mocker):
9693
assert doi_string == expected_doi
9794
assert 'doi' in published_version.metadata
9895
# Make sure metadata is copied, not modified
99-
assert id(published_version.metadata) != id(datacite_client.generate_doi_data(published_version)[1])
96+
assert id(published_version.metadata) != id(
97+
datacite_client.generate_doi_data(published_version)[1]
98+
)
10099

101100
# Test Dandiset DOI
102101
doi_string, payload = datacite_client.generate_doi_data(published_version, version_doi=False)
@@ -123,10 +122,12 @@ def test_create_or_update_doi_not_configured(datacite_client_unsafe, mock_reques
123122
mock_logger.warning.assert_called_once()
124123

125124

126-
def test_create_or_update_doi_publish_disabled_event_publish(datacite_client_unsafe, mock_requests, mocker):
125+
def test_create_or_update_doi_publish_disabled_event_publish(
126+
datacite_client_unsafe, mock_requests, mocker
127+
):
127128
"""Test create_or_update_doi when DANDI_DOI_PUBLISH is False."""
128129
mocker.patch.object(datacite_client_unsafe, 'is_configured', return_value=True)
129-
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', False)
130+
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', new=False)
130131
mock_logger = mocker.patch('dandiapi.api.datacite.logger')
131132

132133
# Configure mock response
@@ -165,7 +166,7 @@ def test_create_or_update_doi_publish_disabled_event_publish(datacite_client_uns
165166
def test_create_or_update_doi_new_doi(datacite_client_unsafe, mock_requests, mocker):
166167
"""Test creating a new DOI successfully."""
167168
mocker.patch.object(datacite_client_unsafe, 'is_configured', return_value=True)
168-
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', True)
169+
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', new=True)
169170

170171
# Configure mock response
171172
mock_response = mocker.Mock()
@@ -191,11 +192,11 @@ def test_create_or_update_doi_new_doi(datacite_client_unsafe, mock_requests, moc
191192
def test_create_or_update_doi_existing_doi(datacite_client_unsafe, mock_requests, mocker):
192193
"""Test updating an existing DOI."""
193194
mocker.patch.object(datacite_client_unsafe, 'is_configured', return_value=True)
194-
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', True)
195+
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', new=True)
195196

196197
# Mock POST to fail with 422 (already exists)
197198
mock_post_response = mocker.Mock()
198-
http_error = HTTPError("DOI already exists")
199+
http_error = HTTPError('DOI already exists')
199200
http_error.response = mocker.Mock()
200201
http_error.response.status_code = 422
201202
mock_post_response.raise_for_status.side_effect = http_error
@@ -225,10 +226,10 @@ def test_create_or_update_doi_post_error(datacite_client_unsafe, mock_requests,
225226
mock_logger = mocker.patch('dandiapi.api.datacite.logger')
226227

227228
# Mock POST to fail with 400
228-
http_error = HTTPError("Bad request")
229+
http_error = HTTPError('Bad request')
229230
http_error.response = mocker.Mock()
230231
http_error.response.status_code = 400
231-
http_error.response.text = "Bad request"
232+
http_error.response.text = 'Bad request'
232233
mock_requests.post.side_effect = http_error
233234

234235
payload = {'data': {'attributes': {'doi': '10.12345/test'}}}
@@ -250,16 +251,16 @@ def test_create_or_update_doi_put_error(datacite_client_unsafe, mock_requests, m
250251

251252
# Mock POST to fail with 422 (already exists)
252253
mock_post_response = mocker.Mock()
253-
http_error = HTTPError("DOI already exists")
254+
http_error = HTTPError('DOI already exists')
254255
http_error.response = mocker.Mock()
255256
http_error.response.status_code = 422
256257
mock_post_response.raise_for_status.side_effect = http_error
257258
mock_requests.post.return_value = mock_post_response
258259

259260
# Mock PUT to fail
260-
put_error = HTTPError("Update failed")
261+
put_error = HTTPError('Update failed')
261262
put_error.response = mocker.Mock()
262-
put_error.response.text = "Update failed"
263+
put_error.response.text = 'Update failed'
263264
mock_requests.put.side_effect = put_error
264265

265266
payload = {'data': {'attributes': {'doi': '10.12345/test'}}}
@@ -298,9 +299,7 @@ def test_delete_or_hide_doi_draft(datacite_client_unsafe, mock_requests, mocker)
298299

299300
# Mock GET to return a draft DOI
300301
mock_get_response = mocker.Mock()
301-
mock_get_response.json.return_value = {
302-
'data': {'attributes': {'state': 'draft'}}
303-
}
302+
mock_get_response.json.return_value = {'data': {'attributes': {'state': 'draft'}}}
304303
mock_get_response.raise_for_status = mocker.Mock()
305304
mock_requests.get.return_value = mock_get_response
306305

@@ -324,14 +323,12 @@ def test_delete_or_hide_doi_draft(datacite_client_unsafe, mock_requests, mocker)
324323
def test_delete_or_hide_doi_findable_publish_enabled(datacite_client_unsafe, mock_requests, mocker):
325324
"""Test hiding a findable DOI when DANDI_DOI_PUBLISH is True."""
326325
mocker.patch.object(datacite_client_unsafe, 'is_configured', return_value=True)
327-
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', True)
326+
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', new=True)
328327
mock_logger = mocker.patch('dandiapi.api.datacite.logger')
329328

330329
# Mock GET to return a findable DOI
331330
mock_get_response = mocker.Mock()
332-
mock_get_response.json.return_value = {
333-
'data': {'attributes': {'state': 'findable'}}
334-
}
331+
mock_get_response.json.return_value = {'data': {'attributes': {'state': 'findable'}}}
335332
mock_get_response.raise_for_status = mocker.Mock()
336333
mock_requests.get.return_value = mock_get_response
337334

@@ -354,17 +351,17 @@ def test_delete_or_hide_doi_findable_publish_enabled(datacite_client_unsafe, moc
354351
mock_logger.info.assert_called_once()
355352

356353

357-
def test_delete_or_hide_doi_findable_publish_disabled(datacite_client_unsafe, mock_requests, mocker):
354+
def test_delete_or_hide_doi_findable_publish_disabled(
355+
datacite_client_unsafe, mock_requests, mocker
356+
):
358357
"""Test not hiding a findable DOI when DANDI_DOI_PUBLISH is False."""
359358
mocker.patch.object(datacite_client_unsafe, 'is_configured', return_value=True)
360-
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', False)
359+
mocker.patch.object(settings, 'DANDI_DOI_PUBLISH', new=False)
361360
mock_logger = mocker.patch('dandiapi.api.datacite.logger')
362361

363362
# Mock GET to return a findable DOI
364363
mock_get_response = mocker.Mock()
365-
mock_get_response.json.return_value = {
366-
'data': {'attributes': {'state': 'findable'}}
367-
}
364+
mock_get_response.json.return_value = {'data': {'attributes': {'state': 'findable'}}}
368365
mock_get_response.raise_for_status = mocker.Mock()
369366
mock_requests.get.return_value = mock_get_response
370367

@@ -384,7 +381,7 @@ def test_delete_or_hide_doi_nonexistent(datacite_client_unsafe, mock_requests, m
384381
mock_logger = mocker.patch('dandiapi.api.datacite.logger')
385382

386383
# Mock GET to fail with 404
387-
get_error = HTTPError("Not found")
384+
get_error = HTTPError('Not found')
388385
get_error.response = mocker.Mock()
389386
get_error.response.status_code = 404
390387
mock_requests.get.side_effect = get_error
@@ -405,7 +402,7 @@ def test_delete_or_hide_doi_get_error(datacite_client_unsafe, mock_requests, moc
405402
mock_logger = mocker.patch('dandiapi.api.datacite.logger')
406403

407404
# Mock GET to fail with 500
408-
get_error = HTTPError("Server error")
405+
get_error = HTTPError('Server error')
409406
get_error.response = mocker.Mock()
410407
get_error.response.status_code = 500
411408
mock_requests.get.side_effect = get_error

dandiapi/api/tests/test_doi.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def test__create_dandiset_draft_doi(draft_version, mocker):
2222
mock_generate_doi.assert_called_once_with(
2323
draft_version,
2424
version_doi=False,
25-
event=None # Draft DOI
25+
event=None, # Draft DOI
2626
)
2727
mock_create_doi.assert_called_once_with({'data': {'attributes': {}}})
2828

@@ -43,11 +43,7 @@ def test_update_draft_version_doi_no_previous_doi(draft_version, mocker):
4343
_update_draft_version_doi(draft_version)
4444

4545
# Verify the mocks were called correctly
46-
mock_generate_doi.assert_called_once_with(
47-
draft_version,
48-
version_doi=False,
49-
event=None
50-
)
46+
mock_generate_doi.assert_called_once_with(draft_version, version_doi=False, event=None)
5147
mock_create_doi.assert_called_once_with({'data': {'attributes': {}}})
5248

5349
# Verify the DOI was stored in the draft version
@@ -71,11 +67,7 @@ def test_update_draft_version_doi_existing_doi(draft_version, mocker):
7167
_update_draft_version_doi(draft_version)
7268

7369
# Verify the mocks were called correctly
74-
mock_generate_doi.assert_called_once_with(
75-
draft_version,
76-
version_doi=False,
77-
event=None
78-
)
70+
mock_generate_doi.assert_called_once_with(draft_version, version_doi=False, event=None)
7971
mock_create_doi.assert_called_once_with({'data': {'attributes': {}}})
8072

8173
# Verify the DOI is still the same
@@ -93,4 +85,4 @@ def test_update_draft_version_doi_published_version(draft_version, published_ver
9385

9486
# Verify no DOI operations were performed
9587
mock_generate_doi.assert_not_called()
96-
mock_create_doi.assert_not_called()
88+
mock_create_doi.assert_not_called()

dandiapi/api/tests/test_version.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -636,9 +636,7 @@ def test_version_rest_update(api_client, user, draft_version):
636636

637637
@pytest.mark.django_db
638638
def test_version_rest_update_embargoed(api_client, user, draft_version_factory):
639-
draft_version = draft_version_factory(
640-
dandiset__embargo_status=Dandiset.EmbargoStatus.EMBARGOED
641-
)
639+
draft_version = draft_version_factory(dandiset__embargo_status=Dandiset.EmbargoStatus.EMBARGOED)
642640
add_dandiset_owner(draft_version.dandiset, user)
643641
api_client.force_authenticate(user=user)
644642

0 commit comments

Comments
 (0)