Merge branch 'develop'
- Support TODO robot
This commit is contained in:
commit
d6acd65c9a
10 changed files with 495 additions and 81 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -41,4 +41,5 @@ pyproject.toml
|
|||
.python-version
|
||||
requirements.txt
|
||||
requirement/ignore_requirements.txt
|
||||
screenshots
|
||||
screenshots
|
||||
script/todo/todo_override.json
|
||||
|
|
|
|||
8
Makefile
8
Makefile
|
|
@ -725,6 +725,14 @@ open_test_coverage:
|
|||
|
||||
# TODO load specific test file : ./run.sh -d test_file --log-level=test --test-enable --stop-after-init --test-file ./.venv/test.py
|
||||
|
||||
########
|
||||
# TODO #
|
||||
########
|
||||
|
||||
.PHONY: todo
|
||||
todo:
|
||||
./script/todo/todo.py
|
||||
|
||||
#########
|
||||
# tag #
|
||||
#########
|
||||
|
|
|
|||
|
|
@ -28,4 +28,5 @@ create demo internal,./script/code_generator/new_project.py,-m demo_internal -d
|
|||
run_robotlibre,./odoo/odoo-bin,--limit-time-real 999999 -c config.conf -d robotlibre,robotlibre,
|
||||
run_robotlibre_update,./odoo/odoo-bin,--limit-time-real 999999 --no-http --stop-after-init --dev cg -d robotlibre -i erplibre_devops -u erplibre_devops,robotlibre,
|
||||
run_robotlibre_generate,./script/code_generator/new_project.py,-f -d ./addons/ERPLibre_erplibre_addons -m erplibre_devops,robotlibre,
|
||||
run_todo,./script/todo/todo.py,,TODO,
|
||||
|
||||
|
|
|
|||
|
|
|
@ -513,13 +513,13 @@ typecheck = ["mypy"]
|
|||
|
||||
[[package]]
|
||||
name = "beautifulsoup4"
|
||||
version = "4.13.3"
|
||||
version = "4.13.4"
|
||||
description = "Screen-scraping library"
|
||||
optional = false
|
||||
python-versions = ">=3.7.0"
|
||||
files = [
|
||||
{file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"},
|
||||
{file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"},
|
||||
{file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"},
|
||||
{file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -1000,12 +1000,12 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "chromedriver-binary"
|
||||
version = "137.0.7123.0.0"
|
||||
version = "137.0.7145.0.0"
|
||||
description = "Installer for chromedriver."
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "chromedriver_binary-137.0.7123.0.0.tar.gz", hash = "sha256:fe2992e81362074b881e77824da2e832027d4db7dcf6dbe092b8f11a21f90a0d"},
|
||||
{file = "chromedriver_binary-137.0.7145.0.0.tar.gz", hash = "sha256:ca78f2cf9e69fec720ff083d7f52480a22dd9c0a6f12f49735dca54b4ca67991"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1585,12 +1585,12 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "dlib"
|
||||
version = "19.24.6"
|
||||
version = "19.24.8"
|
||||
description = "A toolkit for making real world machine learning and data analysis applications"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "dlib-19.24.6.tar.gz", hash = "sha256:77e3c28ac2c66141514b07cbb74b7c7f80381c019ce5fec99007980bc6490d7d"},
|
||||
{file = "dlib-19.24.8.tar.gz", hash = "sha256:9135900983e279b5e5d0b1bb31b684a3054ea4f3ea1b1c69e8a675659271003d"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1820,53 +1820,53 @@ readthedocs = ["sphinx-rtd-theme"]
|
|||
|
||||
[[package]]
|
||||
name = "ezdxf"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
description = "A Python package to create/manipulate DXF drawings."
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:53b92e052d318975bb99508d377bbec7cbd50b99692be3a33169e32671c551a7"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52beac83e2ea1dc67c49428ffe7c9585df8ea285e86f5424377560fc4e992394"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e2ed21e4abc80010a415d38f2874c21ef6df5fc1d7921f7b184002f63b72a95f"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716cb815b5686583e4ff323da719513923b60544fd09e5802fdc5a660daa70e3"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58efdf0157a04ac0896de76d28461603062e5939a614e99958055dd3713d5dbc"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b0f5955221991f811323de25f6d81c6d768f9da8907057904ca873921baad3b8"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2f774deed80c8404c647af63aefd514fa51bafa8e75cf154cb24e9733db506bc"},
|
||||
{file = "ezdxf-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:27f01bbf41b9cd623923f5800154a5d0a4d4e11aac8fd2f291eaf6944a6ca99a"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:25d1d8ee0069b6bdd405d767e5422094d2b0f3ad5d3111445d109e6e9f32268e"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4fb8c464fa67e61f03b4c9f05adadd547b638f231f5da2d896942b1bbcdccb0"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e1ce8fc612455b78d2b7f93b05c9d278651a5c744abb387827c4244d7597377"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7653be6635cc1790bb6c96783ccca73c55dc278360566f23e317d05b515a1f5c"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58357569d03a8389076cedd51067630a16036ac7ef75b16c672af18ce746faa6"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fa59fd90162f97812e4f37e00a35ccb78fcd91fd29977d55ed18b0356fa31500"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5503d06e8a42e5720627f5f45d331d89a22b502afbd5bd08f26023160103ee96"},
|
||||
{file = "ezdxf-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:12c7a4e6c1ee0db9c88c12daa6357f2d2f9b2623812301032035735bef0138ff"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:46357e1f0aebe57c3d09ec099aaad6cc74bd532bbc57b5b4e35598c87d81b26a"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:32f23a5dfbaa0267c7d3edb069476299f27baf6a58f03763d70e6a69c2e2de3b"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad8ef33693c744080a10517da1a774c0171cc78bd429a1310a463aa3ef81d0f7"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f117529f9fdc10a9fbff4cf70c24efdfea2b89ae3cc638bd69da3498c0c61ca"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce92a3ffc5a912b24a9b5ebe0ba50dcade72e40587e3a49472e0dccbaffe1769"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ff3cdd8219ad004d79a1f6bd0991b420577642cfe4f61ccaf9b5b31d1da1bc0a"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae3f481b282c0d3d009f96a0f79fbecfd62a848dffccfe637314f628f86f6e5"},
|
||||
{file = "ezdxf-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe4b9ee1188320ef1a3927e90125fc642f783e878ab0cf58a5d71b0405e91055"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43f9daa9eaf45980f113b18f130d8c0cc3c4e2b5aaf567c03ba3b010930529f7"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:51169e62ad82a2e430b4086d32022baf260421db6e789ed08fc51f717f2a68b6"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:671ef0daa2e526658f1dde3f2dd972c1713385e9479469b02792762b0b15939d"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aafb5ee413b7b9fa7f203dfb9510c50d9f60697a5c805ab5aaed0e3e74a4a1bd"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad5050137143c0cbe768828a260445f2b26b28717886ac56fee284c3f699f66"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52320ef19e62c1b6cabbfe3353f64608058bb01019da42c33140c9a0da2ed86c"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a1d4cfb200ced63196ce931a11e1d5a662336bd0bc0f60af833e6e50818fc06"},
|
||||
{file = "ezdxf-1.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:dd6204512339c7dedbb4a0b5614b4120c7ca678e52422f81cc5cefdeb4436e8e"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:071f945bd763308157af5d3a84ae64400b0ec31b89527a52c5286793715b6fba"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0dd691bfab75e76e7d3db6c295050aae3befe679d9ec3ec580eab8250a8bae27"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bcdb1023c411715b3ca30d89eec4e3dd9e99cf85586a34a5134a88f2994ea8cc"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b1e0df2e6d47b21e1fb5f06ba035f191e75c7c6e39e836bdaf1c73acf549daa"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:121fd49e158fe47ec8af01133aae5f179c92034d41878ffcffda5da10c669f17"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:908e24973fcfd03808b47410b965440e79b90b3925d80e02163c3cc1fe7775ca"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28980c443b50421543c5a85b083b8545187956a0de8a981d900c28f6b6b21782"},
|
||||
{file = "ezdxf-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:1fb2bc3cb1740eda3f558ef303d61b248f81b2e9ee10dac84e4e6924588af9c2"},
|
||||
{file = "ezdxf-1.4.0-py3-none-any.whl", hash = "sha256:aec637894fdf0d028bd52aa2bbbfa13d09b126dd22c943abcf942fbe372f07a5"},
|
||||
{file = "ezdxf-1.4.0.tar.gz", hash = "sha256:00793d635226288a8e5d8aa578cc863bdfe5bd15d4cf3d9d7db7f32aa948c640"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5167f620ec6f261f0216c11cbab4625ef0bf46167d6e1fdce5799dc7ea06c5dc"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fbcce92871ecc50eda683fc4845af4c8b98f0c69842b816c0477d2cc08a8f396"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc506f7adff134aeb063aa8f2a37c7e8041f216baaab191af03212ba2ffd29"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d5b3219d7e5f6d921080f4abf5abc99798a2ff4ff84e1a944009de744c373ad"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed9f7398c9253edf60599f815ab711b302cb747937e0713265d5bd41389f58b9"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:04f3ba53d756d9b6d551a11fb118c6183c060dd186bdf1e1045b0916a8283010"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:60b909553f241226480e1909280af8c29342ff8d6384bfff0cc48919712d7019"},
|
||||
{file = "ezdxf-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:660fe5bb6ef0f0d2927029620e29eae1ec47cb843d73a2291817dae7716d6009"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:62485e3488b9093e70a373f981184c4024975b87546c2567d6b0035c4f4df0e3"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e59c556c480ba2c9886f95ec3eac2006dc905b42871b402773f7220636936079"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d36dd147c765937d0ab0fffdf6e1ef8008c2e9667bc92d08f938f0945176b5e"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b63357ad8b65574938d10ce571c1373cc6c8771c6aad40155f0c55607102237"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2abaecb2228b5b1a798149bcaefa45a5911ece631aa2717ff6dea1ab5713a6a"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6dd079a89299bd6be8ee63561121d3b02b7bad2b7f591469497455b3fddfd321"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5ed11a1b1f2c953dcfc500b4fee6570f3fcdb8fed1589bce5fcb81d58e1f32b0"},
|
||||
{file = "ezdxf-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0a8aba1eb1d2f81158e744c492cf2338fba6491cb6a7b409b232b6456e7919"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c592ee1970d11ebef66c800860f6a0f8fd560a0fde5c3c51556d06c8d422cc71"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dae904a0238e3ea74ae53c7036b6bebaf36c82b143a0e4e23c743ecf5a33d9fd"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:44c695a6bf2eabcb88814bf108670067e496c569b10cabdb3c110c6aab7d5bea"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf7d0393eb1b680e088a8c56557a7019a77e7d3d0bca1bab7c036cad531a8d09"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a821fdd5b24d0d820d2ee2644b1927ea777c7209573407c3e55bb6fdb3d04c05"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a98a50e111163cf5799b09cdbc7bf302c323636afb454179dc4be4aa3edee3d"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1754cc1f11538ccc4c8b912947b6170b7a34532137d99c176457d207bc9d18b3"},
|
||||
{file = "ezdxf-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:eecb3775ce8963dde38f0e223c7af86197d9762cd2f73f38a735688c871510b4"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:69d66bbd976d5ebfd949d12cc44a778ec6db8ae2d223458b192d930d04a87265"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8c385633d2b2d841fe1f181954f594a8f35909c0ef56dda267ef11c3df77573a"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e4ebf64dd97a54c5ade7d27f550612ad7dcf4d8b498e26b594d9e9c054e989ef"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d258dbf8fa10d8b30c8c80e76dc56e3533ca1c80098657317946a4bb2f0c59e1"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6589905ae064c03de3c373c70fd2140d7337843147ad910c7bf2d0b9975396fa"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fb788d9f8b6a872463e52efcf8ee582019d6bef4b1a5e12acd24eeb6dcab768"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9330a42634165b24fcbb9f613421018837236449ba2dc159cedacee65943d03"},
|
||||
{file = "ezdxf-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:84a278d1bc65de09047d7104c55b0c468494a44f774bc2f0e6f15b27e73704a9"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fad74d71d82b2480bf81204497dafd142f5dd8bafcd57f48bf1c8ef8197102e7"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5e30f5bfc89848dfb8b4d8865347b77dcd6127e2efeb48d985592a6ed0563f47"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e63725f30cf734190bf5c567198e024d503fc28a942df616e39dc51a6590117"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00495568d5d775e77e97b1793ff6ffd944deeadee47477cd9fcd191b5f3181c4"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b56c98b038dec287f80924483ca61caa45b1335ec05b4dce8bf825db09e303a"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1254c1a7002dcf3dab08b359d04f73f6e062afb7cdc704a46cdacacdc2cfb31e"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cb0123a9f00dc6e4b73004333ba34f9dfaece3d9fcf87c82369e3dd980218afc"},
|
||||
{file = "ezdxf-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:233c05c3084451ef33bff6e8e414de9da7858ceb19d4b68d134060a7a511d00d"},
|
||||
{file = "ezdxf-1.4.1-py3-none-any.whl", hash = "sha256:fc3cf018ea0236c33cb3964743b04df54e35e0ff269518860a1f07a5b18b9cd0"},
|
||||
{file = "ezdxf-1.4.1.tar.gz", hash = "sha256:4806e4328214f7413a952b7e5066588a83e3c0d600dda8c5f86eed38cfcd706b"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -4160,13 +4160,13 @@ full = ["XLMMacroDeobfuscator"]
|
|||
|
||||
[[package]]
|
||||
name = "openai"
|
||||
version = "1.73.0"
|
||||
version = "1.76.0"
|
||||
description = "The official Python library for the openai API"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "openai-1.73.0-py3-none-any.whl", hash = "sha256:f52d1f673fb4ce6069a40d544a80fcb062eba1b3f489004fac4f9923a074c425"},
|
||||
{file = "openai-1.73.0.tar.gz", hash = "sha256:b58ea39ba589de07db85c9905557ac12d2fc77600dcd2b92a08b99c9a3dce9e0"},
|
||||
{file = "openai-1.76.0-py3-none-any.whl", hash = "sha256:a712b50e78cf78e6d7b2a8f69c4978243517c2c36999756673e07a14ce37dc0a"},
|
||||
{file = "openai-1.76.0.tar.gz", hash = "sha256:fd2bfaf4608f48102d6b74f9e11c5ecaa058b60dad9c36e409c12477dfd91fb2"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -4224,13 +4224,13 @@ et-xmlfile = "*"
|
|||
|
||||
[[package]]
|
||||
name = "openupgradelib"
|
||||
version = "3.9.4"
|
||||
version = "3.10.0"
|
||||
description = "A library with support functions to be called from Odoo migration scripts."
|
||||
optional = false
|
||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
|
||||
files = [
|
||||
{file = "openupgradelib-3.9.4-py2.py3-none-any.whl", hash = "sha256:d07354ede92674f7e611c3ad4a069a996d0664197b473f488fdd3883da3c0112"},
|
||||
{file = "openupgradelib-3.9.4.tar.gz", hash = "sha256:642ba0beb215ad497da660e0157f27d3a801c1e8a049d9399778607efbabc5a7"},
|
||||
{file = "openupgradelib-3.10.0-py2.py3-none-any.whl", hash = "sha256:682319d3d5f196b2caf1e40a0cc6f0bc0ee85147d570e570570855982e937e37"},
|
||||
{file = "openupgradelib-3.10.0.tar.gz", hash = "sha256:c7c72c34df60ec1da3a491a80c8e12581b5b86c57b576c411e42b2bc54f26708"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -4574,13 +4574,13 @@ pycryptodome = "*"
|
|||
|
||||
[[package]]
|
||||
name = "phonenumbers"
|
||||
version = "9.0.3"
|
||||
version = "9.0.4"
|
||||
description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers."
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "phonenumbers-9.0.3-py2.py3-none-any.whl", hash = "sha256:0509d9b70ef66c04a1538f0b31c3e0c0b023127dad0eb1199adef0bc1841ff34"},
|
||||
{file = "phonenumbers-9.0.3.tar.gz", hash = "sha256:c5084e6c6a77e0e8d725086c7f69002ef8e39529155b8cd31cbf8c987f344a33"},
|
||||
{file = "phonenumbers-9.0.4-py2.py3-none-any.whl", hash = "sha256:ac8aa9d4679da5078547aeb159d78c2b60f8d0fb4eafdc7cf464069039b30ccd"},
|
||||
{file = "phonenumbers-9.0.4.tar.gz", hash = "sha256:b1530fc2a7b67e4c37c63e8e736c7e6efe2fed283c1bbb5c08c4511ec0c160ed"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -7519,13 +7519,13 @@ devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)
|
|||
|
||||
[[package]]
|
||||
name = "unidecode"
|
||||
version = "1.3.8"
|
||||
version = "1.4.0"
|
||||
description = "ASCII transliterations of Unicode text"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "Unidecode-1.3.8-py3-none-any.whl", hash = "sha256:d130a61ce6696f8148a3bd8fe779c99adeb4b870584eeb9526584e9aa091fd39"},
|
||||
{file = "Unidecode-1.3.8.tar.gz", hash = "sha256:cfdb349d46ed3873ece4586b96aa75258726e2fa8ec21d6f00a591d98806c2f4"},
|
||||
{file = "Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021"},
|
||||
{file = "Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -7654,13 +7654,13 @@ python-dateutil = ">=2.4.0"
|
|||
|
||||
[[package]]
|
||||
name = "vonage"
|
||||
version = "4.4.0"
|
||||
version = "4.4.1"
|
||||
description = "Python Server SDK for using Vonage APIs"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "vonage-4.4.0-py3-none-any.whl", hash = "sha256:c0d28ae85cd0936df58101486bebfefdf1c8b410f48b9f6291b55f1e0779057b"},
|
||||
{file = "vonage-4.4.0.tar.gz", hash = "sha256:692e9ce24f389e7c42a90c17516c38fea7f16ab4c90cbae9c06b067318703f44"},
|
||||
{file = "vonage-4.4.1-py3-none-any.whl", hash = "sha256:810ba1ec5e9feed7f15487d2f49692cbfae23d050eb6db5bcd59ba3c208e9d52"},
|
||||
{file = "vonage-4.4.1.tar.gz", hash = "sha256:ecba85759c36ced5633a8341e148a34a05b8c01d3f185e8ce8e89c5f8c651542"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -7680,7 +7680,7 @@ vonage-utils = ">=1.1.4"
|
|||
vonage-verify = ">=2.1.0"
|
||||
vonage-verify-legacy = ">=1.0.1"
|
||||
vonage-video = ">=1.2.0"
|
||||
vonage-voice = ">=1.3.0"
|
||||
vonage-voice = ">=1.4.0"
|
||||
|
||||
[[package]]
|
||||
name = "vonage-account"
|
||||
|
|
@ -7973,13 +7973,13 @@ vonage-utils = ">=1.1.4"
|
|||
|
||||
[[package]]
|
||||
name = "vonage-voice"
|
||||
version = "1.3.0"
|
||||
version = "1.4.0"
|
||||
description = "Vonage voice package"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "vonage_voice-1.3.0-py3-none-any.whl", hash = "sha256:6a52b3e0c841cd5ed5826f3e90400a52bde649f3fe520085b6c0cae5dc5228a7"},
|
||||
{file = "vonage_voice-1.3.0.tar.gz", hash = "sha256:fa36504b33019e57dec891e42ead18e5d87801703c84e5ba85c66e60b4376a34"},
|
||||
{file = "vonage_voice-1.4.0-py3-none-any.whl", hash = "sha256:e04ce62e314d2ab3ae7c31f1a39d4012f0fe1c212bb1a58b07c9d436267cdb29"},
|
||||
{file = "vonage_voice-1.4.0.tar.gz", hash = "sha256:558569514e5e8a7390693bb3d354391a9b022bdaefc6d205f4d1a2860f8a0907"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -8486,4 +8486,4 @@ bindings = ["ghostscript"]
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.10.14"
|
||||
content-hash = "350819d1b0358148243e33c0d3a0731e258153a097d85e45725435d0ee03f38b"
|
||||
content-hash = "195677d77ee4de85f4b523f8413b0242719aed0ae89bd71bd9f0ca1f655563fd"
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ azure-identity = "1.13.0"
|
|||
azure-storage-blob = "12.16.0"
|
||||
babel = "2.9.1"
|
||||
base64io = "^1.0.3"
|
||||
beautifulsoup4 = "^4.13.3"
|
||||
beautifulsoup4 = "^4.13.4"
|
||||
bokeh = "3.1.1"
|
||||
boto3 = "1.26.7"
|
||||
bs4 = "^0.0.2"
|
||||
|
|
@ -38,7 +38,7 @@ cachetools = "^5.5.2"
|
|||
cairosvg = "^2.7.1"
|
||||
cerberus = "^1.3.7"
|
||||
chardet = "4.0.0"
|
||||
chromedriver-binary = "^137.0.7123.0.0"
|
||||
chromedriver-binary = "^137.0.7145.0.0"
|
||||
click = "^8.1.8"
|
||||
clicksend-client = "^5.0.78"
|
||||
cloudflare = "^4.1.0"
|
||||
|
|
@ -49,7 +49,7 @@ cryptography = "3.4.8"
|
|||
cybersource-rest-client-python = "0.0.56"
|
||||
cython = "^3.0.12"
|
||||
decorator = "4.4.2"
|
||||
dlib = "^19.24.6"
|
||||
dlib = "^19.24.8"
|
||||
docutils = "0.16"
|
||||
dotty-dict = "^1.3.1"
|
||||
dropbox = "^12.0.2"
|
||||
|
|
@ -57,7 +57,7 @@ ebaysdk = "2.1.5"
|
|||
email-validator = "^2.2.0"
|
||||
endesive = "^2.18.5"
|
||||
extract-msg = "^0.54.1"
|
||||
ezdxf = "^1.4.0"
|
||||
ezdxf = "^1.4.1"
|
||||
face-recognition = "^1.3.0"
|
||||
factur-x = "^3.6"
|
||||
filetype = "^1.2.0"
|
||||
|
|
@ -104,10 +104,10 @@ odoo-test-helper = "^2.1.1"
|
|||
odoorpc = "^0.10.1"
|
||||
ofxparse = "0.21"
|
||||
ofxtools = "^0.9.5"
|
||||
openai = "^1.73.0"
|
||||
openai = "^1.76.0"
|
||||
opencv-python = "^4.11.0.86"
|
||||
openpyxl = "^3.1.5"
|
||||
openupgradelib = "^3.9.4"
|
||||
openupgradelib = "^3.10.0"
|
||||
pandas = ">=0.25.3"
|
||||
paramiko = "^3.5.1"
|
||||
passlib = "1.7.4"
|
||||
|
|
@ -115,7 +115,7 @@ pathspec = "^0.12.1"
|
|||
pay-ccavenue = "^1.0.0"
|
||||
pdf2image = "^1.17.0"
|
||||
pdfminer = "^20191125"
|
||||
phonenumbers = "^9.0.3"
|
||||
phonenumbers = "^9.0.4"
|
||||
pillow = "9.0.1"
|
||||
plotly = "5.13.1"
|
||||
polib = "1.1.0"
|
||||
|
|
@ -189,14 +189,14 @@ todoist-python = "^8.1.4"
|
|||
toml = "^0.10.2"
|
||||
tweepy = "^4.15.0"
|
||||
twilio = "^9.5.2"
|
||||
unidecode = "^1.3.8"
|
||||
unidecode = "^1.4.0"
|
||||
unidiff = "^0.7.5"
|
||||
urllib3 = "1.26.5"
|
||||
uvloop = "^0.21.0"
|
||||
validate-email = "^1.3"
|
||||
virtualenv = "20.30.0"
|
||||
vobject = "0.9.6.1"
|
||||
vonage = "^4.4.0"
|
||||
vonage = "^4.4.1"
|
||||
vonage-verify-v2 = "1.1.4"
|
||||
werkzeug = "2.0.2"
|
||||
wheel = "^0.45.1"
|
||||
|
|
|
|||
2
script/todo/README.md
Normal file
2
script/todo/README.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
TODO is an assistant robot to use ERPLibre
|
||||
Execute it with `./script/todo/todo.py` or `make todo`.
|
||||
9
script/todo/logo_ascii.txt
Normal file
9
script/todo/logo_ascii.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
__
|
||||
_(\ |@@|
|
||||
(__/\__ \--/ __
|
||||
\___|----| | __
|
||||
\ }{ /\ )_ / _\
|
||||
/\__/\ \__O (__
|
||||
(--/\--) \__/
|
||||
_)( )(_
|
||||
`---''---`
|
||||
23
script/todo/todo.json
Normal file
23
script/todo/todo.json
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"kdbx": {
|
||||
"path": "",
|
||||
"password": ""
|
||||
},
|
||||
"kdbx_config": {
|
||||
"openai": {
|
||||
"kdbx_key": "OpenAI api"
|
||||
}
|
||||
},
|
||||
"instance": [
|
||||
{
|
||||
"prompt_description": "Test - Instance de base minimale",
|
||||
"makefile_cmd": "db_restore_erplibre_base_db_test",
|
||||
"database": "test"
|
||||
}
|
||||
],
|
||||
"function": [
|
||||
{
|
||||
"prompt_description": "Ouvrir ERPLibre avec TODO \uD83E\uDD16"
|
||||
}
|
||||
]
|
||||
}
|
||||
335
script/todo/todo.py
Executable file
335
script/todo/todo.py
Executable file
|
|
@ -0,0 +1,335 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import getpass
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
import tkinter as tk
|
||||
from tkinter import filedialog
|
||||
|
||||
import click
|
||||
import openai
|
||||
from pykeepass import PyKeePass
|
||||
|
||||
# TODO implement urwid to improve text user interface
|
||||
# import urwid
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
CONFIG_FILE = "./script/todo/todo.json"
|
||||
CONFIG_OVERRIDE_FILE = "./script/todo/todo_override.json"
|
||||
LOGO_ASCII_FILE = "./script/todo/logo_ascii.txt"
|
||||
|
||||
|
||||
class TODO:
|
||||
def __init__(self):
|
||||
self.kdbx = None
|
||||
|
||||
def run(self):
|
||||
with open(LOGO_ASCII_FILE) as my_file:
|
||||
print(my_file.read())
|
||||
print("Ouverture de TODO en cours ...")
|
||||
print("🤖 => Entre tes directives par son chiffre et fait Entrée!")
|
||||
help_info = """Commande :
|
||||
[1] Question
|
||||
[2] Execute
|
||||
[3] Fork - Ouvre TODO 🤖 dans une nouvelle tabulation
|
||||
[0] Quitter
|
||||
"""
|
||||
# [3] install
|
||||
while True:
|
||||
status = click.prompt(help_info)
|
||||
print()
|
||||
if status == "0":
|
||||
break
|
||||
elif status == "1":
|
||||
self.execute_prompt_ia()
|
||||
elif status == "2":
|
||||
self.prompt_execute()
|
||||
elif status == "3":
|
||||
cmd = f"gnome-terminal --tab -- bash -c 'source ./.venv/bin/activate;make todo'"
|
||||
self.executer_commande_live(cmd)
|
||||
# elif status == "3" or status == "install":
|
||||
# print("install")
|
||||
else:
|
||||
print("Commande non trouvée 🤖!")
|
||||
|
||||
print(status)
|
||||
# manipuler()
|
||||
|
||||
def get_kdbx(self):
|
||||
if self.kdbx:
|
||||
return self.kdbx
|
||||
# Open file
|
||||
chemin_fichier_kdbx = self.get_config(["kdbx", "path"])
|
||||
if not chemin_fichier_kdbx:
|
||||
root = tk.Tk()
|
||||
root.withdraw() # Hide the main window
|
||||
chemin_fichier_kdbx = filedialog.askopenfilename(
|
||||
title="Select a File",
|
||||
filetypes=(("KeepassX files", "*.kdbx"),),
|
||||
)
|
||||
if not chemin_fichier_kdbx:
|
||||
_logger.error(f"KDBX is not configured, please fill {CONFIG_FILE}")
|
||||
return
|
||||
|
||||
mot_de_passe_kdbx = self.get_config(["kdbx", "password"])
|
||||
if not mot_de_passe_kdbx:
|
||||
mot_de_passe_kdbx = getpass.getpass(
|
||||
prompt="Entrez votre mot de passe : "
|
||||
)
|
||||
|
||||
kp = PyKeePass(chemin_fichier_kdbx, password=mot_de_passe_kdbx)
|
||||
|
||||
if kp:
|
||||
self.kdbx = kp
|
||||
return kp
|
||||
|
||||
def get_config(self, lst_params):
|
||||
# Open file
|
||||
config_file = CONFIG_FILE
|
||||
if os.path.exists(CONFIG_OVERRIDE_FILE):
|
||||
config_file = CONFIG_OVERRIDE_FILE
|
||||
|
||||
with open(config_file) as cfg:
|
||||
dct_data = json.load(cfg)
|
||||
for param in lst_params:
|
||||
try:
|
||||
dct_data = dct_data[param]
|
||||
except KeyError:
|
||||
_logger.error(
|
||||
f"KeyError on file {config_file} with keys {lst_params}"
|
||||
)
|
||||
return
|
||||
return dct_data
|
||||
|
||||
def execute_prompt_ia(self):
|
||||
while True:
|
||||
help_info = """Commande :
|
||||
[0] Retour
|
||||
Écrit moi ta question """
|
||||
status = click.prompt(help_info)
|
||||
print()
|
||||
if status == "0":
|
||||
return
|
||||
kp = self.get_kdbx()
|
||||
if not kp:
|
||||
return
|
||||
nom_configuration = self.get_config(
|
||||
["kdbx_config", "openai", "kdbx_key"]
|
||||
)
|
||||
entry = kp.find_entries_by_title(nom_configuration, first=True)
|
||||
|
||||
client = openai.OpenAI(api_key=entry.password)
|
||||
prompt_update = status
|
||||
completion = client.chat.completions.create(
|
||||
model="gpt-4o",
|
||||
messages=[{"role": "user", "content": prompt_update}],
|
||||
)
|
||||
|
||||
print(completion.choices[0].message.content)
|
||||
print()
|
||||
|
||||
def prompt_execute(self):
|
||||
help_info = """Commande :
|
||||
[1] Gérer une instance
|
||||
[2] Fonction - Démonstration des fonctions développées
|
||||
[0] Retour
|
||||
"""
|
||||
while True:
|
||||
status = click.prompt(help_info)
|
||||
print()
|
||||
if status == "0":
|
||||
return
|
||||
elif status == "1":
|
||||
status = self.prompt_execute_instance()
|
||||
if status is not False:
|
||||
return
|
||||
elif status == "2":
|
||||
status = self.prompt_execute_fonction()
|
||||
if status is not False:
|
||||
return
|
||||
else:
|
||||
print("Commande non trouvée 🤖!")
|
||||
|
||||
def prompt_execute_instance(self):
|
||||
lst_instance = self.get_config(["instance"])
|
||||
help_info = "Commande :\n"
|
||||
help_end = "[0] Retour\n"
|
||||
for i, dct_instance in enumerate(lst_instance):
|
||||
help_info += (
|
||||
f"[{i + 1}] " + dct_instance["prompt_description"] + "\n"
|
||||
)
|
||||
help_info += help_end
|
||||
|
||||
while True:
|
||||
status = click.prompt(help_info)
|
||||
print()
|
||||
if status == "0":
|
||||
return False
|
||||
else:
|
||||
cmd_no_found = True
|
||||
try:
|
||||
int_cmd = int(status)
|
||||
if 0 < int_cmd <= len(lst_instance):
|
||||
cmd_no_found = False
|
||||
status = click.confirm(
|
||||
"Voulez-vous une nouvelle instance?"
|
||||
)
|
||||
if status:
|
||||
dct_instance = lst_instance[int_cmd - 1]
|
||||
makefile_cmd = dct_instance.get("makefile_cmd")
|
||||
db_name = dct_instance.get("database")
|
||||
self.executer_commande_live(f"make {makefile_cmd}")
|
||||
kdbx_key = dct_instance.get("kdbx_key")
|
||||
self.prompt_execute_selenium_and_run_db(
|
||||
db_name, kdbx_key=kdbx_key
|
||||
)
|
||||
except ValueError:
|
||||
pass
|
||||
if cmd_no_found:
|
||||
print("Commande non trouvée 🤖!")
|
||||
|
||||
def prompt_execute_fonction(self):
|
||||
lst_instance = self.get_config(["function"])
|
||||
help_info = "Commande :\n"
|
||||
help_end = "[0] Retour\n"
|
||||
for i, dct_instance in enumerate(lst_instance):
|
||||
help_info += (
|
||||
f"[{i + 1}] " + dct_instance["prompt_description"] + "\n"
|
||||
)
|
||||
help_info += help_end
|
||||
|
||||
while True:
|
||||
status = click.prompt(help_info)
|
||||
print()
|
||||
if status == "0":
|
||||
return False
|
||||
else:
|
||||
cmd_no_found = True
|
||||
try:
|
||||
int_cmd = int(status)
|
||||
if 0 < int_cmd <= len(lst_instance):
|
||||
cmd_no_found = False
|
||||
dct_instance = lst_instance[int_cmd - 1]
|
||||
command = dct_instance.get("command")
|
||||
kdbx_key = dct_instance.get("kdbx_key")
|
||||
self.prompt_execute_selenium(
|
||||
command=command, kdbx_key=kdbx_key
|
||||
)
|
||||
except ValueError:
|
||||
pass
|
||||
if cmd_no_found:
|
||||
print("Commande non trouvée 🤖!")
|
||||
|
||||
def kdbx_get_extra_command_user(self, kdbx_key):
|
||||
lst_value = []
|
||||
if kdbx_key:
|
||||
kp = self.get_kdbx()
|
||||
if not kp:
|
||||
return ""
|
||||
if type(kdbx_key) is not list:
|
||||
lst_kdbx_key = [kdbx_key]
|
||||
else:
|
||||
lst_kdbx_key = kdbx_key
|
||||
for key in lst_kdbx_key:
|
||||
entry = kp.find_entries_by_title(key, first=True)
|
||||
try:
|
||||
odoo_user = entry.username
|
||||
except AttributeError:
|
||||
_logger.error(f"Cannot find username from keys {key}")
|
||||
try:
|
||||
odoo_password = entry.password
|
||||
except AttributeError:
|
||||
_logger.error(f"Cannot find password from keys {key}")
|
||||
lst_value.append(
|
||||
f" --default_email_auth {odoo_user} --default_password_auth '{odoo_password}'"
|
||||
)
|
||||
if len(lst_value) == 0:
|
||||
return ""
|
||||
elif len(lst_value) == 1:
|
||||
return lst_value[0]
|
||||
return lst_value
|
||||
|
||||
def prompt_execute_selenium_and_run_db(self, bd, kdbx_key=None):
|
||||
if kdbx_key:
|
||||
extra_cmd_web_login = self.kdbx_get_extra_command_user(kdbx_key)
|
||||
else:
|
||||
extra_cmd_web_login = ""
|
||||
|
||||
cmd = f'parallel ::: "./run.sh -d {bd}" "sleep 3;./script/selenium/web_login.py{extra_cmd_web_login}"'
|
||||
self.executer_commande_live(cmd)
|
||||
|
||||
def prompt_execute_selenium(self, command=None, kdbx_key=None):
|
||||
if kdbx_key:
|
||||
extra_cmd_web_login = self.kdbx_get_extra_command_user(kdbx_key)
|
||||
else:
|
||||
extra_cmd_web_login = ""
|
||||
|
||||
lst_cmd = []
|
||||
if not command:
|
||||
cmd = "./script/selenium/web_login.py"
|
||||
else:
|
||||
cmd = command
|
||||
|
||||
if type(extra_cmd_web_login) is list:
|
||||
for item in extra_cmd_web_login:
|
||||
lst_cmd.append(cmd + item)
|
||||
else:
|
||||
lst_cmd.append(cmd + extra_cmd_web_login)
|
||||
|
||||
if len(lst_cmd) == 1:
|
||||
self.executer_commande_live(lst_cmd[0])
|
||||
elif len(lst_cmd) > 1:
|
||||
new_cmd = "parallel ::: "
|
||||
for i, cmd in enumerate(lst_cmd):
|
||||
new_cmd += f' "sleep {1 * i};{cmd}"'
|
||||
self.executer_commande_live(new_cmd)
|
||||
|
||||
def executer_commande_live(self, commande):
|
||||
"""
|
||||
Exécute une commande et affiche la sortie en direct.
|
||||
|
||||
Args:
|
||||
commande (str): La commande à exécuter (sous forme de chaîne de caractères).
|
||||
"""
|
||||
try:
|
||||
process = subprocess.Popen(
|
||||
commande,
|
||||
shell=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
text=True,
|
||||
bufsize=1, # Désactive la mise en tampon pour la sortie en direct
|
||||
universal_newlines=True, # Pour traiter les sauts de lignes correctement
|
||||
)
|
||||
|
||||
while True:
|
||||
ligne = process.stdout.readline()
|
||||
if not ligne:
|
||||
break
|
||||
print(ligne, end="")
|
||||
|
||||
process.wait() # Attendre la fin du process
|
||||
|
||||
if process.returncode != 0:
|
||||
print(
|
||||
f"La commande a retourné un code d'erreur : {process.returncode}"
|
||||
)
|
||||
|
||||
except FileNotFoundError:
|
||||
if "password" in commande:
|
||||
print(
|
||||
f"Erreur : La commande '{commande.split(' ')[0]}'[...] n'a pas été trouvée."
|
||||
)
|
||||
else:
|
||||
print(
|
||||
f"Erreur : La commande '{commande}' n'a pas été trouvée."
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"Une erreur s'est produite : {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
todo = TODO()
|
||||
todo.run()
|
||||
35
script/todo/todo_example.json
Normal file
35
script/todo/todo_example.json
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"kdbx": {
|
||||
"path": "",
|
||||
"password": ""
|
||||
},
|
||||
"kdbx_config": {
|
||||
"openai": {
|
||||
"kdbx_key": "OpenAI api"
|
||||
}
|
||||
},
|
||||
"instance": [
|
||||
{
|
||||
"prompt_description": "Test - Instance de base minimale",
|
||||
"makefile_cmd": "db_restore_erplibre_base_db_test",
|
||||
"database": "test",
|
||||
"kdbx_key": "default_user_odoo"
|
||||
}
|
||||
],
|
||||
"function": [
|
||||
{
|
||||
"prompt_description": "Ouvrir ERPLibre avec TODO \uD83E\uDD16"
|
||||
},
|
||||
{
|
||||
"prompt_description": "Ouvrir ERPLibre avec tous les utilisateurs",
|
||||
"kdbx_key": [
|
||||
"user 01prod",
|
||||
"user 02 prod"
|
||||
]
|
||||
},
|
||||
{
|
||||
"prompt_description": "Rapport",
|
||||
"command": "./script/selenium/selenium_test.py --test --scenario=rapport"
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in a new issue