Skip to content

Commit 8fb7c41

Browse files
committed
Add option to limit batch requests to Leetcode API
Leetcode responses got too large. As a result users are experiencing problem with running the script, because leetcode API fails to return such big results. This diff adds an ability to limit number of problems, downloaded in parallel and limits it to 1000 problems by default.
1 parent d3a141c commit 8fb7c41

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

Diff for: generate.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ def parse_args() -> argparse.Namespace:
3333
"--start", type=int, help="Start generation from this problem", default=0
3434
)
3535
parser.add_argument(
36-
"--stop", type=int, help="Stop generation on this problem", default=2 ** 64
36+
"--stop", type=int, help="Stop generation on this problem", default=2**64
37+
)
38+
parser.add_argument(
39+
"--page-size",
40+
type=int,
41+
help="Get at most this many problems (decrease if leetcode API times out)",
42+
default=1000,
3743
)
3844

3945
args = parser.parse_args()
@@ -90,7 +96,7 @@ async def generate_anki_note(
9096
)
9197

9298

93-
async def generate(start: int, stop: int) -> None:
99+
async def generate(start: int, stop: int, page_size: int) -> None:
94100
"""
95101
Generate an Anki deck
96102
"""
@@ -157,7 +163,7 @@ async def generate(start: int, stop: int) -> None:
157163
)
158164
leetcode_deck = genanki.Deck(LEETCODE_ANKI_DECK_ID, "leetcode")
159165

160-
leetcode_data = leetcode_anki.helpers.leetcode.LeetcodeData(start, stop)
166+
leetcode_data = leetcode_anki.helpers.leetcode.LeetcodeData(start, stop, page_size)
161167

162168
note_generators: List[Coroutine[Any, Any, LeetcodeNote]] = []
163169

@@ -185,8 +191,8 @@ async def main() -> None:
185191
"""
186192
args = parse_args()
187193

188-
start, stop = args.start, args.stop
189-
await generate(start, stop)
194+
start, stop, page_size = args.start, args.stop, args.page_size
195+
await generate(start, stop, page_size)
190196

191197

192198
if __name__ == "__main__":

Diff for: leetcode_anki/helpers/leetcode.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class LeetcodeData:
8383
names.
8484
"""
8585

86-
def __init__(self, start: int, stop: int) -> None:
86+
def __init__(self, start: int, stop: int, page_size: int = 1000) -> None:
8787
"""
8888
Initialize leetcode API and disk cache for API responses
8989
"""
@@ -93,11 +93,15 @@ def __init__(self, start: int, stop: int) -> None:
9393
if stop < 0:
9494
raise ValueError(f"Stop must be non-negative: {start}")
9595

96+
if page_size < 0:
97+
raise ValueError(f"Page size must be greater than 0: {page_size}")
98+
9699
if start > stop:
97100
raise ValueError(f"Start (){start}) must be not greater than stop ({stop})")
98101

99102
self._start = start
100103
self._stop = stop
104+
self._page_size = page_size
101105

102106
@cached_property
103107
def _api_instance(self) -> leetcode.api.default_api.DefaultApi:
@@ -214,7 +218,7 @@ def _get_problems_data(
214218
start = self._start
215219
stop = min(self._stop, problem_count)
216220

217-
page_size = min(3000, stop - start + 1)
221+
page_size = min(self._page_size, stop - start + 1)
218222

219223
problems: List[
220224
leetcode.models.graphql_question_detail.GraphqlQuestionDetail

0 commit comments

Comments
 (0)