e3cli 1.0.0__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.
- {e3cli-1.0.0 → e3cli-1.0.2}/.github/workflows/release.yml +10 -5
- {e3cli-1.0.0 → e3cli-1.0.2}/PKG-INFO +1 -1
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/__init__.py +1 -1
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/interactive.py +1 -2
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/course_name.py +9 -5
- {e3cli-1.0.0 → e3cli-1.0.2}/pyproject.toml +1 -1
- {e3cli-1.0.0 → e3cli-1.0.2}/tests/test_basic.py +34 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/.github/workflows/ci.yml +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/.gitignore +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/CLAUDE.md +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/COMMIT_EDITMSG +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/Formula/e3cli.rb +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/HEAD +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/LICENSE +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/Makefile +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/README.md +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/README_zh-TW.md +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/config +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/description +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/__main__.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/agent_prompt.md +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/ai/__init__.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/__init__.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/assignments.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/client.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/courses.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/files.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/forums.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/members.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/messages.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/api/site.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/auth.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/cli.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/__init__.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/_common.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/announcements.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/assignments.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/courses.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/download.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/login.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/logout.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/members.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/message.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/profile.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/schedule.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/setup.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/skill.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/submit.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/commands/sync.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/config.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/credential.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/formatting.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/http.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/i18n.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/scheduler/__init__.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/scheduler/cron.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/semester.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/skills/e3cli/SKILL.md +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/storage/__init__.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/storage/db.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/storage/models.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/storage/tracking.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/e3cli/tui_menu.py +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/gk/config +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/applypatch-msg.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/commit-msg.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/fsmonitor-watchman.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/post-update.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/pre-applypatch.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/pre-commit.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/pre-merge-commit.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/pre-push.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/pre-rebase.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/pre-receive.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/prepare-commit-msg.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/push-to-checkout.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/sendemail-validate.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/hooks/update.sample +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/index +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/info/exclude +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/logs/HEAD +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/logs/refs/heads/main +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/logs/refs/remotes/origin/main +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/00/12f54a62a13459820d72b63eee8781d5cc0fae +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/00/373e054c653e54b45cacae42d71dff863626bf +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/04/9ee8e5968a9a80f0f1ac53d12141c61e7298ba +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/04/e0353337b6bb0c0ba43625456e9aaf13090a90 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/05/0fec5da6aa35de1058b11671dfd6255b4d6b50 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/06/5c820fc3efcd99754c56197a9c4e7142da710d +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/07/01890044580c4644114b781d474012b2fade80 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/07/fb70ff1c509aad1f137a9255b9cb98733472a3 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/0e/89da06e2d2273057dfa03705c42bbc57af1a6a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/13/ad53a74b643378a7aebfe32d672b256ab73bef +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/13/fb66226ef7de52c039b1030460c5bb9ad1d576 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/14/f44dcbbf53914d2d2b5b5a43453932fb0c6dd6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/15/6da5879f795abd72f645bbcadf18a4928a7502 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/19/f9906c2882926f53e77b4be8be579906954a69 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/1a/3f91d11c7c9c764fcd1ed01a4a0c3f13b68fee +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/1c/1765c4b372bd085c6224472de72f66e8d9fbe9 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/22/e1020c805f3235c5c85d711a45d70d42883de0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/24/7f60ac43c8a065926f3228575a34d0ecd6f93d +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/25/4d6ec800e32759015479a68a3afd096ee12680 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/27/1aee134d84254ba525ce728b3ecbbcbd73fe97 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/27/41f5e19bf92e37c983e7d4d307ec09726b95ed +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/28/265727a791db9daef09c85ab159ef799908dc4 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/2d/4c64fc2752b1356569f24e6f3d53cfd8ff3236 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/31/61734dcf7d8b86372753c2552746641969ca7a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/33/3da47d4f7d08fc2836374614b902a27f1a7638 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/35/25cb5144ca2d643d918824df0f08042f8f1f19 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/35/faf439f5e7e6730398397e0988c874ec74c15e +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/37/2acc5a62b5a8a7cd97d3eb07614d2a71d65c34 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/37/f0c29518b9df6cde4d0cd7857d95b425fcaec9 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/38/8bc96a53da22ddf8d3684c10480a9ed89274a6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/38/d062de47938882cc8c951cfcd18266bfa834d0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/39/bbbcd0ade10f3066a853cca53ad5159ac78e30 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/3c/dd09e594d5716969279d6e3fcf99fca00f8504 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/3e/71c91d71be5667a313ecfae444718750b2bf55 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/3e/7febbe12d705885c2503c3e0d785e488f60966 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/3f/0235e32813f74985f0363e64a110093d979e2f +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/40/9ded4237099e6e52de508dd46ebe74cf769e79 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/41/88bc8a7a0569fd47efb215aad2e3f4a7b7e188 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/42/53425dbc4368909b4b782fd53360537d3d9033 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/42/925cbdfef5b97f5ae199323a5545810207af09 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/42/b238ab6f9c3c74cd23a14c094ad8eb1c66d52b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/43/49874ad2cdacc9d50d6ba06df25765d077248a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/43/cead7a00c7ef98e1d5c9c86e50a3ccde712277 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/43/e88c1a0a115fc72390e7bcef8ce0a8328a4e05 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/45/9c23839b54e81c741fd2b5241c2b164079fcc1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/47/d9fe1a890a3d711662f4f414aee1ea6ae92261 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/49/da3d511c413f21dca0f072ad52b0aca2d3c167 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/4f/1897fc4248a024fc88e51f53f9028f531318cc +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/50/f89469bbe802dad848dcfeb2a8e447d4cd5787 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/51/7ac4b389a310399e096baab0af89f1e5de7b3b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/52/61e3b09b4722a7003c53a643085ca69e0c7bbd +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/53/7671d097d835bda94f0460295ce1cf49eda99a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/54/8d12b92b82f95dc93b4f069086d8214651593d +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/55/2cd273856516fd1a5e026ef23c9ffeb5a33876 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/56/52f31ea165a3ace62d1394af754a8aac78aa9f +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/57/9c69b0b67ebff094514cec01f692e21ca5e965 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/57/ddc6c8820bd8ec98845e7f5a29bf3302f0f481 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/58/2fba780a9cb7a9f312bd21cf97f16bc5b347c3 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/5c/6b70ca4f2f822429a97a84428580966d84ab3a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/5e/c686a09ef712b11372e38d25c958b027b3f21f +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/5f/96e4a89ab06b40be8c45cd0d975bdc2f957064 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/60/c9053920fd6a8cd64eb28d8df99bcc2d176d59 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/62/1ab88d46df0f1b1015e250f4c8174729629400 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/62/5d72f7372bae8ab3ccc056e829c277c0705d1b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/64/1ee83ac5a80cc7ae2e5f036db6329eacd03deb +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/65/011e04aeddd4c893a7a64b7ef745e9ad1af3c3 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/66/b5f21689d122c08ee3b98d35f3de096addcfcc +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/69/89864c6313789a85608f01eda8976e1215bd31 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/69/db255149b01f9ab01b48138fbb0f2d9b8b1acd +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6a/597477c08142472e4a0559811e459ae7b127fc +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6a/5e5e8ca97f2dec142b2ba15ed97a8493c16a54 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6b/d7a53ed2c5cd4c0e97267b70fff1dd461b60b7 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6d/05c5aaad4ff44578bbc46b5f7fc96f0d114e04 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6d/5c36f68694ad597a4deeba39e56e561ba72f2f +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6e/3f7883a133ec8310cf8ad07cba6aead4583ff9 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/6f/15710e7621abc864dabb788c5dfcab181e4551 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/71/6894eaf5165344374d82dda25e82eff5fce119 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/71/ca2fc16d0959c7465d57077a260156674274ba +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/74/0db02cd55f69b9f21f49a359fc14c15ad7f8ce +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/76/37fd54a47bfbdf2eed4827b78dff6019b87e57 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/79/15535a493620715580f5d0ce8c2481172d44bd +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/7b/ad63d2dd7dab6c33f73a31bd359129523ac5ce +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/7c/95c6bec18763286e0100ebc4fbef71df48b0ae +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/7f/a3240ccd3661f7786bd269a0b0875cd9037b4b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/82/8511321c72b509d8b39d3a392014e2748036ad +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/84/3e8bf8d7bf26780eb4c44f0e1733dae7df37da +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/84/45dbe199e0d8e83aa85b04f68c4b4e97764c46 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/85/58de1a164b671ae0c5e9867140f4d105b26c71 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/85/bfef5de75cdd3313dea22060cd9f22bf6f611c +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/87/075d1b2ca01520a54b6e2053d2b07e30ff550e +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/8a/2f2b74b3a7f9b0f2969ff455d1b5a149189522 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/8b/da82680cf77bd85ef26d162f09df5b555c4817 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/8b/f368e49da5649603590fd2ad157fb423f91240 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/8c/988f80dcde632bee9389cb52d7c2639e358676 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/8d/9cc78f614e082762dfd1af4d90b83e97509ba4 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/91/b7e6699fcf2d3d87bc9209c30743851b95937e +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/97/6c6c60bcbbfe1b2ea7dc08631420753e2a2c55 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/98/414112321df2d4fef51640978555b7b0a10740 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/98/5dbb79e4f3157ba4a5b967ca1f045087fe718c +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/9b/8451b0fde38dfc5250c52aab3ef3fd30ef616d +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/9d/04ed7e9c2fdc16eadb72867c45c682d0661d8e +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/9d/1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/9e/9190183a3e710fd6a3caabafda0395aacc4907 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/a4/9ab06df8e92e9921f006c4687a8119a41f140c +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/a4/9e182d79178f30917cb9d5d007bf4ad4354efc +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/a5/374e27f1f437b7b8d795bdbba9990e1b33ac4a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/a9/621b26eb6fcf44e82b8f40fe15a08db273ea94 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/a9/958ca6bbbce4793eb63dfc75053f6f2c468f7d +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/ab/8112dc0e039a6764e18515bc8b9d25bf8cba72 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/ad/86572a7a3d9c41b39f68c1509f45eeb3c47145 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/ae/7c0c0693884ee9968bd46c7e3c1c4801c93f07 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/af/66d7ee37e22b5b4ffcb43392bcd6fe58b7189b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b0/1eb7d29ce867088dcfec990e3a118ee7d3a3b2 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b0/6bfa35440cb0bf33a698db8b116077b885dade +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b2/30e20e02ded29d01eb93f89b62ab47fb378e1f +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b2/e68381120a59886f7999876775e9b3dfeaa550 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b3/a239ea6bac51a6315988af95d83e86323aa461 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b4/1e24e40f90ad6c12b6f840ecdb133b2749ca7e +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/b9/4bb6724a0646fb1636a66de603cec15e7dfa3e +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/bb/8fccf2b545f4ba46149fb07bd1f700ae7bcc87 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/be/9fc276a620ea29d87e2001489e436f6e714a34 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/bf/a019fa30db2df7e7732d119032e84391c3b6ce +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/c0/2beae1cbe94f20d2a4ef88b46bd8ade684f911 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/c6/1651ba7a27cd0ff5c726c4ce79751facc64f39 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/c7/f3f6ba90a1ec28fdef6ec7b10d82f4ad144969 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/cb/b097bc0ed0f65614e13f563a22624f0ce078e6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/cd/3c462e6a24c9757a0fffd7c42abce926e1adf5 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/ce/f38215c9c7dc239421d85ca93221ad7beb63cb +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/cf/286c5bf7cffc4bf93b51554d4299845172df84 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/d0/aa218f92135250fa46b8490c68f4e77846b1b1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/d1/70d82f10fffbce5936fc1d0f5e1f051c354413 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/d1/eccedbd9604b59bcc247b6f8a177df5486ce57 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/d4/1a891e54bfd7ddd745555624ce9142a47e5fdd +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/d8/2d02db21187a83d77a71c8665e1b4699e481fb +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/d8/76cc79a2f25f4e8616805811110f700e277af2 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/db/3bb89cba087a88feb4075b467732846a1d0118 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/db/dc7e591f97aab4da5d2acb29194355c277acf6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/df/8c39b5b6cfcf19f8f27d5913830cb0a8fcd4c8 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/df/a8267b7bcb40cc3c4524934d386516e27dd5db +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e0/87a95e8c14f5d090c04d19d3a9f91a208b7841 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e0/e63743c9660300f76483d3ad27ecd85241cdc5 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e2/2ab51073af126f1b602884b02dad11f9027942 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e4/1b4051ac3bac5364f7a5ce048ecc41147857d6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e4/1dbd057baa81d4e660a52d2486ee700f8c7b60 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e4/fba2702e9b6e30902b10ef946b8e05ee14b3d6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e5/23965887274b5a3060bca39ec005e6fe99883b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e6/3334965c2117237f22708d1c4681be5d77574b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/e8/a732d4490c14cf239dd7081c8c1d15b44c495b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/eb/22d1e687a8a2dd36474c7add9535ebe9682d3b +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/eb/7320ad4e2f7d18b503c64b2a983c2a41fc8eb1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/ec/2badeec80e4ddc66a5168d8c3aec878a30f813 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/ec/d43841d2e6e7268caf4a1bb03c3f549ca75f49 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f0/c3d899d1d7578174419e3d21fbb43d469ea0df +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f2/d740d8021553398f98f1302398006e988697ef +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f3/505619e9502b8a75ce04cf75ccb61e54f16cf5 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f3/681d2437d363e9865aec3eb4e3e8f5aff46ca6 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f3/b1f01d9f8fab935f87bee101fa0f1f944c30d8 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f3/e2082feab4cb9a889f623d8fe7b58628f82da9 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f4/21fa018addaacd7f59e11603b182b38207abca +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f5/9e7ad7dad379a9752969e3443d3ed60a82cdf1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f6/d28255ddf6cd98d69342c282663771093ad834 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f7/c7da26bbfca63ed8af08f9b7b1ace4930dad44 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/f9/aece29cc134fc99f629129d46c712f015b00c0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fb/4fbcdf3b0da9864651c5d50322b27c21f26fed +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fb/ba70de6b161e2918d9d9e62d734abd85d01ae1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fb/bc2db563e1d0b7a0745a04fd0a0c5b5ef7e6aa +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fc/03924609632d9a9f820119bdf5a9ddf5a4c90a +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fd/3fb430f4e9190752eb58cef5019660e9aa92ef +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fd/d0e4feee582591e85b9d488dd4fa1794364abb +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/objects/fe/092d97fe5a0e2a3d7b807e1a9f44735281a286 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/heads/main +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/remotes/origin/main +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.1.0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.2.0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.3.0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.3.1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.3.2 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.4.0 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.4.1 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/refs/tags/v0.4.3 +0 -0
- {e3cli-1.0.0 → e3cli-1.0.2}/tests/__init__.py +0 -0
|
@@ -85,12 +85,17 @@ jobs:
|
|
|
85
85
|
m = re.match(r'^([A-Za-z0-9]([A-Za-z0-9._-]*[A-Za-z0-9])?)', r)
|
|
86
86
|
if m:
|
|
87
87
|
deps.append(m.group(1).lower())
|
|
88
|
-
|
|
88
|
+
# Prefer pure-Python wheel (py3-none-any) → no compile, much faster brew install.
|
|
89
|
+
# Fall back to sdist for packages without a universal wheel.
|
|
90
|
+
wheel_url = wheel_sha = sdist_url = sdist_sha = ""
|
|
89
91
|
for f in data["releases"].get(ver, []):
|
|
90
|
-
if f["packagetype"] == "
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
if f["packagetype"] == "bdist_wheel" and "py3-none-any" in f["filename"]:
|
|
93
|
+
wheel_url, wheel_sha = f["url"], f["digests"]["sha256"]
|
|
94
|
+
elif f["packagetype"] == "sdist" and not sdist_url:
|
|
95
|
+
sdist_url, sdist_sha = f["url"], f["digests"]["sha256"]
|
|
96
|
+
url = wheel_url or sdist_url
|
|
97
|
+
sha = wheel_sha or sdist_sha
|
|
98
|
+
return {"name": pkg_normalized, "deps": deps, "url": url, "sha256": sha}
|
|
94
99
|
|
|
95
100
|
# Resolve ALL transitive dependencies
|
|
96
101
|
seen = set()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: e3cli
|
|
3
|
-
Version: 1.0.
|
|
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
|
|
@@ -25,7 +25,7 @@ from e3cli.api.messages import send_message
|
|
|
25
25
|
from e3cli.api.site import get_site_info
|
|
26
26
|
from e3cli.commands._common import get_client, get_db
|
|
27
27
|
from e3cli.config import load_config
|
|
28
|
-
from e3cli.course_name import display_name, display_with_code, migrate_course_dir
|
|
28
|
+
from e3cli.course_name import display_name, display_with_code, migrate_course_dir
|
|
29
29
|
from e3cli.credential import activate_profile, get_active_profile, list_profiles
|
|
30
30
|
from e3cli.formatting import format_duedate, format_submission_status, sort_assignments
|
|
31
31
|
from e3cli.i18n import t
|
|
@@ -188,7 +188,6 @@ def _course_list_menu(client, db, cfg, info, courses, show_all=False):
|
|
|
188
188
|
return MenuItem(
|
|
189
189
|
label,
|
|
190
190
|
key=str(c["id"]),
|
|
191
|
-
description=other_lang_name(full, short),
|
|
192
191
|
)
|
|
193
192
|
|
|
194
193
|
if show_all:
|
|
@@ -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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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:
|
|
@@ -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
|
{e3cli-1.0.0 → e3cli-1.0.2}/HEAD
RENAMED
|
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
|
|
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
|
|
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
|