Skip to content

Commit ece3022

Browse files
authored
Format with ruff (#147)
1 parent 53d59a2 commit ece3022

File tree

9 files changed

+23
-58
lines changed

9 files changed

+23
-58
lines changed

.github/workflows/static-analysis.yaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ jobs:
1111
runs-on: ubuntu-latest
1212
steps:
1313
- uses: actions/checkout@v3
14-
- name: Check format with black
15-
uses: psf/black@stable
14+
- name: Check format with ruff
15+
uses: chartboost/ruff-action@v1
1616
with:
17-
options: "--check --verbose"
18-
src: "."
17+
args: --verbose
1918
lint:
2019
runs-on: ubuntu-latest
2120
steps:

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ tests := ${wildcard tests/*.py}
66
all: lint test docs
77

88
format: $(source) $(tests)
9-
black .
9+
ruff format .
1010

1111
lint: $(source) $(tests)
1212
ruff check .

arxiv/__init__.py

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,7 @@ def _from_feed_entry(entry: feedparser.FeedParserDict) -> Result:
124124
if hasattr(entry, "title"):
125125
title = entry.title
126126
else:
127-
logger.warning(
128-
"Result %s is missing title attribute; defaulting to '0'", entry.id
129-
)
127+
logger.warning("Result %s is missing title attribute; defaulting to '0'", entry.id)
130128
return Result(
131129
entry_id=entry.id,
132130
updated=Result._to_datetime(entry.updated_parsed),
@@ -459,9 +457,7 @@ def __str__(self) -> str:
459457
return repr(self)
460458

461459
def __repr__(self) -> str:
462-
return (
463-
"{}(query={}, id_list={}, max_results={}, sort_by={}, " "sort_order={})"
464-
).format(
460+
return ("{}(query={}, id_list={}, max_results={}, sort_by={}, " "sort_order={})").format(
465461
_classname(self),
466462
repr(self.query),
467463
repr(self.id_list),
@@ -531,9 +527,7 @@ class Client(object):
531527
_last_request_dt: datetime
532528
_session: requests.Session
533529

534-
def __init__(
535-
self, page_size: int = 100, delay_seconds: float = 3.0, num_retries: int = 3
536-
):
530+
def __init__(self, page_size: int = 100, delay_seconds: float = 3.0, num_retries: int = 3):
537531
"""
538532
Constructs an arXiv API client with the specified options.
539533
@@ -580,9 +574,7 @@ def results(self, search: Search, offset: int = 0) -> Generator[Result, None, No
580574
return iter(())
581575
return itertools.islice(self._results(search, offset), limit)
582576

583-
def _results(
584-
self, search: Search, offset: int = 0
585-
) -> Generator[Result, None, None]:
577+
def _results(self, search: Search, offset: int = 0) -> Generator[Result, None, None]:
586578
page_url = self._format_url(search, offset, self.page_size)
587579
feed = self._parse_feed(page_url, first_page=True)
588580
if not feed.entries:
@@ -631,19 +623,15 @@ def _parse_feed(
631623
`self.num_retries` times.
632624
"""
633625
try:
634-
return self.__try_parse_feed(
635-
url, first_page=first_page, try_index=_try_index
636-
)
626+
return self.__try_parse_feed(url, first_page=first_page, try_index=_try_index)
637627
except (
638628
HTTPError,
639629
UnexpectedEmptyPageError,
640630
requests.exceptions.ConnectionError,
641631
) as err:
642632
if _try_index < self.num_retries:
643633
logger.debug("Got error (try %d): %s", _try_index, err)
644-
return self._parse_feed(
645-
url, first_page=first_page, _try_index=_try_index + 1
646-
)
634+
return self._parse_feed(url, first_page=first_page, _try_index=_try_index + 1)
647635
logger.debug("Giving up (try %d): %s", _try_index, err)
648636
raise err
649637

@@ -667,9 +655,7 @@ def __try_parse_feed(
667655
logger.info("Sleeping: %f seconds", to_sleep)
668656
time.sleep(to_sleep)
669657

670-
logger.info(
671-
"Requesting page (first: %r, try: %d): %s", first_page, try_index, url
672-
)
658+
logger.info("Requesting page (first: %r, try: %d): %s", first_page, try_index, url)
673659

674660
resp = self._session.get(url, headers={"user-agent": "arxiv.py/2.1.0"})
675661
self._last_request_dt = datetime.now()

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ requests==2.31.0
33

44
# Development dependencies
55
pytest>=6.2.2
6-
ruff>=0.0.261
6+
ruff>=0.1.2
77
pdoc==13.1.0
88
pip-audit>=1.1.2

ruff.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ignore = []
1+
ignore = ["E501", "W191"]
22
select = [
33
"E",
44
"F",

tests/test_client.py

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ def test_nonexistent_id_in_list(self):
2020
results = list(client.results(arxiv.Search(id_list=["0808.05394"])))
2121
self.assertEqual(len(results), 0)
2222
# Generator should still yield valid entries.
23-
results = list(
24-
client.results(arxiv.Search(id_list=["0808.05394", "1707.08567"]))
25-
)
23+
results = list(client.results(arxiv.Search(id_list=["0808.05394", "1707.08567"])))
2624
self.assertEqual(len(results), 1)
2725

2826
def test_max_results(self):
@@ -83,9 +81,7 @@ def test_search_results_offset(self):
8381
client_results = list(client.results(search, offset=offset))
8482
self.assertEqual(len(client_results), max(0, search.max_results - offset))
8583
if client_results:
86-
self.assertEqual(
87-
all_results[offset].entry_id, client_results[0].entry_id
88-
)
84+
self.assertEqual(all_results[offset].entry_id, client_results[0].entry_id)
8985

9086
def test_no_duplicates(self):
9187
search = arxiv.Search("testing", max_results=100)
@@ -124,9 +120,7 @@ def test_sleep_standard(self, patched_time_sleep):
124120
# environments will have different page fetch times.
125121
client._last_request_dt = datetime.now()
126122
client._parse_feed(url)
127-
patched_time_sleep.assert_called_once_with(
128-
approx(client.delay_seconds, rel=1e-3)
129-
)
123+
patched_time_sleep.assert_called_once_with(approx(client.delay_seconds, rel=1e-3))
130124

131125
@patch("time.sleep", return_value=None)
132126
def test_sleep_multiple_requests(self, patched_time_sleep):
@@ -139,25 +133,19 @@ def test_sleep_multiple_requests(self, patched_time_sleep):
139133
patched_time_sleep.assert_not_called()
140134
client._last_request_dt = datetime.now()
141135
client._parse_feed(url2)
142-
patched_time_sleep.assert_called_once_with(
143-
approx(client.delay_seconds, rel=1e-3)
144-
)
136+
patched_time_sleep.assert_called_once_with(approx(client.delay_seconds, rel=1e-3))
145137

146138
@patch("time.sleep", return_value=None)
147139
def test_sleep_elapsed(self, patched_time_sleep):
148140
client = TestClient.get_code_client(200)
149141
url = client._format_url(arxiv.Search(query="quantum"), 0, 1)
150142
# If _last_request_dt is less than delay_seconds ago, sleep.
151-
client._last_request_dt = datetime.now() - timedelta(
152-
seconds=client.delay_seconds - 1
153-
)
143+
client._last_request_dt = datetime.now() - timedelta(seconds=client.delay_seconds - 1)
154144
client._parse_feed(url)
155145
patched_time_sleep.assert_called_once()
156146
patched_time_sleep.reset_mock()
157147
# If _last_request_dt is at least delay_seconds ago, don't sleep.
158-
client._last_request_dt = datetime.now() - timedelta(
159-
seconds=client.delay_seconds
160-
)
148+
client._last_request_dt = datetime.now() - timedelta(seconds=client.delay_seconds)
161149
client._parse_feed(url)
162150
patched_time_sleep.assert_not_called()
163151

tests/test_download.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ class TestDownload(unittest.TestCase):
99
@classmethod
1010
def setUpClass(self):
1111
self.fetched_result = next(arxiv.Search(id_list=["1605.08386"]).results())
12-
self.fetched_result_with_slash = next(
13-
arxiv.Search(id_list=["hep-ex/0406020v1"]).results()
14-
)
12+
self.fetched_result_with_slash = next(arxiv.Search(id_list=["hep-ex/0406020v1"]).results())
1513

1614
@classmethod
1715
def setUp(self):

tests/test_package.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ def test_deprecated_import_pattern(self):
1717
import arxiv as nondeprecated
1818

1919
expected = TestPackage.get_public_classes(nondeprecated)
20-
self.assertTrue(
21-
expected, "should export non-empty set of classes; check the helper"
22-
)
20+
self.assertTrue(expected, "should export non-empty set of classes; check the helper")
2321

2422
from arxiv import arxiv as deprecated_from
2523

tests/test_result.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ def test_result_shape(self):
4444
self.assert_valid_result(result)
4545

4646
def test_from_feed_entry(self):
47-
feed = self.client._parse_feed(
48-
"https://export.arxiv.org/api/query?search_query=testing"
49-
)
47+
feed = self.client._parse_feed("https://export.arxiv.org/api/query?search_query=testing")
5048
feed_entry = feed.entries[0]
5149
result = arxiv.Result._from_feed_entry(feed_entry)
5250
self.assert_valid_result(result)
@@ -66,9 +64,7 @@ def test_to_datetime(self):
6664
# critical to the test that they remain equivalent.
6765
paper_published = "2016-05-26T17:59:46Z"
6866
paper_published_parsed = time.struct_time((2016, 5, 26, 17, 59, 46, 3, 147, 0))
69-
expected = datetime(
70-
2016, 5, 26, hour=17, minute=59, second=46, tzinfo=timezone.utc
71-
)
67+
expected = datetime(2016, 5, 26, hour=17, minute=59, second=46, tzinfo=timezone.utc)
7268
actual = arxiv.Result._to_datetime(paper_published_parsed)
7369
self.assertEqual(actual, expected)
7470
self.assertEqual(actual.strftime("%Y-%m-%dT%H:%M:%SZ"), paper_published)

0 commit comments

Comments
 (0)