e3cli 0.8.4__tar.gz → 0.8.6__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-0.8.4 → e3cli-0.8.6}/PKG-INFO +1 -1
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/__init__.py +1 -1
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/assignments.py +1 -1
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/interactive.py +10 -10
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/sync.py +1 -1
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/tui_menu.py +37 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/pyproject.toml +1 -1
- {e3cli-0.8.4 → e3cli-0.8.6}/.github/workflows/ci.yml +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/.github/workflows/release.yml +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/.gitignore +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/CLAUDE.md +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/COMMIT_EDITMSG +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/Formula/e3cli.rb +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/HEAD +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/LICENSE +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/Makefile +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/README.md +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/README_zh-TW.md +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/config +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/description +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/__main__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/agent_prompt.md +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/ai/__init__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/__init__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/assignments.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/client.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/courses.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/files.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/forums.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/members.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/messages.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/site.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/auth.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/cli.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/__init__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/_common.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/announcements.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/courses.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/download.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/login.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/logout.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/members.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/message.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/profile.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/schedule.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/setup.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/skill.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/submit.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/config.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/credential.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/formatting.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/http.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/i18n.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/scheduler/__init__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/scheduler/cron.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/semester.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/skills/e3cli/SKILL.md +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/__init__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/db.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/models.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/tracking.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/gk/config +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/applypatch-msg.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/commit-msg.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/fsmonitor-watchman.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/post-update.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-applypatch.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-commit.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-merge-commit.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-push.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-rebase.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-receive.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/prepare-commit-msg.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/push-to-checkout.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/sendemail-validate.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/hooks/update.sample +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/index +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/info/exclude +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/logs/HEAD +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/logs/refs/heads/main +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/logs/refs/remotes/origin/main +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/00/12f54a62a13459820d72b63eee8781d5cc0fae +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/00/373e054c653e54b45cacae42d71dff863626bf +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/04/9ee8e5968a9a80f0f1ac53d12141c61e7298ba +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/04/e0353337b6bb0c0ba43625456e9aaf13090a90 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/05/0fec5da6aa35de1058b11671dfd6255b4d6b50 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/06/5c820fc3efcd99754c56197a9c4e7142da710d +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/07/01890044580c4644114b781d474012b2fade80 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/07/fb70ff1c509aad1f137a9255b9cb98733472a3 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/0e/89da06e2d2273057dfa03705c42bbc57af1a6a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/13/ad53a74b643378a7aebfe32d672b256ab73bef +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/13/fb66226ef7de52c039b1030460c5bb9ad1d576 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/14/f44dcbbf53914d2d2b5b5a43453932fb0c6dd6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/15/6da5879f795abd72f645bbcadf18a4928a7502 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/19/f9906c2882926f53e77b4be8be579906954a69 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/1a/3f91d11c7c9c764fcd1ed01a4a0c3f13b68fee +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/1c/1765c4b372bd085c6224472de72f66e8d9fbe9 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/22/e1020c805f3235c5c85d711a45d70d42883de0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/24/7f60ac43c8a065926f3228575a34d0ecd6f93d +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/25/4d6ec800e32759015479a68a3afd096ee12680 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/27/1aee134d84254ba525ce728b3ecbbcbd73fe97 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/27/41f5e19bf92e37c983e7d4d307ec09726b95ed +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/28/265727a791db9daef09c85ab159ef799908dc4 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/2d/4c64fc2752b1356569f24e6f3d53cfd8ff3236 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/31/61734dcf7d8b86372753c2552746641969ca7a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/33/3da47d4f7d08fc2836374614b902a27f1a7638 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/35/25cb5144ca2d643d918824df0f08042f8f1f19 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/35/faf439f5e7e6730398397e0988c874ec74c15e +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/37/2acc5a62b5a8a7cd97d3eb07614d2a71d65c34 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/37/f0c29518b9df6cde4d0cd7857d95b425fcaec9 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/38/8bc96a53da22ddf8d3684c10480a9ed89274a6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/38/d062de47938882cc8c951cfcd18266bfa834d0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/39/bbbcd0ade10f3066a853cca53ad5159ac78e30 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/3c/dd09e594d5716969279d6e3fcf99fca00f8504 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/3e/71c91d71be5667a313ecfae444718750b2bf55 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/3e/7febbe12d705885c2503c3e0d785e488f60966 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/3f/0235e32813f74985f0363e64a110093d979e2f +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/40/9ded4237099e6e52de508dd46ebe74cf769e79 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/41/88bc8a7a0569fd47efb215aad2e3f4a7b7e188 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/42/53425dbc4368909b4b782fd53360537d3d9033 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/42/925cbdfef5b97f5ae199323a5545810207af09 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/42/b238ab6f9c3c74cd23a14c094ad8eb1c66d52b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/43/49874ad2cdacc9d50d6ba06df25765d077248a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/43/cead7a00c7ef98e1d5c9c86e50a3ccde712277 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/43/e88c1a0a115fc72390e7bcef8ce0a8328a4e05 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/45/9c23839b54e81c741fd2b5241c2b164079fcc1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/47/d9fe1a890a3d711662f4f414aee1ea6ae92261 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/49/da3d511c413f21dca0f072ad52b0aca2d3c167 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/4f/1897fc4248a024fc88e51f53f9028f531318cc +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/50/f89469bbe802dad848dcfeb2a8e447d4cd5787 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/51/7ac4b389a310399e096baab0af89f1e5de7b3b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/52/61e3b09b4722a7003c53a643085ca69e0c7bbd +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/53/7671d097d835bda94f0460295ce1cf49eda99a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/54/8d12b92b82f95dc93b4f069086d8214651593d +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/55/2cd273856516fd1a5e026ef23c9ffeb5a33876 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/56/52f31ea165a3ace62d1394af754a8aac78aa9f +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/57/9c69b0b67ebff094514cec01f692e21ca5e965 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/57/ddc6c8820bd8ec98845e7f5a29bf3302f0f481 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/58/2fba780a9cb7a9f312bd21cf97f16bc5b347c3 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/5c/6b70ca4f2f822429a97a84428580966d84ab3a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/5e/c686a09ef712b11372e38d25c958b027b3f21f +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/5f/96e4a89ab06b40be8c45cd0d975bdc2f957064 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/60/c9053920fd6a8cd64eb28d8df99bcc2d176d59 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/62/1ab88d46df0f1b1015e250f4c8174729629400 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/62/5d72f7372bae8ab3ccc056e829c277c0705d1b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/64/1ee83ac5a80cc7ae2e5f036db6329eacd03deb +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/65/011e04aeddd4c893a7a64b7ef745e9ad1af3c3 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/66/b5f21689d122c08ee3b98d35f3de096addcfcc +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/69/89864c6313789a85608f01eda8976e1215bd31 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/69/db255149b01f9ab01b48138fbb0f2d9b8b1acd +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6a/597477c08142472e4a0559811e459ae7b127fc +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6a/5e5e8ca97f2dec142b2ba15ed97a8493c16a54 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6b/d7a53ed2c5cd4c0e97267b70fff1dd461b60b7 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6d/05c5aaad4ff44578bbc46b5f7fc96f0d114e04 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6d/5c36f68694ad597a4deeba39e56e561ba72f2f +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6e/3f7883a133ec8310cf8ad07cba6aead4583ff9 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/6f/15710e7621abc864dabb788c5dfcab181e4551 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/71/6894eaf5165344374d82dda25e82eff5fce119 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/71/ca2fc16d0959c7465d57077a260156674274ba +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/74/0db02cd55f69b9f21f49a359fc14c15ad7f8ce +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/76/37fd54a47bfbdf2eed4827b78dff6019b87e57 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/79/15535a493620715580f5d0ce8c2481172d44bd +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/7b/ad63d2dd7dab6c33f73a31bd359129523ac5ce +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/7c/95c6bec18763286e0100ebc4fbef71df48b0ae +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/7f/a3240ccd3661f7786bd269a0b0875cd9037b4b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/82/8511321c72b509d8b39d3a392014e2748036ad +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/84/3e8bf8d7bf26780eb4c44f0e1733dae7df37da +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/84/45dbe199e0d8e83aa85b04f68c4b4e97764c46 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/85/58de1a164b671ae0c5e9867140f4d105b26c71 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/85/bfef5de75cdd3313dea22060cd9f22bf6f611c +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/87/075d1b2ca01520a54b6e2053d2b07e30ff550e +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/8a/2f2b74b3a7f9b0f2969ff455d1b5a149189522 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/8b/da82680cf77bd85ef26d162f09df5b555c4817 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/8b/f368e49da5649603590fd2ad157fb423f91240 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/8c/988f80dcde632bee9389cb52d7c2639e358676 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/8d/9cc78f614e082762dfd1af4d90b83e97509ba4 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/91/b7e6699fcf2d3d87bc9209c30743851b95937e +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/97/6c6c60bcbbfe1b2ea7dc08631420753e2a2c55 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/98/414112321df2d4fef51640978555b7b0a10740 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/98/5dbb79e4f3157ba4a5b967ca1f045087fe718c +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/9b/8451b0fde38dfc5250c52aab3ef3fd30ef616d +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/9d/04ed7e9c2fdc16eadb72867c45c682d0661d8e +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/9d/1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/9e/9190183a3e710fd6a3caabafda0395aacc4907 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/a4/9ab06df8e92e9921f006c4687a8119a41f140c +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/a4/9e182d79178f30917cb9d5d007bf4ad4354efc +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/a5/374e27f1f437b7b8d795bdbba9990e1b33ac4a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/a9/621b26eb6fcf44e82b8f40fe15a08db273ea94 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/a9/958ca6bbbce4793eb63dfc75053f6f2c468f7d +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/ab/8112dc0e039a6764e18515bc8b9d25bf8cba72 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/ad/86572a7a3d9c41b39f68c1509f45eeb3c47145 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/ae/7c0c0693884ee9968bd46c7e3c1c4801c93f07 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/af/66d7ee37e22b5b4ffcb43392bcd6fe58b7189b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b0/1eb7d29ce867088dcfec990e3a118ee7d3a3b2 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b0/6bfa35440cb0bf33a698db8b116077b885dade +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b2/30e20e02ded29d01eb93f89b62ab47fb378e1f +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b2/e68381120a59886f7999876775e9b3dfeaa550 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b3/a239ea6bac51a6315988af95d83e86323aa461 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b4/1e24e40f90ad6c12b6f840ecdb133b2749ca7e +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/b9/4bb6724a0646fb1636a66de603cec15e7dfa3e +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/bb/8fccf2b545f4ba46149fb07bd1f700ae7bcc87 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/be/9fc276a620ea29d87e2001489e436f6e714a34 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/bf/a019fa30db2df7e7732d119032e84391c3b6ce +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/c0/2beae1cbe94f20d2a4ef88b46bd8ade684f911 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/c6/1651ba7a27cd0ff5c726c4ce79751facc64f39 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/c7/f3f6ba90a1ec28fdef6ec7b10d82f4ad144969 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/cb/b097bc0ed0f65614e13f563a22624f0ce078e6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/cd/3c462e6a24c9757a0fffd7c42abce926e1adf5 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/ce/f38215c9c7dc239421d85ca93221ad7beb63cb +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/cf/286c5bf7cffc4bf93b51554d4299845172df84 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/d0/aa218f92135250fa46b8490c68f4e77846b1b1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/d1/70d82f10fffbce5936fc1d0f5e1f051c354413 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/d1/eccedbd9604b59bcc247b6f8a177df5486ce57 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/d4/1a891e54bfd7ddd745555624ce9142a47e5fdd +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/d8/2d02db21187a83d77a71c8665e1b4699e481fb +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/d8/76cc79a2f25f4e8616805811110f700e277af2 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/db/3bb89cba087a88feb4075b467732846a1d0118 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/db/dc7e591f97aab4da5d2acb29194355c277acf6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/df/8c39b5b6cfcf19f8f27d5913830cb0a8fcd4c8 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/df/a8267b7bcb40cc3c4524934d386516e27dd5db +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e0/87a95e8c14f5d090c04d19d3a9f91a208b7841 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e0/e63743c9660300f76483d3ad27ecd85241cdc5 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e2/2ab51073af126f1b602884b02dad11f9027942 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e4/1b4051ac3bac5364f7a5ce048ecc41147857d6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e4/1dbd057baa81d4e660a52d2486ee700f8c7b60 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e4/fba2702e9b6e30902b10ef946b8e05ee14b3d6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e5/23965887274b5a3060bca39ec005e6fe99883b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e6/3334965c2117237f22708d1c4681be5d77574b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/e8/a732d4490c14cf239dd7081c8c1d15b44c495b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/eb/22d1e687a8a2dd36474c7add9535ebe9682d3b +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/eb/7320ad4e2f7d18b503c64b2a983c2a41fc8eb1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/ec/2badeec80e4ddc66a5168d8c3aec878a30f813 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/ec/d43841d2e6e7268caf4a1bb03c3f549ca75f49 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f0/c3d899d1d7578174419e3d21fbb43d469ea0df +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f2/d740d8021553398f98f1302398006e988697ef +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/505619e9502b8a75ce04cf75ccb61e54f16cf5 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/681d2437d363e9865aec3eb4e3e8f5aff46ca6 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/b1f01d9f8fab935f87bee101fa0f1f944c30d8 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/e2082feab4cb9a889f623d8fe7b58628f82da9 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f4/21fa018addaacd7f59e11603b182b38207abca +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f5/9e7ad7dad379a9752969e3443d3ed60a82cdf1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f6/d28255ddf6cd98d69342c282663771093ad834 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f7/c7da26bbfca63ed8af08f9b7b1ace4930dad44 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/f9/aece29cc134fc99f629129d46c712f015b00c0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fb/4fbcdf3b0da9864651c5d50322b27c21f26fed +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fb/ba70de6b161e2918d9d9e62d734abd85d01ae1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fb/bc2db563e1d0b7a0745a04fd0a0c5b5ef7e6aa +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fc/03924609632d9a9f820119bdf5a9ddf5a4c90a +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fd/3fb430f4e9190752eb58cef5019660e9aa92ef +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fd/d0e4feee582591e85b9d488dd4fa1794364abb +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/objects/fe/092d97fe5a0e2a3d7b807e1a9f44735281a286 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/heads/main +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/remotes/origin/main +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.1.0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.2.0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.3.0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.3.1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.3.2 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.4.0 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.4.1 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.4.3 +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/tests/__init__.py +0 -0
- {e3cli-0.8.4 → e3cli-0.8.6}/tests/test_basic.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: e3cli
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.6
|
|
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
|
|
@@ -62,7 +62,7 @@ def assignments(
|
|
|
62
62
|
course_list = filtered
|
|
63
63
|
|
|
64
64
|
courseids = [c["id"] for c in course_list]
|
|
65
|
-
course_names = {c["id"]: c.get("shortname", "") for c in course_list}
|
|
65
|
+
course_names = {c["id"]: c.get("fullname", "") or c.get("shortname", "") for c in course_list}
|
|
66
66
|
|
|
67
67
|
if not courseids:
|
|
68
68
|
console.print(f"[yellow]{t('common.no_courses')}[/yellow]")
|
|
@@ -34,7 +34,7 @@ from e3cli.semester import (
|
|
|
34
34
|
get_current_semester_code,
|
|
35
35
|
group_by_semester,
|
|
36
36
|
)
|
|
37
|
-
from e3cli.tui_menu import MenuItem, show_menu_fullscreen, wait_for_back
|
|
37
|
+
from e3cli.tui_menu import MenuItem, prompt_with_back, show_menu_fullscreen, wait_for_back
|
|
38
38
|
|
|
39
39
|
console = Console()
|
|
40
40
|
app = typer.Typer()
|
|
@@ -511,9 +511,9 @@ def _assignments_view(client, db, info, cid, cname):
|
|
|
511
511
|
while True:
|
|
512
512
|
_show_assignments_table(sorted_raw, f"{t('tui.assignments')} — {cname}")
|
|
513
513
|
console.print(f"\n[dim]{t('tui.view_detail')}[/dim]")
|
|
514
|
-
choice =
|
|
514
|
+
choice = prompt_with_back("> ")
|
|
515
515
|
|
|
516
|
-
if choice in ("q", "b", "back", ""):
|
|
516
|
+
if choice is None or choice in ("q", "b", "back", ""):
|
|
517
517
|
break
|
|
518
518
|
if choice.isdigit():
|
|
519
519
|
idx = int(choice) - 1
|
|
@@ -524,7 +524,7 @@ def _assignments_view(client, db, info, cid, cname):
|
|
|
524
524
|
|
|
525
525
|
def _all_assignments_view(client, db, info, courses):
|
|
526
526
|
courseids = [c["id"] for c in courses]
|
|
527
|
-
course_names = {c["id"]: c.get("shortname", "") for c in courses}
|
|
527
|
+
course_names = {c["id"]: c.get("fullname", "") or c.get("shortname", "") for c in courses}
|
|
528
528
|
|
|
529
529
|
if not courseids:
|
|
530
530
|
console.print(f"[yellow]{t('common.no_courses')}[/yellow]")
|
|
@@ -551,9 +551,9 @@ def _all_assignments_view(client, db, info, courses):
|
|
|
551
551
|
while True:
|
|
552
552
|
_show_assignments_table(sorted_raw, t("tui.assignments"), show_course=True)
|
|
553
553
|
console.print(f"\n[dim]{t('tui.view_detail')}[/dim]")
|
|
554
|
-
choice =
|
|
554
|
+
choice = prompt_with_back("> ")
|
|
555
555
|
|
|
556
|
-
if choice in ("q", "b", "back", ""):
|
|
556
|
+
if choice is None or choice in ("q", "b", "back", ""):
|
|
557
557
|
break
|
|
558
558
|
if choice.isdigit():
|
|
559
559
|
idx = int(choice) - 1
|
|
@@ -865,9 +865,9 @@ def _announcements_view(client, cid, cname):
|
|
|
865
865
|
|
|
866
866
|
console.print(table)
|
|
867
867
|
console.print(f"\n[dim]{t('announce.view_detail')}[/dim]")
|
|
868
|
-
choice =
|
|
868
|
+
choice = prompt_with_back("> ")
|
|
869
869
|
|
|
870
|
-
if choice in ("q", "b", "back", ""):
|
|
870
|
+
if choice is None or choice in ("q", "b", "back", ""):
|
|
871
871
|
break
|
|
872
872
|
|
|
873
873
|
if choice.isdigit():
|
|
@@ -943,9 +943,9 @@ def _members_view(client, info, cid, cname):
|
|
|
943
943
|
console.print(f"[dim]{t('members.total', n=len(all_users))}[/dim]")
|
|
944
944
|
console.print(f"\n[dim]{t('members.select_msg')}[/dim]")
|
|
945
945
|
|
|
946
|
-
choice =
|
|
946
|
+
choice = prompt_with_back("> ")
|
|
947
947
|
|
|
948
|
-
if choice in ("q", "b", "back", ""):
|
|
948
|
+
if choice is None or choice in ("q", "b", "back", ""):
|
|
949
949
|
break
|
|
950
950
|
|
|
951
951
|
if choice.isdigit():
|
|
@@ -95,7 +95,7 @@ def sync(
|
|
|
95
95
|
for c in course_list:
|
|
96
96
|
cid = c["id"]
|
|
97
97
|
courseids.append(cid)
|
|
98
|
-
course_names[cid] = c.get("shortname", "")
|
|
98
|
+
course_names[cid] = c.get("fullname", "") or c.get("shortname", "")
|
|
99
99
|
db.upsert_course(cid, c.get("shortname", ""), c.get("fullname", ""))
|
|
100
100
|
|
|
101
101
|
# 下載教材
|
|
@@ -265,6 +265,43 @@ def _render_menu(
|
|
|
265
265
|
_last_render_lines = len(output)
|
|
266
266
|
|
|
267
267
|
|
|
268
|
+
def prompt_with_back(prompt_text: str = "> ") -> str | None:
|
|
269
|
+
"""
|
|
270
|
+
讀一行輸入,支援左鍵/esc/q 直接返回(不需先清空輸入)。
|
|
271
|
+
回傳:
|
|
272
|
+
- 字串:使用者按 Enter 結束輸入(可能為空字串)
|
|
273
|
+
- None:使用者按 ←、esc、q 或 Ctrl+C → 表示返回
|
|
274
|
+
支援 backspace 修正打字。
|
|
275
|
+
"""
|
|
276
|
+
sys.stdout.write(f"\033[1;36m{prompt_text}\033[0m")
|
|
277
|
+
sys.stdout.flush()
|
|
278
|
+
buf: list[str] = []
|
|
279
|
+
while True:
|
|
280
|
+
key = _read_key()
|
|
281
|
+
if key in ("left", "esc", "quit"):
|
|
282
|
+
sys.stdout.write("\r\033[K")
|
|
283
|
+
sys.stdout.flush()
|
|
284
|
+
return None
|
|
285
|
+
if key == "q" and not buf:
|
|
286
|
+
sys.stdout.write("\r\033[K")
|
|
287
|
+
sys.stdout.flush()
|
|
288
|
+
return None
|
|
289
|
+
if key == "enter":
|
|
290
|
+
sys.stdout.write("\n")
|
|
291
|
+
sys.stdout.flush()
|
|
292
|
+
return "".join(buf)
|
|
293
|
+
if key == "backspace":
|
|
294
|
+
if buf:
|
|
295
|
+
buf.pop()
|
|
296
|
+
sys.stdout.write("\b \b")
|
|
297
|
+
sys.stdout.flush()
|
|
298
|
+
continue
|
|
299
|
+
if len(key) == 1 and key.isprintable():
|
|
300
|
+
buf.append(key)
|
|
301
|
+
sys.stdout.write(key)
|
|
302
|
+
sys.stdout.flush()
|
|
303
|
+
|
|
304
|
+
|
|
268
305
|
def wait_for_back(prompt_text: str = "") -> None:
|
|
269
306
|
"""等待使用者按 Enter、← 或 q 返回。支援方向鍵。"""
|
|
270
307
|
if prompt_text:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e3cli-0.8.4 → e3cli-0.8.6}/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
|