diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml
index 631daa31..37be6592 100644
--- a/.github/workflows/dependabot.yml
+++ b/.github/workflows/dependabot.yml
@@ -18,7 +18,7 @@ env:
jobs:
run:
- name: Update requirements.txt
+ name: Update requirements.txt and lock file
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@@ -29,8 +29,10 @@ jobs:
poetry-version: ${{ env.POETRY_VERSION }}
python-version: ${{ env.PYTHON_VERSION }}
install-dependencies: false
- - name: Run poetry export
- run: poetry export -f requirements.txt --output requirements.txt --without-hashes
+ - name: Update dependencies
+ run: |
+ poetry lock --no-update
+ poetry export -f requirements.txt --output requirements.txt --without-hashes
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: Update requirements.txt
diff --git a/.markdownlint.yaml b/.markdownlint.yaml
index ea921d84..6e5405b3 100644
--- a/.markdownlint.yaml
+++ b/.markdownlint.yaml
@@ -3,7 +3,7 @@ default: true
# MD013/line-length - Line length
MD013:
- line_length: 120
+ line_length: 130
tables: false
# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index bf46a3a5..eff964cf 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -13,7 +13,7 @@ repos:
- id: check-added-large-files
- repo: https://github.com/ambv/black
- rev: 23.12.1
+ rev: 24.2.0
hooks:
- id: black
args: [--line-length, '130', --target-version, py38]
@@ -42,7 +42,7 @@ repos:
args: [--autofix]
- repo: https://github.com/igorshubovych/markdownlint-cli
- rev: v0.38.0
+ rev: v0.39.0
hooks:
- id: markdownlint
args: [--fix]
diff --git a/Makefile b/Makefile
index de439660..7ae0abd8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,5 @@
clean:
- rm -rf .venv
- rm -rf .pytest_cache
- rm -rf .tox
- rm -rf .mypy_cache
+ rm -rf .venv .pytest_cache .tox .mypy_cache dist build
install:
poetry install
@@ -24,8 +21,7 @@ tox:
tox
executable:
- rm -r ./build ||:
- rm -r ./dist ||:
+ rm -rf ./build ./dist
poetry run pyinstaller ./scanner.spec
cp ./config.sample.ini ./dist/config.ini
zip -j ./dist/scanner.zip ./dist/*
diff --git a/RELEASE_CHECKLIST.md b/RELEASE_CHECKLIST.md
deleted file mode 100644
index c8c64c48..00000000
--- a/RELEASE_CHECKLIST.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Release Checklist
-
-Since I always forget something when I create a new release,
-here is a small checklist for my future me.
-
-* [ ] Read this checklist.
-* [ ] Make sure all tests are passing.
-* [ ] Do some manual testing.
-* [ ] Make sure everything that should be merged is merged. (Dependency updates?)
-* [ ] Update Version in `pyproject.toml`.
-* [ ] Update Version and Dockerfile links in `./DOCKER_README.md`.
-* [ ] Check if the readme file needs to be adjusted.
diff --git a/poetry.lock b/poetry.lock
index 07147bba..d495f72a 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -13,13 +13,13 @@ files = [
[[package]]
name = "anyio"
-version = "4.2.0"
+version = "4.3.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
python-versions = ">=3.8"
files = [
- {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"},
- {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"},
+ {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"},
+ {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"},
]
[package.dependencies]
@@ -65,13 +65,13 @@ files = [
[[package]]
name = "certifi"
-version = "2023.11.17"
+version = "2024.2.2"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"},
- {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"},
+ {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
+ {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
]
[[package]]
@@ -228,63 +228,63 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"]
[[package]]
name = "coverage"
-version = "7.4.1"
+version = "7.4.3"
description = "Code coverage measurement for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"},
- {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"},
- {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"},
- {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"},
- {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"},
- {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"},
- {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"},
- {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"},
- {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"},
- {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"},
- {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"},
- {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"},
- {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"},
- {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"},
- {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"},
- {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"},
- {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"},
- {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"},
- {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"},
- {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"},
- {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"},
- {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"},
- {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"},
- {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"},
- {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"},
- {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"},
- {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"},
- {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"},
- {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"},
- {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"},
- {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"},
- {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"},
- {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"},
- {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"},
- {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"},
- {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"},
- {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"},
- {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"},
- {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"},
- {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"},
- {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"},
- {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"},
- {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"},
- {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"},
- {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"},
- {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"},
- {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"},
- {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"},
- {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"},
- {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"},
- {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"},
- {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"},
+ {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"},
+ {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"},
+ {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"},
+ {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"},
+ {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"},
+ {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"},
+ {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"},
+ {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"},
+ {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"},
+ {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"},
+ {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"},
+ {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"},
+ {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"},
+ {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"},
+ {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"},
+ {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"},
+ {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"},
+ {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"},
+ {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"},
+ {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"},
+ {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"},
+ {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"},
+ {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"},
+ {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"},
+ {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"},
+ {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"},
+ {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"},
+ {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"},
+ {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"},
+ {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"},
+ {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"},
+ {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"},
+ {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"},
+ {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"},
+ {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"},
+ {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"},
+ {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"},
+ {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"},
+ {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"},
+ {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"},
+ {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"},
+ {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"},
+ {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"},
+ {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"},
+ {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"},
+ {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"},
+ {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"},
+ {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"},
+ {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"},
+ {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"},
+ {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"},
+ {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"},
]
[package.dependencies]
@@ -374,13 +374,13 @@ files = [
[[package]]
name = "httpcore"
-version = "1.0.2"
+version = "1.0.4"
description = "A minimal low-level HTTP client."
optional = false
python-versions = ">=3.8"
files = [
- {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"},
- {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"},
+ {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"},
+ {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"},
]
[package.dependencies]
@@ -391,17 +391,17 @@ h11 = ">=0.13,<0.15"
asyncio = ["anyio (>=4.0,<5.0)"]
http2 = ["h2 (>=3,<5)"]
socks = ["socksio (==1.*)"]
-trio = ["trio (>=0.22.0,<0.23.0)"]
+trio = ["trio (>=0.22.0,<0.25.0)"]
[[package]]
name = "httpx"
-version = "0.25.2"
+version = "0.26.0"
description = "The next generation HTTP client."
optional = false
python-versions = ">=3.8"
files = [
- {file = "httpx-0.25.2-py3-none-any.whl", hash = "sha256:a05d3d052d9b2dfce0e3896636467f8a5342fb2b902c819428e1ac65413ca118"},
- {file = "httpx-0.25.2.tar.gz", hash = "sha256:8b8fcaa0c8ea7b05edd69a094e63a2094c4efcb48129fb757361bc423c0ad9e8"},
+ {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"},
+ {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"},
]
[package.dependencies]
@@ -433,13 +433,13 @@ tests = ["freezegun", "pytest", "pytest-cov"]
[[package]]
name = "identify"
-version = "2.5.33"
+version = "2.5.35"
description = "File identification library for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"},
- {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"},
+ {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"},
+ {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"},
]
[package.extras]
@@ -602,13 +602,13 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "pre-commit"
-version = "3.6.0"
+version = "3.6.2"
description = "A framework for managing and maintaining multi-language pre-commit hooks."
optional = false
python-versions = ">=3.9"
files = [
- {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"},
- {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"},
+ {file = "pre_commit-3.6.2-py2.py3-none-any.whl", hash = "sha256:ba637c2d7a670c10daedc059f5c49b5bd0aadbccfcd7ec15592cf9665117532c"},
+ {file = "pre_commit-3.6.2.tar.gz", hash = "sha256:c3ef34f463045c88658c5b99f38c1e297abdcc0ff13f98d3370055fbbfabc67e"},
]
[package.dependencies]
@@ -630,13 +630,13 @@ files = [
[[package]]
name = "prometheus-client"
-version = "0.19.0"
+version = "0.20.0"
description = "Python client for the Prometheus monitoring system."
optional = false
python-versions = ">=3.8"
files = [
- {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"},
- {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"},
+ {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"},
+ {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"},
]
[package.extras]
@@ -654,23 +654,23 @@ files = [
[[package]]
name = "pyinstaller"
-version = "6.3.0"
+version = "6.4.0"
description = "PyInstaller bundles a Python application and all its dependencies into a single package."
optional = false
python-versions = "<3.13,>=3.8"
files = [
- {file = "pyinstaller-6.3.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:75a6f2a6f835a2e6e0899d10e60c10caf5defd25aced38b1dd48fbbabc89de07"},
- {file = "pyinstaller-6.3.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:de25beb176f73a944758553caacec46cc665bf3910ad8a174706d79cf6e95340"},
- {file = "pyinstaller-6.3.0-py3-none-manylinux2014_i686.whl", hash = "sha256:e436fcc0ea87c3f132baac916d508c24c84a8f6d8a06c3154fbc753f169b76c7"},
- {file = "pyinstaller-6.3.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:b721d793a33b6d9946c7dd95d3ea7589c0424b51cf1b9fe580f03c544f1336b2"},
- {file = "pyinstaller-6.3.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:96c37a1ee5b2fd5bb25c098ef510661d6d17b6515d0b86d8fc93727dd2475ba3"},
- {file = "pyinstaller-6.3.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:abe91106a3bbccc3f3a27af4325676ecdb6f46cb842ac663625002a870fc503b"},
- {file = "pyinstaller-6.3.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:41c937fe8f07ae02009b3b5a96ac3eb0800a4f8a97af142d4100060fe2135bb9"},
- {file = "pyinstaller-6.3.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:886b3b995b674905a20ad5b720b47cc395897d7b391117831027a4c8c5d67a58"},
- {file = "pyinstaller-6.3.0-py3-none-win32.whl", hash = "sha256:0597fb04337695e5cc5250253e0655530bf14f264b7a5b7d219cc65f6889c4bd"},
- {file = "pyinstaller-6.3.0-py3-none-win_amd64.whl", hash = "sha256:156b32ba943e0090bcc68e40ae1cb68fd92b7f1ab6fe0bdf8faf3d3cfc4e12dd"},
- {file = "pyinstaller-6.3.0-py3-none-win_arm64.whl", hash = "sha256:1eadbd1fae84e2e6c678d8b4ed6a232ec5c8fe3a839aea5a3071c4c0282f98cc"},
- {file = "pyinstaller-6.3.0.tar.gz", hash = "sha256:914d4c96cc99472e37ac552fdd82fbbe09e67bb592d0717fcffaa99ea74273df"},
+ {file = "pyinstaller-6.4.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:a2e63fa71784f290bbf79b31b60a27c45b17a18b8c7f910757f9474e0c12c95d"},
+ {file = "pyinstaller-6.4.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:3127724d1841f785a9916d7b4cfd9595f359925e9ce7d137a16db8c29ca8453b"},
+ {file = "pyinstaller-6.4.0-py3-none-manylinux2014_i686.whl", hash = "sha256:a37f83850cb150ad1e00fe92acecc4d39b8e10162a1850a5836a05fcb2daa870"},
+ {file = "pyinstaller-6.4.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:28b98fa3c74602bdc4c5a7698e907f31e714cc40a13f6358082bcbc74ddab35c"},
+ {file = "pyinstaller-6.4.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:3ae62cf8858ec4dc54df6fa03d29bc78297e3c87caf532887eae8c3893be0789"},
+ {file = "pyinstaller-6.4.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e3e1e6922a4260dcacf6f5655b0ca857451e05ac502d01642935d0f2873ad3c7"},
+ {file = "pyinstaller-6.4.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:78fb66ca753ef8becdf059eaa1e764d384cacb8c2ec76800126f8c9ef6d19a50"},
+ {file = "pyinstaller-6.4.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:e07cff584600647af7dc279dd04c60cd1b4b1b41947b0753f8fcf1969300a583"},
+ {file = "pyinstaller-6.4.0-py3-none-win32.whl", hash = "sha256:c7bc0fbea8a9010484cfa7d3856416003af73271f03ca3da4bc0eaf14680ad17"},
+ {file = "pyinstaller-6.4.0-py3-none-win_amd64.whl", hash = "sha256:ec8a08c983e3febb0247893cd9bd59f55b6767a1f649cb41a0a129b8f04ff2cb"},
+ {file = "pyinstaller-6.4.0-py3-none-win_arm64.whl", hash = "sha256:11e6da6a6e441379352ee460a8880f2633dac91dac0f5a9eeff5d449d459b046"},
+ {file = "pyinstaller-6.4.0.tar.gz", hash = "sha256:1bf608ed947b58614711275a7ff169289b32560dc97ec748ebd5fa8bdec80649"},
]
[package.dependencies]
@@ -679,7 +679,7 @@ importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""}
packaging = ">=22.0"
pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""}
-pyinstaller-hooks-contrib = ">=2021.4"
+pyinstaller-hooks-contrib = ">=2024.0"
pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""}
setuptools = ">=42.0.0"
@@ -689,13 +689,13 @@ hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"]
[[package]]
name = "pyinstaller-hooks-contrib"
-version = "2024.0"
+version = "2024.1"
description = "Community maintained hooks for PyInstaller"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pyinstaller-hooks-contrib-2024.0.tar.gz", hash = "sha256:a7118c1a5c9788595e5c43ad058a7a5b7b6d59e1eceb42362f6ec1f0b61986b0"},
- {file = "pyinstaller_hooks_contrib-2024.0-py2.py3-none-any.whl", hash = "sha256:469b5690df53223e2e8abffb2e44d6ee596e7d79d4b1eed9465123b67439875a"},
+ {file = "pyinstaller-hooks-contrib-2024.1.tar.gz", hash = "sha256:51a51ea9e1ae6bd5ffa7ec45eba7579624bf4f2472ff56dba0edc186f6ed46a6"},
+ {file = "pyinstaller_hooks_contrib-2024.1-py2.py3-none-any.whl", hash = "sha256:131494f9cfce190aaa66ed82e82c78b2723d1720ce64d012fbaf938f4ab01d35"},
]
[package.dependencies]
@@ -705,13 +705,13 @@ setuptools = ">=42.0.0"
[[package]]
name = "pytest"
-version = "8.0.0"
+version = "8.0.1"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"},
- {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"},
+ {file = "pytest-8.0.1-py3-none-any.whl", hash = "sha256:3e4f16fe1c0a9dc9d9389161c127c3edc5d810c38d6793042fb81d9f48a59fca"},
+ {file = "pytest-8.0.1.tar.gz", hash = "sha256:267f6563751877d772019b13aacbe4e860d73fe8f651f28112e9ac37de7513ae"},
]
[package.dependencies]
@@ -776,29 +776,29 @@ requests = ">=1.0"
[[package]]
name = "python-telegram-bot"
-version = "20.7"
+version = "20.8"
description = "We have made you a wrapper you can't refuse"
optional = false
python-versions = ">=3.8"
files = [
- {file = "python-telegram-bot-20.7.tar.gz", hash = "sha256:4f146c39de5f5e0b3723c2abedaf78046ebd30a6a49d2281ee4b3af5eb116b68"},
- {file = "python_telegram_bot-20.7-py3-none-any.whl", hash = "sha256:462326c65671c8c39e76c8c96756ee918be6797d225f8db84d2ec0f883383b8c"},
+ {file = "python-telegram-bot-20.8.tar.gz", hash = "sha256:0e1e4a6dbce3f4ba606990d66467a5a2d2018368fe44756fae07410a74e960dc"},
+ {file = "python_telegram_bot-20.8-py3-none-any.whl", hash = "sha256:a98ddf2f237d6584b03a2f8b20553e1b5e02c8d3a1ea8e17fd06cc955af78c14"},
]
[package.dependencies]
cachetools = {version = ">=5.3.2,<5.4.0", optional = true, markers = "extra == \"callback-data\""}
-httpx = ">=0.25.2,<0.26.0"
+httpx = ">=0.26.0,<0.27.0"
[package.extras]
-all = ["APScheduler (>=3.10.4,<3.11.0)", "aiolimiter (>=1.1.0,<1.2.0)", "cachetools (>=5.3.2,<5.4.0)", "cryptography (>=39.0.1)", "httpx[http2]", "httpx[socks]", "pytz (>=2018.6)", "tornado (>=6.3.3,<6.4.0)"]
+all = ["APScheduler (>=3.10.4,<3.11.0)", "aiolimiter (>=1.1.0,<1.2.0)", "cachetools (>=5.3.2,<5.4.0)", "cryptography (>=39.0.1)", "httpx[http2]", "httpx[socks]", "pytz (>=2018.6)", "tornado (>=6.4,<7.0)"]
callback-data = ["cachetools (>=5.3.2,<5.4.0)"]
-ext = ["APScheduler (>=3.10.4,<3.11.0)", "aiolimiter (>=1.1.0,<1.2.0)", "cachetools (>=5.3.2,<5.4.0)", "pytz (>=2018.6)", "tornado (>=6.3.3,<6.4.0)"]
+ext = ["APScheduler (>=3.10.4,<3.11.0)", "aiolimiter (>=1.1.0,<1.2.0)", "cachetools (>=5.3.2,<5.4.0)", "pytz (>=2018.6)", "tornado (>=6.4,<7.0)"]
http2 = ["httpx[http2]"]
job-queue = ["APScheduler (>=3.10.4,<3.11.0)", "pytz (>=2018.6)"]
passport = ["cryptography (>=39.0.1)"]
rate-limiter = ["aiolimiter (>=1.1.0,<1.2.0)"]
socks = ["httpx[socks]"]
-webhooks = ["tornado (>=6.3.3,<6.4.0)"]
+webhooks = ["tornado (>=6.4,<7.0)"]
[[package]]
name = "pywin32-ctypes"
@@ -912,13 +912,13 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "responses"
-version = "0.24.1"
+version = "0.25.0"
description = "A utility library for mocking out the `requests` Python library."
optional = false
python-versions = ">=3.8"
files = [
- {file = "responses-0.24.1-py3-none-any.whl", hash = "sha256:a2b43f4c08bfb9c9bd242568328c65a34b318741d3fab884ac843c5ceeb543f9"},
- {file = "responses-0.24.1.tar.gz", hash = "sha256:b127c6ca3f8df0eb9cc82fd93109a3007a86acb24871834c47b77765152ecf8c"},
+ {file = "responses-0.25.0-py3-none-any.whl", hash = "sha256:2f0b9c2b6437db4b528619a77e5d565e4ec2a9532162ac1a131a83529db7be1a"},
+ {file = "responses-0.25.0.tar.gz", hash = "sha256:01ae6a02b4f34e39bffceb0fc6786b67a25eae919c6368d05eabc8d9576c2a66"},
]
[package.dependencies]
@@ -931,19 +931,19 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asy
[[package]]
name = "setuptools"
-version = "69.0.3"
+version = "69.1.1"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
python-versions = ">=3.8"
files = [
- {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"},
- {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"},
+ {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"},
+ {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"},
]
[package.extras]
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
-testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
[[package]]
name = "sniffio"
@@ -980,13 +980,13 @@ files = [
[[package]]
name = "urllib3"
-version = "2.2.0"
+version = "2.2.1"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.8"
files = [
- {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"},
- {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"},
+ {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
+ {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
]
[package.extras]
@@ -997,13 +997,13 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "virtualenv"
-version = "20.25.0"
+version = "20.25.1"
description = "Virtual Python Environment builder"
optional = false
python-versions = ">=3.7"
files = [
- {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"},
- {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"},
+ {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"},
+ {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"},
]
[package.dependencies]
@@ -1033,4 +1033,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
[metadata]
lock-version = "2.0"
python-versions = ">=3.9,<3.13"
-content-hash = "4b95b5c341154058ee5487704cf30b23237a5c586178ac6ab51c135494eaa138"
+content-hash = "5455feaf07f1b13258e2ef8736d10c0a4dbf2a5bd8a9a8882c7f782ae3e831df"
diff --git a/pyproject.toml b/pyproject.toml
index 2e0f4e4d..f8a18633 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -12,7 +12,7 @@ name = "tgtg-scanner"
packages = [{include = "tgtg_scanner"}]
readme = "README.md"
repository = "https://github.com/Der-Henning/tgtg"
-version = "1.20.2"
+version = "1.20.3"
[tool.poetry.dependencies]
apprise = "^1.4.0"
@@ -22,11 +22,11 @@ googlemaps = "^4.10.0"
humanize = "^4.7.0"
packaging = "^23.1"
progress = "^1.6"
-prometheus-client = "^0.19.0"
+prometheus-client = "^0.20.0"
pycron = "^3.0.0"
python = ">=3.9,<3.13"
python-pushsafer = "^1.1"
-python-telegram-bot = {extras = ["callback-data"], version = "^20.4"}
+python-telegram-bot = {extras = ["callback-data"], version = "^20.8"}
requests = "^2.31.0"
[tool.poetry.group.build.dependencies]
@@ -37,7 +37,7 @@ pre-commit = "^3.3.3"
pytest = "^8.0.0"
pytest-cov = "^4.1.0"
pytest-mock = "^3.11.1"
-responses = "^0.24.1"
+responses = "^0.25.0"
[tool.poetry.scripts]
scanner = "tgtg_scanner.__main__:main"
diff --git a/requirements.txt b/requirements.txt
index 9568d303..bfaf29cc 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,7 @@
-anyio==4.2.0 ; python_version >= "3.9" and python_version < "3.13"
+anyio==4.3.0 ; python_version >= "3.9" and python_version < "3.13"
apprise==1.7.2 ; python_version >= "3.9" and python_version < "3.13"
cachetools==5.3.2 ; python_version >= "3.9" and python_version < "3.13"
-certifi==2023.11.17 ; python_version >= "3.9" and python_version < "3.13"
+certifi==2024.2.2 ; python_version >= "3.9" and python_version < "3.13"
charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "3.13"
click==8.1.7 ; python_version >= "3.9" and python_version < "3.13"
colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.13" and (sys_platform == "win32" or platform_system == "Windows")
@@ -10,8 +10,8 @@ cron-descriptor==1.4.3 ; python_version >= "3.9" and python_version < "3.13"
exceptiongroup==1.2.0 ; python_version >= "3.9" and python_version < "3.11"
googlemaps==4.10.0 ; python_version >= "3.9" and python_version < "3.13"
h11==0.14.0 ; python_version >= "3.9" and python_version < "3.13"
-httpcore==1.0.2 ; python_version >= "3.9" and python_version < "3.13"
-httpx==0.25.2 ; python_version >= "3.9" and python_version < "3.13"
+httpcore==1.0.4 ; python_version >= "3.9" and python_version < "3.13"
+httpx==0.26.0 ; python_version >= "3.9" and python_version < "3.13"
humanize==4.9.0 ; python_version >= "3.9" and python_version < "3.13"
idna==3.6 ; python_version >= "3.9" and python_version < "3.13"
importlib-metadata==7.0.1 ; python_version >= "3.9" and python_version < "3.10"
@@ -19,14 +19,14 @@ markdown==3.5.2 ; python_version >= "3.9" and python_version < "3.13"
oauthlib==3.2.2 ; python_version >= "3.9" and python_version < "3.13"
packaging==23.2 ; python_version >= "3.9" and python_version < "3.13"
progress==1.6 ; python_version >= "3.9" and python_version < "3.13"
-prometheus-client==0.19.0 ; python_version >= "3.9" and python_version < "3.13"
+prometheus-client==0.20.0 ; python_version >= "3.9" and python_version < "3.13"
pycron==3.0.0 ; python_version >= "3.9" and python_version < "3.13"
python-pushsafer==1.1 ; python_version >= "3.9" and python_version < "3.13"
-python-telegram-bot[callback-data]==20.7 ; python_version >= "3.9" and python_version < "3.13"
+python-telegram-bot[callback-data]==20.8 ; python_version >= "3.9" and python_version < "3.13"
pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "3.13"
requests-oauthlib==1.3.1 ; python_version >= "3.9" and python_version < "3.13"
requests==2.31.0 ; python_version >= "3.9" and python_version < "3.13"
sniffio==1.3.0 ; python_version >= "3.9" and python_version < "3.13"
typing-extensions==4.9.0 ; python_version >= "3.9" and python_version < "3.11"
-urllib3==2.2.0 ; python_version >= "3.9" and python_version < "3.13"
+urllib3==2.2.1 ; python_version >= "3.9" and python_version < "3.13"
zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10"
diff --git a/tgtg_scanner/__main__.py b/tgtg_scanner/__main__.py
index b1918552..588cd955 100644
--- a/tgtg_scanner/__main__.py
+++ b/tgtg_scanner/__main__.py
@@ -34,10 +34,10 @@
SYS_PLATFORM = platform.system()
IS_WINDOWS = SYS_PLATFORM.lower() in {"windows", "cygwin"}
-IS_EXECUTABLE = getattr(sys, "_MEIPASS", False)
+IS_EXECUTABLE = getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS")
PROG_PATH = Path(sys.executable).parent if IS_EXECUTABLE else Path(os.getcwd())
IS_DOCKER = os.environ.get("DOCKER", "False").lower() in {"true", "1", "t", "y", "yes"}
-LOGS_PATH = os.environ.get("LOGS_PATH", PROG_PATH)
+LOGS_PATH = Path(os.environ.get("LOGS_PATH", PROG_PATH))
def main():
@@ -130,6 +130,7 @@ def main():
logging.root.addHandler(stream_handler)
# Define file formatter and handler
+ args.log_file.parent.mkdir(parents=True, exist_ok=True)
file_handler = logging.FileHandler(args.log_file, mode="w", encoding="utf-8")
file_formatter = logging.Formatter(
fmt=("[%(asctime)s][%(name)s][%(filename)s:%(funcName)s:%(lineno)d][%(levelname)s] %(message)s"),
diff --git a/tgtg_scanner/models/config.py b/tgtg_scanner/models/config.py
index af36ab92..abbf540f 100644
--- a/tgtg_scanner/models/config.py
+++ b/tgtg_scanner/models/config.py
@@ -563,8 +563,12 @@ def __post_init__(self):
self.token_path = environ.get("TGTG_TOKEN_PATH", None)
self._load_tokens()
+ self.set_locale()
+
+ def set_locale(self) -> None:
if self.locale and not self.locale.startswith("en"):
try:
+ log.debug("Activating locale %s", self.locale)
humanize.i18n.activate(self.locale)
except FileNotFoundError as err:
raise ConfigurationError(f"Invalid locale '{self.locale}' - {err}") from err
diff --git a/tgtg_scanner/notifiers/base.py b/tgtg_scanner/notifiers/base.py
index c750ba60..5fdee203 100644
--- a/tgtg_scanner/notifiers/base.py
+++ b/tgtg_scanner/notifiers/base.py
@@ -15,6 +15,7 @@ class Notifier(ABC):
@abstractmethod
def __init__(self, config: Config, reservations: Reservations, favorites: Favorites):
+ self.config = config
self.enabled = False
self.reservations = reservations
self.favorites = favorites
@@ -29,6 +30,7 @@ def name(self):
def _run(self) -> None:
"""Run notifier"""
+ self.config.set_locale()
while True:
try:
item = self.queue.get()
diff --git a/tgtg_scanner/notifiers/telegram.py b/tgtg_scanner/notifiers/telegram.py
index 6a37db9d..a376f96d 100644
--- a/tgtg_scanner/notifiers/telegram.py
+++ b/tgtg_scanner/notifiers/telegram.py
@@ -169,6 +169,7 @@ async def _listen_for_items() -> None:
except Exception as exc:
log.warning("Telegram failed stopping polling: %s", exc)
+ self.config.set_locale()
asyncio.run(_listen_for_items())
def _unmask(self, text: str, item: Item) -> str:
diff --git a/wiki/Configuration.md b/wiki/Configuration.md
index a39d1817..6d7c3f5e 100644
--- a/wiki/Configuration.md
+++ b/wiki/Configuration.md
@@ -23,28 +23,28 @@ Variables with the `locale` property are affected by the `locale` option and ret
| variable | description | example | locale |
|----------|-------------|---------|--------|
-| item_id | unique identifier of the item | `774625` |
-| items_available | number of available items | `2` |
-| display_name | name of the item as in the APP | `Chutney Indian Food - Hamburg – Europapassage 2.OG` |
-| description | item description | `Rette eine Magic Bag mit leckerem indischen Essen.` |
-| price | item price | `3.20` |
-| value | item value | `9.60` |
-| currency | price/value currency | `EUR` |
+| item_id | unique identifier of the item | `774625` | |
+| items_available | number of available items | `2` | |
+| display_name | name of the item as in the APP | `Chutney Indian Food - Hamburg – Europapassage 2.OG` | |
+| description | item description | `Rette eine Magic Bag mit leckerem indischen Essen.` | |
+| price | item price | `3.20` | |
+| value | item value | `9.60` | |
+| currency | price/value currency | `EUR` | |
| pickupdate | formatted string | `tomorrow, 18:00 - 21:50` | YES |
-| favorite | is favorite | `YES` or `NO` |
-| rating | overall rating | `3.3` |
-| buffet | is buffet | `YES` or `NO` |
-| item_category | | `MEAL` |
-| item_name | |
-| packaging_option | | `BAG_ALLOWED` |
-| pickup_location | | `Ballindamm 40, 20095 Hamburg, Deutschland` |
-| store_name | | `Chutney Indian Food` |
-| item_logo | item logo url | `https://tgtg-mkt-cms-prod.s3.eu-west-1.amazonaws.com/13512/TGTG_Icon_White_Cirle_1988x1988px_RGB.png` |
-| item_cover | item cover url | `https://images.tgtg.ninja/standard_images/GENERAL/other1.jpg` |
-| scanned_on | timestamp when the item was scanned | `2023-02-14 20:43:21` |
-| item_logo_bytes | item logo as data blob |
-| item_cover_bytes | item cover as data blob |
-| link | url of the item | `https://share.toogoodtogo.com/item/774625` |
+| favorite | is favorite | `YES` or `NO` | |
+| rating | overall rating | `3.3` | |
+| buffet | is buffet | `YES` or `NO` | |
+| item_category | | `MEAL` | |
+| item_name | | | |
+| packaging_option | | `BAG_ALLOWED` | |
+| pickup_location | | `Ballindamm 40, 20095 Hamburg, Deutschland` | |
+| store_name | | `Chutney Indian Food` | |
+| item_logo | item logo url | `https://tgtg-mkt-cms-prod.s3.eu-west-1.amazonaws.com/13512/TGTG_Icon_White_Cirle_1988x1988px_RGB.png` | |
+| item_cover | item cover url | `https://images.tgtg.ninja/standard_images/GENERAL/other1.jpg` | |
+| scanned_on | timestamp when the item was scanned | `2023-02-14 20:43:21` | |
+| item_logo_bytes | item logo as data blob | | |
+| item_cover_bytes | item cover as data blob | | |
+| link | url of the item | `https://share.toogoodtogo.com/item/774625` | |
| distance_walking | walking distance from home | `5.9 km` | YES |
| distance_driving | driving distance from home | `8 km` | YES |
| distance_transit | transit distance from home | `8 km` | YES |
@@ -69,14 +69,14 @@ You can combine multiple crons as semicolon separated list.
| Debug | DEBUG | enable debugging mode | `false` |
| SleepTime | SLEEP_TIME | time between two consecutive scans in seconds | `60` |
| ScheduleCron | SCHEDULE_CRON | run only on schedule | `* * * * *` |
-| ItemIDs | ITEM_IDS | **Depreciated!** comma-separated list of additional (none favorite) items to scan |
+| ItemIDs | ITEM_IDS | **Depreciated!** comma-separated list of additional (none favorite) items to scan | |
| Metrics | METRICS | enable Prometheus metrics HTTP server | `false` |
| MetricsPort | METRICS_PORTS | port for metrics server | `8000` |
| DisableTests | DISABLE_TESTS | disable test notifications on startup | `false` |
| Quiet | QUIET | minimal console output | `false` |
| Locale | LOCALE | localization | `en_US` |
| Activity | ACTIVITY | show running indicator (always disabled in docker) | `true` |
-| | TZ | timezone for docker based setups, e.g. `Berlin/Europe` |
+| | TZ | timezone for docker based setups, e.g. `Berlin/Europe` | |
| | UID | set user id for docker container | `1000` |
| | GID | set group id for docker container | `1000` |
@@ -85,80 +85,80 @@ You can combine multiple crons as semicolon separated list.
| config.ini | environment | description | default | required |
|------------|-------------|-------------|---------|:----------:|
| Username | TGTG_USERNAME | email connected to your TGTG Account | | YES |
-| AccessToken | TGTG_ACCESS_TOKEN | TGTG API access token |
-| RefreshToken | TGTG_REFRESH_TOKEN | TGTG API refresh token |
-| UserId | TGTG_USER_ID | TGTG API user ID |
-| Datadome | TGTG_DATADOME | TGTG API datadome protection cookie |
-| Timeout | TGTG_TIMEOUT | timeout for API requests | `60` |
-| AccessTokenLifetime | TGTG_ACCESS_TOKEN_LIFETIME | access token lifetime in seconds | `14400` |
-| MaxPollingTries | TGTG_MAX_POLLING_TRIES | max polling retries during login | `24` |
-| PollingWaitTime | TGTG_POLLING_WAIT_TIME | time between polling retries in seconds | `5` |
+| AccessToken | TGTG_ACCESS_TOKEN | TGTG API access token | | |
+| RefreshToken | TGTG_REFRESH_TOKEN | TGTG API refresh token | | |
+| UserId | TGTG_USER_ID | TGTG API user ID | | |
+| Datadome | TGTG_DATADOME | TGTG API datadome protection cookie | | |
+| Timeout | TGTG_TIMEOUT | timeout for API requests | `60` | |
+| AccessTokenLifetime | TGTG_ACCESS_TOKEN_LIFETIME | access token lifetime in seconds | `14400` | |
+| MaxPollingTries | TGTG_MAX_POLLING_TRIES | max polling retries during login | `24` | |
+| PollingWaitTime | TGTG_POLLING_WAIT_TIME | time between polling retries in seconds | `5` | |
### [LOCATION] / Location settings
| config.ini | environment | description | default | required if enabled | variables |
|------------|-------------|-------------|---------|:-------------------:|:---------:|
-| Enabled | LOCATION | enable location service | `false` |
-| GoogleMapsAPIKey | LOCATION_GOOGLE_MAPS_API_KEY | API key for google maps service | | YES |
-| OriginAddress | LOCATION_ORIGIN_ADDRESS | origin for distance calculation, e.g. your home address | | YES |
+| Enabled | LOCATION | enable location service | `false` | | |
+| GoogleMapsAPIKey | LOCATION_GOOGLE_MAPS_API_KEY | API key for google maps service | | YES | |
+| OriginAddress | LOCATION_ORIGIN_ADDRESS | origin for distance calculation, e.g. your home address | | YES | |
### [CONSOLE] / Console Notifier
| config.ini | environment | description | default | required if enabled | variables |
|------------|-------------|-------------|---------|:-------------------:|:---------:|
-| Enabled | CONSOLE | enable console notifications | `false` | |
+| Enabled | CONSOLE | enable console notifications | `false` | | |
| Body | CONSOLE_BODY | message body | `${{scanned_on}} ${{display_name}} - new amount: ${{items_available}}` | | YES |
-| Cron | CONSOLE_CRON | enable notification only on schedule | `* * * * *` |
+| Cron | CONSOLE_CRON | enable notification only on schedule | `* * * * *` | | |
### [SMTP] / SMTP Notifier
| config.ini | environment | description | default | required if enabled | variables |
|------------|-------------|-------------|---------|:-------------------:|:---------:|
-| Enabled | SMTP | enable SMTP notifications | `false` |
-| Host | SMTP_HOST | SMTP server host | `smtp.gmail.com` |
-| Port | SMTP_PORT | SMTP server port | `587` |
-| TLS | SMTP_TLS | enable TLS | `true`|
-| SSL | SMTP_SSL | enable SSL | `false` |
-| Username | SMTP_USERNAME | login username |
-| Password | SMTP_PASSWORD | login password |
-| Sender | SMTP_SENDER | email sender |
-| Recipients | SMTP_RECIPIENTS | email recipients | | YES |
-| RecipientsPerItem | SMTP_RECIPIENTS_PER_ITEM | email recipients per item as JSON `{"ItemId_1": ["mail@example.com", ...], ...}` | | |
+| Enabled | SMTP | enable SMTP notifications | `false` | | |
+| Host | SMTP_HOST | SMTP server host | `smtp.gmail.com` | | |
+| Port | SMTP_PORT | SMTP server port | `587` | | |
+| TLS | SMTP_TLS | enable TLS | `true`| | |
+| SSL | SMTP_SSL | enable SSL | `false` | | |
+| Username | SMTP_USERNAME | login username | | | |
+| Password | SMTP_PASSWORD | login password | | | |
+| Sender | SMTP_SENDER | email sender | | | |
+| Recipients | SMTP_RECIPIENTS | email recipients | | YES | |
+| RecipientsPerItem | SMTP_RECIPIENTS_PER_ITEM | email recipients per item as JSON `{"ItemId_1": ["mail@example.com", ...], ...}` | | | |
| Subject | SMTP_SUBJECT | email subject | `New Magic Bags` | | YES |
| Body | SMTP_BODY | email html body | `${{display_name}} New Amount: ${{items_available}}` | | YES |
-| Cron | SMTP_CRON | enable notification only on schedule | `* * * * *` |
+| Cron | SMTP_CRON | enable notification only on schedule | `* * * * *` | | |
### [PUSHSAFER] / Pushsafer Notifier
| config.ini | environment | description | default | required if enabled | variables |
|------------|-------------|-------------|---------|:-------------------:|:---------:|
-| Enabled | PUSHSAFER | enable Pushsafer notifications | `false` |
-| Key | PUSHSAFER_KEY | Pushsafer API key | | YES |
-| DeviceID | PUSHSAFER_DEVICE_ID | Pushsafer device ID | | YES |
-| Cron | PUSHSAFER_CRON | enable notification only on schedule | `* * * * *` |
+| Enabled | PUSHSAFER | enable Pushsafer notifications | `false` | | |
+| Key | PUSHSAFER_KEY | Pushsafer API key | | YES | |
+| DeviceID | PUSHSAFER_DEVICE_ID | Pushsafer device ID | | YES | |
+| Cron | PUSHSAFER_CRON | enable notification only on schedule | `* * * * *` | | |
### [IFTTT] / IFTTT Notifier
| config.ini | environment | description | default | required if enabled | variables |
|------------|-------------|-------------|---------|:-------------------:|:---------:|
-| Enabled | IFTTT | enable IFTTT notifications | `false` |
-| Event | IFTTT_EVENT | IFTTT webhook event | | YES |
-| Key | IFTTT_KEY | IFTTT webhook key | | YES |
+| Enabled | IFTTT | enable IFTTT notifications | `false` | | |
+| Event | IFTTT_EVENT | IFTTT webhook event | | YES | |
+| Key | IFTTT_KEY | IFTTT webhook key | | YES | |
| Body | IFTTT_BODY | JSON message body | `{"value1": "${{display_name}}", "value2": ${{items_available}}, "value3": "${{link}}"}` | | YES |
-| Timeout | IFTTT_TIMEOUT | timeout for API requests | 60 |
-| Cron | IFTTT_CRON | enable notification only on schedule | `* * * * *` |
+| Timeout | IFTTT_TIMEOUT | timeout for API requests | 60 | | |
+| Cron | IFTTT_CRON | enable notification only on schedule | `* * * * *` | | |
### [TELEGRAM] / Telegram Notifier
| config.ini | environment | description | default | required if enabled | variables |
|------------|-------------|-------------|---------|:-------------------:|:---------:|
-| Enabled | TELEGRAM | enable Telegram notifications | `false` |
-| Token | TELEGRAM_TOKEN | Telegram Bot token | | YES |
-| ChatIDs | TELEGRAM_CHAT_IDS | comma-separated list of chat ids |
-| Body | TELEGRAM_BODY | message body | `*${{display_name}}* \n*Available*: ${{items_available}}\n*Price*: ${{price}} ${{currency}}\n*Pickup*: ${{pickupdate}}` | | YES
-| DisableCommands | TELEGRAM_DISABLE_COMMANDS | disable bot commands | `false` |
-| Timeout | TELEGRAM_TIMEOUT | timeout for telegram API requests | 60 |
-| Cron | TELEGRAM_CRON | enable notification only on schedule | `* * * * *` |
+| Enabled | TELEGRAM | enable Telegram notifications | `false` | | |
+| Token | TELEGRAM_TOKEN | Telegram Bot token | | YES | |
+| ChatIDs | TELEGRAM_CHAT_IDS | comma-separated list of chat ids | | | |
+| Body | TELEGRAM_BODY | message body | `*${{display_name}}* \n*Available*: ${{items_available}}\n*Price*: ${{price}} ${{currency}}\n*Pickup*: ${{pickupdate}}` | | YES |
+| DisableCommands | TELEGRAM_DISABLE_COMMANDS | disable bot commands | `false` | | |
+| Timeout | TELEGRAM_TIMEOUT | timeout for telegram API requests | 60 | | |
+| Cron | TELEGRAM_CRON | enable notification only on schedule | `* * * * *` | | |
#### Note on Markdown V2
@@ -173,41 +173,41 @@ For details on the service URL configuration see