Compare commits

..

9 Commits

6 changed files with 405 additions and 88 deletions

1
.gitignore vendored
View File

@@ -409,4 +409,3 @@ bh_unicode_properties.cache
# Sublime-github package stores a github token in this file # Sublime-github package stores a github token in this file
# https://packagecontrol.io/packages/sublime-github # https://packagecontrol.io/packages/sublime-github
GitHub.sublime-settings GitHub.sublime-settings

View File

@@ -1 +1 @@
C:/Users/danny/PycharmProjects/aws_control_panel/.venv/Scripts/python.exe C:/Users/danny/PycharmProjects/aws_control_panel/.venv/Scripts/python.exe

28
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,28 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-ast
- id: check-case-conflict
- id: check-json
- id: check-merge-conflict
- id: check-shebang-scripts-are-executable
- id: check-symlinks
- id: check-toml
- id: check-vcs-permalinks
- id: check-xml
- id: debug-statements
- id: destroyed-symlinks
- id: detect-aws-credentials
- id: detect-private-key
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: https://github.com/asottile/pyupgrade
rev: v3.15.0
hooks:
- id: pyupgrade
args: [--py311-plus]

382
pdm.lock generated
View File

@@ -2,11 +2,10 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[metadata] [metadata]
groups = ["default"] groups = ["default", "dev"]
cross_platform = true strategy = ["cross_platform"]
static_urls = false lock_version = "4.4"
lock_version = "4.3" content_hash = "sha256:4ef4ee6db10ba2c406d3a01ba1a71f1ea2b2fdced3ed314e0609e5a0351b156b"
content_hash = "sha256:4f96d5d4f42e83e8d1d1508e6011fca71612d4b23e40596c57b586f245fa8dbf"
[[package]] [[package]]
name = "aiofiles" name = "aiofiles"
@@ -108,6 +107,35 @@ files = [
{file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
] ]
[[package]]
name = "bcrypt"
version = "4.0.1"
requires_python = ">=3.6"
summary = "Modern password hashing for your software and your servers"
files = [
{file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"},
{file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"},
{file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"},
{file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"},
{file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"},
{file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"},
{file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"},
{file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"},
{file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"},
{file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"},
{file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"},
{file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"},
{file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"},
{file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"},
{file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"},
{file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"},
{file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"},
{file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"},
{file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"},
{file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"},
{file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"},
]
[[package]] [[package]]
name = "bidict" name = "bidict"
version = "0.22.1" version = "0.22.1"
@@ -120,68 +148,68 @@ files = [
[[package]] [[package]]
name = "boto3" name = "boto3"
version = "1.28.52" version = "1.29.3"
requires_python = ">= 3.7" requires_python = ">= 3.7"
summary = "The AWS SDK for Python" summary = "The AWS SDK for Python"
dependencies = [ dependencies = [
"botocore<1.32.0,>=1.31.52", "botocore<1.33.0,>=1.32.3",
"jmespath<2.0.0,>=0.7.1", "jmespath<2.0.0,>=0.7.1",
"s3transfer<0.7.0,>=0.6.0", "s3transfer<0.8.0,>=0.7.0",
] ]
files = [ files = [
{file = "boto3-1.28.52-py3-none-any.whl", hash = "sha256:1d36db102517d62c6968b3b0636303241f56859d12dd071def4882fc6e030b20"}, {file = "boto3-1.29.3-py3-none-any.whl", hash = "sha256:85123ba6ccef12f8230bcd85bf730d3c4218e08e3cc4baaa0b3eae094703e77d"},
{file = "boto3-1.28.52.tar.gz", hash = "sha256:a34fc153cb2f6fb2f79a764286c967392e8aae9412381d943bddc576c4f7631a"}, {file = "boto3-1.29.3.tar.gz", hash = "sha256:d038b19cbe29d488133351ee6eb36ee11a0934df8bcbc0892bbeb2c544a327a4"},
] ]
[[package]] [[package]]
name = "boto3-stubs" name = "boto3-stubs"
version = "1.28.52" version = "1.29.3"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3 1.28.52 generated with mypy-boto3-builder 7.19.0" summary = "Type annotations for boto3 1.29.3 generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"botocore-stubs", "botocore-stubs",
"types-s3transfer", "types-s3transfer",
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "boto3-stubs-1.28.52.tar.gz", hash = "sha256:12d7e5865aeec52e1f73b935b1c6a42e61325538fc2cb83a87a83e41e9485241"}, {file = "boto3-stubs-1.29.3.tar.gz", hash = "sha256:cd963cf5df25c6629e4c4625f08ce0dee003b0e5ecaf9d78f64ad98bb670561f"},
{file = "boto3_stubs-1.28.52-py3-none-any.whl", hash = "sha256:3ea81a225e062f3bcb205467891086ea031519697ad54622e61251b52609b8d6"}, {file = "boto3_stubs-1.29.3-py3-none-any.whl", hash = "sha256:7e89134ef050311b35d97e5a1493eb4fbee7ac0f8bfa7fe1411f4779da856804"},
] ]
[[package]] [[package]]
name = "boto3-stubs" name = "boto3-stubs"
version = "1.28.52" version = "1.29.3"
extras = ["essential"] extras = ["essential"]
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3 1.28.52 generated with mypy-boto3-builder 7.19.0" summary = "Type annotations for boto3 1.29.3 generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"boto3-stubs==1.28.52", "boto3-stubs==1.29.3",
"mypy-boto3-cloudformation<1.29.0,>=1.28.0", "mypy-boto3-cloudformation<1.30.0,>=1.29.0",
"mypy-boto3-dynamodb<1.29.0,>=1.28.0", "mypy-boto3-dynamodb<1.30.0,>=1.29.0",
"mypy-boto3-ec2<1.29.0,>=1.28.0", "mypy-boto3-ec2<1.30.0,>=1.29.0",
"mypy-boto3-lambda<1.29.0,>=1.28.0", "mypy-boto3-lambda<1.30.0,>=1.29.0",
"mypy-boto3-rds<1.29.0,>=1.28.0", "mypy-boto3-rds<1.30.0,>=1.29.0",
"mypy-boto3-s3<1.29.0,>=1.28.0", "mypy-boto3-s3<1.30.0,>=1.29.0",
"mypy-boto3-sqs<1.29.0,>=1.28.0", "mypy-boto3-sqs<1.30.0,>=1.29.0",
] ]
files = [ files = [
{file = "boto3-stubs-1.28.52.tar.gz", hash = "sha256:12d7e5865aeec52e1f73b935b1c6a42e61325538fc2cb83a87a83e41e9485241"}, {file = "boto3-stubs-1.29.3.tar.gz", hash = "sha256:cd963cf5df25c6629e4c4625f08ce0dee003b0e5ecaf9d78f64ad98bb670561f"},
{file = "boto3_stubs-1.28.52-py3-none-any.whl", hash = "sha256:3ea81a225e062f3bcb205467891086ea031519697ad54622e61251b52609b8d6"}, {file = "boto3_stubs-1.29.3-py3-none-any.whl", hash = "sha256:7e89134ef050311b35d97e5a1493eb4fbee7ac0f8bfa7fe1411f4779da856804"},
] ]
[[package]] [[package]]
name = "botocore" name = "botocore"
version = "1.31.52" version = "1.32.3"
requires_python = ">= 3.7" requires_python = ">= 3.7"
summary = "Low-level, data-driven core of boto 3." summary = "Low-level, data-driven core of boto 3."
dependencies = [ dependencies = [
"jmespath<2.0.0,>=0.7.1", "jmespath<2.0.0,>=0.7.1",
"python-dateutil<3.0.0,>=2.1", "python-dateutil<3.0.0,>=2.1",
"urllib3<1.27,>=1.25.4", "urllib3<2.1,>=1.25.4; python_version >= \"3.10\"",
] ]
files = [ files = [
{file = "botocore-1.31.52-py3-none-any.whl", hash = "sha256:46b0a75a38521aa6a75fddccb1542e002930e609d4e13516f40fef170d32e515"}, {file = "botocore-1.32.3-py3-none-any.whl", hash = "sha256:115adb7edf61ad7083fd582ac749b761fa707758bbca94d42e4e6e92940b5d38"},
{file = "botocore-1.31.52.tar.gz", hash = "sha256:6d09881c5a8be34b497872ca3936f8757d886a6f42f2a8703411928189cfedc0"}, {file = "botocore-1.32.3.tar.gz", hash = "sha256:be622915db1dbf1d6d5ed907633471f9ed8f5399dd3cf333f9dc2b955cd3e80d"},
] ]
[[package]] [[package]]
@@ -207,6 +235,39 @@ files = [
{file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
] ]
[[package]]
name = "cffi"
version = "1.16.0"
requires_python = ">=3.8"
summary = "Foreign Function Interface for Python calling C code."
dependencies = [
"pycparser",
]
files = [
{file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
{file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
{file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
{file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
{file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
{file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
{file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
{file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
{file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
{file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
{file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
{file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
]
[[package]] [[package]]
name = "charset-normalizer" name = "charset-normalizer"
version = "3.2.0" version = "3.2.0"
@@ -255,6 +316,78 @@ files = [
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
] ]
[[package]]
name = "cryptography"
version = "41.0.4"
requires_python = ">=3.7"
summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
dependencies = [
"cffi>=1.12",
]
files = [
{file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"},
{file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"},
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"},
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"},
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"},
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"},
{file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"},
{file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"},
{file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"},
{file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"},
{file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"},
{file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"},
{file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"},
{file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"},
{file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"},
{file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"},
{file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"},
{file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"},
{file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"},
{file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"},
{file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"},
{file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"},
{file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"},
]
[[package]]
name = "decorator"
version = "5.1.1"
requires_python = ">=3.5"
summary = "Decorators for Humans"
files = [
{file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
]
[[package]]
name = "deprecated"
version = "1.2.14"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
summary = "Python @deprecated decorator to deprecate old python classes, functions or methods."
dependencies = [
"wrapt<2,>=1.10",
]
files = [
{file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"},
{file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"},
]
[[package]]
name = "fabric"
version = "3.2.2"
summary = "High level SSH command execution"
dependencies = [
"decorator>=5",
"deprecated>=1.2",
"invoke>=2.0",
"paramiko>=2.4",
]
files = [
{file = "fabric-3.2.2-py3-none-any.whl", hash = "sha256:91c47c0be68b14936c88b34da8a1f55e5710fd28397dac5d4ff2e21558113a6f"},
{file = "fabric-3.2.2.tar.gz", hash = "sha256:8783ca42e3b0076f08b26901aac6b9d9b1f19c410074e7accfab902c184ff4a3"},
]
[[package]] [[package]]
name = "fastapi" name = "fastapi"
version = "0.103.1" version = "0.103.1"
@@ -376,6 +509,25 @@ files = [
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
] ]
[[package]]
name = "ifaddr"
version = "0.2.0"
summary = "Cross-platform network interface and IP address enumeration library"
files = [
{file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"},
{file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"},
]
[[package]]
name = "invoke"
version = "2.2.0"
requires_python = ">=3.6"
summary = "Pythonic task execution"
files = [
{file = "invoke-2.2.0-py3-none-any.whl", hash = "sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820"},
{file = "invoke-2.2.0.tar.gz", hash = "sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5"},
]
[[package]] [[package]]
name = "itsdangerous" name = "itsdangerous"
version = "2.1.2" version = "2.1.2"
@@ -497,98 +649,98 @@ files = [
[[package]] [[package]]
name = "mypy-boto3-cloudformation" name = "mypy-boto3-cloudformation"
version = "1.28.48" version = "1.29.3"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.CloudFormation 1.28.48 service generated with mypy-boto3-builder 7.19.0" summary = "Type annotations for boto3.CloudFormation 1.29.3 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-cloudformation-1.28.48.tar.gz", hash = "sha256:efbe4073397800824287c8d52a65383112862f903b16fd587b5113449652371b"}, {file = "mypy-boto3-cloudformation-1.29.3.tar.gz", hash = "sha256:97de6aa92ce09783e5d58c97f417f5af5de659ef415b7c11ec202cea85c2d6c7"},
{file = "mypy_boto3_cloudformation-1.28.48-py3-none-any.whl", hash = "sha256:653e14414abc9fab8d29d693f138639a1325322fb6ba1b06ca90a6ccb11dfd94"}, {file = "mypy_boto3_cloudformation-1.29.3-py3-none-any.whl", hash = "sha256:919a00c0cce7fd6182bb0c15f3679dc2483fbf4934cbca3756addd1c0292b745"},
] ]
[[package]] [[package]]
name = "mypy-boto3-dynamodb" name = "mypy-boto3-dynamodb"
version = "1.28.36" version = "1.29.0"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.DynamoDB 1.28.36 service generated with mypy-boto3-builder 7.18.0" summary = "Type annotations for boto3.DynamoDB 1.29.0 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-dynamodb-1.28.36.tar.gz", hash = "sha256:5fe1d336fdc8c58f345c9c1b4e4c1a2d164660531cf3a074d4598975fb2687de"}, {file = "mypy-boto3-dynamodb-1.29.0.tar.gz", hash = "sha256:e9b0f1cf1d66d2cbc5d7177832dcd08d85cfa84983934aa361bfc3ca57e06edc"},
{file = "mypy_boto3_dynamodb-1.28.36-py3-none-any.whl", hash = "sha256:9a3b49385d17e421661ab8639fc09cc64a706198be20287f82d83511289294a3"}, {file = "mypy_boto3_dynamodb-1.29.0-py3-none-any.whl", hash = "sha256:a54d9bf0a9449423fa909586a6003e55ba1d64fc77107c228f4091020f83d134"},
] ]
[[package]] [[package]]
name = "mypy-boto3-ec2" name = "mypy-boto3-ec2"
version = "1.28.51" version = "1.29.3"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.EC2 1.28.51 service generated with mypy-boto3-builder 7.19.0" summary = "Type annotations for boto3.EC2 1.29.3 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-ec2-1.28.51.tar.gz", hash = "sha256:e62204a712e89a14e0663d3d18813ac8072706684b0e89a1b04a7d01c10f9ebe"}, {file = "mypy-boto3-ec2-1.29.3.tar.gz", hash = "sha256:9c52d4b3669ab81d13ebf3029ce19aff0c966d278b54074573a07a229b9e3e49"},
{file = "mypy_boto3_ec2-1.28.51-py3-none-any.whl", hash = "sha256:f9162f00b144cf2fab5b8b56d7883674b1d4096c79a7226b592918eae17e6235"}, {file = "mypy_boto3_ec2-1.29.3-py3-none-any.whl", hash = "sha256:ded8612e8f250527f39e9ff4fbd7661755e0953597a4461331a678061c214d44"},
] ]
[[package]] [[package]]
name = "mypy-boto3-lambda" name = "mypy-boto3-lambda"
version = "1.28.36" version = "1.29.2"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.Lambda 1.28.36 service generated with mypy-boto3-builder 7.18.0" summary = "Type annotations for boto3.Lambda 1.29.2 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-lambda-1.28.36.tar.gz", hash = "sha256:70498e6ff6bfd60b758553d27fadf691ba169572faca01c2bd457da0b48b9cff"}, {file = "mypy-boto3-lambda-1.29.2.tar.gz", hash = "sha256:ef91beb5c3b0e46b2d57f95454c940673ed4fd35a56bdaaafdf0ef0b1cfd662d"},
{file = "mypy_boto3_lambda-1.28.36-py3-none-any.whl", hash = "sha256:edb1f49279f7713929a70eaab00cf3d4ba65a10016db636805d022b2eaf14c84"}, {file = "mypy_boto3_lambda-1.29.2-py3-none-any.whl", hash = "sha256:c3c14e03a303d687a0e08c37d601a5586771329f598c3c54eadfd919dbb9de4f"},
] ]
[[package]] [[package]]
name = "mypy-boto3-rds" name = "mypy-boto3-rds"
version = "1.28.41" version = "1.29.3"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.RDS 1.28.41 service generated with mypy-boto3-builder 7.18.2" summary = "Type annotations for boto3.RDS 1.29.3 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-rds-1.28.41.tar.gz", hash = "sha256:19b7d6a1e3e53ff7d03157052885ceead29861fba2d9cbddf701f6238159cb72"}, {file = "mypy-boto3-rds-1.29.3.tar.gz", hash = "sha256:3ca6d7d35a89db4ba4ecc00bf9b4c2594da11a12591a44429f031fa9cb4e4f8f"},
{file = "mypy_boto3_rds-1.28.41-py3-none-any.whl", hash = "sha256:2935be3736147b726964e3cebcb918d0fc394e4012b9b7d3d0d35c12aa740ddf"}, {file = "mypy_boto3_rds-1.29.3-py3-none-any.whl", hash = "sha256:93c2c17913558b80b12c96850e2d7342ae6b9d946242b831565d8069e7a5bfe5"},
] ]
[[package]] [[package]]
name = "mypy-boto3-s3" name = "mypy-boto3-s3"
version = "1.28.52" version = "1.29.3"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.S3 1.28.52 service generated with mypy-boto3-builder 7.19.0" summary = "Type annotations for boto3.S3 1.29.3 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-s3-1.28.52.tar.gz", hash = "sha256:179cb7542cc5ef656f1323ad51eb237afcba77d1e5ed07d21a013fe36effb8b2"}, {file = "mypy-boto3-s3-1.29.3.tar.gz", hash = "sha256:683c427ed722cee649443afb1dc65fc00871dac0812caa9d1947d0e3d8a03a37"},
{file = "mypy_boto3_s3-1.28.52-py3-none-any.whl", hash = "sha256:a75cd5ff28f1cb5109dd50db94259436701208fa97c61b5a2cc0689e169b7cba"}, {file = "mypy_boto3_s3-1.29.3-py3-none-any.whl", hash = "sha256:d951dd748d2717de0a9b642231fe5069e503093ad6cfb7fa5976037e8c0e95de"},
] ]
[[package]] [[package]]
name = "mypy-boto3-sqs" name = "mypy-boto3-sqs"
version = "1.28.36" version = "1.29.0"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Type annotations for boto3.SQS 1.28.36 service generated with mypy-boto3-builder 7.18.0" summary = "Type annotations for boto3.SQS 1.29.0 service generated with mypy-boto3-builder 7.20.3"
dependencies = [ dependencies = [
"typing-extensions>=4.1.0; python_version < \"3.12\"", "typing-extensions>=4.1.0; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "mypy-boto3-sqs-1.28.36.tar.gz", hash = "sha256:d9c159e020f0ef225a6d5850a3673e8b236327243ba5ffe0d13762ae4fdc0e21"}, {file = "mypy-boto3-sqs-1.29.0.tar.gz", hash = "sha256:0835256e3aabd27b2acf613c1b82a22b9de18412a0b07bd04d6d214c3f063906"},
{file = "mypy_boto3_sqs-1.28.36-py3-none-any.whl", hash = "sha256:8457aa9f2a6da44e8543e547597773f67a04e517f6a398989117cf1fa3f70d6e"}, {file = "mypy_boto3_sqs-1.29.0-py3-none-any.whl", hash = "sha256:db88751bd7765f51c2b1f9061545ddb06639d301c3d981d3b3fa4b367f0ca8ea"},
] ]
[[package]] [[package]]
name = "nicegui" name = "nicegui"
version = "1.3.14" version = "1.4.2"
requires_python = ">=3.8,<4.0" requires_python = ">=3.8,<4.0"
summary = "Create web-based user interfaces with Python. The nice way." summary = "Create web-based user interfaces with Python. The nice way."
dependencies = [ dependencies = [
@@ -596,21 +748,23 @@ dependencies = [
"aiofiles<24.0.0,>=23.1.0", "aiofiles<24.0.0,>=23.1.0",
"aiohttp<4.0.0,>=3.8.5", "aiohttp<4.0.0,>=3.8.5",
"fastapi-socketio<0.0.11,>=0.0.10", "fastapi-socketio<0.0.11,>=0.0.10",
"fastapi<1.0.0,>=0.92", "fastapi<1.0.0,>=0.93",
"httpx<0.25.0,>=0.24.1", "httpx<1.0.0,>=0.24.0",
"ifaddr<0.3.0,>=0.2.0",
"itsdangerous<3.0.0,>=2.1.2", "itsdangerous<3.0.0,>=2.1.2",
"jinja2<4.0.0,>=3.1.2", "jinja2<4.0.0,>=3.1.2",
"markdown2<3.0.0,>=2.4.7", "markdown2<3.0.0,>=2.4.7",
"orjson<4.0.0,>=3.8.6; platform_machine != \"i386\" and platform_machine != \"i686\"", "orjson<4.0.0,>=3.8.6; platform_machine != \"i386\" and platform_machine != \"i686\"",
"python-multipart<0.0.7,>=0.0.6", "python-multipart<0.0.7,>=0.0.6",
"python-socketio>=5.10.0",
"typing-extensions>=3.10.0", "typing-extensions>=3.10.0",
"uvicorn[standard]<0.23.0,>=0.22.0", "uvicorn[standard]<0.23.0,>=0.22.0",
"vbuild>=0.8.2", "vbuild>=0.8.2",
"watchfiles<1.0.0,>=0.18.1", "watchfiles<1.0.0,>=0.18.1",
] ]
files = [ files = [
{file = "nicegui-1.3.14-py3-none-any.whl", hash = "sha256:ebc4d8d7a756f5c5c60df9f9f84449d6e277d140f9cf18dcf2f87772763c04d8"}, {file = "nicegui-1.4.2-py3-none-any.whl", hash = "sha256:fc90c115b2553593337febe88afd58c2ef30d17c583dffbac8c24c3724dece26"},
{file = "nicegui-1.3.14.tar.gz", hash = "sha256:d3a872d1a4ae126842be26bc29ab1c0aeb648dac6a44050e987473687f5ca733"}, {file = "nicegui-1.4.2.tar.gz", hash = "sha256:fad98b26c77ff9323d0b0b654aee37530ffc3deffb1f2a37059ef412d571eb06"},
] ]
[[package]] [[package]]
@@ -641,6 +795,21 @@ files = [
{file = "orjson-3.9.7.tar.gz", hash = "sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142"}, {file = "orjson-3.9.7.tar.gz", hash = "sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142"},
] ]
[[package]]
name = "paramiko"
version = "3.3.1"
requires_python = ">=3.6"
summary = "SSH2 protocol library"
dependencies = [
"bcrypt>=3.2",
"cryptography>=3.3",
"pynacl>=1.5",
]
files = [
{file = "paramiko-3.3.1-py3-none-any.whl", hash = "sha256:b7bc5340a43de4287bbe22fe6de728aa2c22468b2a849615498dd944c2f275eb"},
{file = "paramiko-3.3.1.tar.gz", hash = "sha256:6a3777a961ac86dbef375c5f5b8d50014a1a96d0fd7f054a43bc880134b0ff77"},
]
[[package]] [[package]]
name = "pscript" name = "pscript"
version = "0.7.7" version = "0.7.7"
@@ -650,6 +819,16 @@ files = [
{file = "pscript-0.7.7.tar.gz", hash = "sha256:8632f7a4483f235514aadee110edee82eb6d67336bf68744a7b18d76e50442f8"}, {file = "pscript-0.7.7.tar.gz", hash = "sha256:8632f7a4483f235514aadee110edee82eb6d67336bf68744a7b18d76e50442f8"},
] ]
[[package]]
name = "pycparser"
version = "2.21"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
summary = "C parser in Python"
files = [
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
[[package]] [[package]]
name = "pydantic" name = "pydantic"
version = "2.3.0" version = "2.3.0"
@@ -744,6 +923,27 @@ files = [
{file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"},
] ]
[[package]]
name = "pynacl"
version = "1.5.0"
requires_python = ">=3.6"
summary = "Python binding to the Networking and Cryptography (NaCl) library"
dependencies = [
"cffi>=1.4.1",
]
files = [
{file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"},
{file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"},
{file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"},
{file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"},
{file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"},
{file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"},
{file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"},
{file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"},
{file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"},
{file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"},
]
[[package]] [[package]]
name = "python-dateutil" name = "python-dateutil"
version = "2.8.2" version = "2.8.2"
@@ -769,15 +969,15 @@ files = [
[[package]] [[package]]
name = "python-engineio" name = "python-engineio"
version = "4.7.1" version = "4.8.0"
requires_python = ">=3.6" requires_python = ">=3.6"
summary = "Engine.IO server and client for Python" summary = "Engine.IO server and client for Python"
dependencies = [ dependencies = [
"simple-websocket>=0.10.0", "simple-websocket>=0.10.0",
] ]
files = [ files = [
{file = "python-engineio-4.7.1.tar.gz", hash = "sha256:a8422e345cd9a21451303380b160742ff02197975b1c3a02cef115febe2b1b20"}, {file = "python-engineio-4.8.0.tar.gz", hash = "sha256:2a32585d8fecd0118264fe0c39788670456ca9aa466d7c026d995cfff68af164"},
{file = "python_engineio-4.7.1-py3-none-any.whl", hash = "sha256:52499e8ab94fea1a6525ffe872fe7028d04b575799c5fa8e2cf7880e032de42e"}, {file = "python_engineio-4.8.0-py3-none-any.whl", hash = "sha256:6055ce35b7f32b70641d53846faf76e06f2af0107a714cedb2750595c69ade43"},
] ]
[[package]] [[package]]
@@ -792,16 +992,16 @@ files = [
[[package]] [[package]]
name = "python-socketio" name = "python-socketio"
version = "5.9.0" version = "5.10.0"
requires_python = ">=3.6" requires_python = ">=3.6"
summary = "Socket.IO server and client for Python" summary = "Socket.IO server and client for Python"
dependencies = [ dependencies = [
"bidict>=0.21.0", "bidict>=0.21.0",
"python-engineio>=4.7.0", "python-engineio>=4.8.0",
] ]
files = [ files = [
{file = "python-socketio-5.9.0.tar.gz", hash = "sha256:dc42735f65534187f381fde291ebf620216a4960001370f32de940229b2e7f8f"}, {file = "python-socketio-5.10.0.tar.gz", hash = "sha256:01c616946fa9f67ed5cc3d1568e1c4940acfc64aeeb9ff621a53e80cabeb748a"},
{file = "python_socketio-5.9.0-py3-none-any.whl", hash = "sha256:c20f12e4ed0cba57581af26bbeea9998bc2eeebb3b952fa92493a1e051cfe9dc"}, {file = "python_socketio-5.10.0-py3-none-any.whl", hash = "sha256:fb18d9b84cfb05289dc207b790c3de59cd242310d9b980b1c31e9faf4f79101a"},
] ]
[[package]] [[package]]
@@ -829,7 +1029,7 @@ files = [
[[package]] [[package]]
name = "rich" name = "rich"
version = "13.5.3" version = "13.7.0"
requires_python = ">=3.7.0" requires_python = ">=3.7.0"
summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
dependencies = [ dependencies = [
@@ -837,21 +1037,31 @@ dependencies = [
"pygments<3.0.0,>=2.13.0", "pygments<3.0.0,>=2.13.0",
] ]
files = [ files = [
{file = "rich-13.5.3-py3-none-any.whl", hash = "sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9"}, {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"},
{file = "rich-13.5.3.tar.gz", hash = "sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"}, {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"},
] ]
[[package]] [[package]]
name = "s3transfer" name = "s3transfer"
version = "0.6.2" version = "0.7.0"
requires_python = ">= 3.7" requires_python = ">= 3.7"
summary = "An Amazon S3 Transfer Manager" summary = "An Amazon S3 Transfer Manager"
dependencies = [ dependencies = [
"botocore<2.0a.0,>=1.12.36", "botocore<2.0a.0,>=1.12.36",
] ]
files = [ files = [
{file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"},
{file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"},
]
[[package]]
name = "setuptools"
version = "68.2.2"
requires_python = ">=3.8"
summary = "Easily download, build, install, upgrade, and uninstall Python packages"
files = [
{file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"},
{file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"},
] ]
[[package]] [[package]]
@@ -1072,6 +1282,26 @@ files = [
{file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"},
] ]
[[package]]
name = "wrapt"
version = "1.15.0"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
summary = "Module for decorators, wrappers and monkey patching."
files = [
{file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"},
{file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"},
{file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"},
{file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"},
{file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"},
{file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"},
{file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"},
{file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"},
{file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"},
{file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"},
{file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"},
{file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"},
]
[[package]] [[package]]
name = "wsproto" name = "wsproto"
version = "1.2.0" version = "1.2.0"

View File

@@ -10,10 +10,15 @@ dependencies = [
"nicegui>=1.3.14", "nicegui>=1.3.14",
"boto3>=1.28.52", "boto3>=1.28.52",
"boto3-stubs[essential]>=1.28.52", "boto3-stubs[essential]>=1.28.52",
"fabric>=3.2.2",
] ]
requires-python = ">=3.11" requires-python = ">=3.11"
readme = "README.md" readme = "README.md"
license = {text = "MIT"} license = {text = "MIT"}
[project.optional-dependencies]
dev = [
"setuptools>=68.2.2",
]
[tool.ruff] [tool.ruff]
extend-select = [ extend-select = [

View File

@@ -2,17 +2,29 @@ import logging
from enum import Enum from enum import Enum
import boto3 import boto3
from nicegui import ui from mypy_boto3_ec2 import EC2ServiceResource
from nicegui import app, ui
from nicegui.element import Element
from rich.console import Console from rich.console import Console
from rich.logging import RichHandler from rich.logging import RichHandler
from rich.traceback import install from rich.traceback import install
class InstanceMode(Enum): class InstanceMode(Enum):
START = (1,) PENDING = 0
RUNNING = 16
SHUTTING_DOWN = 32
TERMINATED = 48
STOPPING = 64
STOPPED = 80
START = 1
STOP = 2 STOP = 2
class InstanceStateHandler:
state: int
install(show_locals=True) install(show_locals=True)
console = Console() console = Console()
logging.basicConfig( logging.basicConfig(
@@ -25,8 +37,11 @@ logging.basicConfig(
log = logging.getLogger("rich") log = logging.getLogger("rich")
def aws_launch_ec2(name: str = "foundry", mode: InstanceMode = InstanceMode.START): def aws_launch_ec2(
ec2_resource = boto3.resource("ec2") ec2_resource: EC2ServiceResource,
name: str = "foundry",
mode: InstanceMode = InstanceMode.START,
) -> None:
for instance in ec2_resource.instances.all(): for instance in ec2_resource.instances.all():
for tag_dict in instance.tags: for tag_dict in instance.tags:
if tag_dict["Key"] == "Name" and tag_dict["Value"] == name: if tag_dict["Key"] == "Name" and tag_dict["Value"] == name:
@@ -34,17 +49,57 @@ def aws_launch_ec2(name: str = "foundry", mode: InstanceMode = InstanceMode.STAR
instance.state["Code"] == 80 and mode == InstanceMode.START instance.state["Code"] == 80 and mode == InstanceMode.START
): # stopped ): # stopped
log.info(f"Starting instance {instance.id}") log.info(f"Starting instance {instance.id}")
instance.start() log.info(instance.start())
elif instance.state["Code"] == 16 and mode == InstanceMode.STOP: elif instance.state["Code"] == 16 and mode == InstanceMode.STOP:
log.info(f"Stopping instance {instance.id}") log.info(f"Stopping instance {instance.id}")
instance.stop() log.info(instance.stop())
def nicegui_ui(): def update_instance_table(
ui.button("Start Foundry AWS Server", on_click=lambda: aws_launch_ec2()) ec2_resource: EC2ServiceResource, container: Element, columns: list
ui.button("Stop Foundry AWS Server", on_click=lambda: aws_launch_ec2(mode=InstanceMode.STOP)) ) -> None:
container.clear()
with container:
rows = []
table = ui.table(columns=columns, rows=rows, pagination=10)
for instance in ec2_resource.instances.all():
name = instance.id
for tag in instance.tags:
if tag["Key"] == "Name":
name = tag["Value"]
table.add_rows({"name": name, "status": instance.state["Name"]})
log.debug("Table updated")
ui.run()
def nicegui_ui() -> None:
ec2_resource = boto3.resource("ec2")
with ui.row():
ui.button(
"Start Foundry AWS Server", on_click=lambda: aws_launch_ec2(ec2_resource)
)
ui.button(
"Stop Foundry AWS Server",
on_click=lambda: aws_launch_ec2(ec2_resource, mode=InstanceMode.STOP),
),
ui.button("Close Program", on_click=lambda: app.shutdown())
columns = [
{"name": "name", "label": "Name", "field": "name", "required": True},
{"name": "status", "label": "Status", "field": "status"},
]
rows = []
with ui.element() as container:
ui.table(columns=columns, rows=rows, pagination=10)
timer = ui.timer(
15, lambda: update_instance_table(ec2_resource, container, columns)
)
label = ui.label()
(
ui.slider(min=5, max=120, step=5, value=15)
.bind_value_to(timer, "interval")
.bind_value_to(label, "text")
)
ui.run(reload=False)
def main() -> None: def main() -> None: