From be08dc66c7d8fe1e0f0cf182359d61b4d1bc0cce Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 18 Feb 2025 11:11:16 -0300 Subject: [PATCH] chore: format (#101) --- .github/ISSUE_TEMPLATE/BUG-REPORT.yml | 18 +- .github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 18 +- .github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 24 +- .github/ISSUE_TEMPLATE/config.yml | 6 +- .github/pull_request_template.md | 4 +- .github/workflows/licenses.yml | 6 +- django-ory-cloud/mysite/manage.py | 2 +- django-ory-cloud/mysite/mysite/__init__.py | 2 +- django-ory-cloud/mysite/mysite/asgi.py | 2 +- django-ory-cloud/mysite/mysite/settings.py | 2 +- django-ory-cloud/mysite/mysite/urls.py | 2 +- django-ory-cloud/mysite/mysite/wsgi.py | 2 +- django-ory-cloud/mysite/templates/base.html | 137 +- django-ory-cloud/playwright.config.ts | 10 +- .../tests/playwright/django-ory-cloud.spec.ts | 44 +- django-ory-cloud/tests/playwright/helpers.ts | 6 +- kratos-keto-flask/Pipfile.lock | 1688 ++++++++--------- kratos-keto-flask/app/__init__.py | 2 +- kratos-keto-flask/app/app.py | 2 +- kratos-keto-flask/app/auth/__init__.py | 2 +- kratos-keto-flask/app/commands.py | 2 +- kratos-keto-flask/app/compat.py | 2 +- kratos-keto-flask/app/extensions.py | 2 +- kratos-keto-flask/app/public/__init__.py | 2 +- kratos-keto-flask/app/public/views.py | 2 +- .../app/templates/public/home.html | 2 +- kratos-keto-flask/autoapp.py | 2 +- kratos-keto-flask/config/__init__.py | 2 +- kratos-keto-flask/config/settings.py | 2 +- kratos-keto-flask/tests/__init__.py | 2 +- kratos-keto-flask/tests/conftest.py | 2 +- kratos-keto-flask/tests/factories.py | 2 +- kratos-keto-flask/tests/settings.py | 2 +- kratos-keto-flask/tests/test_database.py | 2 +- kratos-keto-flask/tests/test_forms.py | 2 +- kratos-keto-flask/tests/test_functional.py | 2 +- kratos-keto-flask/tests/test_models.py | 2 +- kratos-oathkeeper-kong/README.md | 2 +- kratos-oathkeeper-kong/hello/main.go | 2 +- kratos-oathkeeper-kong/kong.png | Bin 0 -> 42970 bytes kratos-oathkeeper-kong/world/main.go | 2 +- oathkeeper/01-basic/hello/main.go | 2 +- oathkeeper/02-authenticators/hello/main.go | 2 +- oathkeeper/03-header-mutator/hello/main.go | 2 +- oathkeeper/04-hydrator-mutator/hello/main.go | 2 +- .../04-hydrator-mutator/hydrator/main.go | 2 +- oathkeeper/05-nginx-oathkeeper/hello/main.go | 2 +- oathkeeper/06-nginx-hydrator/hello/main.go | 2 +- oathkeeper/06-nginx-hydrator/hydrator/main.go | 2 +- oathkeeper/07-traefik-decision/hello/main.go | 2 +- oathkeeper/08-envoy-header/hello/main.go | 2 +- .../09-oathkeeper-websockets/ws/index.html | 22 +- .../09-oathkeeper-websockets/ws/main.go | 2 +- oathkeeper/10-network/hello/main.go | 2 +- oathkeeper/10-network/hydrator/main.go | 2 +- oathkeeper/11-kratos-keto/hello/main.go | 2 +- .../12-multiple-authenticators/hello/main.go | 2 +- ory-actions/vpncheck-py/focsec.py | 2 +- ory-actions/vpncheck-py/ipqs.py | 2 +- ory-actions/vpncheck-py/vpnapi.py | 2 +- package-lock.json | 30 + package.json | 14 + 62 files changed, 1083 insertions(+), 1038 deletions(-) create mode 100644 kratos-oathkeeper-kong/kong.png create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index e33bb828..76a7eec8 100644 --- a/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -12,22 +12,17 @@ body: - attributes: label: "Preflight checklist" options: - - label: - "I could not find a solution in the existing issues, docs, nor + - label: "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/ory/examples/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/ory/examples/blob/master/CONTRIBUTING.md)." required: true - - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: - "I am signed up to the [Ory Security Patch + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes @@ -62,8 +57,7 @@ body: validations: required: true - attributes: - description: - "Please copy and paste any relevant log output. This will be + description: "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Please redact any sensitive information" label: "Relevant log output" diff --git a/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index c30cb597..098ee16d 100644 --- a/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -1,8 +1,7 @@ # AUTO-GENERATED, DO NOT EDIT! # Please edit the original at https://github.com/ory/meta/blob/master/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml -description: - "A design document is needed for non-trivial changes to the code base." +description: "A design document is needed for non-trivial changes to the code base." labels: - rfc name: "Design Document" @@ -23,22 +22,17 @@ body: - attributes: label: "Preflight checklist" options: - - label: - "I could not find a solution in the existing issues, docs, nor + - label: "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/ory/examples/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/ory/examples/blob/master/CONTRIBUTING.md)." required: true - - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: - "I am signed up to the [Ory Security Patch + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes diff --git a/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index 556534f7..53f0288d 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -1,8 +1,7 @@ # AUTO-GENERATED, DO NOT EDIT! # Please edit the original at https://github.com/ory/meta/blob/master/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml -description: - "Suggest an idea for this project without a plan for implementation" +description: "Suggest an idea for this project without a plan for implementation" labels: - feat name: "Feature Request" @@ -16,22 +15,17 @@ body: - attributes: label: "Preflight checklist" options: - - label: - "I could not find a solution in the existing issues, docs, nor + - label: "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/ory/examples/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/ory/examples/blob/master/CONTRIBUTING.md)." required: true - - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: - "I am signed up to the [Ory Security Patch + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes @@ -44,8 +38,7 @@ body: id: ory-network-project type: input - attributes: - description: - "Is your feature request related to a problem? Please describe." + description: "Is your feature request related to a problem? Please describe." label: "Describe your problem" placeholder: "A clear and concise description of what the problem is. Ex. I'm always @@ -79,8 +72,7 @@ body: validations: required: true - attributes: - description: - "Add any other context or screenshots about the feature request here." + description: "Add any other context or screenshots about the feature request here." label: Additional Context id: additional type: textarea diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5d27a8d7..998b7e47 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -5,10 +5,8 @@ blank_issues_enabled: false contact_links: - name: Ory Examples Forum url: https://github.com/orgs/ory/discussions - about: - Please ask and answer questions here, show your implementations and + about: Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: - Hang out with other Ory community members to ask and answer questions. + about: Hang out with other Ory community members to ask and answer questions. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 07962970..d402c05d 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -37,8 +37,8 @@ them, don't hesitate to ask. We're here to help! This is simply a reminder of wh - [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md) and signed the CLA. - [ ] I have referenced an issue containing the design document if my change introduces a new feature. - [ ] I have read the [security policy](../security/policy). -- [ ] I confirm that this pull request does not address a security vulnerability. - If this pull request addresses a security vulnerability, +- [ ] I confirm that this pull request does not address a security vulnerability. + If this pull request addresses a security vulnerability, I confirm that I got approval (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added the necessary documentation within the code base (if appropriate). diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index 4d996501..d30cea2d 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -24,12 +24,10 @@ jobs: uses: ory/ci/licenses/check@master - name: Write, commit, push licenses uses: ory/ci/licenses/write@master - if: - ${{ github.ref == 'refs/heads/main' || github.ref == + if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/v3' }} with: - author-email: - ${{ secrets.ORY_BOT_PAT && + author-email: ${{ secrets.ORY_BOT_PAT && '60093411+ory-bot@users.noreply.github.com' || format('{0}@users.noreply.github.com', github.actor) }} author-name: ${{ secrets.ORY_BOT_PAT && 'ory-bot' || github.actor }} diff --git a/django-ory-cloud/mysite/manage.py b/django-ory-cloud/mysite/manage.py index 1b695320..4a9521aa 100755 --- a/django-ory-cloud/mysite/manage.py +++ b/django-ory-cloud/mysite/manage.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 #!/usr/bin/env python diff --git a/django-ory-cloud/mysite/mysite/__init__.py b/django-ory-cloud/mysite/mysite/__init__.py index 06020781..2aae01db 100644 --- a/django-ory-cloud/mysite/mysite/__init__.py +++ b/django-ory-cloud/mysite/mysite/__init__.py @@ -1,3 +1,3 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 diff --git a/django-ory-cloud/mysite/mysite/asgi.py b/django-ory-cloud/mysite/mysite/asgi.py index a9e573f2..66c03c5f 100644 --- a/django-ory-cloud/mysite/mysite/asgi.py +++ b/django-ory-cloud/mysite/mysite/asgi.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """ diff --git a/django-ory-cloud/mysite/mysite/settings.py b/django-ory-cloud/mysite/mysite/settings.py index a8babbca..d56d834b 100644 --- a/django-ory-cloud/mysite/mysite/settings.py +++ b/django-ory-cloud/mysite/mysite/settings.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """ diff --git a/django-ory-cloud/mysite/mysite/urls.py b/django-ory-cloud/mysite/mysite/urls.py index e342a13a..fc98c5f9 100644 --- a/django-ory-cloud/mysite/mysite/urls.py +++ b/django-ory-cloud/mysite/mysite/urls.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """mysite URL Configuration diff --git a/django-ory-cloud/mysite/mysite/wsgi.py b/django-ory-cloud/mysite/mysite/wsgi.py index 5be3924b..339b3db1 100644 --- a/django-ory-cloud/mysite/mysite/wsgi.py +++ b/django-ory-cloud/mysite/mysite/wsgi.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """ diff --git a/django-ory-cloud/mysite/templates/base.html b/django-ory-cloud/mysite/templates/base.html index a2593411..b7ff1277 100644 --- a/django-ory-cloud/mysite/templates/base.html +++ b/django-ory-cloud/mysite/templates/base.html @@ -1,45 +1,63 @@ {% load static i18n %} - + - - + + {% block title %}{% endblock title %} - + - + {% block css %} - + - + {% endblock %} - {# Placed at the top of the document so pages load faster with defer #} - {% block javascript %} - - - - - - - - + {# Placed at the top of the document so pages load faster with defer #} {% + block javascript %} + + + + + + + + {% endblock javascript %} - -
-
- - {% if messages %} - {% for message in messages %} -
- {{ message }} - -
- {% endfor %} - {% endif %} - - {% block content %} -

Use this document as a way to quick start any new project.

+ {% if messages %} {% for message in messages %} +
+ {{ message }} + +
+ {% endfor %} {% endif %} {% block content %} +

Use this document as a way to quick start any new project.

{% endblock content %} +
+ - - - {% block modal %}{% endblock modal %} - - {% block inline_javascript %} - {% comment %} - Script tags with only code, no src (defer by default). To run + {% block modal %}{% endblock modal %} {% block inline_javascript %} {% + comment %} Script tags with only code, no src (defer by default). To run with a "defer" so that you run inline code: - {% endcomment %} - {% endblock inline_javascript %} + {% endcomment %} {% endblock inline_javascript %} diff --git a/django-ory-cloud/playwright.config.ts b/django-ory-cloud/playwright.config.ts index 0534cf88..360ac9eb 100644 --- a/django-ory-cloud/playwright.config.ts +++ b/django-ory-cloud/playwright.config.ts @@ -1,8 +1,8 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import type { PlaywrightTestConfig } from "@playwright/test" -import { devices } from "@playwright/test" +import type { PlaywrightTestConfig } from "@playwright/test"; +import { devices } from "@playwright/test"; /** * Read environment variables from file. @@ -107,6 +107,6 @@ const config: PlaywrightTestConfig = { // command: 'npm run start', // port: 3000, // }, -} +}; -export default config +export default config; diff --git a/django-ory-cloud/tests/playwright/django-ory-cloud.spec.ts b/django-ory-cloud/tests/playwright/django-ory-cloud.spec.ts index 316ff071..839291c8 100644 --- a/django-ory-cloud/tests/playwright/django-ory-cloud.spec.ts +++ b/django-ory-cloud/tests/playwright/django-ory-cloud.spec.ts @@ -1,29 +1,29 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import { test, expect, Page } from "@playwright/test" -import { randomEmail, randomString } from "./helpers" +import { test, expect, Page } from "@playwright/test"; +import { randomEmail, randomString } from "./helpers"; const login = async (page: Page) => { - const email = randomEmail() - await page.fill('[name="traits.email"]', email) - await page.fill('[name="password"]', randomString()) - await page.click('[value="password"]') - return email -} + const email = randomEmail(); + await page.fill('[name="traits.email"]', email); + await page.fill('[name="password"]', randomString()); + await page.click('[value="password"]'); + return email; +}; test.describe("django-ory-cloud", () => { - const url = "http://localhost:4000/" - const name = "django" + const url = "http://localhost:4000/"; + const name = "django"; test("login and sign up", async ({ page }) => { - await page.goto(url, { waitUntil: "networkidle" }) - await page.locator("text=Sign in").click() - await expect(page).toHaveURL(/.*\/ui\/login.*/) - await page.click('[data-testid="signup-link"]') - await expect(page).toHaveURL(/.*\/ui\/registration.*/) - const email = await login(page) - await expect(page).toHaveURL(/.*\/ui\/welcome.*/) - await page.locator("text=Session Information").click() - await expect(page.locator(".session-code-box > pre")).toContainText(email) - }) -}) + await page.goto(url, { waitUntil: "networkidle" }); + await page.locator("text=Sign in").click(); + await expect(page).toHaveURL(/.*\/ui\/login.*/); + await page.click('[data-testid="signup-link"]'); + await expect(page).toHaveURL(/.*\/ui\/registration.*/); + const email = await login(page); + await expect(page).toHaveURL(/.*\/ui\/welcome.*/); + await page.locator("text=Session Information").click(); + await expect(page.locator(".session-code-box > pre")).toContainText(email); + }); +}); diff --git a/django-ory-cloud/tests/playwright/helpers.ts b/django-ory-cloud/tests/playwright/helpers.ts index bad9c6e4..eb7f9927 100644 --- a/django-ory-cloud/tests/playwright/helpers.ts +++ b/django-ory-cloud/tests/playwright/helpers.ts @@ -1,7 +1,7 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 export const randomString = () => Math.random().toString(36).substring(2, 15) + - Math.random().toString(36).substring(2, 15) -export const randomEmail = () => randomString() + "@" + randomString() + ".dev" + Math.random().toString(36).substring(2, 15); +export const randomEmail = () => randomString() + "@" + randomString() + ".dev"; diff --git a/kratos-keto-flask/Pipfile.lock b/kratos-keto-flask/Pipfile.lock index af2b4ac0..3761ac54 100644 --- a/kratos-keto-flask/Pipfile.lock +++ b/kratos-keto-flask/Pipfile.lock @@ -1,847 +1,847 @@ { - "_meta": { - "hash": { - "sha256": "ce8100bdc562bff716cc91db2c2d1b5b7e7abe751c86f9cdacd0636350995c89" - }, - "pipfile-spec": 6, - "requires": {}, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.python.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "alembic": { - "hashes": [ - "sha256:29be0856ec7591c39f4e1cb10f198045d890e6e2274cf8da80cb5e721a09642b", - "sha256:4961248173ead7ce8a21efb3de378f13b8398e6630fab0eb258dc74a8af24c58" - ], - "markers": "python_version >= '3.6'", - "version": "==1.7.7" - }, - "blinker": { - "hashes": [ - "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6" - ], - "version": "==1.4" - }, - "cachelib": { - "hashes": [ - "sha256:80fa73dda398672329dab6c8e9e9bad03fd36dc4da40d911d7de308c91e8481e", - "sha256:df254f3b900dc8684d8ebdd146c731ddb45edc6233a6cf7e3e834c949f360726" - ], - "markers": "python_version >= '3.7'", - "version": "==0.7.0" - }, - "certifi": { - "hashes": [ - "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7", - "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a" - ], - "markers": "python_version >= '3.6'", - "version": "==2022.5.18.1" - }, - "charset-normalizer": { - "hashes": [ - "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", - "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" - ], - "markers": "python_version >= '3'", - "version": "==2.0.12" - }, - "click": { - "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" - ], - "index": "pypi", - "version": "==8.1.3" - }, - "dnspython": { - "hashes": [ - "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e", - "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f" - ], - "markers": "python_version >= '3.6' and python_version < '4.0'", - "version": "==2.2.1" - }, - "email-validator": { - "hashes": [ - "sha256:5675c8ceb7106a37e40e2698a57c056756bf3f272cfa8682a4f87ebd95d8440b", - "sha256:aa237a65f6f4da067119b7df3f13e89c25c051327b2b5b66dc075f33d62480d7" - ], - "index": "pypi", - "version": "==1.1.3" - }, - "environs": { - "hashes": [ - "sha256:b1cb81fbc0568d85c8ca32328e17bd756a2bb16cff54371d18d15d1832b692aa", - "sha256:b5a197f70c590e8ad2d60d145ea2a2e90d4b1b05cdd04f8e18132d2760123971" - ], - "index": "pypi", - "version": "==9.4.0" - }, - "flask": { - "hashes": [ - "sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2", - "sha256:cb90f62f1d8e4dc4621f52106613488b5ba826b2e1e10a33eac92f723093ab6a" - ], - "index": "pypi", - "version": "==2.0.2" - }, - "flask-debugtoolbar": { - "hashes": [ - "sha256:0c26aa013a9813b8886857bf0ec24d28ab494114a264baf06c951cadc4dd0dae", - "sha256:491c737f321830c06a2835784acf1fc8488fd257a0ef318810b3b6bed5f600d5" - ], - "index": "pypi", - "version": "==0.13.1" - }, - "flask-migrate": { - "hashes": [ - "sha256:57d6060839e3a7f150eaab6fe4e726d9e3e7cffe2150fb223d73f92421c6d1d9", - "sha256:a6498706241aba6be7a251078de9cf166d74307bca41a4ca3e403c9d39e2f897" - ], - "index": "pypi", - "version": "==3.1.0" - }, - "flask-session": { - "hashes": [ - "sha256:1e3f8a317005db72c831f85d884a5a9d23145f256c730d80b325a3150a22c3db", - "sha256:c9ed54321fa8c4ca0132ffd3369582759eda7252fb4b3bee480e690d1ba41f46" - ], - "index": "pypi", - "version": "==0.4.0" - }, - "flask-sqlalchemy": { - "hashes": [ - "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912", - "sha256:f12c3d4cc5cc7fdcc148b9527ea05671718c3ea45d50c7e732cceb33f574b390" - ], - "index": "pypi", - "version": "==2.5.1" - }, - "flask-static-digest": { - "hashes": [ - "sha256:7528b08a2c12dc3a828096b66ee2612f323d50be36d01f2817b767fbb1ceca6e" - ], - "index": "pypi", - "version": "==0.2.1" - }, - "flask-wtf": { - "hashes": [ - "sha256:01feccfc395405cea48a3f36c23f0d766e2cc6fd2a5a065ad50ad3e5827ec797", - "sha256:872fbb17b5888bfc734edbdcf45bc08fb365ca39f69d25dc752465a455517b28" - ], - "index": "pypi", - "version": "==1.0.0" - }, - "idna": { - "hashes": [ - "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", - "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" - ], - "markers": "python_version >= '3.5'", - "version": "==3.3" - }, - "itsdangerous": { - "hashes": [ - "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", - "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.2" - }, - "jinja2": { - "hashes": [ - "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", - "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" - ], - "markers": "python_version >= '3.7'", - "version": "==3.1.2" - }, - "mako": { - "hashes": [ - "sha256:23aab11fdbbb0f1051b93793a58323ff937e98e34aece1c4219675122e57e4ba", - "sha256:9a7c7e922b87db3686210cf49d5d767033a41d4010b284e747682c92bddd8b39" - ], - "markers": "python_version >= '3.7'", - "version": "==1.2.0" - }, - "markupsafe": { - "hashes": [ - "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", - "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", - "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", - "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", - "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", - "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", - "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", - "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", - "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", - "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", - "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", - "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", - "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", - "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", - "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", - "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", - "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", - "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", - "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", - "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", - "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", - "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", - "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", - "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", - "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", - "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", - "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", - "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", - "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", - "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", - "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", - "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", - "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", - "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", - "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", - "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", - "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", - "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", - "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.1" - }, - "marshmallow": { - "hashes": [ - "sha256:53a1e0ee69f79e1f3e80d17393b25cfc917eda52f859e8183b4af72c3390c1f1", - "sha256:a762c1d8b2bcb0e5c8e964850d03f9f3bffd6a12b626f3c14b9d6b1841999af5" - ], - "markers": "python_version >= '3.7'", - "version": "==3.16.0" - }, - "packaging": { - "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" - ], - "markers": "python_version >= '3.6'", - "version": "==21.3" - }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, - "python-dotenv": { - "hashes": [ - "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f", - "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938" - ], - "markers": "python_version >= '3.5'", - "version": "==0.20.0" - }, - "requests": { - "hashes": [ - "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", - "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" - ], - "index": "pypi", - "version": "==2.27.1" - }, - "sqlalchemy": { - "hashes": [ - "sha256:0072f9887aabe66db23f818bbe950cfa1b6127c5cb769b00bcc07935b3adb0ad", - "sha256:027f356c727db24f3c75828c7feb426f87ce1241242d08958e454bd025810660", - "sha256:08cfd35eecaba79be930c9bfd2e1f0c67a7e1314355d83a378f9a512b1cf7587", - "sha256:0fc4eec2f46b40bdd42112b3be3fbbf88e194bcf02950fbb88bcdc1b32f07dc7", - "sha256:101d2e100ba9182c9039699588e0b2d833c54b3bad46c67c192159876c9f27ea", - "sha256:15b65887b6c324cad638c7671cb95985817b733242a7eb69edd7cdf6953be1e0", - "sha256:37b46bfc4af3dc226acb6fa28ecd2e1fd223433dc5e15a2bad62bf0a0cbb4e8b", - "sha256:56d9d62021946263d4478c9ca012fbd1805f10994cb615c88e7bfd1ae14604d8", - "sha256:5919e647e1d4805867ea556ed4967c68b4d8b266059fa35020dbaed8ffdd60f3", - "sha256:5a717c2e70fd1bb477161c4cc85258e41d978584fbe5522613618195f7e87d9b", - "sha256:5e9cd33459afa69c88fa648e803d1f1245e3caa60bfe8b80a9595e5edd3bda9c", - "sha256:621854dbb4d2413c759a5571564170de45ef37299df52e78e62b42e2880192e1", - "sha256:78abc507d17753ed434b6cc0c0693126279723d5656d9775bfcac966a99a899b", - "sha256:7dd0502cb091660ad0d89c5e95a29825f37cde2a5249957838e975871fbffaad", - "sha256:804e22d5b6165a4f3f019dd9c94bec5687de985a9c54286b93ded9f7846b8c82", - "sha256:878daecb6405e786b07f97e1c77a9cfbbbec17432e8a90c487967e32cfdecb33", - "sha256:886359f734b95ad1ef443b13bb4518bcade4db4f9553c9ce33d6d04ebda8d44e", - "sha256:9ce960a1dc60524136cf6f75621588e2508a117e04a6e3eedb0968bd13b8c824", - "sha256:ad618d687d26d4cbfa9c6fa6141d59e05bcdfc60cb6e1f1d3baa18d8c62fef5f", - "sha256:c5de7adfb91d351f44062b8dedf29f49d4af7cb765be65816e79223a4e31062b", - "sha256:ceac84dd9abbbe115e8be0c817bed85d9fa639b4d294e7817f9e61162d5f766c", - "sha256:da64423c05256f4ab8c0058b90202053b201cbe3a081f3a43eb590cd554395ab", - "sha256:dc27dcc6c72eb38be7f144e9c2c4372d35a3684d3a6dd43bd98c1238358ee17c", - "sha256:dd49d21d1f03c81fbec9080ecdc4486d5ddda67e7fbb75ebf48294465c022cdc", - "sha256:debaf09a823061f88a8dee04949814cf7e82fb394c5bca22c780cb03172ca23b", - "sha256:e027bdf0a4cf6bd0a3ad3b998643ea374d7991bd117b90bf9982e41ceb742941", - "sha256:e4ddd4f2e247128c58bb3dd4489922874afce157d2cff0b2295d67fcd0f22494", - "sha256:e5f6959466a42b6569774c257e55f9cd85200d5b0ba09f0f5d8b5845349c5822", - "sha256:e89347d3bd2ef873832b47e85f4bbd810a5e626c5e749d90a07638da100eb1c8", - "sha256:e9cc6d844e24c307c3272677982a9b33816aeb45e4977791c3bdd47637a8d810", - "sha256:eb8c993706e86178ce15a6b86a335a2064f52254b640e7f53365e716423d33f4", - "sha256:eeaebceb24b46e884c4ad3c04f37feb178b81f6ce720af19bfa2592ca32fdef7", - "sha256:f3909194751bb6cb7c5511dd18bcf77e6e3f0b31604ed4004dffa9461f71e737", - "sha256:f74d6c05d2d163464adbdfbc1ab85048cc15462ff7d134b8aed22bd521e1faa5", - "sha256:fa2bad14e1474ba649cfc969c1d2ec915dd3e79677f346bbfe08e93ef9020b39", - "sha256:fbc6e63e481fa323036f305ada96a3362e1d60dd2bfa026cac10c3553e6880e9" - ], - "index": "pypi", - "version": "==1.4.29" - }, - "urllib3": { - "hashes": [ - "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", - "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", - "version": "==1.26.9" - }, - "werkzeug": { - "hashes": [ - "sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f", - "sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a" - ], - "index": "pypi", - "version": "==2.0.2" - }, - "wtforms": { - "hashes": [ - "sha256:6b351bbb12dd58af57ffef05bc78425d08d1914e0fd68ee14143b7ade023c5bc", - "sha256:837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b" - ], - "index": "pypi", - "version": "==3.0.1" - } - }, - "develop": { - "appnope": { - "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" - ], - "markers": "sys_platform == 'darwin'", - "version": "==0.1.3" - }, - "asttokens": { - "hashes": [ - "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c", - "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5" - ], - "version": "==2.0.5" - }, - "attrs": { - "hashes": [ - "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", - "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==21.4.0" - }, - "backcall": { - "hashes": [ - "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", - "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" - ], - "version": "==0.2.0" - }, - "black": { - "hashes": [ - "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3", - "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f" - ], - "index": "pypi", - "version": "==21.12b0" - }, - "blinker": { - "hashes": [ - "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6" - ], - "version": "==1.4" - }, - "click": { - "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" - ], - "index": "pypi", - "version": "==8.1.3" - }, - "decorator": { - "hashes": [ - "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", - "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" - ], - "markers": "python_version >= '3.7'", - "version": "==5.1.1" - }, - "executing": { - "hashes": [ - "sha256:c6554e21c6b060590a6d3be4b82fb78f8f0194d809de5ea7df1c093763311501", - "sha256:d1eef132db1b83649a3905ca6dd8897f71ac6f8cac79a7e58a1a09cf137546c9" - ], - "version": "==0.8.3" - }, - "fancycompleter": { - "hashes": [ - "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272", - "sha256:dd076bca7d9d524cc7f25ec8f35ef95388ffef9ef46def4d3d25e9b044ad7080" - ], - "version": "==0.9.1" - }, - "flake8": { - "hashes": [ - "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d", - "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d" - ], - "index": "pypi", - "version": "==4.0.1" - }, - "flake8-blind-except": { - "hashes": [ - "sha256:02a860a1a19cb602c006a3fe0778035b0d14d3f57929b4b798bc7d6684f204e5" - ], - "index": "pypi", - "version": "==0.2.0" - }, - "flake8-debugger": { - "hashes": [ - "sha256:82e64faa72e18d1bdd0000407502ebb8ecffa7bc027c62b9d4110ce27c091032", - "sha256:e43dc777f7db1481db473210101ec2df2bd39a45b149d7218a618e954177eda6" - ], - "index": "pypi", - "version": "==4.0.0" - }, - "flake8-docstrings": { - "hashes": [ - "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde", - "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b" - ], - "index": "pypi", - "version": "==1.6.0" - }, - "flake8-isort": { - "hashes": [ - "sha256:c4e8b6dcb7be9b71a02e6e5d4196cefcef0f3447be51e82730fb336fff164949", - "sha256:d814304ab70e6e58859bc5c3e221e2e6e71c958e7005239202fee19c24f82717" - ], - "index": "pypi", - "version": "==4.1.1" - }, - "flake8-polyfill": { - "hashes": [ - "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9", - "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda" - ], - "version": "==1.0.2" - }, - "flask": { - "hashes": [ - "sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2", - "sha256:cb90f62f1d8e4dc4621f52106613488b5ba826b2e1e10a33eac92f723093ab6a" - ], - "index": "pypi", - "version": "==2.0.2" - }, - "flask-debugtoolbar": { - "hashes": [ - "sha256:0c26aa013a9813b8886857bf0ec24d28ab494114a264baf06c951cadc4dd0dae", - "sha256:491c737f321830c06a2835784acf1fc8488fd257a0ef318810b3b6bed5f600d5" - ], - "index": "pypi", - "version": "==0.13.1" - }, - "importlib-metadata": { - "hashes": [ - "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700", - "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec" - ], - "markers": "python_version < '3.10'", - "version": "==4.11.4" - }, - "iniconfig": { - "hashes": [ - "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", - "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" - ], - "version": "==1.1.1" - }, - "ipdb": { - "hashes": [ - "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5" - ], - "index": "pypi", - "version": "==0.13.9" - }, - "ipython": { - "hashes": [ - "sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1", - "sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd" - ], - "markers": "python_version >= '3.7'", - "version": "==8.4.0" - }, - "isort": { - "hashes": [ - "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", - "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951" - ], - "index": "pypi", - "version": "==5.10.1" - }, - "itsdangerous": { - "hashes": [ - "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", - "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.2" - }, - "jedi": { - "hashes": [ - "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d", - "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab" - ], - "markers": "python_version >= '3.6'", - "version": "==0.18.1" - }, - "jinja2": { - "hashes": [ - "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", - "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" - ], - "markers": "python_version >= '3.7'", - "version": "==3.1.2" - }, - "markupsafe": { - "hashes": [ - "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", - "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", - "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", - "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", - "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", - "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", - "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", - "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", - "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", - "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", - "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", - "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", - "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", - "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", - "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", - "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", - "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", - "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", - "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", - "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", - "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", - "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", - "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", - "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", - "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", - "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", - "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", - "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", - "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", - "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", - "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", - "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", - "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", - "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", - "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", - "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", - "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", - "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", - "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.1" - }, - "matplotlib-inline": { - "hashes": [ - "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee", - "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c" - ], - "markers": "python_version >= '3.5'", - "version": "==0.1.3" - }, - "mccabe": { - "hashes": [ - "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" - ], - "version": "==0.6.1" - }, - "mypy-extensions": { - "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" - ], - "version": "==0.4.3" - }, - "packaging": { - "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" - ], - "markers": "python_version >= '3.6'", - "version": "==21.3" - }, - "parso": { - "hashes": [ - "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", - "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" - ], - "markers": "python_version >= '3.6'", - "version": "==0.8.3" - }, - "pathspec": { - "hashes": [ - "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a", - "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1" - ], - "version": "==0.9.0" - }, - "pdbpp": { - "hashes": [ - "sha256:79580568e33eb3d6f6b462b1187f53e10cd8e4538f7d31495c9181e2cf9665d1", - "sha256:d9e43f4fda388eeb365f2887f4e7b66ac09dce9b6236b76f63616530e2f669f5" - ], - "index": "pypi", - "version": "==0.10.3" - }, - "pep8-naming": { - "hashes": [ - "sha256:4a8daeaeb33cfcde779309fc0c9c0a68a3bbe2ad8a8308b763c5068f86eb9f37", - "sha256:bb2455947757d162aa4cad55dba4ce029005cd1692f2899a21d51d8630ca7841" - ], - "index": "pypi", - "version": "==0.12.1" - }, - "pexpect": { - "hashes": [ - "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", - "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" - ], - "markers": "sys_platform != 'win32'", - "version": "==4.8.0" - }, - "pickleshare": { - "hashes": [ - "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", - "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" - ], - "version": "==0.7.5" - }, - "platformdirs": { - "hashes": [ - "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", - "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" - ], - "markers": "python_version >= '3.7'", - "version": "==2.5.2" - }, - "pluggy": { - "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" - ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" - }, - "prompt-toolkit": { - "hashes": [ - "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752", - "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7" - ], - "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.29" - }, - "ptyprocess": { - "hashes": [ - "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", - "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" - ], - "version": "==0.7.0" - }, - "pure-eval": { - "hashes": [ - "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", - "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" - ], - "version": "==0.2.2" - }, - "py": { - "hashes": [ - "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", - "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.11.0" - }, - "pycodestyle": { - "hashes": [ - "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", - "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.8.0" - }, - "pydocstyle": { - "hashes": [ - "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc", - "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4" - ], - "markers": "python_version >= '3.6'", - "version": "==6.1.1" - }, - "pyflakes": { - "hashes": [ - "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c", - "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.4.0" - }, - "pygments": { - "hashes": [ - "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb", - "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519" - ], - "markers": "python_version >= '3.6'", - "version": "==2.12.0" - }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, - "pyrepl": { - "hashes": [ - "sha256:292570f34b5502e871bbb966d639474f2b57fbfcd3373c2d6a2f3d56e681a775" - ], - "version": "==0.9.0" - }, - "pytest": { - "hashes": [ - "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89", - "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" - ], - "index": "pypi", - "version": "==6.2.5" - }, - "setuptools": { - "hashes": [ - "sha256:68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36", - "sha256:a43bdedf853c670e5fed28e5623403bad2f73cf02f9a2774e91def6bda8265a7" - ], - "markers": "python_version >= '3.7'", - "version": "==62.3.2" - }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" - }, - "snowballstemmer": { - "hashes": [ - "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", - "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" - ], - "version": "==2.2.0" - }, - "stack-data": { - "hashes": [ - "sha256:45692d41bd633a9503a5195552df22b583caf16f0b27c4e58c98d88c8b648e12", - "sha256:999762f9c3132308789affa03e9271bbbe947bf78311851f4d485d8402ed858e" - ], - "version": "==0.2.0" - }, - "testfixtures": { - "hashes": [ - "sha256:02dae883f567f5b70fd3ad3c9eefb95912e78ac90be6c7444b5e2f46bf572c84", - "sha256:7de200e24f50a4a5d6da7019fb1197aaf5abd475efb2ec2422fdcf2f2eb98c1d" - ], - "version": "==6.18.5" - }, - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.2" - }, - "tomli": { - "hashes": [ - "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f", - "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c" - ], - "markers": "python_version >= '3.6'", - "version": "==1.2.3" - }, - "traitlets": { - "hashes": [ - "sha256:70815ecb20ec619d1af28910ade523383be13754283aef90528eb3d47b77c5db", - "sha256:f44b708d33d98b0addb40c29d148a761f44af740603a8fd0e2f8b5b27cf0f087" - ], - "markers": "python_version >= '3.7'", - "version": "==5.2.1.post0" - }, - "typing-extensions": { - "hashes": [ - "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708", - "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376" - ], - "markers": "python_version >= '3.7'", - "version": "==4.2.0" - }, - "wcwidth": { - "hashes": [ - "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", - "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" - ], - "version": "==0.2.5" - }, - "werkzeug": { - "hashes": [ - "sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f", - "sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a" - ], - "index": "pypi", - "version": "==2.0.2" - }, - "wmctrl": { - "hashes": [ - "sha256:66cbff72b0ca06a22ec3883ac3a4d7c41078bdae4fb7310f52951769b10e14e0" - ], - "version": "==0.4" - }, - "zipp": { - "hashes": [ - "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", - "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" - ], - "markers": "python_version >= '3.7'", - "version": "==3.8.0" - } + "_meta": { + "hash": { + "sha256": "ce8100bdc562bff716cc91db2c2d1b5b7e7abe751c86f9cdacd0636350995c89" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "alembic": { + "hashes": [ + "sha256:29be0856ec7591c39f4e1cb10f198045d890e6e2274cf8da80cb5e721a09642b", + "sha256:4961248173ead7ce8a21efb3de378f13b8398e6630fab0eb258dc74a8af24c58" + ], + "markers": "python_version >= '3.6'", + "version": "==1.7.7" + }, + "blinker": { + "hashes": [ + "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6" + ], + "version": "==1.4" + }, + "cachelib": { + "hashes": [ + "sha256:80fa73dda398672329dab6c8e9e9bad03fd36dc4da40d911d7de308c91e8481e", + "sha256:df254f3b900dc8684d8ebdd146c731ddb45edc6233a6cf7e3e834c949f360726" + ], + "markers": "python_version >= '3.7'", + "version": "==0.7.0" + }, + "certifi": { + "hashes": [ + "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7", + "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.5.18.1" + }, + "charset-normalizer": { + "hashes": [ + "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", + "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" + ], + "markers": "python_version >= '3'", + "version": "==2.0.12" + }, + "click": { + "hashes": [ + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + ], + "index": "pypi", + "version": "==8.1.3" + }, + "dnspython": { + "hashes": [ + "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e", + "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f" + ], + "markers": "python_version >= '3.6' and python_version < '4.0'", + "version": "==2.2.1" + }, + "email-validator": { + "hashes": [ + "sha256:5675c8ceb7106a37e40e2698a57c056756bf3f272cfa8682a4f87ebd95d8440b", + "sha256:aa237a65f6f4da067119b7df3f13e89c25c051327b2b5b66dc075f33d62480d7" + ], + "index": "pypi", + "version": "==1.1.3" + }, + "environs": { + "hashes": [ + "sha256:b1cb81fbc0568d85c8ca32328e17bd756a2bb16cff54371d18d15d1832b692aa", + "sha256:b5a197f70c590e8ad2d60d145ea2a2e90d4b1b05cdd04f8e18132d2760123971" + ], + "index": "pypi", + "version": "==9.4.0" + }, + "flask": { + "hashes": [ + "sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2", + "sha256:cb90f62f1d8e4dc4621f52106613488b5ba826b2e1e10a33eac92f723093ab6a" + ], + "index": "pypi", + "version": "==2.0.2" + }, + "flask-debugtoolbar": { + "hashes": [ + "sha256:0c26aa013a9813b8886857bf0ec24d28ab494114a264baf06c951cadc4dd0dae", + "sha256:491c737f321830c06a2835784acf1fc8488fd257a0ef318810b3b6bed5f600d5" + ], + "index": "pypi", + "version": "==0.13.1" + }, + "flask-migrate": { + "hashes": [ + "sha256:57d6060839e3a7f150eaab6fe4e726d9e3e7cffe2150fb223d73f92421c6d1d9", + "sha256:a6498706241aba6be7a251078de9cf166d74307bca41a4ca3e403c9d39e2f897" + ], + "index": "pypi", + "version": "==3.1.0" + }, + "flask-session": { + "hashes": [ + "sha256:1e3f8a317005db72c831f85d884a5a9d23145f256c730d80b325a3150a22c3db", + "sha256:c9ed54321fa8c4ca0132ffd3369582759eda7252fb4b3bee480e690d1ba41f46" + ], + "index": "pypi", + "version": "==0.4.0" + }, + "flask-sqlalchemy": { + "hashes": [ + "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912", + "sha256:f12c3d4cc5cc7fdcc148b9527ea05671718c3ea45d50c7e732cceb33f574b390" + ], + "index": "pypi", + "version": "==2.5.1" + }, + "flask-static-digest": { + "hashes": [ + "sha256:7528b08a2c12dc3a828096b66ee2612f323d50be36d01f2817b767fbb1ceca6e" + ], + "index": "pypi", + "version": "==0.2.1" + }, + "flask-wtf": { + "hashes": [ + "sha256:01feccfc395405cea48a3f36c23f0d766e2cc6fd2a5a065ad50ad3e5827ec797", + "sha256:872fbb17b5888bfc734edbdcf45bc08fb365ca39f69d25dc752465a455517b28" + ], + "index": "pypi", + "version": "==1.0.0" + }, + "idna": { + "hashes": [ + "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", + "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" + ], + "markers": "python_version >= '3.5'", + "version": "==3.3" + }, + "itsdangerous": { + "hashes": [ + "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", + "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.2" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, + "mako": { + "hashes": [ + "sha256:23aab11fdbbb0f1051b93793a58323ff937e98e34aece1c4219675122e57e4ba", + "sha256:9a7c7e922b87db3686210cf49d5d767033a41d4010b284e747682c92bddd8b39" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.0" + }, + "markupsafe": { + "hashes": [ + "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", + "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", + "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", + "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", + "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", + "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", + "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", + "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", + "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", + "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", + "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", + "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", + "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", + "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", + "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", + "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", + "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", + "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", + "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", + "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", + "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", + "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", + "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", + "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", + "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", + "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", + "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", + "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", + "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", + "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", + "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", + "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", + "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", + "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", + "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", + "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", + "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", + "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", + "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", + "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.1" + }, + "marshmallow": { + "hashes": [ + "sha256:53a1e0ee69f79e1f3e80d17393b25cfc917eda52f859e8183b4af72c3390c1f1", + "sha256:a762c1d8b2bcb0e5c8e964850d03f9f3bffd6a12b626f3c14b9d6b1841999af5" + ], + "markers": "python_version >= '3.7'", + "version": "==3.16.0" + }, + "packaging": { + "hashes": [ + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + ], + "markers": "python_version >= '3.6'", + "version": "==21.3" + }, + "pyparsing": { + "hashes": [ + "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", + "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" + ], + "markers": "python_full_version >= '3.6.8'", + "version": "==3.0.9" + }, + "python-dotenv": { + "hashes": [ + "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f", + "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938" + ], + "markers": "python_version >= '3.5'", + "version": "==0.20.0" + }, + "requests": { + "hashes": [ + "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", + "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" + ], + "index": "pypi", + "version": "==2.27.1" + }, + "sqlalchemy": { + "hashes": [ + "sha256:0072f9887aabe66db23f818bbe950cfa1b6127c5cb769b00bcc07935b3adb0ad", + "sha256:027f356c727db24f3c75828c7feb426f87ce1241242d08958e454bd025810660", + "sha256:08cfd35eecaba79be930c9bfd2e1f0c67a7e1314355d83a378f9a512b1cf7587", + "sha256:0fc4eec2f46b40bdd42112b3be3fbbf88e194bcf02950fbb88bcdc1b32f07dc7", + "sha256:101d2e100ba9182c9039699588e0b2d833c54b3bad46c67c192159876c9f27ea", + "sha256:15b65887b6c324cad638c7671cb95985817b733242a7eb69edd7cdf6953be1e0", + "sha256:37b46bfc4af3dc226acb6fa28ecd2e1fd223433dc5e15a2bad62bf0a0cbb4e8b", + "sha256:56d9d62021946263d4478c9ca012fbd1805f10994cb615c88e7bfd1ae14604d8", + "sha256:5919e647e1d4805867ea556ed4967c68b4d8b266059fa35020dbaed8ffdd60f3", + "sha256:5a717c2e70fd1bb477161c4cc85258e41d978584fbe5522613618195f7e87d9b", + "sha256:5e9cd33459afa69c88fa648e803d1f1245e3caa60bfe8b80a9595e5edd3bda9c", + "sha256:621854dbb4d2413c759a5571564170de45ef37299df52e78e62b42e2880192e1", + "sha256:78abc507d17753ed434b6cc0c0693126279723d5656d9775bfcac966a99a899b", + "sha256:7dd0502cb091660ad0d89c5e95a29825f37cde2a5249957838e975871fbffaad", + "sha256:804e22d5b6165a4f3f019dd9c94bec5687de985a9c54286b93ded9f7846b8c82", + "sha256:878daecb6405e786b07f97e1c77a9cfbbbec17432e8a90c487967e32cfdecb33", + "sha256:886359f734b95ad1ef443b13bb4518bcade4db4f9553c9ce33d6d04ebda8d44e", + "sha256:9ce960a1dc60524136cf6f75621588e2508a117e04a6e3eedb0968bd13b8c824", + "sha256:ad618d687d26d4cbfa9c6fa6141d59e05bcdfc60cb6e1f1d3baa18d8c62fef5f", + "sha256:c5de7adfb91d351f44062b8dedf29f49d4af7cb765be65816e79223a4e31062b", + "sha256:ceac84dd9abbbe115e8be0c817bed85d9fa639b4d294e7817f9e61162d5f766c", + "sha256:da64423c05256f4ab8c0058b90202053b201cbe3a081f3a43eb590cd554395ab", + "sha256:dc27dcc6c72eb38be7f144e9c2c4372d35a3684d3a6dd43bd98c1238358ee17c", + "sha256:dd49d21d1f03c81fbec9080ecdc4486d5ddda67e7fbb75ebf48294465c022cdc", + "sha256:debaf09a823061f88a8dee04949814cf7e82fb394c5bca22c780cb03172ca23b", + "sha256:e027bdf0a4cf6bd0a3ad3b998643ea374d7991bd117b90bf9982e41ceb742941", + "sha256:e4ddd4f2e247128c58bb3dd4489922874afce157d2cff0b2295d67fcd0f22494", + "sha256:e5f6959466a42b6569774c257e55f9cd85200d5b0ba09f0f5d8b5845349c5822", + "sha256:e89347d3bd2ef873832b47e85f4bbd810a5e626c5e749d90a07638da100eb1c8", + "sha256:e9cc6d844e24c307c3272677982a9b33816aeb45e4977791c3bdd47637a8d810", + "sha256:eb8c993706e86178ce15a6b86a335a2064f52254b640e7f53365e716423d33f4", + "sha256:eeaebceb24b46e884c4ad3c04f37feb178b81f6ce720af19bfa2592ca32fdef7", + "sha256:f3909194751bb6cb7c5511dd18bcf77e6e3f0b31604ed4004dffa9461f71e737", + "sha256:f74d6c05d2d163464adbdfbc1ab85048cc15462ff7d134b8aed22bd521e1faa5", + "sha256:fa2bad14e1474ba649cfc969c1d2ec915dd3e79677f346bbfe08e93ef9020b39", + "sha256:fbc6e63e481fa323036f305ada96a3362e1d60dd2bfa026cac10c3553e6880e9" + ], + "index": "pypi", + "version": "==1.4.29" + }, + "urllib3": { + "hashes": [ + "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", + "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", + "version": "==1.26.9" + }, + "werkzeug": { + "hashes": [ + "sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f", + "sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a" + ], + "index": "pypi", + "version": "==2.0.2" + }, + "wtforms": { + "hashes": [ + "sha256:6b351bbb12dd58af57ffef05bc78425d08d1914e0fd68ee14143b7ade023c5bc", + "sha256:837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b" + ], + "index": "pypi", + "version": "==3.0.1" + } + }, + "develop": { + "appnope": { + "hashes": [ + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.3" + }, + "asttokens": { + "hashes": [ + "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c", + "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5" + ], + "version": "==2.0.5" + }, + "attrs": { + "hashes": [ + "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", + "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.4.0" + }, + "backcall": { + "hashes": [ + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" + ], + "version": "==0.2.0" + }, + "black": { + "hashes": [ + "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3", + "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f" + ], + "index": "pypi", + "version": "==21.12b0" + }, + "blinker": { + "hashes": [ + "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6" + ], + "version": "==1.4" + }, + "click": { + "hashes": [ + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + ], + "index": "pypi", + "version": "==8.1.3" + }, + "decorator": { + "hashes": [ + "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", + "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" + ], + "markers": "python_version >= '3.7'", + "version": "==5.1.1" + }, + "executing": { + "hashes": [ + "sha256:c6554e21c6b060590a6d3be4b82fb78f8f0194d809de5ea7df1c093763311501", + "sha256:d1eef132db1b83649a3905ca6dd8897f71ac6f8cac79a7e58a1a09cf137546c9" + ], + "version": "==0.8.3" + }, + "fancycompleter": { + "hashes": [ + "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272", + "sha256:dd076bca7d9d524cc7f25ec8f35ef95388ffef9ef46def4d3d25e9b044ad7080" + ], + "version": "==0.9.1" + }, + "flake8": { + "hashes": [ + "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d", + "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d" + ], + "index": "pypi", + "version": "==4.0.1" + }, + "flake8-blind-except": { + "hashes": [ + "sha256:02a860a1a19cb602c006a3fe0778035b0d14d3f57929b4b798bc7d6684f204e5" + ], + "index": "pypi", + "version": "==0.2.0" + }, + "flake8-debugger": { + "hashes": [ + "sha256:82e64faa72e18d1bdd0000407502ebb8ecffa7bc027c62b9d4110ce27c091032", + "sha256:e43dc777f7db1481db473210101ec2df2bd39a45b149d7218a618e954177eda6" + ], + "index": "pypi", + "version": "==4.0.0" + }, + "flake8-docstrings": { + "hashes": [ + "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde", + "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b" + ], + "index": "pypi", + "version": "==1.6.0" + }, + "flake8-isort": { + "hashes": [ + "sha256:c4e8b6dcb7be9b71a02e6e5d4196cefcef0f3447be51e82730fb336fff164949", + "sha256:d814304ab70e6e58859bc5c3e221e2e6e71c958e7005239202fee19c24f82717" + ], + "index": "pypi", + "version": "==4.1.1" + }, + "flake8-polyfill": { + "hashes": [ + "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9", + "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda" + ], + "version": "==1.0.2" + }, + "flask": { + "hashes": [ + "sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2", + "sha256:cb90f62f1d8e4dc4621f52106613488b5ba826b2e1e10a33eac92f723093ab6a" + ], + "index": "pypi", + "version": "==2.0.2" + }, + "flask-debugtoolbar": { + "hashes": [ + "sha256:0c26aa013a9813b8886857bf0ec24d28ab494114a264baf06c951cadc4dd0dae", + "sha256:491c737f321830c06a2835784acf1fc8488fd257a0ef318810b3b6bed5f600d5" + ], + "index": "pypi", + "version": "==0.13.1" + }, + "importlib-metadata": { + "hashes": [ + "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700", + "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec" + ], + "markers": "python_version < '3.10'", + "version": "==4.11.4" + }, + "iniconfig": { + "hashes": [ + "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", + "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" + ], + "version": "==1.1.1" + }, + "ipdb": { + "hashes": [ + "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5" + ], + "index": "pypi", + "version": "==0.13.9" + }, + "ipython": { + "hashes": [ + "sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1", + "sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd" + ], + "markers": "python_version >= '3.7'", + "version": "==8.4.0" + }, + "isort": { + "hashes": [ + "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", + "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951" + ], + "index": "pypi", + "version": "==5.10.1" + }, + "itsdangerous": { + "hashes": [ + "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", + "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.2" + }, + "jedi": { + "hashes": [ + "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d", + "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab" + ], + "markers": "python_version >= '3.6'", + "version": "==0.18.1" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, + "markupsafe": { + "hashes": [ + "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", + "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", + "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", + "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", + "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", + "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", + "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", + "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", + "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", + "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", + "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", + "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", + "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", + "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", + "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", + "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", + "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", + "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", + "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", + "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", + "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", + "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", + "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", + "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", + "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", + "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", + "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", + "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", + "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", + "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", + "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", + "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", + "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", + "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", + "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", + "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", + "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", + "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", + "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", + "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.1" + }, + "matplotlib-inline": { + "hashes": [ + "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee", + "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c" + ], + "markers": "python_version >= '3.5'", + "version": "==0.1.3" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "mypy-extensions": { + "hashes": [ + "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", + "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" + ], + "version": "==0.4.3" + }, + "packaging": { + "hashes": [ + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + ], + "markers": "python_version >= '3.6'", + "version": "==21.3" + }, + "parso": { + "hashes": [ + "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", + "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" + ], + "markers": "python_version >= '3.6'", + "version": "==0.8.3" + }, + "pathspec": { + "hashes": [ + "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a", + "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1" + ], + "version": "==0.9.0" + }, + "pdbpp": { + "hashes": [ + "sha256:79580568e33eb3d6f6b462b1187f53e10cd8e4538f7d31495c9181e2cf9665d1", + "sha256:d9e43f4fda388eeb365f2887f4e7b66ac09dce9b6236b76f63616530e2f669f5" + ], + "index": "pypi", + "version": "==0.10.3" + }, + "pep8-naming": { + "hashes": [ + "sha256:4a8daeaeb33cfcde779309fc0c9c0a68a3bbe2ad8a8308b763c5068f86eb9f37", + "sha256:bb2455947757d162aa4cad55dba4ce029005cd1692f2899a21d51d8630ca7841" + ], + "index": "pypi", + "version": "==0.12.1" + }, + "pexpect": { + "hashes": [ + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + ], + "markers": "sys_platform != 'win32'", + "version": "==4.8.0" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "platformdirs": { + "hashes": [ + "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", + "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" + ], + "markers": "python_version >= '3.7'", + "version": "==2.5.2" + }, + "pluggy": { + "hashes": [ + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + ], + "markers": "python_version >= '3.6'", + "version": "==1.0.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752", + "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7" + ], + "markers": "python_full_version >= '3.6.2'", + "version": "==3.0.29" + }, + "ptyprocess": { + "hashes": [ + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" + ], + "version": "==0.7.0" + }, + "pure-eval": { + "hashes": [ + "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", + "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + ], + "version": "==0.2.2" + }, + "py": { + "hashes": [ + "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", + "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.11.0" + }, + "pycodestyle": { + "hashes": [ + "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", + "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.8.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc", + "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4" + ], + "markers": "python_version >= '3.6'", + "version": "==6.1.1" + }, + "pyflakes": { + "hashes": [ + "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c", + "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.4.0" + }, + "pygments": { + "hashes": [ + "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb", + "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519" + ], + "markers": "python_version >= '3.6'", + "version": "==2.12.0" + }, + "pyparsing": { + "hashes": [ + "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", + "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" + ], + "markers": "python_full_version >= '3.6.8'", + "version": "==3.0.9" + }, + "pyrepl": { + "hashes": [ + "sha256:292570f34b5502e871bbb966d639474f2b57fbfcd3373c2d6a2f3d56e681a775" + ], + "version": "==0.9.0" + }, + "pytest": { + "hashes": [ + "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89", + "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" + ], + "index": "pypi", + "version": "==6.2.5" + }, + "setuptools": { + "hashes": [ + "sha256:68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36", + "sha256:a43bdedf853c670e5fed28e5623403bad2f73cf02f9a2774e91def6bda8265a7" + ], + "markers": "python_version >= '3.7'", + "version": "==62.3.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", + "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" + ], + "version": "==2.2.0" + }, + "stack-data": { + "hashes": [ + "sha256:45692d41bd633a9503a5195552df22b583caf16f0b27c4e58c98d88c8b648e12", + "sha256:999762f9c3132308789affa03e9271bbbe947bf78311851f4d485d8402ed858e" + ], + "version": "==0.2.0" + }, + "testfixtures": { + "hashes": [ + "sha256:02dae883f567f5b70fd3ad3c9eefb95912e78ac90be6c7444b5e2f46bf572c84", + "sha256:7de200e24f50a4a5d6da7019fb1197aaf5abd475efb2ec2422fdcf2f2eb98c1d" + ], + "version": "==6.18.5" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + }, + "tomli": { + "hashes": [ + "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f", + "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c" + ], + "markers": "python_version >= '3.6'", + "version": "==1.2.3" + }, + "traitlets": { + "hashes": [ + "sha256:70815ecb20ec619d1af28910ade523383be13754283aef90528eb3d47b77c5db", + "sha256:f44b708d33d98b0addb40c29d148a761f44af740603a8fd0e2f8b5b27cf0f087" + ], + "markers": "python_version >= '3.7'", + "version": "==5.2.1.post0" + }, + "typing-extensions": { + "hashes": [ + "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708", + "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376" + ], + "markers": "python_version >= '3.7'", + "version": "==4.2.0" + }, + "wcwidth": { + "hashes": [ + "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", + "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" + ], + "version": "==0.2.5" + }, + "werkzeug": { + "hashes": [ + "sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f", + "sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a" + ], + "index": "pypi", + "version": "==2.0.2" + }, + "wmctrl": { + "hashes": [ + "sha256:66cbff72b0ca06a22ec3883ac3a4d7c41078bdae4fb7310f52951769b10e14e0" + ], + "version": "==0.4" + }, + "zipp": { + "hashes": [ + "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", + "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" + ], + "markers": "python_version >= '3.7'", + "version": "==3.8.0" } + } } diff --git a/kratos-keto-flask/app/__init__.py b/kratos-keto-flask/app/__init__.py index 461d0722..0d90a00c 100644 --- a/kratos-keto-flask/app/__init__.py +++ b/kratos-keto-flask/app/__init__.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """Main application package.""" diff --git a/kratos-keto-flask/app/app.py b/kratos-keto-flask/app/app.py index 0cd27f04..c874f242 100644 --- a/kratos-keto-flask/app/app.py +++ b/kratos-keto-flask/app/app.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/app/auth/__init__.py b/kratos-keto-flask/app/auth/__init__.py index 06020781..2aae01db 100644 --- a/kratos-keto-flask/app/auth/__init__.py +++ b/kratos-keto-flask/app/auth/__init__.py @@ -1,3 +1,3 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 diff --git a/kratos-keto-flask/app/commands.py b/kratos-keto-flask/app/commands.py index 89430921..9bf6978e 100644 --- a/kratos-keto-flask/app/commands.py +++ b/kratos-keto-flask/app/commands.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/app/compat.py b/kratos-keto-flask/app/compat.py index 8c831dab..cdc1a0fd 100644 --- a/kratos-keto-flask/app/compat.py +++ b/kratos-keto-flask/app/compat.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/app/extensions.py b/kratos-keto-flask/app/extensions.py index 298c4f7e..ec0b0cdd 100644 --- a/kratos-keto-flask/app/extensions.py +++ b/kratos-keto-flask/app/extensions.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/app/public/__init__.py b/kratos-keto-flask/app/public/__init__.py index 47edcec7..31fc9f34 100644 --- a/kratos-keto-flask/app/public/__init__.py +++ b/kratos-keto-flask/app/public/__init__.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/app/public/views.py b/kratos-keto-flask/app/public/views.py index 131c7e16..f858bb05 100644 --- a/kratos-keto-flask/app/public/views.py +++ b/kratos-keto-flask/app/public/views.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/app/templates/public/home.html b/kratos-keto-flask/app/templates/public/home.html index 6d26156d..048bdcd0 100644 --- a/kratos-keto-flask/app/templates/public/home.html +++ b/kratos-keto-flask/app/templates/public/home.html @@ -1,4 +1,4 @@ - + diff --git a/kratos-keto-flask/autoapp.py b/kratos-keto-flask/autoapp.py index 7de96359..5aabf96d 100755 --- a/kratos-keto-flask/autoapp.py +++ b/kratos-keto-flask/autoapp.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/config/__init__.py b/kratos-keto-flask/config/__init__.py index e63b7db7..7c45f182 100644 --- a/kratos-keto-flask/config/__init__.py +++ b/kratos-keto-flask/config/__init__.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """Configuration package. diff --git a/kratos-keto-flask/config/settings.py b/kratos-keto-flask/config/settings.py index 825d6822..259b86a9 100644 --- a/kratos-keto-flask/config/settings.py +++ b/kratos-keto-flask/config/settings.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """Application configuration. diff --git a/kratos-keto-flask/tests/__init__.py b/kratos-keto-flask/tests/__init__.py index e5470436..a5cfc66e 100644 --- a/kratos-keto-flask/tests/__init__.py +++ b/kratos-keto-flask/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """Tests for the app.""" diff --git a/kratos-keto-flask/tests/conftest.py b/kratos-keto-flask/tests/conftest.py index e70777ad..c5235a9b 100644 --- a/kratos-keto-flask/tests/conftest.py +++ b/kratos-keto-flask/tests/conftest.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/tests/factories.py b/kratos-keto-flask/tests/factories.py index e93be8e3..6f7c5df0 100644 --- a/kratos-keto-flask/tests/factories.py +++ b/kratos-keto-flask/tests/factories.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/tests/settings.py b/kratos-keto-flask/tests/settings.py index e7359efb..f9ec6c9e 100644 --- a/kratos-keto-flask/tests/settings.py +++ b/kratos-keto-flask/tests/settings.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 """Settings module for test app.""" diff --git a/kratos-keto-flask/tests/test_database.py b/kratos-keto-flask/tests/test_database.py index a1d23227..4472214f 100644 --- a/kratos-keto-flask/tests/test_database.py +++ b/kratos-keto-flask/tests/test_database.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/tests/test_forms.py b/kratos-keto-flask/tests/test_forms.py index 6e6a4c30..097d29d0 100644 --- a/kratos-keto-flask/tests/test_forms.py +++ b/kratos-keto-flask/tests/test_forms.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/tests/test_functional.py b/kratos-keto-flask/tests/test_functional.py index ca6f9b26..ee2502eb 100644 --- a/kratos-keto-flask/tests/test_functional.py +++ b/kratos-keto-flask/tests/test_functional.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-keto-flask/tests/test_models.py b/kratos-keto-flask/tests/test_models.py index e332d1b3..cde8fc30 100644 --- a/kratos-keto-flask/tests/test_models.py +++ b/kratos-keto-flask/tests/test_models.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Ory Corp +# Copyright © 2025 Ory Corp # SPDX-License-Identifier: Apache-2.0 # -*- coding: utf-8 -*- diff --git a/kratos-oathkeeper-kong/README.md b/kratos-oathkeeper-kong/README.md index 4cab659c..12eff489 100644 --- a/kratos-oathkeeper-kong/README.md +++ b/kratos-oathkeeper-kong/README.md @@ -21,7 +21,7 @@ Request Flow: User -> Kong -> Ory Oathkeeper -> Ory Kratos -> Go API -![Architecture using Oathkeeper, Kratos, and Kong](../_assets/img/kong.png) +![Architecture using Oathkeeper, Kratos, and Kong](./kong.png) Ory Oathkeeper checks the incoming request for presence of `ory_kratos_session` and does the following steps: diff --git a/kratos-oathkeeper-kong/hello/main.go b/kratos-oathkeeper-kong/hello/main.go index fc15499d..170e1a8e 100644 --- a/kratos-oathkeeper-kong/hello/main.go +++ b/kratos-oathkeeper-kong/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/kratos-oathkeeper-kong/kong.png b/kratos-oathkeeper-kong/kong.png new file mode 100644 index 0000000000000000000000000000000000000000..da54a239397850db6e73905ee4b80cd3c84f2b93 GIT binary patch literal 42970 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 Nyo~buDruwO{{_*dRxAJj literal 0 HcmV?d00001 diff --git a/kratos-oathkeeper-kong/world/main.go b/kratos-oathkeeper-kong/world/main.go index 924a084b..4494dd9f 100644 --- a/kratos-oathkeeper-kong/world/main.go +++ b/kratos-oathkeeper-kong/world/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/01-basic/hello/main.go b/oathkeeper/01-basic/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/01-basic/hello/main.go +++ b/oathkeeper/01-basic/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/02-authenticators/hello/main.go b/oathkeeper/02-authenticators/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/02-authenticators/hello/main.go +++ b/oathkeeper/02-authenticators/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/03-header-mutator/hello/main.go b/oathkeeper/03-header-mutator/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/03-header-mutator/hello/main.go +++ b/oathkeeper/03-header-mutator/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/04-hydrator-mutator/hello/main.go b/oathkeeper/04-hydrator-mutator/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/04-hydrator-mutator/hello/main.go +++ b/oathkeeper/04-hydrator-mutator/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/04-hydrator-mutator/hydrator/main.go b/oathkeeper/04-hydrator-mutator/hydrator/main.go index 3f782cde..fb45793e 100644 --- a/oathkeeper/04-hydrator-mutator/hydrator/main.go +++ b/oathkeeper/04-hydrator-mutator/hydrator/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/05-nginx-oathkeeper/hello/main.go b/oathkeeper/05-nginx-oathkeeper/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/05-nginx-oathkeeper/hello/main.go +++ b/oathkeeper/05-nginx-oathkeeper/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/06-nginx-hydrator/hello/main.go b/oathkeeper/06-nginx-hydrator/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/06-nginx-hydrator/hello/main.go +++ b/oathkeeper/06-nginx-hydrator/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/06-nginx-hydrator/hydrator/main.go b/oathkeeper/06-nginx-hydrator/hydrator/main.go index 3f782cde..fb45793e 100644 --- a/oathkeeper/06-nginx-hydrator/hydrator/main.go +++ b/oathkeeper/06-nginx-hydrator/hydrator/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/07-traefik-decision/hello/main.go b/oathkeeper/07-traefik-decision/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/07-traefik-decision/hello/main.go +++ b/oathkeeper/07-traefik-decision/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/08-envoy-header/hello/main.go b/oathkeeper/08-envoy-header/hello/main.go index 17a4e5ea..33bdbe74 100644 --- a/oathkeeper/08-envoy-header/hello/main.go +++ b/oathkeeper/08-envoy-header/hello/main.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Ory Corp +// Copyright © 2025 Ory Corp // SPDX-License-Identifier: Apache-2.0 package main diff --git a/oathkeeper/09-oathkeeper-websockets/ws/index.html b/oathkeeper/09-oathkeeper-websockets/ws/index.html index 14a48944..e02520b8 100644 --- a/oathkeeper/09-oathkeeper-websockets/ws/index.html +++ b/oathkeeper/09-oathkeeper-websockets/ws/index.html @@ -8,24 +8,24 @@

WebSocket Go


 
     
   
 
diff --git a/oathkeeper/09-oathkeeper-websockets/ws/main.go b/oathkeeper/09-oathkeeper-websockets/ws/main.go
index d20ef47c..34be424d 100644
--- a/oathkeeper/09-oathkeeper-websockets/ws/main.go
+++ b/oathkeeper/09-oathkeeper-websockets/ws/main.go
@@ -1,4 +1,4 @@
-// Copyright © 2023 Ory Corp
+// Copyright © 2025 Ory Corp
 // SPDX-License-Identifier: Apache-2.0
 
 package main
diff --git a/oathkeeper/10-network/hello/main.go b/oathkeeper/10-network/hello/main.go
index 17a4e5ea..33bdbe74 100644
--- a/oathkeeper/10-network/hello/main.go
+++ b/oathkeeper/10-network/hello/main.go
@@ -1,4 +1,4 @@
-// Copyright © 2023 Ory Corp
+// Copyright © 2025 Ory Corp
 // SPDX-License-Identifier: Apache-2.0
 
 package main
diff --git a/oathkeeper/10-network/hydrator/main.go b/oathkeeper/10-network/hydrator/main.go
index eba46b29..962def77 100644
--- a/oathkeeper/10-network/hydrator/main.go
+++ b/oathkeeper/10-network/hydrator/main.go
@@ -1,4 +1,4 @@
-// Copyright © 2023 Ory Corp
+// Copyright © 2025 Ory Corp
 // SPDX-License-Identifier: Apache-2.0
 
 package main
diff --git a/oathkeeper/11-kratos-keto/hello/main.go b/oathkeeper/11-kratos-keto/hello/main.go
index 92c31c48..0f1ad2d0 100644
--- a/oathkeeper/11-kratos-keto/hello/main.go
+++ b/oathkeeper/11-kratos-keto/hello/main.go
@@ -1,4 +1,4 @@
-// Copyright © 2023 Ory Corp
+// Copyright © 2025 Ory Corp
 // SPDX-License-Identifier: Apache-2.0
 
 package main
diff --git a/oathkeeper/12-multiple-authenticators/hello/main.go b/oathkeeper/12-multiple-authenticators/hello/main.go
index 17a4e5ea..33bdbe74 100644
--- a/oathkeeper/12-multiple-authenticators/hello/main.go
+++ b/oathkeeper/12-multiple-authenticators/hello/main.go
@@ -1,4 +1,4 @@
-// Copyright © 2023 Ory Corp
+// Copyright © 2025 Ory Corp
 // SPDX-License-Identifier: Apache-2.0
 
 package main
diff --git a/ory-actions/vpncheck-py/focsec.py b/ory-actions/vpncheck-py/focsec.py
index 744b66d8..a9855a78 100644
--- a/ory-actions/vpncheck-py/focsec.py
+++ b/ory-actions/vpncheck-py/focsec.py
@@ -1,4 +1,4 @@
-# Copyright © 2023 Ory Corp
+# Copyright © 2025 Ory Corp
 # SPDX-License-Identifier: Apache-2.0
 
 from flask import Flask, request, jsonify
diff --git a/ory-actions/vpncheck-py/ipqs.py b/ory-actions/vpncheck-py/ipqs.py
index c5ad96b3..1d88f7de 100644
--- a/ory-actions/vpncheck-py/ipqs.py
+++ b/ory-actions/vpncheck-py/ipqs.py
@@ -1,4 +1,4 @@
-# Copyright © 2023 Ory Corp
+# Copyright © 2025 Ory Corp
 # SPDX-License-Identifier: Apache-2.0
 
 from flask import Flask, request, jsonify
diff --git a/ory-actions/vpncheck-py/vpnapi.py b/ory-actions/vpncheck-py/vpnapi.py
index 5aff0b99..7dbf270c 100644
--- a/ory-actions/vpncheck-py/vpnapi.py
+++ b/ory-actions/vpncheck-py/vpnapi.py
@@ -1,4 +1,4 @@
-# Copyright © 2023 Ory Corp
+# Copyright © 2025 Ory Corp
 # SPDX-License-Identifier: Apache-2.0
 
 from flask import Flask, request, jsonify
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..57fb3140
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,30 @@
+{
+  "name": "awesome-ory",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "awesome-ory",
+      "version": "1.0.0",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "prettier": "^3.5.1"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz",
+      "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==",
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..240c673f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,14 @@
+{
+  "name": "awesome-ory",
+  "version": "1.0.0",
+  "description": "An awesome list of the Ory ecosystem.",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "ory",
+  "license": "Apache-2.0",
+  "dependencies": {
+    "prettier": "^3.5.1"
+  }
+}