py2ls 0.1.9.9__tar.gz → 0.1.10.1__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.
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/PKG-INFO +1 -1
- py2ls-0.1.10.1/py2ls/.git/COMMIT_EDITMSG +1 -0
- py2ls-0.1.10.1/py2ls/.git/FETCH_HEAD +1 -0
- py2ls-0.1.10.1/py2ls/.git/index +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/logs/HEAD +1 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/logs/refs/heads/main +1 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/logs/refs/remotes/origin/HEAD +1 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/logs/refs/remotes/origin/main +1 -0
- py2ls-0.1.10.1/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/78/063f4c863fc371ec0313303c0a81283b35d9b6 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/82/70b319ce4046854fbe7dc41054b6c2d112dab2 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/85/aee46f478e9afdb84d50a05242c53b04ed2e21 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/86/e288b46f8fe179907e4413f665aeb5053fddb1 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/94/f7dbe88e80c4205a901b71eb8f181974376bba +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/9b/ec5ee2236ee2d5532c36bfd132e23c58fdb69c +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/b3/4f7f271c6d6105e35a6556ffda71d03afe8c96 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/b3/69579064bde9de9a19d114fc33e4e48cc8c0e4 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/bf/b54d65922ce1dfda1aaa014913a54e7172d0bc +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/c1/397c6ed72c4e20ef6b9ab83163e9a6baba5b45 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/cc/45df1d317a2eb63ff1ff3a5f3b4a9f98fd92b5 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/d6/39e8af592cd75a318d8affddd1bcc70c2095f2 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/db/3f2cd643292057936230b95cf7ec3046affe11 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/de/214c626ac2dd2685bfaa0bc0fc20f528d014d7 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/e4/6c715352db9fe3c887a635f1916df4ca1f4ff9 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/e5/0580a0bd1e1b3d29f834382b80fceb61d5cf0c +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/ec/d980279432b13f0374b90ca439a6329cdece0f +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/ee/cee64eacaff022dcdc509c0c2b1da492f21060 +0 -0
- py2ls-0.1.10.1/py2ls/.git/objects/f5/61c3c1bf1c9ea9c9d1f556a7be2869f71f3bdf +0 -0
- py2ls-0.1.10.1/py2ls/.git/refs/heads/main +1 -0
- py2ls-0.1.10.1/py2ls/.git/refs/remotes/origin/main +1 -0
- py2ls-0.1.10.1/py2ls/batman.py +198 -0
- py2ls-0.1.10.1/py2ls/ich2ls.py +590 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/ips.py +1 -1
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/netfinder.py +105 -3
- py2ls-0.1.10.1/py2ls/ocr.py +557 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/plot.py +68 -11
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/pyproject.toml +1 -1
- py2ls-0.1.9.9/py2ls/.git/COMMIT_EDITMSG +0 -1
- py2ls-0.1.9.9/py2ls/.git/FETCH_HEAD +0 -1
- py2ls-0.1.9.9/py2ls/.git/index +0 -0
- py2ls-0.1.9.9/py2ls/.git/refs/heads/main +0 -1
- py2ls-0.1.9.9/py2ls/.git/refs/remotes/origin/main +0 -1
- py2ls-0.1.9.9/py2ls/ich2ls.py +0 -136
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/README.md +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.DS_Store +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/HEAD +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/config +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/description +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/commit-msg.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/post-update.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/pre-commit.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/pre-push.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/pre-rebase.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/pre-receive.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/hooks/update.sample +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/info/exclude +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.gitattributes +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/.gitignore +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/LICENSE +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/README.md +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/__init__.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/brain_atlas.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/chat.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/correlators.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/.DS_Store +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/db2ls_sql_chtsht.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/docs_links.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/lang_code_iso639.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style1.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style2.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style3.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style4.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style5.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style6.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style7.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style8.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/example/style9.pdf +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style1.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style10.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style11.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style12.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style2.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style3.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style4.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style5.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style6.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style7.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style8.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/data/styles/style9.json +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/db2ls.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/doc.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/export_requirements.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/freqanalysis.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/sleep_events_detectors.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/stats.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/translator.py +0 -0
- {py2ls-0.1.9.9 → py2ls-0.1.10.1}/py2ls/wb_detector.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
reg_update
|
@@ -0,0 +1 @@
|
|
1
|
+
86e288b46f8fe179907e4413f665aeb5053fddb1 branch 'main' of https://github.com/Jianfengliu0413/py2ls
|
Binary file
|
@@ -19,3 +19,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
|
|
19
19
|
1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948339 +0200 commit: update
|
20
20
|
bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137352 +0200 commit: update ips
|
21
21
|
a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527985 +0200 commit: update
|
22
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799 86e288b46f8fe179907e4413f665aeb5053fddb1 Jianfeng <Jianfeng.Liu0413@gmail.com> 1725537214 +0200 commit: reg_update
|
@@ -19,3 +19,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
|
|
19
19
|
1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948339 +0200 commit: update
|
20
20
|
bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137352 +0200 commit: update ips
|
21
21
|
a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527985 +0200 commit: update
|
22
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799 86e288b46f8fe179907e4413f665aeb5053fddb1 Jianfeng <Jianfeng.Liu0413@gmail.com> 1725537214 +0200 commit: reg_update
|
@@ -137,3 +137,4 @@ a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be1
|
|
137
137
|
a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721326072 +0200 remote set-head
|
138
138
|
a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@jflmbp.speedport.ip> 1723527981 +0200 remote set-head
|
139
139
|
6dc2cdf4a84e538e5d4777486aeff87e42f41799 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng Liu <macjianfeng@jflmbp.speedport.ip> 1723527990 +0200 remote set-head
|
140
|
+
86e288b46f8fe179907e4413f665aeb5053fddb1 86e288b46f8fe179907e4413f665aeb5053fddb1 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1725537218 +0200 remote set-head
|
@@ -18,3 +18,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
|
|
18
18
|
1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948342 +0200 update by push
|
19
19
|
bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137354 +0200 update by push
|
20
20
|
a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527989 +0200 update by push
|
21
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799 86e288b46f8fe179907e4413f665aeb5053fddb1 Jianfeng <Jianfeng.Liu0413@gmail.com> 1725537218 +0200 update by push
|
@@ -0,0 +1 @@
|
|
1
|
+
86e288b46f8fe179907e4413f665aeb5053fddb1
|
@@ -0,0 +1 @@
|
|
1
|
+
86e288b46f8fe179907e4413f665aeb5053fddb1
|
@@ -0,0 +1,198 @@
|
|
1
|
+
import smtplib
|
2
|
+
from email.mime.text import MIMEText
|
3
|
+
from email.mime.multipart import MIMEMultipart
|
4
|
+
from email.mime.base import MIMEBase
|
5
|
+
from email import encoders
|
6
|
+
import schedule
|
7
|
+
import time
|
8
|
+
from datetime import datetime
|
9
|
+
import os
|
10
|
+
from pprint import pp
|
11
|
+
import json
|
12
|
+
|
13
|
+
|
14
|
+
def extract_kv(
|
15
|
+
dir_data="/Users/macjianfeng/Dropbox/github/python/py2ls/confidential_data/gmail_login.json",
|
16
|
+
idx=0,
|
17
|
+
): # select the index
|
18
|
+
with open(dir_data, "r") as file:
|
19
|
+
email_login = json.load(file)
|
20
|
+
for i, (user, pd) in enumerate(email_login.items()):
|
21
|
+
if i == idx:
|
22
|
+
return user, pd
|
23
|
+
|
24
|
+
|
25
|
+
def email_to(**kwargs):
|
26
|
+
"""
|
27
|
+
usage:
|
28
|
+
email_to(who="example@gmail.com",
|
29
|
+
subject="test",
|
30
|
+
what="this is the body",
|
31
|
+
attachments="/Users/test.pdf")
|
32
|
+
Send an email with optional attachments.
|
33
|
+
|
34
|
+
:param who: Recipient email address
|
35
|
+
:param subject: Email subject
|
36
|
+
:param what: Email what
|
37
|
+
:param attachments: List of file paths to attach
|
38
|
+
"""
|
39
|
+
who, what, subject = None, None, None
|
40
|
+
attachments = False
|
41
|
+
pause_sec = False # default 10 seconds pause
|
42
|
+
|
43
|
+
signature_styles = extract_kv(idx=1)[1] # signature list
|
44
|
+
signature = signature_styles[0] # default signature,None
|
45
|
+
verbose = True
|
46
|
+
|
47
|
+
# params config
|
48
|
+
for k, v in kwargs.items():
|
49
|
+
if any(
|
50
|
+
[
|
51
|
+
"who" in k.lower(),
|
52
|
+
"whe" in k.lower(),
|
53
|
+
all(["@" in k.lower(), "." in k.lower()]),
|
54
|
+
]
|
55
|
+
): # 'who' or "where"
|
56
|
+
who = v
|
57
|
+
if any(["sub" in k.lower(), "hea" in k.lower()]): # 'subject', 'header'
|
58
|
+
subject = v
|
59
|
+
if any(
|
60
|
+
["wha" in k.lower(), "con" in k.lower(), "bod" in k.lower()]
|
61
|
+
): # 'what','content','body'
|
62
|
+
what = v
|
63
|
+
if any(["att" in k.lower(), "fil" in k.lower()]): # 'attachments', 'file'
|
64
|
+
attachments = v # optional
|
65
|
+
if any(
|
66
|
+
["paus" in k.lower(), "tim" in k.lower(), "delay" in k.lower()]
|
67
|
+
): # 'attachments', 'file'
|
68
|
+
pause_sec = v # optional
|
69
|
+
if any(["sig" in k.lower()]): # 'attachments', 'file'
|
70
|
+
signature = v # optional
|
71
|
+
if not isinstance(v, str):
|
72
|
+
print(signature_styles)
|
73
|
+
signature = signature_styles[v]
|
74
|
+
if any(["verb" in k.lower(), "show" in k.lower()]): # 'verbose', 'show'
|
75
|
+
verbose = v # verbose
|
76
|
+
|
77
|
+
# Create email message
|
78
|
+
message = MIMEMultipart()
|
79
|
+
message["From"] = extract_kv()[0]
|
80
|
+
message["To"] = who
|
81
|
+
message["Subject"] = subject
|
82
|
+
|
83
|
+
# add signature
|
84
|
+
if signature:
|
85
|
+
what += f"\n\n{signature}\n"
|
86
|
+
|
87
|
+
# the eamil's body
|
88
|
+
message.attach(MIMEText(what, "plain"))
|
89
|
+
|
90
|
+
# attach files
|
91
|
+
if attachments:
|
92
|
+
if isinstance(attachments, str):
|
93
|
+
attachments = [attachments]
|
94
|
+
for file in attachments:
|
95
|
+
part = MIMEBase("application", "octet-stream")
|
96
|
+
try:
|
97
|
+
with open(file, "rb") as attachment:
|
98
|
+
part.set_payload(attachment.read())
|
99
|
+
encoders.encode_base64(part)
|
100
|
+
|
101
|
+
part.add_header(
|
102
|
+
"Content-Disposition",
|
103
|
+
f'attachment; filename= "{os.path.basename(file)}"',
|
104
|
+
)
|
105
|
+
message.attach(part)
|
106
|
+
except FileNotFoundError:
|
107
|
+
print(f"File not found: {file}")
|
108
|
+
except Exception as e:
|
109
|
+
print(f"Error attaching file {file}: {e}")
|
110
|
+
if pause_sec:
|
111
|
+
time.sleep(pause_sec)
|
112
|
+
|
113
|
+
# Send the email
|
114
|
+
try:
|
115
|
+
with smtplib.SMTP("smtp.gmail.com", 587) as server:
|
116
|
+
server.starttls()
|
117
|
+
server.login(extract_kv()[0], extract_kv()[1])
|
118
|
+
server.sendmail(extract_kv()[0], who, message.as_string())
|
119
|
+
if verbose:
|
120
|
+
if attachments:
|
121
|
+
print(
|
122
|
+
f'\nEmail successfully sent to:\nto:"{who}"\nsubject:{subject}\nattached:'
|
123
|
+
)
|
124
|
+
pp(attachments)
|
125
|
+
else:
|
126
|
+
print(f'\nEmail successfully sent to:\nto:"{who}"\nsubject:{subject}')
|
127
|
+
except Exception as e:
|
128
|
+
print(f"Failed to send email: {e}")
|
129
|
+
|
130
|
+
|
131
|
+
def email_to_every(who, subject, what, when, attachments=None):
|
132
|
+
"""
|
133
|
+
Check the time and send an email when the time matches the when.
|
134
|
+
|
135
|
+
:param who: Recipient email address
|
136
|
+
:param subject: Email subject
|
137
|
+
:param what: Email what
|
138
|
+
:param when: Time to send the email in HH:MM format
|
139
|
+
:param attachments: List of file paths to attach
|
140
|
+
"""
|
141
|
+
current_time = datetime.now().strftime("%H:%M")
|
142
|
+
if current_time == when:
|
143
|
+
email_to(
|
144
|
+
who=who,
|
145
|
+
subject=subject,
|
146
|
+
what=what,
|
147
|
+
attachments=attachments,
|
148
|
+
)
|
149
|
+
|
150
|
+
|
151
|
+
# Example usage
|
152
|
+
def example_job():
|
153
|
+
# Example email details
|
154
|
+
reminder_subject = "Reminder: Important Meeting Tomorrow"
|
155
|
+
reminder_what = (
|
156
|
+
"Don't forget about the meeting tomorrow at 10 AM in the conference room."
|
157
|
+
)
|
158
|
+
who = "Jianfeng.Liu0413@gmail.com"
|
159
|
+
when = "14:30" # Send time in 24-hour format
|
160
|
+
|
161
|
+
# Optional attachments
|
162
|
+
attachments = ["path/to/attachment1.pdf", "path/to/attachment2.jpg"]
|
163
|
+
|
164
|
+
# Schedule the email
|
165
|
+
email_to_every(who, reminder_subject, reminder_what, when, attachments)
|
166
|
+
|
167
|
+
|
168
|
+
if __name__ == "__main__":
|
169
|
+
pass
|
170
|
+
# # Schedule the job to run every minute
|
171
|
+
# schedule.every(1).minutes.do(example_job)
|
172
|
+
|
173
|
+
# while True:
|
174
|
+
# schedule.run_pending()
|
175
|
+
# time.sleep(1)
|
176
|
+
|
177
|
+
# # example2:
|
178
|
+
# email_to(
|
179
|
+
# who="Jianfeng.Liu@medizin.uni-tuebingen.de",
|
180
|
+
# subj="test",
|
181
|
+
# wha="this is the body",
|
182
|
+
# signat="\n\n Best, Jianfeng\n",
|
183
|
+
# att="/Users/macjianfeng/Dropbox/Downloads/_*_doc-xlsx/20240822-preprints_full_20190101_20201031-2.xlsx",
|
184
|
+
# )
|
185
|
+
|
186
|
+
# # example3:
|
187
|
+
# email_to(
|
188
|
+
# who="Jianfeng.Liu@medizin.uni-tuebingen.de",
|
189
|
+
# subj="test",
|
190
|
+
# wha="this is the test",
|
191
|
+
# signat=2,
|
192
|
+
# # att="/Users/macjianfeng/Dropbox/Downloads/_*_doc-xlsx/20240822-preprints_full_20190101_20201031-2.xlsx",
|
193
|
+
# )
|
194
|
+
|
195
|
+
# # example_4
|
196
|
+
# print(extract_kv(idx=0))
|
197
|
+
# print(extract_kv(idx=0)[0])
|
198
|
+
# print(extract_kv(idx=1))
|