py2ls 0.1.10.25__tar.gz → 0.1.10.26__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.10.25 → py2ls-0.1.10.26}/PKG-INFO +7 -2
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/batman.py +57 -28
- py2ls-0.1.10.26/py2ls/data/email/email_html_template.html +88 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/ips.py +20 -11
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/pyproject.toml +2 -2
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/README.md +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.DS_Store +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/COMMIT_EDITMSG +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/FETCH_HEAD +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/HEAD +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/config +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/description +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/commit-msg.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/post-update.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/pre-commit.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/pre-push.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/pre-rebase.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/pre-receive.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/hooks/update.sample +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/index +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/info/exclude +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/logs/HEAD +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/logs/refs/heads/main +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/logs/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/logs/refs/remotes/origin/main +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/78/063f4c863fc371ec0313303c0a81283b35d9b6 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/82/70b319ce4046854fbe7dc41054b6c2d112dab2 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/85/aee46f478e9afdb84d50a05242c53b04ed2e21 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/86/e288b46f8fe179907e4413f665aeb5053fddb1 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/94/f7dbe88e80c4205a901b71eb8f181974376bba +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/9b/ec5ee2236ee2d5532c36bfd132e23c58fdb69c +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b3/4f7f271c6d6105e35a6556ffda71d03afe8c96 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b3/69579064bde9de9a19d114fc33e4e48cc8c0e4 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/bf/b54d65922ce1dfda1aaa014913a54e7172d0bc +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/c1/397c6ed72c4e20ef6b9ab83163e9a6baba5b45 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/cc/45df1d317a2eb63ff1ff3a5f3b4a9f98fd92b5 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d6/39e8af592cd75a318d8affddd1bcc70c2095f2 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/db/3f2cd643292057936230b95cf7ec3046affe11 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/de/214c626ac2dd2685bfaa0bc0fc20f528d014d7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/e4/6c715352db9fe3c887a635f1916df4ca1f4ff9 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/e5/0580a0bd1e1b3d29f834382b80fceb61d5cf0c +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/ec/d980279432b13f0374b90ca439a6329cdece0f +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/ee/cee64eacaff022dcdc509c0c2b1da492f21060 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f5/61c3c1bf1c9ea9c9d1f556a7be2869f71f3bdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/refs/heads/main +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/refs/remotes/origin/main +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.gitattributes +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.gitignore +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/LICENSE +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/README.md +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/__init__.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/brain_atlas.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/chat.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/correlators.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/.DS_Store +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/db2ls_sql_chtsht.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/docs_links.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/lang_code_iso639.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style1.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style2.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style3.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style4.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style5.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style6.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style7.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style8.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/example/style9.pdf +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style1.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style10.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style11.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style12.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style2.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style3.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style4.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style5.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style6.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style7.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style8.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/data/styles/style9.json +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/db2ls.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/doc.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/export_requirements.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/freqanalysis.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/ich2ls.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/netfinder.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/ocr.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/plot.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/sleep_events_detectors.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/stats.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/translator.py +0 -0
- {py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/wb_detector.py +0 -0
@@ -1,11 +1,16 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: py2ls
|
3
|
-
Version: 0.1.10.
|
3
|
+
Version: 0.1.10.26
|
4
4
|
Summary: py(thon)2(too)ls
|
5
5
|
Author: Jianfeng
|
6
6
|
Author-email: Jianfeng.Liu0413@gmail.com
|
7
|
-
Requires-Python: >=3.
|
7
|
+
Requires-Python: >=3.5,<4.0
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Programming Language :: Python :: 3.5
|
10
|
+
Classifier: Programming Language :: Python :: 3.6
|
11
|
+
Classifier: Programming Language :: Python :: 3.7
|
12
|
+
Classifier: Programming Language :: Python :: 3.8
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
9
14
|
Classifier: Programming Language :: Python :: 3.10
|
10
15
|
Classifier: Programming Language :: Python :: 3.11
|
11
16
|
Classifier: Programming Language :: Python :: 3.12
|
@@ -68,7 +68,7 @@ def extract_kv(
|
|
68
68
|
else:
|
69
69
|
if "win" in sys.platform:
|
70
70
|
dir_data = (
|
71
|
-
"Z:\\Jianfeng\\Apps
|
71
|
+
"Z:\\Jianfeng\\Apps\\settings\\confidential_data\\gmail_login.json"
|
72
72
|
)
|
73
73
|
elif "lin" in sys.platform:
|
74
74
|
dir_data = "/Users/macjianfeng/Dropbox/github/python/py2ls/confidential_data/gmail_login.json"
|
@@ -86,23 +86,30 @@ def email_to(**kwargs):
|
|
86
86
|
def email(**kwargs):
|
87
87
|
"""
|
88
88
|
usage:
|
89
|
-
email_to(who="example@gmail.com",
|
90
|
-
|
91
|
-
|
92
|
-
|
89
|
+
email_to(who=["example@gmail.com"],
|
90
|
+
subject="test",
|
91
|
+
what="this is the body",
|
92
|
+
attachments=["/Users/test.pdf"],
|
93
|
+
cc=["cc1@example.com"],
|
94
|
+
bcc=["bcc@example.com"],
|
95
|
+
html_template="template.html")
|
93
96
|
Send an email with optional attachments.
|
94
97
|
|
95
|
-
:param who: Recipient email address
|
98
|
+
:param who: Recipient email address (string or list)
|
96
99
|
:param subject: Email subject
|
97
|
-
:param what: Email
|
100
|
+
:param what: Email body (can be HTML or plain text)
|
98
101
|
:param attachments: List of file paths to attach
|
102
|
+
:param cc: List of CC email addresses
|
103
|
+
:param bcc: List of BCC email addresses, "blind carbon copy"接受者之间互相看不到
|
104
|
+
:param html_template: Path to an HTML file for the email body
|
99
105
|
"""
|
100
106
|
who, what, subject, signature = None, None, None, None
|
101
107
|
attachments = False
|
102
108
|
pause_sec = False # default 10 seconds pause
|
103
|
-
|
109
|
+
bcc, cc = [], []
|
104
110
|
signature_styles = extract_kv(idx=1)[1] # signature list
|
105
111
|
signature = signature_styles[0] # default signature,None
|
112
|
+
read_receipt = False
|
106
113
|
verbose = True
|
107
114
|
if not kwargs:
|
108
115
|
print(
|
@@ -110,42 +117,59 @@ def email(**kwargs):
|
|
110
117
|
)
|
111
118
|
return None
|
112
119
|
# params config
|
120
|
+
for k, v in kwargs.items():
|
121
|
+
if any([i in k.lower() for i in ["who", "whe", "to", "@"]]): # 'who' or "where"
|
122
|
+
if isinstance(v, list):
|
123
|
+
who = v
|
124
|
+
else:
|
125
|
+
who = [v]
|
113
126
|
for k, v in kwargs.items():
|
114
127
|
if any(
|
115
|
-
[
|
116
|
-
|
117
|
-
"whe" in k.lower(),
|
118
|
-
"to" in k.lower(),
|
119
|
-
"@" in k.lower(),
|
120
|
-
all(["@" in k.lower(), "." in k.lower()]),
|
121
|
-
]
|
122
|
-
): # 'who' or "where"
|
123
|
-
who = v
|
124
|
-
if any(["sub" in k.lower(), "hea" in k.lower()]): # 'subject', 'header'
|
128
|
+
[i in k.lower() for i in ["sub", "hea", "top"]]
|
129
|
+
): # 'subject', 'header','topic'
|
125
130
|
subject = v
|
126
131
|
if any(
|
127
|
-
[
|
132
|
+
[i in k.lower() for i in ["wha", "con", "bod"]]
|
128
133
|
): # 'what','content','body'
|
129
134
|
what = v
|
130
|
-
if any([
|
135
|
+
if any([i in k.lower() for i in ["att", "fil"]]):
|
131
136
|
attachments = v # optional
|
132
|
-
if any(
|
133
|
-
["paus" in k.lower(), "tim" in k.lower(), "delay" in k.lower()]
|
134
|
-
): # 'attachments', 'file'
|
137
|
+
if any([i in k.lower() for i in ["paus", "tim", "delay"]]):
|
135
138
|
pause_sec = v # optional
|
136
139
|
if any(["sig" in k.lower()]): # 'attachments', 'file'
|
137
140
|
signature = v # optional
|
138
141
|
if not isinstance(v, str):
|
139
|
-
print(signature_styles)
|
140
142
|
signature = signature_styles[v]
|
141
|
-
if any([
|
143
|
+
if any([i in k.lower() for i in ["verb", "show"]]): # 'verbose', 'show'
|
142
144
|
verbose = v # verbose
|
143
|
-
|
145
|
+
if any(["cc" in k.lower() and "bcc" not in k.lower(), "ward" in k.lower()]):
|
146
|
+
if isinstance(v, list):
|
147
|
+
cc = v
|
148
|
+
else:
|
149
|
+
cc = [v]
|
150
|
+
if any([i in k.lower() for i in ["bcc", "blind", "secret"]]):
|
151
|
+
if isinstance(v, list):
|
152
|
+
bcc = v
|
153
|
+
else:
|
154
|
+
bcc = [v]
|
155
|
+
if any(["temp" in k.lower(), "html" in k.lower()]):
|
156
|
+
# Load HTML template if specified
|
157
|
+
if isinstance(v, str) and v.endswith("html"):
|
158
|
+
with open(kwargs["html_template"], "r") as f:
|
159
|
+
what = f.read()
|
144
160
|
# Create email message
|
145
161
|
message = MIMEMultipart()
|
146
162
|
message["From"] = extract_kv()[0]
|
147
|
-
|
163
|
+
print(who)
|
164
|
+
message["To"] = ", ".join(who)
|
165
|
+
|
166
|
+
if len(who) == 1:
|
167
|
+
who = ", ".join(who)
|
168
|
+
|
148
169
|
message["Subject"] = subject
|
170
|
+
# Add CC addresses if provided
|
171
|
+
if cc:
|
172
|
+
message["Cc"] = ", ".join(cc) # Join CC addresses as a comma-separated string
|
149
173
|
|
150
174
|
# the eamil's body
|
151
175
|
if what is None:
|
@@ -209,7 +233,12 @@ def email(**kwargs):
|
|
209
233
|
with smtplib.SMTP("smtp.gmail.com", 587) as server:
|
210
234
|
server.starttls()
|
211
235
|
server.login(extract_kv()[0], extract_kv()[1])
|
212
|
-
|
236
|
+
if any(bcc):
|
237
|
+
recipient_list = who + cc + bcc # Include all recipients
|
238
|
+
server.sendmail(extract_kv()[0], recipient_list, message.as_string())
|
239
|
+
else:
|
240
|
+
server.sendmail(extract_kv()[0], who, message.as_string())
|
241
|
+
|
213
242
|
if verbose:
|
214
243
|
if attachments:
|
215
244
|
print(
|
@@ -0,0 +1,88 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>Email Template</title>
|
7
|
+
<style>
|
8
|
+
body {
|
9
|
+
font-family: Arial, sans-serif;
|
10
|
+
margin: 0;
|
11
|
+
padding: 0;
|
12
|
+
background-color: #f4f4f4;
|
13
|
+
}
|
14
|
+
.email-container {
|
15
|
+
max-width: 600px;
|
16
|
+
margin: 0 auto;
|
17
|
+
background-color: #ffffff;
|
18
|
+
padding: 20px;
|
19
|
+
border-radius: 8px;
|
20
|
+
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
|
21
|
+
}
|
22
|
+
.email-header {
|
23
|
+
background-color: #4CAF50;
|
24
|
+
color: #ffffff;
|
25
|
+
padding: 10px;
|
26
|
+
text-align: center;
|
27
|
+
border-radius: 8px 8px 0 0;
|
28
|
+
}
|
29
|
+
.email-body {
|
30
|
+
padding: 20px;
|
31
|
+
font-size: 16px;
|
32
|
+
color: #333333;
|
33
|
+
line-height: 1.5;
|
34
|
+
}
|
35
|
+
.email-footer {
|
36
|
+
background-color: #f4f4f4;
|
37
|
+
color: #888888;
|
38
|
+
padding: 10px;
|
39
|
+
text-align: center;
|
40
|
+
font-size: 12px;
|
41
|
+
border-radius: 0 0 8px 8px;
|
42
|
+
}
|
43
|
+
a {
|
44
|
+
color: #4CAF50;
|
45
|
+
text-decoration: none;
|
46
|
+
}
|
47
|
+
a:hover {
|
48
|
+
text-decoration: underline;
|
49
|
+
}
|
50
|
+
.button {
|
51
|
+
background-color: #4CAF50;
|
52
|
+
color: #ffffff;
|
53
|
+
padding: 10px 20px;
|
54
|
+
text-align: center;
|
55
|
+
display: inline-block;
|
56
|
+
margin: 10px 0;
|
57
|
+
border-radius: 4px;
|
58
|
+
text-decoration: none;
|
59
|
+
font-size: 16px;
|
60
|
+
}
|
61
|
+
.button:hover {
|
62
|
+
background-color: #45a049;
|
63
|
+
}
|
64
|
+
</style>
|
65
|
+
</head>
|
66
|
+
<body>
|
67
|
+
<div class="email-container">
|
68
|
+
<div class="email-header">
|
69
|
+
<h1>Welcome to Our Newsletter</h1>
|
70
|
+
</div>
|
71
|
+
<div class="email-body">
|
72
|
+
<p>Dear Subscriber,</p>
|
73
|
+
<p>Thank you for signing up for our newsletter! We are excited to keep you updated with the latest news, promotions, and events. Here’s what you can expect in our upcoming editions:</p>
|
74
|
+
<ul>
|
75
|
+
<li>Exclusive promotions and discounts</li>
|
76
|
+
<li>Updates on our latest products</li>
|
77
|
+
<li>Invitations to special events</li>
|
78
|
+
</ul>
|
79
|
+
<p>Stay tuned for more exciting updates. In the meantime, feel free to visit our website for more information!</p>
|
80
|
+
<a href="https://example.com" class="button">Visit Our Website</a>
|
81
|
+
</div>
|
82
|
+
<div class="email-footer">
|
83
|
+
<p>© 2024 Company Name. All rights reserved.</p>
|
84
|
+
<p>If you no longer wish to receive these emails, please <a href="#">unsubscribe</a>.</p>
|
85
|
+
</div>
|
86
|
+
</div>
|
87
|
+
</body>
|
88
|
+
</html>
|
@@ -47,6 +47,8 @@ from fuzzywuzzy import fuzz, process
|
|
47
47
|
from langdetect import detect
|
48
48
|
from duckduckgo_search import DDGS
|
49
49
|
|
50
|
+
from bs4 import BeautifulSoup
|
51
|
+
|
50
52
|
from . import netfinder
|
51
53
|
|
52
54
|
# from .plot import get_color
|
@@ -58,16 +60,14 @@ except NameError:
|
|
58
60
|
pass
|
59
61
|
|
60
62
|
|
61
|
-
|
62
|
-
|
63
63
|
# set 'dir_save'
|
64
|
-
if
|
64
|
+
if "dar" in sys.platform:
|
65
65
|
dir_save = "/Users/macjianfeng/Dropbox/Downloads/"
|
66
66
|
else:
|
67
|
-
if
|
68
|
-
dir_save= "Z:\\Jianfeng\\temp\\"
|
69
|
-
elif
|
70
|
-
dir_data="/Users/macjianfeng/Dropbox/github/python/py2ls/confidential_data/gmail_login.json"
|
67
|
+
if "win" in sys.platform:
|
68
|
+
dir_save = "Z:\\Jianfeng\\temp\\"
|
69
|
+
elif "lin" in sys.platform:
|
70
|
+
dir_data = "/Users/macjianfeng/Dropbox/github/python/py2ls/confidential_data/gmail_login.json"
|
71
71
|
|
72
72
|
|
73
73
|
def unique(lst, ascending=None):
|
@@ -272,6 +272,7 @@ def upgrade(module="py2ls"):
|
|
272
272
|
except subprocess.CalledProcessError as e:
|
273
273
|
print(f"An error occurred while upgrading py2ls: {e}")
|
274
274
|
|
275
|
+
|
275
276
|
def get_version(pkg):
|
276
277
|
import importlib.metadata
|
277
278
|
|
@@ -791,7 +792,7 @@ def str2html(text_list, strict=False):
|
|
791
792
|
|
792
793
|
return html_content
|
793
794
|
|
794
|
-
|
795
|
+
|
795
796
|
def sreplace(*args, **kwargs):
|
796
797
|
"""
|
797
798
|
sreplace(text, by=None, robust=True)
|
@@ -1812,6 +1813,7 @@ def sort_kind(df, by="name", ascending=True):
|
|
1812
1813
|
sorted_df = df.iloc[sorted_index].reset_index(drop=True)
|
1813
1814
|
return sorted_df
|
1814
1815
|
|
1816
|
+
|
1815
1817
|
def isa(content, kind):
|
1816
1818
|
"""
|
1817
1819
|
content, kind='img'
|
@@ -1840,6 +1842,8 @@ def isa(content, kind):
|
|
1840
1842
|
elif "color" in kind.lower(): # file
|
1841
1843
|
return is_str_color(content)
|
1842
1844
|
elif "html" in kind.lower():
|
1845
|
+
if content is None or not isinstance(content, str):
|
1846
|
+
return False
|
1843
1847
|
# Remove leading and trailing whitespace
|
1844
1848
|
content = content.strip()
|
1845
1849
|
# Check for common HTML tags using regex
|
@@ -1858,7 +1862,10 @@ def isa(content, kind):
|
|
1858
1862
|
print(f"{kind} was not set up correctly")
|
1859
1863
|
return False
|
1860
1864
|
|
1865
|
+
|
1861
1866
|
import sys
|
1867
|
+
|
1868
|
+
|
1862
1869
|
def get_os():
|
1863
1870
|
os_name = sys.platform
|
1864
1871
|
if "dar" in os_name:
|
@@ -3992,11 +3999,12 @@ format_excel(
|
|
3992
3999
|
|
3993
4000
|
from IPython.display import display, HTML, Markdown, Image
|
3994
4001
|
|
4002
|
+
|
3995
4003
|
def preview(var):
|
3996
4004
|
"""Master function to preview formatted variables in Jupyter."""
|
3997
4005
|
|
3998
4006
|
if isinstance(var, str):
|
3999
|
-
if isa(var,
|
4007
|
+
if isa(var, "html"):
|
4000
4008
|
display(HTML(var)) # Render as HTML
|
4001
4009
|
# Check if it's a valid markdown
|
4002
4010
|
elif var.startswith("#"):
|
@@ -4004,7 +4012,8 @@ def preview(var):
|
|
4004
4012
|
else:
|
4005
4013
|
# Otherwise, display as plain text
|
4006
4014
|
print(var)
|
4007
|
-
|
4015
|
+
elif isinstance(var, BeautifulSoup):
|
4016
|
+
preview(str(var))
|
4008
4017
|
elif isinstance(var, pd.DataFrame):
|
4009
4018
|
# Display pandas DataFrame
|
4010
4019
|
display(var)
|
@@ -4036,4 +4045,4 @@ def preview(var):
|
|
4036
4045
|
# preview("This is a plain text message.")
|
4037
4046
|
# preview("# This is a Markdown header")
|
4038
4047
|
# preview(pd.DataFrame({"Name": ["Alice", "Bob"], "Age": [25, 30]}))
|
4039
|
-
# preview({"key": "value", "numbers": [1, 2, 3]})
|
4048
|
+
# preview({"key": "value", "numbers": [1, 2, 3]})
|
@@ -1,12 +1,12 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "py2ls"
|
3
|
-
version = "0.1.10.
|
3
|
+
version = "0.1.10.26"
|
4
4
|
description = "py(thon)2(too)ls"
|
5
5
|
authors = ["Jianfeng <Jianfeng.Liu0413@gmail.com>"]
|
6
6
|
readme = "README.md"
|
7
7
|
|
8
8
|
[tool.poetry.dependencies]
|
9
|
-
python = "^3.
|
9
|
+
python = "^3.5"
|
10
10
|
#appnope = { version = ">=0.1.4", markers = "sys_platform == 'darwin'" }
|
11
11
|
#appscript = { version = ">=1.2.5", markers = "sys_platform == 'darwin'" }
|
12
12
|
asciitree = ">=0.3.3"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/78/063f4c863fc371ec0313303c0a81283b35d9b6
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/82/70b319ce4046854fbe7dc41054b6c2d112dab2
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/85/aee46f478e9afdb84d50a05242c53b04ed2e21
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/86/e288b46f8fe179907e4413f665aeb5053fddb1
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621
RENAMED
File without changes
|
{py2ls-0.1.10.25 → py2ls-0.1.10.26}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd
RENAMED
File without changes
|