e3cli 1.0.1__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. {e3cli-1.0.1 → e3cli-1.0.2}/PKG-INFO +1 -1
  2. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/__init__.py +1 -1
  3. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/course_name.py +9 -5
  4. {e3cli-1.0.1 → e3cli-1.0.2}/pyproject.toml +1 -1
  5. {e3cli-1.0.1 → e3cli-1.0.2}/tests/test_basic.py +34 -0
  6. {e3cli-1.0.1 → e3cli-1.0.2}/.github/workflows/ci.yml +0 -0
  7. {e3cli-1.0.1 → e3cli-1.0.2}/.github/workflows/release.yml +0 -0
  8. {e3cli-1.0.1 → e3cli-1.0.2}/.gitignore +0 -0
  9. {e3cli-1.0.1 → e3cli-1.0.2}/CLAUDE.md +0 -0
  10. {e3cli-1.0.1 → e3cli-1.0.2}/COMMIT_EDITMSG +0 -0
  11. {e3cli-1.0.1 → e3cli-1.0.2}/Formula/e3cli.rb +0 -0
  12. {e3cli-1.0.1 → e3cli-1.0.2}/HEAD +0 -0
  13. {e3cli-1.0.1 → e3cli-1.0.2}/LICENSE +0 -0
  14. {e3cli-1.0.1 → e3cli-1.0.2}/Makefile +0 -0
  15. {e3cli-1.0.1 → e3cli-1.0.2}/README.md +0 -0
  16. {e3cli-1.0.1 → e3cli-1.0.2}/README_zh-TW.md +0 -0
  17. {e3cli-1.0.1 → e3cli-1.0.2}/config +0 -0
  18. {e3cli-1.0.1 → e3cli-1.0.2}/description +0 -0
  19. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/__main__.py +0 -0
  20. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/agent_prompt.md +0 -0
  21. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/ai/__init__.py +0 -0
  22. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/__init__.py +0 -0
  23. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/assignments.py +0 -0
  24. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/client.py +0 -0
  25. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/courses.py +0 -0
  26. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/files.py +0 -0
  27. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/forums.py +0 -0
  28. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/members.py +0 -0
  29. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/messages.py +0 -0
  30. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/api/site.py +0 -0
  31. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/auth.py +0 -0
  32. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/cli.py +0 -0
  33. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/__init__.py +0 -0
  34. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/_common.py +0 -0
  35. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/announcements.py +0 -0
  36. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/assignments.py +0 -0
  37. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/courses.py +0 -0
  38. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/download.py +0 -0
  39. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/interactive.py +0 -0
  40. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/login.py +0 -0
  41. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/logout.py +0 -0
  42. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/members.py +0 -0
  43. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/message.py +0 -0
  44. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/profile.py +0 -0
  45. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/schedule.py +0 -0
  46. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/setup.py +0 -0
  47. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/skill.py +0 -0
  48. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/submit.py +0 -0
  49. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/commands/sync.py +0 -0
  50. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/config.py +0 -0
  51. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/credential.py +0 -0
  52. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/formatting.py +0 -0
  53. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/http.py +0 -0
  54. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/i18n.py +0 -0
  55. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/scheduler/__init__.py +0 -0
  56. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/scheduler/cron.py +0 -0
  57. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/semester.py +0 -0
  58. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/skills/e3cli/SKILL.md +0 -0
  59. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/storage/__init__.py +0 -0
  60. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/storage/db.py +0 -0
  61. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/storage/models.py +0 -0
  62. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/storage/tracking.py +0 -0
  63. {e3cli-1.0.1 → e3cli-1.0.2}/e3cli/tui_menu.py +0 -0
  64. {e3cli-1.0.1 → e3cli-1.0.2}/gk/config +0 -0
  65. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/applypatch-msg.sample +0 -0
  66. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/commit-msg.sample +0 -0
  67. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/fsmonitor-watchman.sample +0 -0
  68. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/post-update.sample +0 -0
  69. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/pre-applypatch.sample +0 -0
  70. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/pre-commit.sample +0 -0
  71. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/pre-merge-commit.sample +0 -0
  72. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/pre-push.sample +0 -0
  73. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/pre-rebase.sample +0 -0
  74. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/pre-receive.sample +0 -0
  75. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/prepare-commit-msg.sample +0 -0
  76. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/push-to-checkout.sample +0 -0
  77. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/sendemail-validate.sample +0 -0
  78. {e3cli-1.0.1 → e3cli-1.0.2}/hooks/update.sample +0 -0
  79. {e3cli-1.0.1 → e3cli-1.0.2}/index +0 -0
  80. {e3cli-1.0.1 → e3cli-1.0.2}/info/exclude +0 -0
  81. {e3cli-1.0.1 → e3cli-1.0.2}/logs/HEAD +0 -0
  82. {e3cli-1.0.1 → e3cli-1.0.2}/logs/refs/heads/main +0 -0
  83. {e3cli-1.0.1 → e3cli-1.0.2}/logs/refs/remotes/origin/main +0 -0
  84. {e3cli-1.0.1 → e3cli-1.0.2}/objects/00/12f54a62a13459820d72b63eee8781d5cc0fae +0 -0
  85. {e3cli-1.0.1 → e3cli-1.0.2}/objects/00/373e054c653e54b45cacae42d71dff863626bf +0 -0
  86. {e3cli-1.0.1 → e3cli-1.0.2}/objects/04/9ee8e5968a9a80f0f1ac53d12141c61e7298ba +0 -0
  87. {e3cli-1.0.1 → e3cli-1.0.2}/objects/04/e0353337b6bb0c0ba43625456e9aaf13090a90 +0 -0
  88. {e3cli-1.0.1 → e3cli-1.0.2}/objects/05/0fec5da6aa35de1058b11671dfd6255b4d6b50 +0 -0
  89. {e3cli-1.0.1 → e3cli-1.0.2}/objects/06/5c820fc3efcd99754c56197a9c4e7142da710d +0 -0
  90. {e3cli-1.0.1 → e3cli-1.0.2}/objects/07/01890044580c4644114b781d474012b2fade80 +0 -0
  91. {e3cli-1.0.1 → e3cli-1.0.2}/objects/07/fb70ff1c509aad1f137a9255b9cb98733472a3 +0 -0
  92. {e3cli-1.0.1 → e3cli-1.0.2}/objects/0e/89da06e2d2273057dfa03705c42bbc57af1a6a +0 -0
  93. {e3cli-1.0.1 → e3cli-1.0.2}/objects/13/ad53a74b643378a7aebfe32d672b256ab73bef +0 -0
  94. {e3cli-1.0.1 → e3cli-1.0.2}/objects/13/fb66226ef7de52c039b1030460c5bb9ad1d576 +0 -0
  95. {e3cli-1.0.1 → e3cli-1.0.2}/objects/14/f44dcbbf53914d2d2b5b5a43453932fb0c6dd6 +0 -0
  96. {e3cli-1.0.1 → e3cli-1.0.2}/objects/15/6da5879f795abd72f645bbcadf18a4928a7502 +0 -0
  97. {e3cli-1.0.1 → e3cli-1.0.2}/objects/19/f9906c2882926f53e77b4be8be579906954a69 +0 -0
  98. {e3cli-1.0.1 → e3cli-1.0.2}/objects/1a/3f91d11c7c9c764fcd1ed01a4a0c3f13b68fee +0 -0
  99. {e3cli-1.0.1 → e3cli-1.0.2}/objects/1c/1765c4b372bd085c6224472de72f66e8d9fbe9 +0 -0
  100. {e3cli-1.0.1 → e3cli-1.0.2}/objects/22/e1020c805f3235c5c85d711a45d70d42883de0 +0 -0
  101. {e3cli-1.0.1 → e3cli-1.0.2}/objects/24/7f60ac43c8a065926f3228575a34d0ecd6f93d +0 -0
  102. {e3cli-1.0.1 → e3cli-1.0.2}/objects/25/4d6ec800e32759015479a68a3afd096ee12680 +0 -0
  103. {e3cli-1.0.1 → e3cli-1.0.2}/objects/27/1aee134d84254ba525ce728b3ecbbcbd73fe97 +0 -0
  104. {e3cli-1.0.1 → e3cli-1.0.2}/objects/27/41f5e19bf92e37c983e7d4d307ec09726b95ed +0 -0
  105. {e3cli-1.0.1 → e3cli-1.0.2}/objects/28/265727a791db9daef09c85ab159ef799908dc4 +0 -0
  106. {e3cli-1.0.1 → e3cli-1.0.2}/objects/2d/4c64fc2752b1356569f24e6f3d53cfd8ff3236 +0 -0
  107. {e3cli-1.0.1 → e3cli-1.0.2}/objects/31/61734dcf7d8b86372753c2552746641969ca7a +0 -0
  108. {e3cli-1.0.1 → e3cli-1.0.2}/objects/33/3da47d4f7d08fc2836374614b902a27f1a7638 +0 -0
  109. {e3cli-1.0.1 → e3cli-1.0.2}/objects/35/25cb5144ca2d643d918824df0f08042f8f1f19 +0 -0
  110. {e3cli-1.0.1 → e3cli-1.0.2}/objects/35/faf439f5e7e6730398397e0988c874ec74c15e +0 -0
  111. {e3cli-1.0.1 → e3cli-1.0.2}/objects/37/2acc5a62b5a8a7cd97d3eb07614d2a71d65c34 +0 -0
  112. {e3cli-1.0.1 → e3cli-1.0.2}/objects/37/f0c29518b9df6cde4d0cd7857d95b425fcaec9 +0 -0
  113. {e3cli-1.0.1 → e3cli-1.0.2}/objects/38/8bc96a53da22ddf8d3684c10480a9ed89274a6 +0 -0
  114. {e3cli-1.0.1 → e3cli-1.0.2}/objects/38/d062de47938882cc8c951cfcd18266bfa834d0 +0 -0
  115. {e3cli-1.0.1 → e3cli-1.0.2}/objects/39/bbbcd0ade10f3066a853cca53ad5159ac78e30 +0 -0
  116. {e3cli-1.0.1 → e3cli-1.0.2}/objects/3c/dd09e594d5716969279d6e3fcf99fca00f8504 +0 -0
  117. {e3cli-1.0.1 → e3cli-1.0.2}/objects/3e/71c91d71be5667a313ecfae444718750b2bf55 +0 -0
  118. {e3cli-1.0.1 → e3cli-1.0.2}/objects/3e/7febbe12d705885c2503c3e0d785e488f60966 +0 -0
  119. {e3cli-1.0.1 → e3cli-1.0.2}/objects/3f/0235e32813f74985f0363e64a110093d979e2f +0 -0
  120. {e3cli-1.0.1 → e3cli-1.0.2}/objects/40/9ded4237099e6e52de508dd46ebe74cf769e79 +0 -0
  121. {e3cli-1.0.1 → e3cli-1.0.2}/objects/41/88bc8a7a0569fd47efb215aad2e3f4a7b7e188 +0 -0
  122. {e3cli-1.0.1 → e3cli-1.0.2}/objects/42/53425dbc4368909b4b782fd53360537d3d9033 +0 -0
  123. {e3cli-1.0.1 → e3cli-1.0.2}/objects/42/925cbdfef5b97f5ae199323a5545810207af09 +0 -0
  124. {e3cli-1.0.1 → e3cli-1.0.2}/objects/42/b238ab6f9c3c74cd23a14c094ad8eb1c66d52b +0 -0
  125. {e3cli-1.0.1 → e3cli-1.0.2}/objects/43/49874ad2cdacc9d50d6ba06df25765d077248a +0 -0
  126. {e3cli-1.0.1 → e3cli-1.0.2}/objects/43/cead7a00c7ef98e1d5c9c86e50a3ccde712277 +0 -0
  127. {e3cli-1.0.1 → e3cli-1.0.2}/objects/43/e88c1a0a115fc72390e7bcef8ce0a8328a4e05 +0 -0
  128. {e3cli-1.0.1 → e3cli-1.0.2}/objects/45/9c23839b54e81c741fd2b5241c2b164079fcc1 +0 -0
  129. {e3cli-1.0.1 → e3cli-1.0.2}/objects/47/d9fe1a890a3d711662f4f414aee1ea6ae92261 +0 -0
  130. {e3cli-1.0.1 → e3cli-1.0.2}/objects/49/da3d511c413f21dca0f072ad52b0aca2d3c167 +0 -0
  131. {e3cli-1.0.1 → e3cli-1.0.2}/objects/4f/1897fc4248a024fc88e51f53f9028f531318cc +0 -0
  132. {e3cli-1.0.1 → e3cli-1.0.2}/objects/50/f89469bbe802dad848dcfeb2a8e447d4cd5787 +0 -0
  133. {e3cli-1.0.1 → e3cli-1.0.2}/objects/51/7ac4b389a310399e096baab0af89f1e5de7b3b +0 -0
  134. {e3cli-1.0.1 → e3cli-1.0.2}/objects/52/61e3b09b4722a7003c53a643085ca69e0c7bbd +0 -0
  135. {e3cli-1.0.1 → e3cli-1.0.2}/objects/53/7671d097d835bda94f0460295ce1cf49eda99a +0 -0
  136. {e3cli-1.0.1 → e3cli-1.0.2}/objects/54/8d12b92b82f95dc93b4f069086d8214651593d +0 -0
  137. {e3cli-1.0.1 → e3cli-1.0.2}/objects/55/2cd273856516fd1a5e026ef23c9ffeb5a33876 +0 -0
  138. {e3cli-1.0.1 → e3cli-1.0.2}/objects/56/52f31ea165a3ace62d1394af754a8aac78aa9f +0 -0
  139. {e3cli-1.0.1 → e3cli-1.0.2}/objects/57/9c69b0b67ebff094514cec01f692e21ca5e965 +0 -0
  140. {e3cli-1.0.1 → e3cli-1.0.2}/objects/57/ddc6c8820bd8ec98845e7f5a29bf3302f0f481 +0 -0
  141. {e3cli-1.0.1 → e3cli-1.0.2}/objects/58/2fba780a9cb7a9f312bd21cf97f16bc5b347c3 +0 -0
  142. {e3cli-1.0.1 → e3cli-1.0.2}/objects/5c/6b70ca4f2f822429a97a84428580966d84ab3a +0 -0
  143. {e3cli-1.0.1 → e3cli-1.0.2}/objects/5e/c686a09ef712b11372e38d25c958b027b3f21f +0 -0
  144. {e3cli-1.0.1 → e3cli-1.0.2}/objects/5f/96e4a89ab06b40be8c45cd0d975bdc2f957064 +0 -0
  145. {e3cli-1.0.1 → e3cli-1.0.2}/objects/60/c9053920fd6a8cd64eb28d8df99bcc2d176d59 +0 -0
  146. {e3cli-1.0.1 → e3cli-1.0.2}/objects/62/1ab88d46df0f1b1015e250f4c8174729629400 +0 -0
  147. {e3cli-1.0.1 → e3cli-1.0.2}/objects/62/5d72f7372bae8ab3ccc056e829c277c0705d1b +0 -0
  148. {e3cli-1.0.1 → e3cli-1.0.2}/objects/64/1ee83ac5a80cc7ae2e5f036db6329eacd03deb +0 -0
  149. {e3cli-1.0.1 → e3cli-1.0.2}/objects/65/011e04aeddd4c893a7a64b7ef745e9ad1af3c3 +0 -0
  150. {e3cli-1.0.1 → e3cli-1.0.2}/objects/66/b5f21689d122c08ee3b98d35f3de096addcfcc +0 -0
  151. {e3cli-1.0.1 → e3cli-1.0.2}/objects/69/89864c6313789a85608f01eda8976e1215bd31 +0 -0
  152. {e3cli-1.0.1 → e3cli-1.0.2}/objects/69/db255149b01f9ab01b48138fbb0f2d9b8b1acd +0 -0
  153. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6a/597477c08142472e4a0559811e459ae7b127fc +0 -0
  154. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6a/5e5e8ca97f2dec142b2ba15ed97a8493c16a54 +0 -0
  155. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6b/d7a53ed2c5cd4c0e97267b70fff1dd461b60b7 +0 -0
  156. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6d/05c5aaad4ff44578bbc46b5f7fc96f0d114e04 +0 -0
  157. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6d/5c36f68694ad597a4deeba39e56e561ba72f2f +0 -0
  158. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6e/3f7883a133ec8310cf8ad07cba6aead4583ff9 +0 -0
  159. {e3cli-1.0.1 → e3cli-1.0.2}/objects/6f/15710e7621abc864dabb788c5dfcab181e4551 +0 -0
  160. {e3cli-1.0.1 → e3cli-1.0.2}/objects/71/6894eaf5165344374d82dda25e82eff5fce119 +0 -0
  161. {e3cli-1.0.1 → e3cli-1.0.2}/objects/71/ca2fc16d0959c7465d57077a260156674274ba +0 -0
  162. {e3cli-1.0.1 → e3cli-1.0.2}/objects/74/0db02cd55f69b9f21f49a359fc14c15ad7f8ce +0 -0
  163. {e3cli-1.0.1 → e3cli-1.0.2}/objects/76/37fd54a47bfbdf2eed4827b78dff6019b87e57 +0 -0
  164. {e3cli-1.0.1 → e3cli-1.0.2}/objects/79/15535a493620715580f5d0ce8c2481172d44bd +0 -0
  165. {e3cli-1.0.1 → e3cli-1.0.2}/objects/7b/ad63d2dd7dab6c33f73a31bd359129523ac5ce +0 -0
  166. {e3cli-1.0.1 → e3cli-1.0.2}/objects/7c/95c6bec18763286e0100ebc4fbef71df48b0ae +0 -0
  167. {e3cli-1.0.1 → e3cli-1.0.2}/objects/7f/a3240ccd3661f7786bd269a0b0875cd9037b4b +0 -0
  168. {e3cli-1.0.1 → e3cli-1.0.2}/objects/82/8511321c72b509d8b39d3a392014e2748036ad +0 -0
  169. {e3cli-1.0.1 → e3cli-1.0.2}/objects/84/3e8bf8d7bf26780eb4c44f0e1733dae7df37da +0 -0
  170. {e3cli-1.0.1 → e3cli-1.0.2}/objects/84/45dbe199e0d8e83aa85b04f68c4b4e97764c46 +0 -0
  171. {e3cli-1.0.1 → e3cli-1.0.2}/objects/85/58de1a164b671ae0c5e9867140f4d105b26c71 +0 -0
  172. {e3cli-1.0.1 → e3cli-1.0.2}/objects/85/bfef5de75cdd3313dea22060cd9f22bf6f611c +0 -0
  173. {e3cli-1.0.1 → e3cli-1.0.2}/objects/87/075d1b2ca01520a54b6e2053d2b07e30ff550e +0 -0
  174. {e3cli-1.0.1 → e3cli-1.0.2}/objects/8a/2f2b74b3a7f9b0f2969ff455d1b5a149189522 +0 -0
  175. {e3cli-1.0.1 → e3cli-1.0.2}/objects/8b/da82680cf77bd85ef26d162f09df5b555c4817 +0 -0
  176. {e3cli-1.0.1 → e3cli-1.0.2}/objects/8b/f368e49da5649603590fd2ad157fb423f91240 +0 -0
  177. {e3cli-1.0.1 → e3cli-1.0.2}/objects/8c/988f80dcde632bee9389cb52d7c2639e358676 +0 -0
  178. {e3cli-1.0.1 → e3cli-1.0.2}/objects/8d/9cc78f614e082762dfd1af4d90b83e97509ba4 +0 -0
  179. {e3cli-1.0.1 → e3cli-1.0.2}/objects/91/b7e6699fcf2d3d87bc9209c30743851b95937e +0 -0
  180. {e3cli-1.0.1 → e3cli-1.0.2}/objects/97/6c6c60bcbbfe1b2ea7dc08631420753e2a2c55 +0 -0
  181. {e3cli-1.0.1 → e3cli-1.0.2}/objects/98/414112321df2d4fef51640978555b7b0a10740 +0 -0
  182. {e3cli-1.0.1 → e3cli-1.0.2}/objects/98/5dbb79e4f3157ba4a5b967ca1f045087fe718c +0 -0
  183. {e3cli-1.0.1 → e3cli-1.0.2}/objects/9b/8451b0fde38dfc5250c52aab3ef3fd30ef616d +0 -0
  184. {e3cli-1.0.1 → e3cli-1.0.2}/objects/9d/04ed7e9c2fdc16eadb72867c45c682d0661d8e +0 -0
  185. {e3cli-1.0.1 → e3cli-1.0.2}/objects/9d/1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 +0 -0
  186. {e3cli-1.0.1 → e3cli-1.0.2}/objects/9e/9190183a3e710fd6a3caabafda0395aacc4907 +0 -0
  187. {e3cli-1.0.1 → e3cli-1.0.2}/objects/a4/9ab06df8e92e9921f006c4687a8119a41f140c +0 -0
  188. {e3cli-1.0.1 → e3cli-1.0.2}/objects/a4/9e182d79178f30917cb9d5d007bf4ad4354efc +0 -0
  189. {e3cli-1.0.1 → e3cli-1.0.2}/objects/a5/374e27f1f437b7b8d795bdbba9990e1b33ac4a +0 -0
  190. {e3cli-1.0.1 → e3cli-1.0.2}/objects/a9/621b26eb6fcf44e82b8f40fe15a08db273ea94 +0 -0
  191. {e3cli-1.0.1 → e3cli-1.0.2}/objects/a9/958ca6bbbce4793eb63dfc75053f6f2c468f7d +0 -0
  192. {e3cli-1.0.1 → e3cli-1.0.2}/objects/ab/8112dc0e039a6764e18515bc8b9d25bf8cba72 +0 -0
  193. {e3cli-1.0.1 → e3cli-1.0.2}/objects/ad/86572a7a3d9c41b39f68c1509f45eeb3c47145 +0 -0
  194. {e3cli-1.0.1 → e3cli-1.0.2}/objects/ae/7c0c0693884ee9968bd46c7e3c1c4801c93f07 +0 -0
  195. {e3cli-1.0.1 → e3cli-1.0.2}/objects/af/66d7ee37e22b5b4ffcb43392bcd6fe58b7189b +0 -0
  196. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b0/1eb7d29ce867088dcfec990e3a118ee7d3a3b2 +0 -0
  197. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b0/6bfa35440cb0bf33a698db8b116077b885dade +0 -0
  198. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b2/30e20e02ded29d01eb93f89b62ab47fb378e1f +0 -0
  199. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b2/e68381120a59886f7999876775e9b3dfeaa550 +0 -0
  200. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b3/a239ea6bac51a6315988af95d83e86323aa461 +0 -0
  201. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b4/1e24e40f90ad6c12b6f840ecdb133b2749ca7e +0 -0
  202. {e3cli-1.0.1 → e3cli-1.0.2}/objects/b9/4bb6724a0646fb1636a66de603cec15e7dfa3e +0 -0
  203. {e3cli-1.0.1 → e3cli-1.0.2}/objects/bb/8fccf2b545f4ba46149fb07bd1f700ae7bcc87 +0 -0
  204. {e3cli-1.0.1 → e3cli-1.0.2}/objects/be/9fc276a620ea29d87e2001489e436f6e714a34 +0 -0
  205. {e3cli-1.0.1 → e3cli-1.0.2}/objects/bf/a019fa30db2df7e7732d119032e84391c3b6ce +0 -0
  206. {e3cli-1.0.1 → e3cli-1.0.2}/objects/c0/2beae1cbe94f20d2a4ef88b46bd8ade684f911 +0 -0
  207. {e3cli-1.0.1 → e3cli-1.0.2}/objects/c6/1651ba7a27cd0ff5c726c4ce79751facc64f39 +0 -0
  208. {e3cli-1.0.1 → e3cli-1.0.2}/objects/c7/f3f6ba90a1ec28fdef6ec7b10d82f4ad144969 +0 -0
  209. {e3cli-1.0.1 → e3cli-1.0.2}/objects/cb/b097bc0ed0f65614e13f563a22624f0ce078e6 +0 -0
  210. {e3cli-1.0.1 → e3cli-1.0.2}/objects/cd/3c462e6a24c9757a0fffd7c42abce926e1adf5 +0 -0
  211. {e3cli-1.0.1 → e3cli-1.0.2}/objects/ce/f38215c9c7dc239421d85ca93221ad7beb63cb +0 -0
  212. {e3cli-1.0.1 → e3cli-1.0.2}/objects/cf/286c5bf7cffc4bf93b51554d4299845172df84 +0 -0
  213. {e3cli-1.0.1 → e3cli-1.0.2}/objects/d0/aa218f92135250fa46b8490c68f4e77846b1b1 +0 -0
  214. {e3cli-1.0.1 → e3cli-1.0.2}/objects/d1/70d82f10fffbce5936fc1d0f5e1f051c354413 +0 -0
  215. {e3cli-1.0.1 → e3cli-1.0.2}/objects/d1/eccedbd9604b59bcc247b6f8a177df5486ce57 +0 -0
  216. {e3cli-1.0.1 → e3cli-1.0.2}/objects/d4/1a891e54bfd7ddd745555624ce9142a47e5fdd +0 -0
  217. {e3cli-1.0.1 → e3cli-1.0.2}/objects/d8/2d02db21187a83d77a71c8665e1b4699e481fb +0 -0
  218. {e3cli-1.0.1 → e3cli-1.0.2}/objects/d8/76cc79a2f25f4e8616805811110f700e277af2 +0 -0
  219. {e3cli-1.0.1 → e3cli-1.0.2}/objects/db/3bb89cba087a88feb4075b467732846a1d0118 +0 -0
  220. {e3cli-1.0.1 → e3cli-1.0.2}/objects/db/dc7e591f97aab4da5d2acb29194355c277acf6 +0 -0
  221. {e3cli-1.0.1 → e3cli-1.0.2}/objects/df/8c39b5b6cfcf19f8f27d5913830cb0a8fcd4c8 +0 -0
  222. {e3cli-1.0.1 → e3cli-1.0.2}/objects/df/a8267b7bcb40cc3c4524934d386516e27dd5db +0 -0
  223. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e0/87a95e8c14f5d090c04d19d3a9f91a208b7841 +0 -0
  224. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e0/e63743c9660300f76483d3ad27ecd85241cdc5 +0 -0
  225. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e2/2ab51073af126f1b602884b02dad11f9027942 +0 -0
  226. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e4/1b4051ac3bac5364f7a5ce048ecc41147857d6 +0 -0
  227. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e4/1dbd057baa81d4e660a52d2486ee700f8c7b60 +0 -0
  228. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e4/fba2702e9b6e30902b10ef946b8e05ee14b3d6 +0 -0
  229. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e5/23965887274b5a3060bca39ec005e6fe99883b +0 -0
  230. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e6/3334965c2117237f22708d1c4681be5d77574b +0 -0
  231. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  232. {e3cli-1.0.1 → e3cli-1.0.2}/objects/e8/a732d4490c14cf239dd7081c8c1d15b44c495b +0 -0
  233. {e3cli-1.0.1 → e3cli-1.0.2}/objects/eb/22d1e687a8a2dd36474c7add9535ebe9682d3b +0 -0
  234. {e3cli-1.0.1 → e3cli-1.0.2}/objects/eb/7320ad4e2f7d18b503c64b2a983c2a41fc8eb1 +0 -0
  235. {e3cli-1.0.1 → e3cli-1.0.2}/objects/ec/2badeec80e4ddc66a5168d8c3aec878a30f813 +0 -0
  236. {e3cli-1.0.1 → e3cli-1.0.2}/objects/ec/d43841d2e6e7268caf4a1bb03c3f549ca75f49 +0 -0
  237. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f0/c3d899d1d7578174419e3d21fbb43d469ea0df +0 -0
  238. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f2/d740d8021553398f98f1302398006e988697ef +0 -0
  239. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f3/505619e9502b8a75ce04cf75ccb61e54f16cf5 +0 -0
  240. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f3/681d2437d363e9865aec3eb4e3e8f5aff46ca6 +0 -0
  241. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f3/b1f01d9f8fab935f87bee101fa0f1f944c30d8 +0 -0
  242. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f3/e2082feab4cb9a889f623d8fe7b58628f82da9 +0 -0
  243. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f4/21fa018addaacd7f59e11603b182b38207abca +0 -0
  244. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f5/9e7ad7dad379a9752969e3443d3ed60a82cdf1 +0 -0
  245. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f6/d28255ddf6cd98d69342c282663771093ad834 +0 -0
  246. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f7/c7da26bbfca63ed8af08f9b7b1ace4930dad44 +0 -0
  247. {e3cli-1.0.1 → e3cli-1.0.2}/objects/f9/aece29cc134fc99f629129d46c712f015b00c0 +0 -0
  248. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fb/4fbcdf3b0da9864651c5d50322b27c21f26fed +0 -0
  249. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fb/ba70de6b161e2918d9d9e62d734abd85d01ae1 +0 -0
  250. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fb/bc2db563e1d0b7a0745a04fd0a0c5b5ef7e6aa +0 -0
  251. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fc/03924609632d9a9f820119bdf5a9ddf5a4c90a +0 -0
  252. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fd/3fb430f4e9190752eb58cef5019660e9aa92ef +0 -0
  253. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fd/d0e4feee582591e85b9d488dd4fa1794364abb +0 -0
  254. {e3cli-1.0.1 → e3cli-1.0.2}/objects/fe/092d97fe5a0e2a3d7b807e1a9f44735281a286 +0 -0
  255. {e3cli-1.0.1 → e3cli-1.0.2}/refs/heads/main +0 -0
  256. {e3cli-1.0.1 → e3cli-1.0.2}/refs/remotes/origin/main +0 -0
  257. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.1.0 +0 -0
  258. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.2.0 +0 -0
  259. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.3.0 +0 -0
  260. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.3.1 +0 -0
  261. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.3.2 +0 -0
  262. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.4.0 +0 -0
  263. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.4.1 +0 -0
  264. {e3cli-1.0.1 → e3cli-1.0.2}/refs/tags/v0.4.3 +0 -0
  265. {e3cli-1.0.1 → e3cli-1.0.2}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: e3cli
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: NYCU E3 Moodle automation CLI — sync courses, download materials, submit assignments.
5
5
  Project-URL: Homepage, https://github.com/junlinwk/e3cli
6
6
  Project-URL: Repository, https://github.com/junlinwk/e3cli
@@ -1,3 +1,3 @@
1
1
  """E3CLI — NYCU E3 Moodle Automation CLI Tool"""
2
2
 
3
- __version__ = "1.0.1"
3
+ __version__ = "1.0.2"
@@ -61,11 +61,15 @@ def parse_course_name(fullname: str, shortname: str = "") -> tuple[str, str, str
61
61
  if last_cjk == -1:
62
62
  return code, "", rest.strip()
63
63
 
64
- after = rest[last_cjk + 1:]
65
- sm = re.match(r"^\s+(.*)$", after)
66
- if sm:
67
- return code, rest[:last_cjk + 1].strip(), sm.group(1).strip()
68
- return code, rest.strip(), ""
64
+ # 從最後一個 CJK 字往後吃掉所有「非空白」字元(半形/全形括號、引號、頓號等
65
+ # 都算中文段的一部分),直到遇到第一個空白才視為中英分界。
66
+ boundary = last_cjk + 1
67
+ while boundary < len(rest) and not rest[boundary].isspace():
68
+ boundary += 1
69
+
70
+ zh = rest[:boundary].strip()
71
+ en = rest[boundary:].strip()
72
+ return code, zh, en
69
73
 
70
74
 
71
75
  def display_name(fullname: str, shortname: str = "", lang: str | None = None) -> str:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "e3cli"
7
- version = "1.0.1"
7
+ version = "1.0.2"
8
8
  description = "NYCU E3 Moodle automation CLI — sync courses, download materials, submit assignments."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -76,6 +76,40 @@ def test_parse_course_name_no_shortname():
76
76
  assert en == "Test"
77
77
 
78
78
 
79
+ def test_parse_course_name_halfwidth_parens():
80
+ code, zh, en = parse_course_name(
81
+ "1142.410024.專題研究(三) Research(III)", "1142.410024"
82
+ )
83
+ assert code == "1142.410024"
84
+ assert zh == "專題研究(三)"
85
+ assert en == "Research(III)"
86
+
87
+
88
+ def test_parse_course_name_fullwidth_parens():
89
+ code, zh, en = parse_course_name(
90
+ "1142.410024.專題研究(三) Research(III)", "1142.410024"
91
+ )
92
+ assert code == "1142.410024"
93
+ assert zh == "專題研究(三)"
94
+ assert en == "Research(III)"
95
+
96
+
97
+ def test_parse_course_name_pure_chinese_with_parens():
98
+ code, zh, en = parse_course_name("1142.410024.專題研究(三)", "1142.410024")
99
+ assert code == "1142.410024"
100
+ assert zh == "專題研究(三)"
101
+ assert en == ""
102
+
103
+
104
+ def test_parse_course_name_chinese_with_period_then_english():
105
+ # 中文後接句號或頓號再接英文(少見但要 robust)
106
+ code, zh, en = parse_course_name(
107
+ "1142.999999.資訊安全、密碼學 Information Security", "1142.999999"
108
+ )
109
+ assert zh == "資訊安全、密碼學"
110
+ assert en == "Information Security"
111
+
112
+
79
113
  def test_display_name_picks_language():
80
114
  fullname = "1142.430107.中文名稱 English Name"
81
115
  assert display_name(fullname, "1142.430107", lang="zh") == "中文名稱"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes