Skip to content

Commit f01244e

Browse files
committed
Add --language script argument
`--language` argument allows to download only submissions in the specified programming languages
1 parent c4558cb commit f01244e

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

leetcode_export/__main__.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66

77
from leetcode_export._version import __version__
88
from leetcode_export.leetcode import LeetCode
9+
from leetcode_export.utils import VALID_PROGRAMMING_LANGUAGES
910

1011

1112
def parse_args():
12-
parser = argparse.ArgumentParser(description='Export LeetCode solutions')
13+
parser = argparse.ArgumentParser(description='Export LeetCode solutions', formatter_class=argparse.RawTextHelpFormatter)
1314
parser.add_argument('--cookies', type=str, help='set LeetCode cookies')
1415
parser.add_argument('--folder', type=str, default='.', help='set output folder')
1516
parser.add_argument('--problem-filename', type=str, default='${question_id} - ${title_slug}.html',
@@ -22,14 +23,30 @@ def parse_args():
2223
default='${date_formatted} - ${status_display} - runtime ${runtime} - memory ${memory}.${extension}',
2324
help='submission filename format')
2425
parser.add_argument('--only-accepted', dest='only_accepted', action='store_true', help='save accepted submissions only')
26+
parser.add_argument('--language', dest='language_unprocessed', type=str,
27+
help="only save submissions for the specified programming languages (eg. '--language=python,python3,cpp,java,golang')\n" +
28+
"supported languages: 'python', 'python3', 'c', 'cpp', 'csharp', 'java', 'kotlin', 'mysql', 'mssql', 'oraclesql',\n"+
29+
" 'javascript', 'html', 'php', 'golang', 'scala', 'pythonml', 'rust', 'ruby', 'bash', 'swift'")
2530
parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='enable verbose logging details')
2631
parser.add_argument('-vv', '--extra-verbose', dest='extra_verbose', action='store_true',
2732
help='enable more verbose logging details')
2833
parser.add_argument('-V', '--version', action='version',
2934
version='%(prog)s {version}'.format(version=__version__))
3035
parser.set_defaults(verbose=False, extra_verbose=False)
3136

32-
return parser.parse_args()
37+
args = parser.parse_args()
38+
39+
if args.language_unprocessed:
40+
languages = args.language_unprocessed.split(',')
41+
args.language = [lang.strip() for lang in languages]
42+
for lang in languages:
43+
if lang not in VALID_PROGRAMMING_LANGUAGES:
44+
parser.error(f"Invalid language: '{lang}'")
45+
args.language = languages
46+
else:
47+
args.language = None
48+
49+
return args
3350

3451

3552
def main():
@@ -79,6 +96,9 @@ def main():
7996
if args.only_accepted and submission.status_display != 'Accepted':
8097
continue
8198

99+
if args.language and submission.lang not in args.language:
100+
continue
101+
82102
if not os.path.exists(submission.title_slug):
83103
os.mkdir(submission.title_slug)
84104
os.chdir(submission.title_slug)

leetcode_export/leetcode.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,6 @@ def get_submissions(self) -> Iterator[Submission]:
115115
yield submission
116116

117117
current += 20
118-
sleep(1)
118+
sleep(5)
119119
if 'detail' in response_json:
120120
logging.warning(response_json['detail'])

leetcode_export/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import re
22
from typing import Dict
33

4+
VALID_PROGRAMMING_LANGUAGES = ['python', 'python3', 'c', 'cpp', 'csharp', 'java', 'kotlin', 'mysql', 'mssql', 'oraclesql', 'javascript', 'html', 'php', 'golang', 'scala', 'pythonml', 'rust', 'ruby', 'bash', 'swift']
5+
46
FILE_EXTENSIONS = {
57
"python": 'py',
68
"python3": 'py',

0 commit comments

Comments
 (0)