Compare commits

...

210 Commits

Author SHA1 Message Date
renovate[bot]
ff71a9b103 Lock file maintenance (#116)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-08 05:58:13 +00:00
renovate[bot]
511431062c Update actions/checkout digest to 8e8c483 (#112)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 21:50:20 +00:00
renovate[bot]
9057c7bfbc Lock file maintenance (#115)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-01 10:49:24 +00:00
d7217a879b Add github renovate config 2025-11-30 00:40:19 +00:00
70a00ff3a0 Merge pull request #113 from nikdoof/renovate/actions-checkout-6.x
Update actions/checkout action to v6
2025-11-30 00:25:39 +00:00
renovate[bot]
40c39b65dd Lock file maintenance (#114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-24 04:25:38 +00:00
renovate[bot]
9b1f198003 Update actions/checkout action to v6 2025-11-20 16:56:51 +00:00
renovate[bot]
6f376e3fcf Lock file maintenance (#111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-17 06:48:04 +00:00
renovate[bot]
aee101b002 Lock file maintenance (#110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-10 06:10:22 +00:00
renovate[bot]
deaa7a0ce8 Lock file maintenance (#109)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 04:31:56 +00:00
renovate[bot]
833cabc3b8 Lock file maintenance (#108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 04:58:06 +00:00
renovate[bot]
fe2de51b22 Lock file maintenance (#107)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-20 05:00:25 +00:00
renovate[bot]
5d4ca99cd5 Lock file maintenance (#106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-13 05:46:43 +00:00
renovate[bot]
fb14956394 Lock file maintenance (#103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-06 04:42:12 +00:00
0efb04df04 Merge pull request #100 from nikdoof/renovate/actions-setup-python-6.x
Update actions/setup-python action to v6
2025-10-01 17:24:04 +01:00
renovate[bot]
9c66dbe7af Lock file maintenance (#102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-29 06:12:09 +00:00
renovate[bot]
f679828354 Update actions/setup-python action to v6 2025-09-25 15:25:40 +00:00
renovate[bot]
9b69b11439 Lock file maintenance (#101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-22 04:48:57 +00:00
renovate[bot]
9a49c1bc97 Lock file maintenance (#99)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-25 04:49:47 +00:00
renovate[bot]
f88abc5080 Lock file maintenance (#98)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-18 05:54:31 +00:00
56e81cbda6 Update uv lock 2025-08-16 12:33:15 +01:00
2e8255a4f6 Version 0.6.3 2025-08-16 12:24:38 +01:00
1d98dbeddf Modernise Python support 2025-08-16 12:06:25 +01:00
ca3bf9789f Fix the HTTP port on the chart 2025-08-16 09:41:56 +01:00
233e7d136a Version 0.6.1 2025-08-16 09:05:39 +01:00
b1fbd0e781 Bump chart application version 2025-08-15 23:09:24 +01:00
a2c84d8673 Merge pull request #97 from nikdoof/renovate/actions-checkout-5.x
Update actions/checkout action to v5
2025-08-15 23:08:38 +01:00
9d4422c36b Version 0.6.0 2025-08-15 23:08:05 +01:00
renovate[bot]
d351fa6cb2 Update actions/checkout action to v5 2025-08-15 22:06:31 +00:00
525401952f Switch to uv 2025-08-15 23:05:51 +01:00
renovate[bot]
36ea175861 Update dependency ruff to v0.12.9 (#96)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-14 22:04:15 +00:00
a904d4b1d6 Merge pull request #95 from nikdoof/renovate/actions-checkout-5.x
Update actions/checkout action to v5
2025-08-12 22:47:15 +01:00
renovate[bot]
0ea72ee68a Update actions/checkout action to v5 2025-08-11 14:55:24 +00:00
renovate[bot]
60259dcd6b Lock file maintenance (#93)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-11 06:08:47 +00:00
renovate[bot]
edda0cdfe7 Update dependency ruff to v0.12.8 (#92)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-08 01:13:54 +00:00
renovate[bot]
4b1a5ab17e Lock file maintenance (#91)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-04 14:28:23 +00:00
renovate[bot]
d4463837d8 Update dependency ruff to v0.12.7 (#90)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-02 13:03:13 +00:00
renovate[bot]
d9c14557bc Update dependency ruff to v0.12.5 (#89)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 00:52:11 +00:00
renovate[bot]
1a23631cc8 Lock file maintenance (#88)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-21 06:50:41 +00:00
renovate[bot]
eca7ae8cbe Update dependency ruff to v0.12.4 (#87)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-18 02:43:57 +00:00
renovate[bot]
1e159efc62 Lock file maintenance (#86)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-14 05:06:02 +00:00
renovate[bot]
c458a749bc Update dependency ruff to v0.12.3 (#85)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-11 23:42:38 +00:00
renovate[bot]
fcc253bef2 Update dependency ruff to v0.12.2 (#84)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-03 21:57:13 +00:00
0953de6a29 Merge pull request #83 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.12.1
2025-06-26 22:54:09 +01:00
renovate[bot]
cba9469874 Update dependency ruff to v0.12.1 2025-06-26 20:47:06 +00:00
1609e8466b Merge pull request #82 from nikdoof/renovate/lock-file-maintenance 2025-06-23 08:20:39 +01:00
renovate[bot]
4d9947b01f Lock file maintenance 2025-06-23 02:06:11 +00:00
renovate[bot]
e3afea325a Update dependency ruff to ^0.12.0 (#81)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-17 22:56:49 +00:00
renovate[bot]
a0d0564bed Lock file maintenance (#80)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-16 05:04:50 +00:00
403a8b9c62 Add common Renovate config 2025-06-11 06:43:04 +01:00
732e0b1424 Update lockfile 2025-06-11 06:30:52 +01:00
4c9ef5eaab Merge pull request #78 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.13
2025-06-11 06:24:05 +01:00
434ca878a6 Merge pull request #79 from nikdoof/renovate/kubernetes-33.x
Update dependency kubernetes to v33
2025-06-11 06:22:41 +01:00
renovate[bot]
01c99b1612 Update dependency kubernetes to v33 2025-06-10 03:06:08 +00:00
renovate[bot]
65f3643752 Update dependency ruff to v0.11.13 2025-06-06 21:11:59 +00:00
a86823dc0a Merge pull request #77 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.12
2025-05-30 15:49:48 +01:00
renovate[bot]
6129ad895a Update dependency ruff to v0.11.12 2025-05-29 15:27:42 +00:00
d239ef8bfe Merge pull request #76 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.11
2025-05-24 15:15:11 +02:00
renovate[bot]
1b8dd3c551 Update dependency ruff to v0.11.11 2025-05-22 19:48:04 +00:00
f0e4504b28 Merge pull request #74 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.10
2025-05-17 11:47:57 +02:00
54a8c0aeb7 Merge pull request #75 from nikdoof/renovate/flask-3.x
Update dependency flask to v3.1.1
2025-05-17 11:45:17 +02:00
renovate[bot]
5a0aebd950 Update dependency ruff to v0.11.10 2025-05-15 16:50:47 +00:00
renovate[bot]
9c778e8104 Update dependency flask to v3.1.1 2025-05-13 19:09:57 +00:00
0fd54424c6 Merge pull request #73 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.7
2025-04-30 10:04:11 +01:00
renovate[bot]
d38e51edd9 Update dependency ruff to v0.11.7 2025-04-24 23:43:28 +00:00
758e46e9ef Merge pull request #72 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.5
2025-04-13 17:56:12 +01:00
renovate[bot]
f44a4aa03c Update dependency ruff to v0.11.5 2025-04-10 21:51:00 +00:00
8a9e6b1343 Merge pull request #71 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.4
2025-04-06 14:52:56 +01:00
renovate[bot]
d72bf696e8 Update dependency ruff to v0.11.4 2025-04-04 19:23:30 +00:00
b31adec14a Merge pull request #70 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.11.2
2025-03-24 08:19:41 +00:00
renovate[bot]
83ec1dcf05 Update dependency ruff to v0.11.2 2025-03-21 15:53:25 +00:00
3095bf8472 Merge pull request #69 from nikdoof/renovate/ruff-0.x
Update dependency ruff to ^0.11.0
2025-03-17 13:24:10 +00:00
renovate[bot]
c6556a40d1 Update dependency ruff to ^0.11.0 2025-03-14 15:14:57 +00:00
c98e3b5e29 Merge pull request #68 from nikdoof/renovate/ruff-0.x
Update dependency ruff to ^0.10.0
2025-03-14 08:49:42 +00:00
renovate[bot]
f275f3f8ad Update dependency ruff to ^0.10.0 2025-03-13 22:20:28 +00:00
1307c6e79e Merge pull request #67 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.9.10
2025-03-08 14:19:47 +00:00
renovate[bot]
ae77e02510 Update dependency ruff to v0.9.10 2025-03-07 15:47:07 +00:00
df7b1bad62 Merge pull request #66 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.9.9
2025-03-03 09:45:30 +00:00
renovate[bot]
df5d957394 Update dependency ruff to v0.9.9 2025-02-28 10:41:43 +00:00
2b4656e4e5 Merge pull request #65 from nikdoof/renovate/ruff-0.x-lockfile
Update dependency ruff to v0.9.8
2025-02-28 10:40:45 +00:00
renovate[bot]
753e54c434 Update dependency ruff to v0.9.8 2025-02-27 16:31:43 +00:00
9f7d84762b Merge pull request #64 from nikdoof/bump-chart-version
Bump chart to the latest version
2025-02-23 22:22:20 +00:00
2b9d5bba2e Bump chart to the latest version 2025-02-23 22:21:50 +00:00
e62dc738af Update lock file 2025-02-23 22:14:13 +00:00
62e8dad94b Fix linting and build jobs 2025-02-23 22:12:43 +00:00
bc26cd1a48 Access log to stdout for the container version 2025-02-23 22:02:30 +00:00
e981c1d33d Switch to poetry 2025-02-23 21:56:43 +00:00
b0cc227c56 Merge pull request #63 from nikdoof/renovate/kubernetes-32.x
Update dependency kubernetes to v32.0.1
2025-02-20 14:26:49 +00:00
renovate[bot]
ae145646b2 Update dependency kubernetes to v32.0.1 2025-02-18 22:24:21 +00:00
ba102cffcb Merge pull request #61 from nikdoof/renovate/helm-chart-releaser-action-1.x
Update helm/chart-releaser-action action to v1.7.0
2025-01-24 08:47:29 +00:00
721fa41522 Merge pull request #62 from nikdoof/renovate/kubernetes-32.x
Update dependency kubernetes to v32
2025-01-24 08:46:52 +00:00
renovate[bot]
9f87f35e37 Update dependency kubernetes to v32 2025-01-23 21:01:49 +00:00
renovate[bot]
7d6c26e5ba Update helm/chart-releaser-action action to v1.7.0 2025-01-20 13:52:02 +00:00
02f4308a5d Merge pull request #60 from nikdoof/renovate/wemake-services-wemake-python-styleguide-1.x
Update wemake-services/wemake-python-styleguide action to v1
2025-01-04 10:07:41 +00:00
renovate[bot]
99bf23f707 Update wemake-services/wemake-python-styleguide action to v1 2024-12-27 08:28:00 +00:00
379bf0a98c Merge pull request #59 from nikdoof/renovate/flask-3.x
Update dependency flask to v3.1.0
2024-11-25 13:41:59 +00:00
renovate[bot]
7e4b1db244 Update dependency flask to v3.1.0 2024-11-13 18:49:47 +00:00
4e824646f3 Merge pull request #58 from nikdoof/renovate/kubernetes-31.x
Update dependency kubernetes to v31
2024-10-18 19:51:49 +01:00
renovate[bot]
c2b3da0a45 Update dependency kubernetes to v31 2024-09-20 04:04:21 +00:00
efe4410f1a Merge pull request #57 from nikdoof/renovate/gunicorn-23.x
Update dependency gunicorn to v23
2024-08-11 16:59:48 +01:00
renovate[bot]
f76fed3504 Update dependency gunicorn to v23 2024-08-10 23:35:56 +00:00
01b8de9b04 Merge pull request #56 from nikdoof/renovate/pyyaml-6.x
Update dependency pyyaml to v6.0.2
2024-08-07 09:40:18 +01:00
renovate[bot]
b4ce5d3603 Update dependency pyyaml to v6.0.2 2024-08-07 00:45:03 +00:00
8ff6af703c Merge pull request #54 from nikdoof/renovate/docker-build-push-action-6.x
Update docker/build-push-action action to v6
2024-06-24 09:42:13 +01:00
renovate[bot]
ad76311f67 Update docker/build-push-action action to v6 2024-06-17 10:59:06 +00:00
e19b68ee83 Merge pull request #53 from nikdoof/renovate/kubernetes-30.x
Update dependency kubernetes to v30
2024-06-07 12:17:25 +01:00
renovate[bot]
d59b175e81 Update dependency kubernetes to v30 2024-06-06 16:34:45 +00:00
486c10615d Merge pull request #52 from nikdoof/renovate/pypi-gunicorn-vulnerability
Update dependency gunicorn to v22 [SECURITY]
2024-04-17 16:56:48 +01:00
renovate[bot]
0a3c434a9a Update dependency gunicorn to v22 [SECURITY] 2024-04-17 04:32:29 +00:00
b570712d67 Merge pull request #50 from nikdoof/renovate/flask-3.x
Update dependency flask to v3.0.3
2024-04-08 10:04:46 +01:00
renovate[bot]
861c16d9c5 Update dependency flask to v3.0.3 2024-04-07 23:37:47 +00:00
c13249b89f Merge pull request #49 from nikdoof/renovate/wemake-services-wemake-python-styleguide-0.x
Update wemake-services/wemake-python-styleguide action to v0.19.2
2024-03-26 16:14:51 +00:00
renovate[bot]
2e6007a5eb Update wemake-services/wemake-python-styleguide action to v0.19.2 2024-03-26 16:06:23 +00:00
f9bd3c3f50 Merge pull request #48 from nikdoof/renovate/wemake-services-wemake-python-styleguide-0.x
Update wemake-services/wemake-python-styleguide action to v0.19.1
2024-03-26 11:55:50 +00:00
renovate[bot]
24cf1a5539 Update wemake-services/wemake-python-styleguide action to v0.19.1 2024-03-26 11:24:36 +00:00
fa70906769 Merge pull request #47 from nikdoof/renovate/wemake-services-wemake-python-styleguide-0.x
Update wemake-services/wemake-python-styleguide action to v0.19.0
2024-03-26 08:20:13 +00:00
renovate[bot]
f4e55e3d2d Update wemake-services/wemake-python-styleguide action to v0.19.0 2024-03-25 22:21:31 +00:00
83d779a9ee Merge pull request #46 from nikdoof/renovate/softprops-action-gh-release-2.x
Update softprops/action-gh-release action to v2
2024-03-14 09:54:19 +00:00
renovate[bot]
849043eaf0 Update softprops/action-gh-release action to v2 2024-03-08 21:23:57 +00:00
80df5d8a4d Merge pull request #45 from nikdoof/renovate/azure-setup-helm-4.x
Update azure/setup-helm action to v4
2024-02-29 16:49:53 +00:00
renovate[bot]
20cca9a818 Update azure/setup-helm action to v4 2024-02-28 22:16:47 +00:00
aaa49be8a5 Merge pull request #44 from nikdoof/renovate/flask-3.x
Update dependency flask to v3.0.2
2024-02-07 09:31:02 +00:00
renovate[bot]
bc67e0e5db Update dependency flask to v3.0.2 2024-02-03 22:48:24 +00:00
bd0fb8350b Merge pull request #38 from nikdoof/renovate/flask-3.x
Update dependency flask to v3
2024-01-19 09:39:39 +00:00
renovate[bot]
be897cf644 Update dependency flask to v3 2024-01-18 23:31:12 +00:00
f623a76ab9 Merge pull request #43 from nikdoof/renovate/kubernetes-29.x
Update dependency kubernetes to v29
2024-01-11 18:21:32 +00:00
renovate[bot]
e45de349e9 Update dependency kubernetes to v29 2024-01-09 02:11:19 +00:00
655720ffd4 Merge pull request #42 from nikdoof/renovate/actions-setup-python-5.x
Update actions/setup-python action to v5
2023-12-06 15:25:21 +00:00
renovate[bot]
5bf792089a Update actions/setup-python action to v5 2023-12-06 13:07:04 +00:00
bad4b21a81 Merge pull request #41 from nikdoof/renovate/helm-chart-releaser-action-1.x
Update helm/chart-releaser-action action to v1.6.0
2023-11-03 07:04:42 +00:00
renovate[bot]
6db3146385 Update helm/chart-releaser-action action to v1.6.0 2023-11-02 19:32:30 +00:00
5783ab2a7f Merge pull request #37 from nikdoof/renovate/actions-checkout-digest
Update actions/checkout digest to 8ade135
2023-09-25 08:41:52 +01:00
renovate[bot]
26db4604fe Update actions/checkout digest to 8ade135 2023-09-22 19:44:13 +00:00
d1b46f939e Merge pull request #36 from nikdoof/renovate/kubernetes-28.x
Update dependency kubernetes to v28
2023-09-20 08:34:43 +01:00
renovate[bot]
edfbf431ac Update dependency kubernetes to v28 2023-09-18 18:20:33 +00:00
433725f4f7 Merge pull request #35 from nikdoof/renovate/docker-setup-qemu-action-3.x
Update docker/setup-qemu-action action to v3
2023-09-12 11:14:37 +01:00
9f4047663d Merge pull request #34 from nikdoof/renovate/docker-setup-buildx-action-3.x
Update docker/setup-buildx-action action to v3
2023-09-12 11:14:27 +01:00
renovate[bot]
63cbece65f Update docker/setup-qemu-action action to v3 2023-09-12 10:14:07 +00:00
renovate[bot]
78cfeda9f7 Update docker/setup-buildx-action action to v3 2023-09-12 10:14:03 +00:00
4badc9545d Merge pull request #32 from nikdoof/renovate/docker-build-push-action-5.x
Update docker/build-push-action action to v5
2023-09-12 11:13:59 +01:00
337733a437 Merge pull request #33 from nikdoof/renovate/docker-login-action-3.x
Update docker/login-action action to v3
2023-09-12 11:13:51 +01:00
renovate[bot]
90f6dc4183 Update docker/login-action action to v3 2023-09-12 09:34:55 +00:00
renovate[bot]
ecf2dbe474 Update docker/build-push-action action to v5 2023-09-12 09:34:52 +00:00
54f56fd2a1 Merge pull request #31 from nikdoof/renovate/actions-checkout-4.x
Update actions/checkout action to v4
2023-09-04 15:39:00 +01:00
renovate[bot]
a09a3fc77e Update actions/checkout action to v4 2023-09-04 13:44:00 +00:00
a40746449d Merge pull request #30 from nikdoof/renovate/flask-2.x
Update dependency flask to v2.3.3
2023-08-25 10:18:57 +01:00
renovate[bot]
0ae926dc63 Update dependency flask to v2.3.3 2023-08-21 19:56:07 +00:00
93b8415069 Merge pull request #29 from nikdoof/renovate/gunicorn-21.x
Update dependency gunicorn to v21.2.0
2023-07-19 16:28:23 +01:00
renovate[bot]
cf3c64253d Update dependency gunicorn to v21.2.0 2023-07-19 14:41:35 +00:00
8b753e07e6 Merge pull request #28 from nikdoof/renovate/gunicorn-21.x
Update dependency gunicorn to v21.1.0
2023-07-18 15:29:55 +01:00
renovate[bot]
8c229961bd Update dependency gunicorn to v21.1.0 2023-07-18 13:30:14 +00:00
c19b1ae4fb Merge pull request #27 from nikdoof/renovate/kubernetes-27.x
Update dependency kubernetes to v27
2023-07-18 12:15:28 +01:00
09f7e8c30b Merge pull request #25 from nikdoof/renovate/gunicorn-21.x
Update dependency gunicorn to v21
2023-07-18 12:15:16 +01:00
renovate[bot]
65fc5eaf3c Update dependency kubernetes to v27 2023-07-18 10:45:55 +00:00
renovate[bot]
4f02ffefb9 Update dependency gunicorn to v21 2023-07-18 10:45:52 +00:00
21f2b69a7b Merge pull request #26 from nikdoof/renovate/pyyaml-6.x
Update dependency pyyaml to v6.0.1
2023-07-18 11:45:17 +01:00
renovate[bot]
61674e0d27 Update dependency pyyaml to v6.0.1 2023-07-18 00:27:18 +00:00
521f36e920 Merge pull request #24 from nikdoof/renovate/wemake-services-wemake-python-styleguide-0.x
Update wemake-services/wemake-python-styleguide action to v0.18.0
2023-05-31 16:15:14 +01:00
renovate[bot]
bc93c6cb01 Update wemake-services/wemake-python-styleguide action to v0.18.0 2023-05-31 15:11:02 +00:00
0177190805 Merge pull request #23 from nikdoof/renovate/pypi-flask-vulnerability
Update dependency flask to v2.3.2 [SECURITY]
2023-05-02 11:21:23 +01:00
renovate[bot]
049529901a Update dependency flask to v2.3.2 [SECURITY] 2023-05-02 05:09:53 +00:00
f2520ff0c5 Merge pull request #20 from nikdoof/renovate/flask-2.x
Update dependency flask to v2.3.1
2023-04-26 09:08:45 +01:00
renovate[bot]
0d6dceff40 Update dependency flask to v2.3.1 2023-04-25 21:21:20 +00:00
e6c87b8c70 Update chart 2023-03-12 07:10:46 +00:00
6e2d8bef16 Version 0.4.0 2023-03-12 07:05:09 +00:00
23fd1d045d Merge pull request #15 from nikdoof/renovate/kubernetes-26.x
Update dependency kubernetes to v26
2023-03-12 07:02:44 +00:00
renovate[bot]
7ea651c099 Update dependency kubernetes to v26 2023-03-12 07:01:56 +00:00
d1bf7c5b55 Merge pull request #10 from nikdoof/renovate/python-3.x
Update python Docker tag to v3.11
2023-03-12 07:01:49 +00:00
b960f77934 Merge pull request #7 from nikdoof/renovate/flask-2.x
Update dependency flask to v2.2.3
2023-03-12 07:01:38 +00:00
32b93a9e2f Merge pull request #9 from nikdoof/renovate/helm-chart-releaser-action-1.x
Update helm/chart-releaser-action action to v1.5.0
2023-03-12 06:59:43 +00:00
2f769da1c6 Merge pull request #14 from nikdoof/renovate/azure-setup-helm-3.x
Update azure/setup-helm action to v3
2023-03-12 06:59:34 +00:00
f46e6b59df Merge pull request #16 from nikdoof/renovate/docker-build-push-action-4.x
Update docker/build-push-action action to v4
2023-03-12 06:59:25 +00:00
a80d7a9dd3 Merge pull request #17 from nikdoof/renovate/docker-login-action-2.x
Update docker/login-action action to v2
2023-03-12 06:59:17 +00:00
654440a476 Merge pull request #18 from nikdoof/renovate/docker-setup-buildx-action-2.x
Update docker/setup-buildx-action action to v2
2023-03-12 06:59:10 +00:00
c46d7ae252 Merge pull request #19 from nikdoof/renovate/docker-setup-qemu-action-2.x
Update docker/setup-qemu-action action to v2
2023-03-12 06:59:01 +00:00
8f7d47a579 Merge pull request #13 from nikdoof/renovate/actions-setup-python-4.x
Update actions/setup-python action to v4
2023-03-12 06:58:07 +00:00
0957513c41 Merge pull request #12 from nikdoof/renovate/actions-checkout-3.x
Update actions/checkout action to v3
2023-03-12 06:57:51 +00:00
7fa687defb Merge pull request #11 from nikdoof/renovate/wemake-services-wemake-python-styleguide-0.x
Update wemake-services/wemake-python-styleguide action to v0.17.0
2023-03-12 06:54:46 +00:00
147e03bb33 Bump version 2023-03-12 06:52:51 +00:00
renovate[bot]
18340a4f69 Update docker/setup-qemu-action action to v2 2023-03-12 06:51:36 +00:00
renovate[bot]
f5ac7cebc3 Update docker/setup-buildx-action action to v2 2023-03-12 06:51:31 +00:00
renovate[bot]
3681cda2fd Update docker/login-action action to v2 2023-03-12 06:51:27 +00:00
renovate[bot]
c48dbdbaa7 Update docker/build-push-action action to v4 2023-03-12 06:51:22 +00:00
renovate[bot]
75e067d585 Update azure/setup-helm action to v3 2023-03-12 06:51:12 +00:00
renovate[bot]
70b2a720b7 Update actions/setup-python action to v4 2023-03-12 06:51:07 +00:00
renovate[bot]
57b17266c4 Update actions/checkout action to v3 2023-03-12 06:51:03 +00:00
renovate[bot]
79c7311107 Update wemake-services/wemake-python-styleguide action to v0.17.0 2023-03-12 06:50:58 +00:00
renovate[bot]
8b2c2dcc38 Update python Docker tag to v3.11 2023-03-12 06:50:53 +00:00
renovate[bot]
bb50e54ab2 Update helm/chart-releaser-action action to v1.5.0 2023-03-12 06:50:48 +00:00
renovate[bot]
a186e4b3c1 Update dependency flask to v2.2.3 2023-03-12 06:48:25 +00:00
a525a777ae Update issue templates 2022-01-21 16:36:19 +00:00
7cf949ba26 Version 0.3.0 2022-01-21 16:15:19 +00:00
f3f99d1162 Clean up lint issues 2022-01-09 13:26:01 +00:00
44741b76bc Update Documentation 2022-01-09 10:46:25 +00:00
559b5a8f80 Update Documentation 2022-01-09 10:42:02 +00:00
8f535ddf25 Get provider data from K8s 2022-01-09 10:09:37 +00:00
7068d84718 Switch to search driven from providers.json 2022-01-09 09:54:07 +00:00
eced7966df Correct Google search URL 2022-01-09 08:53:58 +00:00
d78a7531cf Chart Version 0.2.1 2022-01-08 16:56:20 +00:00
0575196b06 Version 0.2.1 2022-01-08 16:17:06 +00:00
5e0a7f2826 Fix app links 2022-01-08 16:16:56 +00:00
ad300be0e6 Chart Version 0.2.0 2022-01-08 15:47:13 +00:00
fd030640ed Version 0.2.0 2022-01-08 15:41:43 +00:00
47b1cd36b5 Lint cleanup 2022-01-08 15:35:59 +00:00
243c2aa3fd Use client side rendering 2022-01-08 15:25:19 +00:00
a9414663e0 Format the CSS 2021-12-24 13:01:45 +00:00
47fb1b013e Add preview colours for Nord 2021-12-24 13:00:12 +00:00
04646d23b8 Add "Nord" style 2021-12-24 12:56:15 +00:00
2daacd3bde Strip down templates and JS 2021-12-24 12:51:28 +00:00
04617350d8 Add support for tagging Apps/Bookmarks 2021-12-24 12:51:18 +00:00
30 changed files with 1267 additions and 388 deletions

38
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -1,5 +1,7 @@
{
"extends": [
"config:base"
"config:base",
"github>nikdoof/renovate-config:github",
"github>nikdoof/renovate-config:python"
]
}

View File

@@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v1
uses: docker/login-action@v3
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
@@ -24,9 +24,10 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v6
with:
push: true
platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/${{ github.repository_owner }}/ohayodash:${{ github.ref_name }}
ghcr.io/${{ github.repository_owner }}/ohayodash:latest
ghcr.io/${{ github.repository }}:${{ github.ref_name }}
ghcr.io/${{ github.repository }}:latest

View File

@@ -9,13 +9,19 @@ name: Lint
- main
jobs:
run-linters:
name: Run linters
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.13"]
steps:
- name: Check out Git repository
uses: actions/checkout@v2
- name: wemake-python-styleguide
uses: wemake-services/wemake-python-styleguide@0.16.0
- uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install uv
uses: astral-sh/setup-uv@v6
- name: Lint with ruff
run: |
make lint

View File

@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
fetch-depth: 0
@@ -21,12 +21,12 @@ jobs:
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Install Helm
uses: azure/setup-helm@v1
uses: azure/setup-helm@v4
with:
version: v3.6.3
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.2.1
uses: helm/chart-releaser-action@v1.7.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
CR_RELEASE_NAME_TEMPLATE: "ohayodash-helm-chart-{{ .Version }}"

View File

@@ -10,18 +10,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- uses: actions/setup-python@v2
- run: pip install -r requirements-dev.txt
- name: Setup Python
uses: actions/setup-python@v6
- name: Build Assets
run: python setup.py sdist bdist_wheel
- name: Install uv
uses: astral-sh/setup-uv@v6
- name: Build Release
run: uv build
- name: Release
uses: softprops/action-gh-release@v1
uses: softprops/action-gh-release@v2
with:
name: "Version ${{ github.ref_name }}"
generate_release_notes: true
files: |
dist/*

3
.gitignore vendored
View File

@@ -152,4 +152,5 @@ cython_debug/
#.idea/
charts/**/charts/*
Chart.lock
Chart.lock
.ruff_cache

1
.python-version Normal file
View File

@@ -0,0 +1 @@
3.13

View File

@@ -1,6 +1,18 @@
FROM python:3.9-alpine
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
ENV UV_PYTHON_DOWNLOADS=0
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./ohayodash /app/ohayodash
CMD ["gunicorn", "--bind", "0.0.0.0:80", "ohayodash.app:app"]
RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync --locked --no-install-project --no-dev
COPY . /app
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --locked --no-dev
FROM python:3.13-slim-bookworm
COPY --from=builder --chown=app:app /app /app
ENV PATH="/app/.venv/bin:$PATH"
EXPOSE 8000/tcp
CMD ["gunicorn", "ohayodash.app:app", "-b", "0.0.0.0:8000", "--access-logfile", "-"]

6
Makefile Normal file
View File

@@ -0,0 +1,6 @@
.PHONY: lint
lint:
uv run --dev ruff check --output-format=github --select=E9,F63,F7,F82 --target-version=py39 .
uv run --dev -m ruff check --output-format=github --target-version=py39 .
serve:
uv run --dev -m flask --app ohayodash.app:app run

View File

@@ -2,4 +2,97 @@
Ohayo Dash is a Kubernetes driven start page and dashboard. All configuration is done by standard Kubernetes objects and ConfigMaps.
This is inspired by [Hajimari](https://github.com/toboshii/hajimari) and [SUI](https://github.com/jeroenpardon/sui) projects.
This is inspired by [Hajimari](https://github.com/toboshii/hajimari) and [SUI](https://github.com/jeroenpardon/sui) projects.
## Configuration
All configuration is handled with `ConfigMap` and `Ingress` objects within Kubernetes.
### Ingresses
All namespaces as processed by default, only Ingress objects with `ohayodash.github.io/enabled` annotation are then displayed.
Annotations can be used to customize the display of the Ingress objects:
* `ohayodash.github.io/name` - Display name of the app, defaults to the Ingress name.
* `ohayodash.github.io/url` - Target URL of the service, defaults to `https://<ingress host>`
* `ohayodash.github.io/show_url` - Shows the URL under the link, defaults to `false`
### Bookmarks
Bookmark are stored in `ConfigMap` resources, which are identified by the `ohayodash.github.io/bookmarks` annotation.
Values are pulled from the `bookmarks` key in the config map, which consists of a list of objects with the following keys:
* `name` - the display name of the link
* `url` - the target URL.
* `group` - the name the link is to be grouped under.
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ohayodash-bookmarks
namespace: web
annotations:
ohayodash.github.io/bookmarks: 'true'
data:
bookmarks: |
- name: Renovate Dashboard
url: "https://app.renovatebot.com/dashboard#github/nikdoof/flux-gitops"
group: Github
```
### Providers
Providers are stored in `ConfigMap` resources, which are identified by the `ohayodash.github.io/providers` annotation.
Values are pulled from the `providers` key in the config map, which consists of a list of objects with the following keys:
* `name` - the display name of the link
* `url` - the target URL of the service.
* `search` - suffix to add to search on the service, this will combine the URL, Search value and the text to search for into a URL.
* `prefix` - prefix to use on the URL bar on Ohayodash.
*Note*: If no Providers ConfigMaps are found then a [default](ohayodash/data/providers.yaml) list is used.
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ohayodash-providers
namespace: web
annotations:
ohayodash.github.io/providers: 'true'
data:
providers: |
- name: Allmusic
url: https://www.allmusic.com/
search: search/all/
prefix: /a
```
### Combining ConfigMaps
ConfigMaps can be combined to allow for easier management:
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ohayodash-config
namespace: web
annotations:
ohayodash.github.io/bookmarks: 'true'
ohayodash.github.io/providers: 'true'
data:
bookmarks: |
- name: Renovate Dashboard
url: "https://app.renovatebot.com/dashboard#github/nikdoof/flux-gitops"
group: Github
providers: |
- name: Allmusic
url: https://www.allmusic.com/
search: search/all/
prefix: /a
```

View File

@@ -1,9 +1,9 @@
apiVersion: v2
appVersion: 0.1.2
appVersion: 0.6.3
description: Ohayo Dash is a Kubernetes driven start page and dashboard. All configuration is done by standard Kubernetes objects and ConfigMaps.
name: ohayodash
version: 0.1.2
kubeVersion: ">=1.16.0-0"
version: 0.6.3
kubeVersion: ">=1.19.0-0"
keywords:
- ohayodash
- startpage
@@ -16,5 +16,5 @@ maintainers:
email: nikdoof@users.noreply.github.com
dependencies:
- name: common
repository: https://library-charts.k8s-at-home.com
version: 4.2.0
repository: https://nikdoof.github.io/helm-charts/
version: 4.5.3

View File

@@ -1,6 +1,6 @@
# ohayodash
![Version: 0.1.2](https://img.shields.io/badge/Version-0.1.2-informational?style=flat-square) ![AppVersion: 0.1.2](https://img.shields.io/badge/AppVersion-0.1.2-informational?style=flat-square)
![Version: 0.4.0](https://img.shields.io/badge/Version-0.4.0-informational?style=flat-square) ![AppVersion: 0.4.0](https://img.shields.io/badge/AppVersion-0.4.0-informational?style=flat-square)
Ohayo Dash is a Kubernetes driven start page and dashboard. All configuration is done by standard Kubernetes objects and ConfigMaps.
@@ -18,7 +18,7 @@ Kubernetes: `>=1.16.0-0`
| Repository | Name | Version |
|------------|------|---------|
| https://library-charts.k8s-at-home.com | common | 4.2.0 |
| https://nikdoof.github.io/helm-charts/ | common | 4.5.3 |
## TL;DR
@@ -74,11 +74,10 @@ helm install ohayodash ohayodash/ohayodash -f values.yaml
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| env | object | See below | environment variables. |
| env.DATE_FORMAT | string | `"%Y-%m-%d %H:%M"` | Python date format string to use for rendering the date/time |
| env.TZ | string | `"UTC"` | Set the container timezone |
| image.pullPolicy | string | `"Always"` | image pull policy |
| image.pullPolicy | string | `"IfNotPresent"` | image pull policy |
| image.repository | string | `"ghcr.io/nikdoof/ohayodash"` | image repository |
| image.tag | string | `"latest"` | image tag |
| image.tag | string | `"0.4.0"` | image tag |
| ingress.main | object | See values.yaml | Enable and configure ingress settings for the chart under this key. |
| service | object | See values.yaml | Configures service settings for the chart. |
| serviceAccount | object | See below | Configures service account needed for reading k8s ingress objects |
@@ -90,6 +89,20 @@ All notable changes to this application Helm chart will be documented in this fi
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### [0.4.0]
### Added
- N/A
### Changed
- Updated to use container version `0.4.0` by default
### Removed
- N/A
### [0.1.2]
#### Added

View File

@@ -11,15 +11,13 @@ image:
# -- image pull policy
pullPolicy: IfNotPresent
# -- image tag
tag: 0.1.2
tag: 0.6.3
# -- environment variables.
# @default -- See below
env:
# -- Set the container timezone
TZ: UTC
# -- Python date format string to use for rendering the date/time
DATE_FORMAT: "%Y-%m-%d %H:%M"
# -- Configures service settings for the chart.
# @default -- See values.yaml
@@ -27,7 +25,7 @@ service:
main:
ports:
http:
port: 80
port: 8000
# -- Configures service account needed for reading k8s ingress objects
# @default -- See below
@@ -40,3 +38,24 @@ ingress:
# @default -- See values.yaml
main:
enabled: false
# configmap:
# bookmarks:
# enabled: false
# annotations:
# ohayodash.github.io/bookmarks: "true"
# data:
# bookmarks:
# - name: TV Calendar
# url: https://www.pogdesign.co.uk/cat/
# group: Tools
# providers:
# enabled: false
# annotations:
# ohayodash.github.io/providers: "true"
# data:
# providers:
# - name: Trakt
# url: https://trakt.tv/
# search: search?query=
# prefix: /t

View File

@@ -1,4 +1,5 @@
from flask import Flask
from ohayodash.base import base
app = Flask(__name__)

View File

@@ -1,119 +1,166 @@
import datetime
import logging
import importlib.resources
import os
import zoneinfo
import kubernetes
import yaml
from flask import Blueprint, render_template, jsonify
from flask import Blueprint, jsonify, render_template
ANNOTATION_BASE = 'ohayodash.github.io'
ANNOTATION_BASE = "ohayodash.github.io"
base = Blueprint('base', __name__, template_folder='templates')
base = Blueprint("base", __name__, template_folder="templates")
if "KUBERNETES_SERVICE_HOST" in os.environ:
kubernetes.config.load_incluster_config()
else:
kubernetes.config.load_kube_config()
def get_k8s_applications() -> list:
def check_tags(tag, kubeobj):
# Skip if we're limited to a tag, and the CM has tags but not that one.
tags = kubeobj.metadata.annotations.get("{0}/tags".format(ANNOTATION_BASE), "")
obj_tags = {tagname for tagname in tags.split(",") if tagname != ""}
# If its not tagged, allow
if not obj_tags:
return True
# If tag is on the object, allow
return tag in obj_tags
def get_k8s_applications(tag: str | None = None) -> list:
"""Get all ingresses from the cluster and produce a application list."""
if 'KUBERNETES_SERVICE_HOST' in os.environ:
kubernetes.config.load_incluster_config()
else:
kubernetes.config.load_kube_config()
api = kubernetes.client.NetworkingV1Api()
applications = []
for ingress in api.list_ingress_for_all_namespaces(watch=False).items:
# Skip if not enabled
enable_annotation = '{0}/enable'.format(ANNOTATION_BASE)
enable_annotation = "{0}/enable".format(ANNOTATION_BASE)
if enable_annotation not in ingress.metadata.annotations:
continue
if ingress.metadata.annotations[enable_annotation] == 'false':
if ingress.metadata.annotations[enable_annotation] == "false":
continue
# Skip if we're limited to a tag, and the Ingress has tags but not that one.
if not check_tags(tag, ingress):
continue
# Set to some basic values from the ingress
application_values = {
'name': ingress.metadata.name,
'namespace': ingress.metadata.namespace,
'url': 'https://{0}'.format(ingress.spec.rules[0].host),
'show_url': False,
"name": ingress.metadata.name,
"namespace": ingress.metadata.namespace,
"url": "https://{0}".format(ingress.spec.rules[0].host),
"show_url": False,
}
# Read annotations and override the values if defined
for key, value in ingress.metadata.annotations.items():
if key.startswith(ANNOTATION_BASE):
annotation_key = key.split('/')[1]
annotation_key = key.split("/")[1]
application_values[annotation_key] = value
applications.append(application_values)
return sorted(applications, key=lambda item: item['name'])
return sorted(applications, key=lambda item: item["name"])
def get_bookmarks() -> list:
def get_bookmarks(tag: str | None = None) -> list:
"""Get all 'bookmark' ConfigMaps from the cluster and produce a bookmark list."""
if 'KUBERNETES_SERVICE_HOST' in os.environ:
kubernetes.config.load_incluster_config()
else:
kubernetes.config.load_kube_config()
v1 = kubernetes.client.CoreV1Api()
ret = v1.list_config_map_for_all_namespaces(watch=False)
bookmarks = {}
bookmarks = []
for cm in ret.items:
# Skip if
if not cm.metadata.annotations or '{0}/bookmarks'.format(ANNOTATION_BASE) not in cm.metadata.annotations:
# Skip if the CM has no annotations
if cm.metadata.annotations is None:
continue
bookmark_data = yaml.safe_load(cm.data['bookmarks'])
# Skip if its not tagged as bookmark CM
if "{0}/bookmarks".format(ANNOTATION_BASE) not in cm.metadata.annotations:
continue
# Skip if we're limited to a tag, and the CM has tags but not that one.
if not check_tags(tag, cm):
continue
# Load bookmark data
bookmark_data = yaml.safe_load(cm.data["bookmarks"])
# Iterate each bookmark
for bookmark in bookmark_data:
if 'group' not in bookmark:
group = 'default'
if "group" not in bookmark:
group = "default"
else:
group = bookmark['group'].lower()
if group not in bookmarks:
bookmarks[group] = []
bookmarks[group].append(bookmark)
group = bookmark["group"].lower()
# Find category dict and append or create
for cat in bookmarks:
if cat["category"] == group:
cat["links"].append(bookmark)
break
else:
bookmarks.append({"category": group, "links": [bookmark]})
return bookmarks
def get_greeting() -> tuple:
"""Generate the greeting string based on the defined timezone."""
try:
tz = zoneinfo.ZoneInfo(os.environ.get('TZ', 'UTC'))
except zoneinfo.ZoneInfoNotFound:
logging.warning('Timezone {0} is invalid, using UTC'.format(os.environ.get('TZ', 'UTC')))
tz = zoneinfo.ZoneInfo('UTC')
def get_providers(tag: str | None = None) -> list:
"""Get all 'provider' ConfigMaps from the cluster and produce a provider list."""
v1 = kubernetes.client.CoreV1Api()
ret = v1.list_config_map_for_all_namespaces(watch=False)
current_time = datetime.datetime.now(tz)
providers = []
for cm in ret.items:
# Skip if the CM has no annotations
if cm.metadata.annotations is None:
continue
if 0 < current_time.hour < 12:
return 'おはようございます!', "Thats 'Good morning' in Japanese"
elif current_time.hour >= 19:
return 'こんばんは', "Thats 'Good evening' in Japanese"
return 'こんにちは', "Thats 'Good day' in Japanese"
# Skip if its not tagged as bookmark CM
if "{0}/providers".format(ANNOTATION_BASE) not in cm.metadata.annotations:
continue
# Skip if we're limited to a tag, and the CM has tags but not that one.
if not check_tags(tag, cm):
continue
provider_data = yaml.safe_load(cm.data["providers"])
providers.extend(provider_data)
return providers
@base.app_template_filter()
def format_datetime(value, format='medium'):
return value.strftime(os.environ.get('DATE_FORMAT', '%Y-%m-%d %H:%M')) # noqa: WPS323
@base.route("/")
@base.route("/<tag>/")
def index(tag=None):
return render_template("index.j2")
@base.route('/')
def index():
return render_template('index.j2',
greeting=get_greeting(),
now=datetime.datetime.utcnow(),
applications=get_k8s_applications(),
bookmarks=get_bookmarks(),
)
@base.route("/providers.json")
@base.route("/<tag>/providers.json")
def providers(tag=None):
k8s_providers = get_providers(tag)
if not k8s_providers:
data_file = importlib.resources.files(__name__) / "data/providers.yaml"
with importlib.resources.as_file(data_file) as path:
with path.open("r") as fobj:
k8s_providers.extend(yaml.safe_load(fobj))
return jsonify({"providers": k8s_providers})
@base.route('/api/applications')
def applications():
return jsonify(get_k8s_applications())
@base.route("/apps.json")
@base.route("/<tag>/apps.json")
def applications(tag=None):
return jsonify(
{
"apps": get_k8s_applications(tag),
}
)
@base.route('/api/bookmarks')
def bookmarks():
return jsonify(get_bookmarks())
@base.route("/links.json")
@base.route("/<tag>/links.json")
def bookmarks(tag=None):
return jsonify(
{
"bookmarks": get_bookmarks(tag),
}
)

View File

@@ -0,0 +1,49 @@
---
- name: Allmusic
url: https://www.allmusic.com/
search: search/all/
prefix: /a
- name: Discogs
url: https://www.discogs.com/
search: search/?q=
prefix: /di
- name: DuckDuckGo
url: https://duckduckgo.com/
search: "?q="
prefix: /d
- name: Google
url: https://google.com/
search: search/?q=
prefix: /g
- name: iMDB
url: https://imbdb.com/
search: find?q=
prefix: /i
- name: TheMovieDB
url: https://www.themoviedb.org/
search: search/?query=
prefix: /m
- name: Reddit
url: https://www.reddit.com/
search: search?q=
prefix: /r
- name: Qwant
url: https://www.qwant.com/
search: "?q="
prefix: /q
- name: Soundcloud
url: https://soundcloud.com/
search: search?q=
prefix: /so
- name: Spotify
url: https://open.spotify.com/
search: search/results/
prefix: /s
- name: TheTVDB
url: https://www.thetvdb.com/
search: search?query=
prefix: /tv
- name: Trakt
url: https://trakt.tv/
search: search?query=
prefix: /t

View File

@@ -1,21 +1,35 @@
html{
html {
box-sizing: border-box;
moz-box-sizing: border-box;
webkit-box-sizing: border-box;
webkit-text-size-adjust: none;
}
::-webkit-scrollbar-thumb {background: var(--color-text-acc); border: 5px solid var(--color-background); border-radius: 10px;}
::-webkit-scrollbar-track {background: var(--color-text-acc); border: 7px solid var(--color-background);}
::-webkit-scrollbar {width: 15px;}
::-webkit-scrollbar-corner { background: var(--color-background); }
::-webkit-scrollbar-thumb {
background: var(--color-text-acc);
border: 5px solid var(--color-background);
border-radius: 10px;
}
::-webkit-scrollbar-track {
background: var(--color-text-acc);
border: 7px solid var(--color-background);
}
::-webkit-scrollbar {
width: 15px;
}
::-webkit-scrollbar-corner {
background: var(--color-background);
}
html,
body{
body {
background-color: var(--color-background);
color: var(--color-text-pri);
scrollbar-color: var(--color-text-acc) var(--color-background);
scrollbar-width: thin;
scrollbar-width: thin;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, Roboto, sans-serif;
font-size: 14px;
font-weight: 400;
@@ -29,73 +43,72 @@ body{
*,
*:before,
*:after{
*:after {
box-sizing: inherit;
moz-box-sizing: inherit;
webkit-box-sizing: inherit;
}
:root{
:root {
module-spacing: 3vh;
}
/* TEXT STYLES */
h1, h2{
h1, h2 {
font-weight: 300;
margin: 0;
padding: 0;
text-align: left;
}
h2, h3, h4{
text-transform: uppercase;
h2, h3, h4 {
text-transform: uppercase;
}
h1{
h1 {
font-size: 4em;
font-weight: 700;
margin-bottom: 0.5em;
}
h2{
h2 {
font-size: 16px;
height: 30px;
}
h3{
h3 {
font-size: 20px;
font-weight: 900;
height: 10px;
}
h4{
h4 {
font-size: 1.1em;
font-weight: 400;
height: 10px;
}
a{
a {
color: var(--color-text-pri);
text-decoration: none;
}
a:hover{
a:hover {
text-decoration: underline;
webkit-text-decoration-color: var(--color-text-acc);
webkit-text-decoration-skip: true;
}
.icon{
.icon {
font-size: 2.5em;
}
/* FORMS */
input{
input {
background-color: transparent;
border: 0;
border-bottom: thin solid var(--color-text-acc);
@@ -106,19 +119,19 @@ input{
width: 100%;
}
input:focus{
input:focus {
color-border: var(--color-text-pri);
outline: none;
}
input:focus{
input:focus {
opacity: 1;
}
/* TABLES */
table{
table {
border: thin solid #e4e4e4;
border-collapse: collapse;
border-spacing: 0;
@@ -127,11 +140,11 @@ table{
width: 100%;
}
table td:nth-of-type(2){
table td:nth-of-type(2) {
padding-right: 5em;
}
table td{
table td {
border: thin solid #e4e4e4;
color: #333333;
font-size: 1em;
@@ -140,46 +153,45 @@ table td{
word-break: normal;
}
table th{
table th {
border: thin solid #e4e4e4;
color: #333333;
font-weight: bold;
padding: 10px 5px;
}
table a{
table a {
color: #333333;
}
/* ANIMATION */
.fade{
.fade {
opacity: 0;
}
@keyframes fadeseq{
100% {
@keyframes fadeseq {
100% {
opacity: 1;
}
}
.fade{
.fade {
opacity: 0;
}
.fade{
.fade {
animation: fadeseq .3s forwards;
}
.fade:nth-child(2){
.fade:nth-child(2) {
animation-delay: .4s;
}
/* LAYOUT */
#container{
#container {
align-items: stretch;
display: grid;
grid-column-gap: 20px;
@@ -193,16 +205,14 @@ table a{
width: 60%;
}
/* SECTIONS */
#header{
#header {
border-bottom: 0px solid var(--color-text-acc);
z-index: 1;
}
#apps_loop{
#apps_loop {
border-bottom: 0px solid var(--color-text-acc);
display: grid;
grid-column-gap: 0px;
@@ -212,18 +222,18 @@ table a{
padding-bottom: var(--module-spacing);
}
.apps_icon{
.apps_icon {
height: 64px;
margin-right: 1em;
padding-top: 15px;
}
.apps_icon span{
.apps_icon span {
font-size: 2.5em;
line-height: 3rem;
}
.apps_item{
.apps_item {
display: flex;
flex-direction: row;
flex-wrap: wrap;
@@ -231,7 +241,7 @@ table a{
margin: 0;
}
.apps_text{
.apps_text {
display: flex;
flex-direction: column;
justify-content: center;
@@ -239,20 +249,20 @@ table a{
overflow: hidden;
}
.apps_text a{
.apps_text a {
font-size: 1em;
font-weight: 500;
text-transform: uppercase;
}
.apps_text span{
.apps_text span {
color: var(--color-text-acc);
font-size: 0.8em;
text-transform: uppercase;
}
#links_loop{
#links_loop {
display: grid;
flex-wrap: nowrap;
grid-column-gap: 20px;
@@ -261,39 +271,24 @@ table a{
grid-template-rows: auto;
}
#links_item{
#links_item {
line-height: 1.5rem;
margin-bottom: 2em;
webkit-font-smoothing: antialiased;
}
#links_item h4{
#links_item h4 {
color: var(--color-text-acc);
}
#links_item a{
#links_item a {
display: block;
line-height: 2;
}
/* MODAL */
#modal{
#modal {
overflow-y: auto;
bottom: 0;
left: 0;
@@ -306,79 +301,79 @@ table a{
z-index: 20;
}
#modal:target{
#modal:target {
opacity: 1;
pointer-events: auto;
}
#modal>div{
#modal>div {
background-color: #ffffff;
box-shadow: 0 14px 28px rgba(0, 0, 0, 0.30), 0 15px 12px rgba(0, 0, 0, 0.25);
margin-left: auto;
margin-right: auto;
margin-right: auto;
padding: 2em;
margin-top: 5vh;
width: 50%;
display: flex;
flex-direction: column;
display: flex;
flex-direction: column;
}
#modal h1{
#modal h1 {
color: #333333;
font-size: 2em;
}
#modal h2{
margin-top:1.5em;
#modal h2 {
margin-top: 1.5em;
}
#modal-header{
display:flex;
justify-content: space-between;
#modal-header {
display: flex;
justify-content: space-between;
}
#modal-footer{
display:flex;
font-size:2em;
justify-content: flex-start;
#modal-footer {
display: flex;
font-size: 2em;
justify-content: flex-start;
}
#modal-footer a{
margin-right:0.25em;
color:rgba(0, 0, 0, 0.35)
#modal-footer a {
margin-right: 0.25em;
color: rgba(0, 0, 0, 0.35)
}
.modal-close{
.modal-close {
color: #000000;
font-size: 1.5em;
text-align: center;
text-decoration: none;
}
.modal-close:hover{
.modal-close:hover {
color: #000;
}
#modal_init a{
#modal_init a {
bottom: 1vh;
color: var(--color-text-acc);
left: 1vw;
position: fixed;
}
#modal_init a:hover{
#modal_init a:hover {
color: var(--color-text-pri);
}
#modal-theme{
#modal-theme {
border-bottom: 0px solid var(--color-text-acc);
display: flex;
flex-wrap: wrap;
margin-bottom: 2em;
margin-bottom: 2em;
}
#providers{
margin-bottom: 2em;
#providers {
margin-bottom: 2em;
}
#editor {
@@ -419,88 +414,92 @@ table a{
/* THEMING */
.theme-button{
.theme-button {
font-size: 0.8em;
margin: 2px;
width:128px;
width: 128px;
line-height: 3em;
text-align: center;
text-transform: uppercase;
}
.theme-blackboard{
.theme-blackboard {
background-color: #000000;
border: 4px solid #5c5c5c;
color: #FFFDEA;
color: #FFFDEA;
}
.theme-gazette{
.theme-gazette {
background-color: #F2F7FF;
border: 4px solid #5c5c5c;
color: #000000;
color: #000000;
}
.theme-espresso{
.theme-espresso {
background-color: #21211F;
border: 4px solid #4E4E4E;
color: #D1B59A;
color: #D1B59A;
}
.theme-cab{
.theme-cab {
background-color: #FEED01;
border: 4px solid #424242;
color: #1F1F1F;
color: #1F1F1F;
}
.theme-cloud{
.theme-cloud {
background-color: #f1f2f0;
border: 4px solid #35342f;
color: #37bbe4;
color: #37bbe4;
}
.theme-lime{
.theme-lime {
background-color: #263238;
border: 4px solid #AABBC3;
color: #aeea00;
color: #aeea00;
}
.theme-passion{
.theme-passion {
background-color: #f5f5f5;
border: 4px solid #8e24aa;
color: #12005e;
color: #12005e;
}
.theme-blues{
.theme-blues {
background-color: #2B2C56;
border: 4px solid #6677EB;
color: #EFF1FC;
color: #EFF1FC;
}
.theme-chalk{
.theme-chalk {
background-color: #263238;
border: 4px solid #FF869A;
color: #AABBC3;
color: #AABBC3;
}
.theme-tron{
.theme-tron {
background-color: #242B33;
border: 4px solid #6EE2FF;
color: #EFFBFF;
color: #EFFBFF;
}
.theme-paper{
.theme-paper {
background-color: #F8F6F1;
border: 4px solid #F5E1A4;
color: #4C432E;
color: #4C432E;
}
.theme-nord {
background-color: #2E3440;
border: 4px solid #8FBCBB;
color: #E5E9F0;
}
/* MEDIA QUERIES */
@media screen and (max-width: 1260px)
{
#container
{
@media screen and (max-width: 1260px) {
#container {
align-items: stretch;
display: grid;
grid-column-gap: 10px;
@@ -513,31 +512,30 @@ table a{
margin-right: auto;
width: 90%;
}
#apps_loop{
#apps_loop {
grid-template-columns: 1fr 1fr 1fr;
width: 90vw;
}
#links_loop {
#links_loop {
grid-template-columns: 1fr 1fr 1fr;
}
#modal>div{
margin-left: auto;
margin-right: auto;
margin-top: 5vh;
width: 90%;
}
#modal>div {
margin-left: auto;
margin-right: auto;
margin-top: 5vh;
width: 90%;
}
}
@media screen and (max-width: 667px)
{
html{
@media screen and (max-width: 667px) {
html {
font-size: calc(16px + 6 * ((100vw - 320px) / 680));
}
#container{
#container {
align-items: stretch;
display: grid;
grid-column-gap: 20px;
@@ -549,41 +547,41 @@ table a{
width: 90%;
}
h1{
h1 {
font-size: 4em;
height: auto;
margin-bottom: 0em;
}
h2{
h2 {
font-size: 1em;
height: auto;
margin-bottom: 0em;
}
h3{
h3 {
font-size: 1em;
}
#apps_loop{
#apps_loop {
grid-column-gap: 0px;
grid-row-gap: 0px;
grid-template-columns: 1fr 1fr;
width: 90vw;
}
.apps_icon{
.apps_icon {
height: 64px;
margin-right: 0.8em;
padding-top: 14px;
}
.apps_icon span{
.apps_icon span {
font-size: 2em;
line-height: 2.5rem;
}
#links_loop{
#links_loop {
display: grid;
flex-wrap: nowrap;
grid-column-gap: 20px;
@@ -598,4 +596,4 @@ table a{
#app-address {
display: none;
}
}
}

View File

@@ -0,0 +1,16 @@
function fetchAndRender (name) {
fetch(name + '.json')
.then(response => response.json())
.then(data => {
const mysource = document.getElementById(name + '-template').innerHTML;
const mytemplate = Handlebars.compile(mysource);
const myresult = mytemplate(data);
document.getElementById(name).innerHTML = myresult;
});
}
document.addEventListener('DOMContentLoaded', () => {
fetchAndRender('apps');
fetchAndRender('links');
fetchAndRender('providers');
});

View File

@@ -0,0 +1,38 @@
function date() {
let currentDate = new Date();
let dateOptions = {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
};
let date = currentDate.toLocaleDateString("en-GB", dateOptions);
document.getElementById("header_date").innerHTML = date;
}
function greet() {
let currentTime = new Date();
let greet = Math.floor(currentTime.getHours() / 6);
let greeting = "こんにちは!";
switch (greet) {
case 0:
greeting = "おやすみなさい!";
break;
case 1:
greeting = "おはようございます!";
break;
case 2:
greeting = "こんにちは!";
break;
case 3:
greeting = "こんばんは!";
break;
}
document.getElementById("header_greet").innerHTML = greeting;
document.title = greeting;
}
function loadFunctions() {
date();
greet();
}

View File

@@ -1,5 +1,15 @@
var sindex = 0;
var cycle = false;
var sengine = "https://www.google.com/search?q="; // Default search engine
var providers = [];
fetch('providers.json')
.then(response => response.json())
.then(data => storeProviders(data));
function storeProviders(data) {
providers = data['providers'];
}
function start() {
var query = getParameterByName('q');
@@ -15,12 +25,10 @@ function start() {
function handleKeyPress(e) {
var key = e.keyCode || e.which;
var text = document.getElementById("keywords").value.replaceAll("+", "%2B");
var option = text.substr(1, text.indexOf(' ') - 1) || text.substr(1);
var subtext = text.substr(2 + option.length);
if (key == 13) { // Search functions
search(text);
search(text.trim());
}
if(key == 32){ //Space to go to search
if (key == 32) { //Space to go to search
document.getElementById("keywords").focus();
}
sindex = 0;
@@ -31,45 +39,24 @@ function search(text) {
var option = text.substr(1, text.indexOf(' ') - 1) || text.substr(1);
var subtext = text.substr(2 + option.length);
if (text[0] === '/') {
if (text.indexOf(' ') > -1) {
switch (option) {
case "d":
window.location = "https://duckduckgo.com/?q=" + subtext;
break;
case "i":
window.location = "https://www.imdb.com/find?q=" + subtext;
break;
case "r":
window.location = "https://www.reddit.com/search?q=" + subtext;
break;
case "y":
window.location = "https://www.youtube.com/results?search_query=" + subtext;
break;
providers.every(function (item) {
if ('/' + option == item['prefix']) {
if (text.indexOf(' ') > -1) {
window.location = item['url'] + item['search'] + subtext;
} else {
window.location = item['url'] + subtext;
}
return false;
}
} else {
var option = text.substr(1);
switch (option) {
case "d":
window.location = "https://www.duckduckgo.com";
break;
case "y":
window.location = "https://www.youtube.com";
break;
case "r":
window.location = "https://reddit.com";
break;
case "s":
window.location = "https://open.spotify.com";
break;
}
}
return true;
});
} else if (validURL(text)) {
if (containsProtocol(text))
window.location = text;
else
window.location = "https://" + text;
} else {
window.location = "https://www.google.com/search?q=" + text;
window.location = sengine + text;
}
}
@@ -89,7 +76,7 @@ function containsProtocol(str) {
return !!pattern.test(str);
}
String.prototype.replaceAll = function(search, replacement) {
String.prototype.replaceAll = function (search, replacement) {
var target = this;
return target.split(search).join(replacement);
};
};

View File

@@ -101,7 +101,7 @@ for (let i = 0; i < dataThemeButtons.length; i++) {
'color-text-acc': '#6EE2FF'
});
return;
case 'blues':
setTheme({
'color-background': '#2B2C56',
@@ -109,7 +109,7 @@ for (let i = 0; i < dataThemeButtons.length; i++) {
'color-text-acc': '#6677EB'
});
return;
case 'passion':
setTheme({
'color-background': '#f5f5f5',
@@ -117,7 +117,7 @@ for (let i = 0; i < dataThemeButtons.length; i++) {
'color-text-acc': '#8e24aa'
});
return;
case 'chalk':
setTheme({
'color-background': '#263238',
@@ -125,7 +125,7 @@ for (let i = 0; i < dataThemeButtons.length; i++) {
'color-text-acc': '#FF869A'
});
return;
case 'paper':
setTheme({
'color-background': '#F8F6F1',
@@ -134,6 +134,15 @@ for (let i = 0; i < dataThemeButtons.length; i++) {
});
return;
case 'nord':
setTheme({
'color-background': '#2E3440',
'color-text-pri': '#E5E9F0',
'color-text-acc': '#8FBCBB'
});
return;
}
})
}

View File

@@ -2,21 +2,19 @@
<html lang="en">
<head>
<title>{{ title | default("おはよう!") }}</title>
<title>おはよう!</title>
<meta charset="utf-8">
<meta name="description" content="a startpage for your server and / or new tab page">
<meta http-equiv="Default-Style" content="">
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" />
<link type="text/css" rel="stylesheet" href="./static/css/styles.css" media="screen,projection" />
<link type="text/css" rel="stylesheet" href="/static/css/styles.css" media="screen,projection" />
<link href="//fonts.googleapis.com/css?family=Roboto:400,500,700,900" rel="stylesheet">
<link href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/codemirror.min.css" rel="stylesheet" type="text/css">
<link href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/lint/lint.min.css" rel="stylesheet" type="text/css">
<link href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/theme/dracula.min.css" rel="stylesheet" type="text/css">
<link href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/fold/foldgutter.min.css" rel="stylesheet" type="text/css">
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.7/handlebars.min.js"></script>
<script src="//code.iconify.design/1/1.0.7/iconify.min.js"></script>
</head>
<body>
<body onload="loadFunctions()">
<section id="modal">
<div>
<header id="modal-header">
@@ -30,68 +28,98 @@
<div id="modal-theme">
<button data-theme="blackboard" class="theme-button theme-blackboard">Blackboard</button>
<button data-theme="gazette" class="theme-button theme-gazette">Gazette</button>
<button data-theme="espresso" class="theme-button theme-espresso">Espresso</button>
<button data-theme="cab" class="theme-button theme-cab">Cab</button>
<button data-theme="cloud" class="theme-button theme-cloud">Cloud</button>
<button data-theme="lime" class="theme-button theme-lime">Lime</button>
<button data-theme="passion" class="theme-button theme-passion">Passion</button>
<button data-theme="blues" class="theme-button theme-blues">Blues</button>
<button data-theme="cab" class="theme-button theme-cab">Cab</button>
<button data-theme="chalk" class="theme-button theme-chalk">Chalk</button>
<button data-theme="tron" class="theme-button theme-tron">Tron</button>
<button data-theme="cloud" class="theme-button theme-cloud">Cloud</button>
<button data-theme="espresso" class="theme-button theme-espresso">Espresso</button>
<button data-theme="gazette" class="theme-button theme-gazette">Gazette</button>
<button data-theme="lime" class="theme-button theme-lime">Lime</button>
<button data-theme="nord" class="theme-button theme-nord">Nord</button>
<button data-theme="paper" class="theme-button theme-paper">Paper</button>
<button data-theme="passion" class="theme-button theme-passion">Passion</button>
<button data-theme="tron" class="theme-button theme-tron">Tron</button>
</div>
<h2>Search options</h2>
<section id="providers">
{% raw %}
<script type="text/handlebars-template" id="providers-template">
<table>
<tr>
<th>Website</th>
<th>Prefix</th>
</tr>
{{#providers}}
<tr>
<td><a href="{{url}}">{{name}}</a></td>
<td>{{prefix}}</td>
</tr>
{{/providers}}
</table>
</script>
{% endraw %}
</section>
<header id="modal-footer">
<a href="https://github.com/nikdoof/ohayodash/"><span class="iconify" data-icon="mdi-github-box"></span></a>
<a href="https://materialdesignicons.com/"><span class="iconify"
data-icon="mdi-material-design"></span></a>
</header>
</div>
</section>
<main id="container" class="fade">
<section id="search">
<input name="keywords" type="text" id="keywords" size="50" spellcheck="false" autofocus="true"
onkeydown="handleKeyPress(event)">
</section>
<section id="header">
<h1><span title="{{ greeting[1] }}">{{ greeting[0] | default("Welcome")}}</span></h1>
<h2>{{ now | format_datetime }}</h2>
<h2 id="header_date"></h2>
<h1 id="header_greet"></h1>
</section>
{% if applications %}
<section id="apps">
{% raw %}
<script type="text/handlebars-template" id="apps-template">
<h3>Applications</h3>
<div id="apps_loop">
{% for app in applications %}
<div class="apps_item">
<div class="apps_icon">
<a href="{{ app.url }}"><span class="iconify icon" data-icon="mdi-{{ app.icon | default("application") }}"></span></a>
{{#apps}}
<div class="apps_item">
<div class="apps_icon">
<span class="iconify icon" data-icon="mdi-{{icon}}"></span>
</div>
<div class="apps_text">
<a href="{{url}}" {{#if target}}target="{{target}}"{{/if}} >{{name}}</a>
{{#if show_url}}<span id="app-address">{{url}}</span>{{/if}}
</div>
</div>
<div class="apps_text">
<a href="{{ app.url }}">{{ app.name }}</a>
{% if app.show_url %}
<span id="app-address">{{ app.url }}</span>
{% endif %}
</div>
</div>
{% endfor %}
{{/apps}}
</div>
</script>
{% endraw %}
</section>
{% endif %}
{% if bookmarks %}
<section id="links">
{% raw %}
<script type="text/handlebars-template" id="links-template">
<h3>Bookmarks</h3>
<div id="links_loop">
{% for group, value in bookmarks|dictsort %}
<div id="links_item">
<h4>{{ group }}</h4>
{% for link in bookmarks[group] %}
<a href="{{ link.url }}" class="theme_color-border theme_text-select">{{ link.name }}</a>
{% endfor %}
</div>
{% endfor %}
{{#bookmarks}}
<div id="links_item">
<h4>{{category}}</h4>
{{#links}}
<a href="{{url}}" target="{{target}}" class="theme_color-border theme_text-select">{{name}}</a>
{{/links}}
</div>
{{/bookmarks}}
</div>
</script>
{% endraw %}
</section>
{% endif %}
</main>
<div id="modal_init">
@@ -100,16 +128,11 @@
</a>
</div>
<script src="./static/js/themer.js" type="text/javascript"></script>
<script src="./static/js/search.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/codemirror.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/mode/yaml/yaml.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/lint/yaml-lint.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/lint/lint.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/fold/foldcode.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/fold/foldgutter.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.62.2/addon/fold/indent-fold.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js" type="text/javascript"></script>
<script src="/static/js/data.js" type="text/javascript"></script>
<script src="/static/js/script.js" type="text/javascript"></script>
<script src="/static/js/themer.js" type="text/javascript"></script>
<script src="/static/js/search.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,4 +1,26 @@
[project]
name = "ohayodash"
version = "0.6.3"
description = "Ohayo Dash is a Kubernetes driven start page and dashboard"
license = "MIT"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"flask>=3.1.1",
"gunicorn>=23.0.0",
"kubernetes>=33.1.0",
"pyyaml>=6.0.2",
]
[dependency-groups]
dev = [
"pytest>=8.4.1",
"ruff>=0.12.9",
]
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.ruff]
lint.ignore = ["E501"]

View File

@@ -1 +0,0 @@
wheel

View File

@@ -1,4 +0,0 @@
flask==2.0.2
kubernetes==21.7.0
pyyaml==6.0
gunicorn==20.1.0

View File

@@ -1,30 +0,0 @@
[metadata]
name = ohayodash
version = 0.1.2
description = A Kubernetes driven start page and dashboard. All configuration is done by standard Kubernetes objects and ConfigMaps.
long_description = file: README.md, LICENSE
license = MIT
license_file = LICENSE
classifiers =
Framework :: Flask
License :: OSI Approved :: MIT License
Programming Language :: Python :: 3
Programming Language :: Python :: 3.9
[options]
zip_safe = False
packages = ohayodash
install_requires =
flask
kubernetes
pyyaml
gunicorn
[flake8]
format = wemake
ignore = E501
max-line-length = 120
exclude = setup.py
[darglint]
docstring_style=sphinx

View File

@@ -1,3 +0,0 @@
from setuptools import setup
setup()

513
uv.lock generated Normal file
View File

@@ -0,0 +1,513 @@
version = 1
revision = 3
requires-python = ">=3.13"
[[package]]
name = "blinker"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" },
]
[[package]]
name = "cachetools"
version = "6.2.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/fb/44/ca1675be2a83aeee1886ab745b28cda92093066590233cc501890eb8417a/cachetools-6.2.2.tar.gz", hash = "sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6", size = 31571, upload-time = "2025-11-13T17:42:51.465Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl", hash = "sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace", size = 11503, upload-time = "2025-11-13T17:42:50.232Z" },
]
[[package]]
name = "certifi"
version = "2025.11.12"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" },
]
[[package]]
name = "charset-normalizer"
version = "3.4.4"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" },
{ url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" },
{ url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" },
{ url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" },
{ url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" },
{ url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" },
{ url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" },
{ url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" },
{ url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" },
{ url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" },
{ url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" },
{ url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" },
{ url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" },
{ url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" },
{ url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" },
{ url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" },
{ url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" },
{ url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" },
{ url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" },
{ url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" },
{ url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" },
{ url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" },
{ url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" },
{ url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" },
{ url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" },
{ url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" },
{ url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" },
{ url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" },
{ url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" },
{ url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" },
{ url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" },
{ url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" },
{ url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" },
]
[[package]]
name = "click"
version = "8.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" },
]
[[package]]
name = "colorama"
version = "0.4.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
[[package]]
name = "durationpy"
version = "0.10"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/9d/a4/e44218c2b394e31a6dd0d6b095c4e1f32d0be54c2a4b250032d717647bab/durationpy-0.10.tar.gz", hash = "sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba", size = 3335, upload-time = "2025-05-17T13:52:37.26Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b0/0d/9feae160378a3553fa9a339b0e9c1a048e147a4127210e286ef18b730f03/durationpy-0.10-py3-none-any.whl", hash = "sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286", size = 3922, upload-time = "2025-05-17T13:52:36.463Z" },
]
[[package]]
name = "flask"
version = "3.1.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "blinker" },
{ name = "click" },
{ name = "itsdangerous" },
{ name = "jinja2" },
{ name = "markupsafe" },
{ name = "werkzeug" },
]
sdist = { url = "https://files.pythonhosted.org/packages/dc/6d/cfe3c0fcc5e477df242b98bfe186a4c34357b4847e87ecaef04507332dab/flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87", size = 720160, upload-time = "2025-08-19T21:03:21.205Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/f9/7f9263c5695f4bd0023734af91bedb2ff8209e8de6ead162f35d8dc762fd/flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c", size = 103308, upload-time = "2025-08-19T21:03:19.499Z" },
]
[[package]]
name = "google-auth"
version = "2.43.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cachetools" },
{ name = "pyasn1-modules" },
{ name = "rsa" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ff/ef/66d14cf0e01b08d2d51ffc3c20410c4e134a1548fc246a6081eae585a4fe/google_auth-2.43.0.tar.gz", hash = "sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483", size = 296359, upload-time = "2025-11-06T00:13:36.587Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/6f/d1/385110a9ae86d91cc14c5282c61fe9f4dc41c0b9f7d423c6ad77038c4448/google_auth-2.43.0-py2.py3-none-any.whl", hash = "sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16", size = 223114, upload-time = "2025-11-06T00:13:35.209Z" },
]
[[package]]
name = "gunicorn"
version = "23.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "packaging" },
]
sdist = { url = "https://files.pythonhosted.org/packages/34/72/9614c465dc206155d93eff0ca20d42e1e35afc533971379482de953521a4/gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec", size = 375031, upload-time = "2024-08-10T20:25:27.378Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/7d/6dac2a6e1eba33ee43f318edbed4ff29151a49b5d37f080aad1e6469bca4/gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", size = 85029, upload-time = "2024-08-10T20:25:24.996Z" },
]
[[package]]
name = "idna"
version = "3.11"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
]
[[package]]
name = "iniconfig"
version = "2.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
]
[[package]]
name = "itsdangerous"
version = "2.2.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" },
]
[[package]]
name = "jinja2"
version = "3.1.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markupsafe" },
]
sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
]
[[package]]
name = "kubernetes"
version = "34.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
{ name = "durationpy" },
{ name = "google-auth" },
{ name = "python-dateutil" },
{ name = "pyyaml" },
{ name = "requests" },
{ name = "requests-oauthlib" },
{ name = "six" },
{ name = "urllib3" },
{ name = "websocket-client" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ef/55/3f880ef65f559cbed44a9aa20d3bdbc219a2c3a3bac4a30a513029b03ee9/kubernetes-34.1.0.tar.gz", hash = "sha256:8fe8edb0b5d290a2f3ac06596b23f87c658977d46b5f8df9d0f4ea83d0003912", size = 1083771, upload-time = "2025-09-29T20:23:49.283Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ca/ec/65f7d563aa4a62dd58777e8f6aa882f15db53b14eb29aba0c28a20f7eb26/kubernetes-34.1.0-py2.py3-none-any.whl", hash = "sha256:bffba2272534e224e6a7a74d582deb0b545b7c9879d2cd9e4aae9481d1f2cc2a", size = 2008380, upload-time = "2025-09-29T20:23:47.684Z" },
]
[[package]]
name = "markupsafe"
version = "3.0.3"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" },
{ url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" },
{ url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" },
{ url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" },
{ url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" },
{ url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" },
{ url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" },
{ url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" },
{ url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" },
{ url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" },
{ url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" },
{ url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" },
{ url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" },
{ url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" },
{ url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" },
{ url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" },
{ url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" },
{ url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" },
{ url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" },
{ url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" },
{ url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" },
{ url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" },
{ url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" },
{ url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" },
{ url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" },
{ url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" },
{ url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" },
{ url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" },
{ url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" },
{ url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" },
{ url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" },
{ url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" },
{ url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" },
{ url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" },
{ url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" },
{ url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" },
{ url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" },
{ url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" },
{ url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" },
{ url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" },
{ url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" },
{ url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" },
{ url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" },
{ url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
]
[[package]]
name = "oauthlib"
version = "3.3.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" },
]
[[package]]
name = "ohayodash"
version = "0.6.3"
source = { editable = "." }
dependencies = [
{ name = "flask" },
{ name = "gunicorn" },
{ name = "kubernetes" },
{ name = "pyyaml" },
]
[package.dev-dependencies]
dev = [
{ name = "pytest" },
{ name = "ruff" },
]
[package.metadata]
requires-dist = [
{ name = "flask", specifier = ">=3.1.1" },
{ name = "gunicorn", specifier = ">=23.0.0" },
{ name = "kubernetes", specifier = ">=33.1.0" },
{ name = "pyyaml", specifier = ">=6.0.2" },
]
[package.metadata.requires-dev]
dev = [
{ name = "pytest", specifier = ">=8.4.1" },
{ name = "ruff", specifier = ">=0.12.9" },
]
[[package]]
name = "packaging"
version = "25.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
]
[[package]]
name = "pluggy"
version = "1.6.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
]
[[package]]
name = "pyasn1"
version = "0.6.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" },
]
[[package]]
name = "pyasn1-modules"
version = "0.4.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pyasn1" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" },
]
[[package]]
name = "pygments"
version = "2.19.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
]
[[package]]
name = "pytest"
version = "9.0.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
{ name = "iniconfig" },
{ name = "packaging" },
{ name = "pluggy" },
{ name = "pygments" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" },
]
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "six" },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
]
[[package]]
name = "pyyaml"
version = "6.0.3"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" },
{ url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" },
{ url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" },
{ url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" },
{ url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" },
{ url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" },
{ url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" },
{ url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" },
{ url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" },
{ url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" },
{ url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
{ url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
{ url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
{ url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
{ url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
{ url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
{ url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
{ url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
{ url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
{ url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
{ url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
{ url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
{ url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
{ url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
{ url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
{ url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
{ url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
{ url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
]
[[package]]
name = "requests"
version = "2.32.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
{ name = "charset-normalizer" },
{ name = "idna" },
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" },
]
[[package]]
name = "requests-oauthlib"
version = "2.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "oauthlib" },
{ name = "requests" },
]
sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" },
]
[[package]]
name = "rsa"
version = "4.9.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pyasn1" },
]
sdist = { url = "https://files.pythonhosted.org/packages/da/8a/22b7beea3ee0d44b1916c0c1cb0ee3af23b700b6da9f04991899d0c555d4/rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75", size = 29034, upload-time = "2025-04-16T09:51:18.218Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762", size = 34696, upload-time = "2025-04-16T09:51:17.142Z" },
]
[[package]]
name = "ruff"
version = "0.14.8"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ed/d9/f7a0c4b3a2bf2556cd5d99b05372c29980249ef71e8e32669ba77428c82c/ruff-0.14.8.tar.gz", hash = "sha256:774ed0dd87d6ce925e3b8496feb3a00ac564bea52b9feb551ecd17e0a23d1eed", size = 5765385, upload-time = "2025-12-04T15:06:17.669Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/48/b8/9537b52010134b1d2b72870cc3f92d5fb759394094741b09ceccae183fbe/ruff-0.14.8-py3-none-linux_armv6l.whl", hash = "sha256:ec071e9c82eca417f6111fd39f7043acb53cd3fde9b1f95bbed745962e345afb", size = 13441540, upload-time = "2025-12-04T15:06:14.896Z" },
{ url = "https://files.pythonhosted.org/packages/24/00/99031684efb025829713682012b6dd37279b1f695ed1b01725f85fd94b38/ruff-0.14.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8cdb162a7159f4ca36ce980a18c43d8f036966e7f73f866ac8f493b75e0c27e9", size = 13669384, upload-time = "2025-12-04T15:06:51.809Z" },
{ url = "https://files.pythonhosted.org/packages/72/64/3eb5949169fc19c50c04f28ece2c189d3b6edd57e5b533649dae6ca484fe/ruff-0.14.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2e2fcbefe91f9fad0916850edf0854530c15bd1926b6b779de47e9ab619ea38f", size = 12806917, upload-time = "2025-12-04T15:06:08.925Z" },
{ url = "https://files.pythonhosted.org/packages/c4/08/5250babb0b1b11910f470370ec0cbc67470231f7cdc033cee57d4976f941/ruff-0.14.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d70721066a296f45786ec31916dc287b44040f553da21564de0ab4d45a869b", size = 13256112, upload-time = "2025-12-04T15:06:23.498Z" },
{ url = "https://files.pythonhosted.org/packages/78/4c/6c588e97a8e8c2d4b522c31a579e1df2b4d003eddfbe23d1f262b1a431ff/ruff-0.14.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c87e09b3cd9d126fc67a9ecd3b5b1d3ded2b9c7fce3f16e315346b9d05cfb52", size = 13227559, upload-time = "2025-12-04T15:06:33.432Z" },
{ url = "https://files.pythonhosted.org/packages/23/ce/5f78cea13eda8eceac71b5f6fa6e9223df9b87bb2c1891c166d1f0dce9f1/ruff-0.14.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d62cb310c4fbcb9ee4ac023fe17f984ae1e12b8a4a02e3d21489f9a2a5f730c", size = 13896379, upload-time = "2025-12-04T15:06:02.687Z" },
{ url = "https://files.pythonhosted.org/packages/cf/79/13de4517c4dadce9218a20035b21212a4c180e009507731f0d3b3f5df85a/ruff-0.14.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1af35c2d62633d4da0521178e8a2641c636d2a7153da0bac1b30cfd4ccd91344", size = 15372786, upload-time = "2025-12-04T15:06:29.828Z" },
{ url = "https://files.pythonhosted.org/packages/00/06/33df72b3bb42be8a1c3815fd4fae83fa2945fc725a25d87ba3e42d1cc108/ruff-0.14.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25add4575ffecc53d60eed3f24b1e934493631b48ebbc6ebaf9d8517924aca4b", size = 14990029, upload-time = "2025-12-04T15:06:36.812Z" },
{ url = "https://files.pythonhosted.org/packages/64/61/0f34927bd90925880394de0e081ce1afab66d7b3525336f5771dcf0cb46c/ruff-0.14.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c943d847b7f02f7db4201a0600ea7d244d8a404fbb639b439e987edcf2baf9a", size = 14407037, upload-time = "2025-12-04T15:06:39.979Z" },
{ url = "https://files.pythonhosted.org/packages/96/bc/058fe0aefc0fbf0d19614cb6d1a3e2c048f7dc77ca64957f33b12cfdc5ef/ruff-0.14.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb6e8bf7b4f627548daa1b69283dac5a296bfe9ce856703b03130732e20ddfe2", size = 14102390, upload-time = "2025-12-04T15:06:46.372Z" },
{ url = "https://files.pythonhosted.org/packages/af/a4/e4f77b02b804546f4c17e8b37a524c27012dd6ff05855d2243b49a7d3cb9/ruff-0.14.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:7aaf2974f378e6b01d1e257c6948207aec6a9b5ba53fab23d0182efb887a0e4a", size = 14230793, upload-time = "2025-12-04T15:06:20.497Z" },
{ url = "https://files.pythonhosted.org/packages/3f/52/bb8c02373f79552e8d087cedaffad76b8892033d2876c2498a2582f09dcf/ruff-0.14.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e5758ca513c43ad8a4ef13f0f081f80f08008f410790f3611a21a92421ab045b", size = 13160039, upload-time = "2025-12-04T15:06:49.06Z" },
{ url = "https://files.pythonhosted.org/packages/1f/ad/b69d6962e477842e25c0b11622548df746290cc6d76f9e0f4ed7456c2c31/ruff-0.14.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f74f7ba163b6e85a8d81a590363bf71618847e5078d90827749bfda1d88c9cdf", size = 13205158, upload-time = "2025-12-04T15:06:54.574Z" },
{ url = "https://files.pythonhosted.org/packages/06/63/54f23da1315c0b3dfc1bc03fbc34e10378918a20c0b0f086418734e57e74/ruff-0.14.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eed28f6fafcc9591994c42254f5a5c5ca40e69a30721d2ab18bb0bb3baac3ab6", size = 13469550, upload-time = "2025-12-04T15:05:59.209Z" },
{ url = "https://files.pythonhosted.org/packages/70/7d/a4d7b1961e4903bc37fffb7ddcfaa7beb250f67d97cfd1ee1d5cddb1ec90/ruff-0.14.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:21d48fa744c9d1cb8d71eb0a740c4dd02751a5de9db9a730a8ef75ca34cf138e", size = 14211332, upload-time = "2025-12-04T15:06:06.027Z" },
{ url = "https://files.pythonhosted.org/packages/5d/93/2a5063341fa17054e5c86582136e9895db773e3c2ffb770dde50a09f35f0/ruff-0.14.8-py3-none-win32.whl", hash = "sha256:15f04cb45c051159baebb0f0037f404f1dc2f15a927418f29730f411a79bc4e7", size = 13151890, upload-time = "2025-12-04T15:06:11.668Z" },
{ url = "https://files.pythonhosted.org/packages/02/1c/65c61a0859c0add13a3e1cbb6024b42de587456a43006ca2d4fd3d1618fe/ruff-0.14.8-py3-none-win_amd64.whl", hash = "sha256:9eeb0b24242b5bbff3011409a739929f497f3fb5fe3b5698aba5e77e8c833097", size = 14537826, upload-time = "2025-12-04T15:06:26.409Z" },
{ url = "https://files.pythonhosted.org/packages/6d/63/8b41cea3afd7f58eb64ac9251668ee0073789a3bc9ac6f816c8c6fef986d/ruff-0.14.8-py3-none-win_arm64.whl", hash = "sha256:965a582c93c63fe715fd3e3f8aa37c4b776777203d8e1d8aa3cc0c14424a4b99", size = 13634522, upload-time = "2025-12-04T15:06:43.212Z" },
]
[[package]]
name = "six"
version = "1.17.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
]
[[package]]
name = "urllib3"
version = "2.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268, upload-time = "2024-12-22T07:47:30.032Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369, upload-time = "2024-12-22T07:47:28.074Z" },
]
[[package]]
name = "websocket-client"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" },
]
[[package]]
name = "werkzeug"
version = "3.1.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markupsafe" },
]
sdist = { url = "https://files.pythonhosted.org/packages/45/ea/b0f8eeb287f8df9066e56e831c7824ac6bab645dd6c7a8f4b2d767944f9b/werkzeug-3.1.4.tar.gz", hash = "sha256:cd3cd98b1b92dc3b7b3995038826c68097dcb16f9baa63abe35f20eafeb9fe5e", size = 864687, upload-time = "2025-11-29T02:15:22.841Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2f/f9/9e082990c2585c744734f85bec79b5dae5df9c974ffee58fe421652c8e91/werkzeug-3.1.4-py3-none-any.whl", hash = "sha256:2ad50fb9ed09cc3af22c54698351027ace879a0b60a3b5edf5730b2f7d876905", size = 224960, upload-time = "2025-11-29T02:15:21.13Z" },
]