diff --git a/.gitignore b/.gitignore index b6e4761..6fe11b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +/learn + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/downloader.py b/downloader.py index 2bc68f7..6d201d9 100644 --- a/downloader.py +++ b/downloader.py @@ -9,7 +9,7 @@ class Downloader(LearnHelper): prefix: str = "" - file_size_limit: int = None + file_size_limit: int = None # MB sync_docs: bool = True sync_work: bool = True sync_submit: bool = True @@ -34,12 +34,13 @@ def Download(self, url: str, prefix: str, filename: str) -> bool: os.makedirs(prefix, exist_ok=True) - filename = slugify(filename) response = self.get(url=url, stream=True) file_size = int(response.headers.get("content-length", 0)) if self.file_size_limit: - if file_size > self.file_size_limit * 1024: + if file_size > self.file_size_limit * 1024 * 1024: + print(f"Skipping file {filename}") return False + filename = slugify(filename) chunk_size = 8192 # 8KB with tqdm( desc=filename, @@ -122,7 +123,7 @@ lines.append(f"") if homework.attachment: filename = slugify( - f"{homework.title}{os.path.splitext(homework.attachment.name)[-1]}" + f"attach-{homework.title}{os.path.splitext(homework.attachment.name)[-1]}" ) self.Download( url=homework.attachment.download_url, prefix=prefix, filename=filename, @@ -150,7 +151,7 @@ lines.append(f"") lines.append(f"### Deadline (GMT+8)") lines.append(f"") - lines.append(f"{homework.deadline}") + lines.append(f"{homework.deadline.isoformat() if homework.deadline else None}") lines.append(f"") if self.sync_submit: lines.append(f"## My coursework submitted") @@ -180,7 +181,9 @@ lines.append(f"") lines.append(f"### Date") lines.append(f"") - lines.append(f"{homework.grade_time}") + lines.append( + f"{homework.grade_time.isoformat() if homework.grade_time else None}" + ) lines.append(f"") lines.append(f"### Grade") lines.append(f"") diff --git a/main.py b/main.py index 60cca64..f4e7ea2 100644 --- a/main.py +++ b/main.py @@ -17,14 +17,17 @@ help="semesters to be synced. If you want to sync all semesters, do not pass this argument", ) parser.add_argument( - "--prefix", default=None, required=False, help="location to save downloaded files", + "--prefix", + default=None, + required=False, + help='location to save downloaded files, default to "learn/"', ) parser.add_argument( "--file_size_limit", default=None, type=float, required=False, - help="files exceed limit will not be downloaded", + help="(unit: MB) files exceed limit will not be downloaded", ) parser.add_argument( "--no_sync_docs", diff --git a/requirements.txt b/requirements.txt index 38b4e19..1090c17 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ beautifulsoup4~=4.11.1 -requests~=2.27.1 +requests~=2.28.1 tqdm~=4.64.0 python-slugify~=6.1.2 diff --git a/thu_learn_lib/helper.py b/thu_learn_lib/helper.py index e5a80b0..b78d92e 100644 --- a/thu_learn_lib/helper.py +++ b/thu_learn_lib/helper.py @@ -218,15 +218,21 @@ student_homework_id=work["xszyid"], # 学生作业 ID ) ), - deadline=work["jzsj"], # 截止时间 + deadline=datetime.datetime.fromtimestamp(work["jzsj"] / 1000.0) + if work["jzsj"] + else None, # 截止时间 submit_url=urls.learn_homework_submit( work["wlkcid"], work["xszyid"] # 课程 ID, 学生作业 ID ), - submit_time=work["scsj"], # 上传时间 + submit_time=datetime.datetime.fromtimestamp(work["scsj"] / 1000.0) + if work["scsj"] + else None, # 上传时间 grade=work["cj"], # 成绩 grader_name=work["jsm"], # 教师名 grade_content=work["pynr"], # 批阅内容 - grade_time=work["pysj"], # 批阅时间 + grade_time=datetime.datetime.fromtimestamp(work["pysj"] / 1000.0) + if work["pysj"] + else None, # 批阅时间 submitted=status.submitted, graded=status.graded, description=detail.description,