From 2a038cdc214357f6aae249f7119799fed6f062d7 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Tue, 7 Jan 2025 21:16:31 -0500 Subject: [PATCH 01/92] Improved assrt release name matching by ignoring meaningless values. #2761 --- .../subliminal_patch/providers/assrt.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/custom_libs/subliminal_patch/providers/assrt.py b/custom_libs/subliminal_patch/providers/assrt.py index a30265a44..099d1e14f 100644 --- a/custom_libs/subliminal_patch/providers/assrt.py +++ b/custom_libs/subliminal_patch/providers/assrt.py @@ -24,6 +24,8 @@ language_converters.register('assrt = subliminal_patch.converters.assrt:AssrtCon server_url = 'https://api.assrt.net/v1' supported_languages = list(language_converters['assrt'].to_assrt.keys()) +meaningless_videoname = ['不知道'] + def get_request_delay(max_request_per_minute): return ceil(60 / max_request_per_minute) @@ -203,8 +205,21 @@ class AssrtProvider(Provider): language = Language.fromassrt(match.group('code')) output_language = search_language_in_list(language, languages) if output_language: - subtitles.append(AssrtSubtitle(output_language, sub['id'], sub['videoname'], self.session, - self.token, self.max_request_per_minute)) + if sub['videoname'] not in meaningless_videoname: + video_name = sub['videoname'] + elif 'native_name' in sub and isinstance(sub['native_name'], str): + video_name = sub['native_name'] + elif ('native_name' in sub and isinstance(sub['native_name'], list) and + len(sub['native_name']) > 0): + video_name = sub['native_name'][0] + else: + video_name = None + subtitles.append(AssrtSubtitle(language=output_language, + subtitle_id=sub['id'], + video_name=video_name, + session=self.session, + token=self.token, + max_request_per_minute=self.max_request_per_minute)) except: pass From 6a791b2be065521c7437be9313d4232f2b8ec7a6 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Wed, 8 Jan 2025 09:59:27 -0500 Subject: [PATCH 02/92] Added TooManyRequests throttling to podnapisi provider. --- custom_libs/subliminal_patch/providers/podnapisi.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/custom_libs/subliminal_patch/providers/podnapisi.py b/custom_libs/subliminal_patch/providers/podnapisi.py index 5785570e1..c4ec284c0 100644 --- a/custom_libs/subliminal_patch/providers/podnapisi.py +++ b/custom_libs/subliminal_patch/providers/podnapisi.py @@ -17,6 +17,8 @@ from requests.adapters import HTTPAdapter from subliminal.utils import sanitize from subliminal_patch.subtitle import guess_matches from subliminal_patch.providers.mixins import ProviderSubtitleArchiveMixin +from subliminal_patch.exceptions import TooManyRequests + try: from lxml import etree @@ -205,6 +207,8 @@ class PodnapisiProvider(_PodnapisiProvider, ProviderSubtitleArchiveMixin): content = self.session.get(self.server_url + 'search/old', params=params, timeout=30).content xml = etree.fromstring(content) except etree.ParseError: + if '429 Too Many Requests' in content: + raise TooManyRequests logger.error("Wrong data returned: %r", content) break From f146d975d3501f619975266e2f42a2884ac4c877 Mon Sep 17 00:00:00 2001 From: Jack <5182053+phyzical@users.noreply.github.com> Date: Fri, 10 Jan 2025 08:33:02 +0800 Subject: [PATCH 03/92] Added mass delete subtitle files (#2816) --- .../components/modals/SubtitleToolsModal.tsx | 96 +++++++++++++++++-- 1 file changed, 89 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/modals/SubtitleToolsModal.tsx b/frontend/src/components/modals/SubtitleToolsModal.tsx index dca20d159..06d1e7869 100644 --- a/frontend/src/components/modals/SubtitleToolsModal.tsx +++ b/frontend/src/components/modals/SubtitleToolsModal.tsx @@ -9,23 +9,51 @@ import { Text, } from "@mantine/core"; import { ColumnDef } from "@tanstack/react-table"; +import { + useEpisodeSubtitleModification, + useMovieSubtitleModification, +} from "@/apis/hooks"; import Language from "@/components/bazarr/Language"; import SubtitleToolsMenu from "@/components/SubtitleToolsMenu"; import SimpleTable from "@/components/tables/SimpleTable"; -import { withModal } from "@/modules/modals"; -import { isMovie } from "@/utilities"; +import { useModals, withModal } from "@/modules/modals"; +import { task, TaskGroup } from "@/modules/task"; +import { fromPython, isMovie, toPython } from "@/utilities"; type SupportType = Item.Episode | Item.Movie; type TableColumnType = FormType.ModifySubtitle & { raw_language: Language.Info; + seriesId: number; + name: string; + isMovie: boolean; }; -function getIdAndType(item: SupportType): [number, "episode" | "movie"] { +type LocalisedType = { + id: number; + seriesId: number; + type: "movie" | "episode"; + name: string; + isMovie: boolean; +}; + +function getLocalisedValues(item: SupportType): LocalisedType { if (isMovie(item)) { - return [item.radarrId, "movie"]; + return { + seriesId: 0, + id: item.radarrId, + type: "movie", + name: item.title, + isMovie: true, + }; } else { - return [item.sonarrEpisodeId, "episode"]; + return { + seriesId: item.sonarrSeriesId, + id: item.sonarrEpisodeId, + type: "episode", + name: item.title, + isMovie: false, + }; } } @@ -41,6 +69,11 @@ const SubtitleToolView: FunctionComponent = ({ payload, }) => { const [selections, setSelections] = useState([]); + const { remove: removeEpisode, download: downloadEpisode } = + useEpisodeSubtitleModification(); + const { download: downloadMovie, remove: removeMovie } = + useMovieSubtitleModification(); + const modals = useModals(); const columns = useMemo[]>( () => [ @@ -109,17 +142,22 @@ const SubtitleToolView: FunctionComponent = ({ const data = useMemo( () => payload.flatMap((item) => { - const [id, type] = getIdAndType(item); + const { seriesId, id, type, name, isMovie } = getLocalisedValues(item); return item.subtitles.flatMap((v) => { if (v.path) { return [ { id, + seriesId, type, language: v.code2, path: v.path, // eslint-disable-next-line camelcase raw_language: v, + name, + hi: toPython(v.forced), + forced: toPython(v.hi), + isMovie, }, ]; } else { @@ -143,7 +181,51 @@ const SubtitleToolView: FunctionComponent = ({ > - + { + selections.forEach((selection) => { + const actionPayload = { + form: { + language: selection.language, + hi: fromPython(selection.hi), + forced: fromPython(selection.forced), + path: selection.path, + }, + radarrId: 0, + seriesId: 0, + episodeId: 0, + }; + if (selection.isMovie) { + actionPayload.radarrId = selection.id; + } else { + actionPayload.seriesId = selection.seriesId; + actionPayload.episodeId = selection.id; + } + const download = selection.isMovie + ? downloadMovie + : downloadEpisode; + const remove = selection.isMovie ? removeMovie : removeEpisode; + + if (action === "search") { + task.create( + selection.name, + TaskGroup.SearchSubtitle, + download.mutateAsync, + actionPayload, + ); + } else if (action === "delete" && selection.path) { + task.create( + selection.name, + TaskGroup.DeleteSubtitle, + remove.mutateAsync, + actionPayload, + ); + } + }); + modals.closeAll(); + }} + > From 9ac6c69a4f4ee85f36a805c6bc65cd6d6de457dd Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Sat, 11 Jan 2025 09:13:46 -0500 Subject: [PATCH 04/92] Removed opensubtitles.org deprecation announcement for VIP users. --- bazarr/app/announcements.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bazarr/app/announcements.py b/bazarr/app/announcements.py index 71a9c9906..aa0261aab 100644 --- a/bazarr/app/announcements.py +++ b/bazarr/app/announcements.py @@ -12,7 +12,9 @@ from operator import itemgetter from app.get_providers import get_enabled_providers from app.database import TableAnnouncements, database, insert, select -from .get_args import args + +from app.config import settings +from app.get_args import args from sonarr.info import get_sonarr_info from radarr.info import get_radarr_info from app.check_update import deprecated_python_version @@ -79,10 +81,10 @@ def get_local_announcements(): # opensubtitles.org end-of-life enabled_providers = get_enabled_providers() - if enabled_providers and 'opensubtitles' in enabled_providers: + if enabled_providers and 'opensubtitles' in enabled_providers and not settings.opensubtitles.vip: announcements.append({ - 'text': 'Opensubtitles.org will be deprecated soon, migrate to Opensubtitles.com ASAP and disable this ' - 'provider to remove this announcement.', + 'text': 'Opensubtitles.org is deprecated for non-VIP users, migrate to Opensubtitles.com ASAP and disable ' + 'this provider to remove this announcement.', 'link': 'https://wiki.bazarr.media/Troubleshooting/OpenSubtitles-migration/', 'dismissible': False, 'timestamp': 1676236978, From e9c6e1f9c4d6c46744e1baead08bfeb974403f5f Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Sat, 11 Jan 2025 09:27:25 -0500 Subject: [PATCH 05/92] no log: removed some unused code during sync process with Sonarr and Radarr --- bazarr/radarr/sync/movies.py | 4 ---- bazarr/sonarr/sync/episodes.py | 6 +----- bazarr/subtitles/indexer/series.py | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/bazarr/radarr/sync/movies.py b/bazarr/radarr/sync/movies.py index 72d18f511..dca35c060 100644 --- a/bazarr/radarr/sync/movies.py +++ b/bazarr/radarr/sync/movies.py @@ -333,10 +333,6 @@ def update_one_movie(movie_id, action, defer_search=False): logging.debug( f'BAZARR inserted this movie into the database:{path_mappings.path_replace_movie(movie["path"])}') - # Storing existing subtitles - logging.debug(f'BAZARR storing subtitles for this movie: {path_mappings.path_replace_movie(movie["path"])}') - store_subtitles_movie(movie['path'], path_mappings.path_replace_movie(movie['path'])) - # Downloading missing subtitles if defer_search: logging.debug( diff --git a/bazarr/sonarr/sync/episodes.py b/bazarr/sonarr/sync/episodes.py index e2623ce71..83e68c6c8 100644 --- a/bazarr/sonarr/sync/episodes.py +++ b/bazarr/sonarr/sync/episodes.py @@ -258,10 +258,6 @@ def sync_one_episode(episode_id, defer_search=False): logging.debug( f'BAZARR inserted this episode into the database:{path_mappings.path_replace(episode["path"])}') - # Storing existing subtitles - logging.debug(f'BAZARR storing subtitles for this episode: {path_mappings.path_replace(episode["path"])}') - store_subtitles(episode['path'], path_mappings.path_replace(episode['path'])) - # Downloading missing subtitles if defer_search: logging.debug( @@ -270,4 +266,4 @@ def sync_one_episode(episode_id, defer_search=False): else: logging.debug( f'BAZARR downloading missing subtitles for this episode: {path_mappings.path_replace(episode["path"])}') - episode_download_subtitles(episode_id) + episode_download_subtitles(episode_id, send_progress=True) diff --git a/bazarr/subtitles/indexer/series.py b/bazarr/subtitles/indexer/series.py index 1d1d98ef8..9c86378ae 100644 --- a/bazarr/subtitles/indexer/series.py +++ b/bazarr/subtitles/indexer/series.py @@ -132,7 +132,7 @@ def store_subtitles(original_path, reversed_path, use_cache=True): .values(subtitles=str(actual_subtitles)) .where(TableEpisodes.path == original_path)) matching_episodes = database.execute( - select(TableEpisodes.sonarrEpisodeId, TableEpisodes.sonarrSeriesId) + select(TableEpisodes.sonarrEpisodeId) .where(TableEpisodes.path == original_path))\ .all() From ac6b89eb16d5bf1d4e1ed174b68e321d0e2a7fff Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Tue, 14 Jan 2025 09:51:03 +0900 Subject: [PATCH 06/92] no log: Bumped node version to latest LTS v22.13.0 (#2822) --- frontend/.nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/.nvmrc b/frontend/.nvmrc index 973f49d55..6fa8dec4c 100644 --- a/frontend/.nvmrc +++ b/frontend/.nvmrc @@ -1 +1 @@ -20.13 +22.13.0 From c7195db71527648285f173808cc9fa4020eea8e6 Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Tue, 14 Jan 2025 09:51:54 +0900 Subject: [PATCH 07/92] no log: Bump nanoid to fix security vulnerabilities --- frontend/package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 844959798..f4fbb01b5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8161,9 +8161,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -8171,6 +8171,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, From 9fc77524b2e09300b0cc1269b0dea9ef34bf4653 Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Tue, 14 Jan 2025 11:43:17 +0900 Subject: [PATCH 08/92] no log: Updated react router to v7 (#2823) --- frontend/config/chunks.ts | 2 +- frontend/package-lock.json | 73 +++++++++++-------- frontend/package.json | 2 +- frontend/src/App/Navbar.tsx | 2 +- frontend/src/App/index.tsx | 2 +- frontend/src/Router/Redirector.tsx | 2 +- frontend/src/Router/index.tsx | 7 +- frontend/src/Router/type.d.ts | 2 +- frontend/src/components/Search.tsx | 2 +- frontend/src/pages/Blacklist/Movies/table.tsx | 2 +- frontend/src/pages/Blacklist/Series/table.tsx | 2 +- frontend/src/pages/Episodes/index.tsx | 2 +- frontend/src/pages/History/Movies/index.tsx | 2 +- frontend/src/pages/History/Series/index.tsx | 2 +- frontend/src/pages/Movies/Details/index.tsx | 2 +- frontend/src/pages/Movies/index.tsx | 2 +- frontend/src/pages/Series/index.tsx | 2 +- frontend/src/pages/Wanted/Movies/index.tsx | 2 +- frontend/src/pages/Wanted/Series/index.tsx | 2 +- frontend/src/pages/views/ItemView.tsx | 2 +- frontend/src/pages/views/MassEditor.tsx | 2 +- frontend/src/tests/index.tsx | 6 +- frontend/src/utilities/hooks.ts | 2 +- frontend/src/utilities/routers.ts | 2 +- 24 files changed, 70 insertions(+), 58 deletions(-) diff --git a/frontend/config/chunks.ts b/frontend/config/chunks.ts index 6dc7f3772..114a1c2c5 100644 --- a/frontend/config/chunks.ts +++ b/frontend/config/chunks.ts @@ -3,7 +3,7 @@ import { dependencies } from "../package.json"; const vendors = [ "react", - "react-router-dom", + "react-router", "react-dom", "@tanstack/react-query", "axios", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f4fbb01b5..55cfe0f4b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,7 +21,7 @@ "braces": "^3.0.3", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^6.23.1", + "react-router": "^7.1.1", "socket.io-client": "^4.7.5" }, "devDependencies": { @@ -2776,14 +2776,6 @@ "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, - "node_modules/@remix-run/router": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", - "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", @@ -3370,6 +3362,12 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", @@ -5279,6 +5277,15 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -9022,33 +9029,27 @@ } }, "node_modules/react-router": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", - "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.1.tgz", + "integrity": "sha512-39sXJkftkKWRZ2oJtHhCxmoCrBCULr/HAH4IT5DHlgu/Q0FCPV0S4Lx+abjDTx/74xoZzNYDYbOZWlJjruyuDQ==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.16.1" + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", - "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", - "dependencies": { - "@remix-run/router": "1.16.1", - "react-router": "6.23.1" + "react": ">=18", + "react-dom": ">=18" }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, "node_modules/react-smooth": { @@ -9529,6 +9530,12 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -10405,6 +10412,12 @@ "node": "*" } }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1e4fa0002..cee38c33a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,7 +25,7 @@ "braces": "^3.0.3", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^6.23.1", + "react-router": "^7.1.1", "socket.io-client": "^4.7.5" }, "devDependencies": { diff --git a/frontend/src/App/Navbar.tsx b/frontend/src/App/Navbar.tsx index 679a0e3e7..4f8da0f92 100644 --- a/frontend/src/App/Navbar.tsx +++ b/frontend/src/App/Navbar.tsx @@ -6,7 +6,7 @@ import React, { useMemo, useState, } from "react"; -import { matchPath, NavLink, RouteObject, useLocation } from "react-router-dom"; +import { matchPath, NavLink, RouteObject, useLocation } from "react-router"; import { Anchor, AppShell, diff --git a/frontend/src/App/index.tsx b/frontend/src/App/index.tsx index a8ef9f3fb..00b6741fa 100644 --- a/frontend/src/App/index.tsx +++ b/frontend/src/App/index.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useEffect, useState } from "react"; -import { Outlet, useNavigate } from "react-router-dom"; +import { Outlet, useNavigate } from "react-router"; import { AppShell } from "@mantine/core"; import { useWindowEvent } from "@mantine/hooks"; import { showNotification } from "@mantine/notifications"; diff --git a/frontend/src/Router/Redirector.tsx b/frontend/src/Router/Redirector.tsx index 07878c9db..f9b2a00e6 100644 --- a/frontend/src/Router/Redirector.tsx +++ b/frontend/src/Router/Redirector.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useEffect } from "react"; -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import { LoadingOverlay } from "@mantine/core"; import { useSystemSettings } from "@/apis/hooks"; diff --git a/frontend/src/Router/index.tsx b/frontend/src/Router/index.tsx index 8ccea87f9..6b2b0bb82 100644 --- a/frontend/src/Router/index.tsx +++ b/frontend/src/Router/index.tsx @@ -5,7 +5,7 @@ import { useContext, useMemo, } from "react"; -import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import { createBrowserRouter, RouterProvider } from "react-router"; import { faClock, faCogs, @@ -324,7 +324,10 @@ export const Router: FunctionComponent = () => { // TODO: Move this outside the function component scope const router = useMemo( - () => createBrowserRouter(routes, { basename: Environment.baseUrl }), + () => + createBrowserRouter(routes, { + basename: Environment.baseUrl, + }), [routes], ); diff --git a/frontend/src/Router/type.d.ts b/frontend/src/Router/type.d.ts index f1cfdaae7..91b820736 100644 --- a/frontend/src/Router/type.d.ts +++ b/frontend/src/Router/type.d.ts @@ -1,4 +1,4 @@ -import { RouteObject } from "react-router-dom"; +import { RouteObject } from "react-router"; import { IconDefinition } from "@fortawesome/free-solid-svg-icons"; declare namespace Route { diff --git a/frontend/src/components/Search.tsx b/frontend/src/components/Search.tsx index d1c559be5..adcc3d065 100644 --- a/frontend/src/components/Search.tsx +++ b/frontend/src/components/Search.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo, useState } from "react"; -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import { ComboboxItem, em, diff --git a/frontend/src/pages/Blacklist/Movies/table.tsx b/frontend/src/pages/Blacklist/Movies/table.tsx index 00730a850..dd678a14a 100644 --- a/frontend/src/pages/Blacklist/Movies/table.tsx +++ b/frontend/src/pages/Blacklist/Movies/table.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Text } from "@mantine/core"; import { faTrash } from "@fortawesome/free-solid-svg-icons"; import { ColumnDef } from "@tanstack/react-table"; diff --git a/frontend/src/pages/Blacklist/Series/table.tsx b/frontend/src/pages/Blacklist/Series/table.tsx index 3d67e637d..ca0656f19 100644 --- a/frontend/src/pages/Blacklist/Series/table.tsx +++ b/frontend/src/pages/Blacklist/Series/table.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Text } from "@mantine/core"; import { faTrash } from "@fortawesome/free-solid-svg-icons"; import { ColumnDef } from "@tanstack/react-table"; diff --git a/frontend/src/pages/Episodes/index.tsx b/frontend/src/pages/Episodes/index.tsx index 017a8a15e..0269f58f7 100644 --- a/frontend/src/pages/Episodes/index.tsx +++ b/frontend/src/pages/Episodes/index.tsx @@ -5,7 +5,7 @@ import { useRef, useState, } from "react"; -import { Navigate, useParams } from "react-router-dom"; +import { Navigate, useParams } from "react-router"; import { Container, Group, Stack } from "@mantine/core"; import { Dropzone } from "@mantine/dropzone"; import { useDocumentTitle } from "@mantine/hooks"; diff --git a/frontend/src/pages/History/Movies/index.tsx b/frontend/src/pages/History/Movies/index.tsx index d8aa859d2..ed68854e2 100644 --- a/frontend/src/pages/History/Movies/index.tsx +++ b/frontend/src/pages/History/Movies/index.tsx @@ -1,6 +1,6 @@ /* eslint-disable camelcase */ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Badge, Text } from "@mantine/core"; import { faFileExcel, diff --git a/frontend/src/pages/History/Series/index.tsx b/frontend/src/pages/History/Series/index.tsx index b2e162ecd..dd3cc4743 100644 --- a/frontend/src/pages/History/Series/index.tsx +++ b/frontend/src/pages/History/Series/index.tsx @@ -1,6 +1,6 @@ /* eslint-disable camelcase */ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Badge, Text } from "@mantine/core"; import { faFileExcel, diff --git a/frontend/src/pages/Movies/Details/index.tsx b/frontend/src/pages/Movies/Details/index.tsx index 9bd56c660..039478700 100644 --- a/frontend/src/pages/Movies/Details/index.tsx +++ b/frontend/src/pages/Movies/Details/index.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useCallback, useRef } from "react"; -import { Navigate, useParams } from "react-router-dom"; +import { Navigate, useParams } from "react-router"; import { Container, Group, Menu, Stack } from "@mantine/core"; import { Dropzone } from "@mantine/dropzone"; import { useDocumentTitle } from "@mantine/hooks"; diff --git a/frontend/src/pages/Movies/index.tsx b/frontend/src/pages/Movies/index.tsx index ef5a1ec0d..8e6eef600 100644 --- a/frontend/src/pages/Movies/index.tsx +++ b/frontend/src/pages/Movies/index.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Badge, Container } from "@mantine/core"; import { useDocumentTitle } from "@mantine/hooks"; import { faBookmark as farBookmark } from "@fortawesome/free-regular-svg-icons"; diff --git a/frontend/src/pages/Series/index.tsx b/frontend/src/pages/Series/index.tsx index 6da300c3a..d965c7b99 100644 --- a/frontend/src/pages/Series/index.tsx +++ b/frontend/src/pages/Series/index.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Container, Group, Progress } from "@mantine/core"; import { useDocumentTitle } from "@mantine/hooks"; import { faBookmark as farBookmark } from "@fortawesome/free-regular-svg-icons"; diff --git a/frontend/src/pages/Wanted/Movies/index.tsx b/frontend/src/pages/Wanted/Movies/index.tsx index c05cfb7c3..e3beb04fd 100644 --- a/frontend/src/pages/Wanted/Movies/index.tsx +++ b/frontend/src/pages/Wanted/Movies/index.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Badge, Group } from "@mantine/core"; import { faSearch } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; diff --git a/frontend/src/pages/Wanted/Series/index.tsx b/frontend/src/pages/Wanted/Series/index.tsx index 0501ecef5..f3b6bddf8 100644 --- a/frontend/src/pages/Wanted/Series/index.tsx +++ b/frontend/src/pages/Wanted/Series/index.tsx @@ -1,5 +1,5 @@ import { FunctionComponent, useMemo } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { Anchor, Badge, Group } from "@mantine/core"; import { faSearch } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; diff --git a/frontend/src/pages/views/ItemView.tsx b/frontend/src/pages/views/ItemView.tsx index c4ff250ea..2da85d181 100644 --- a/frontend/src/pages/views/ItemView.tsx +++ b/frontend/src/pages/views/ItemView.tsx @@ -1,4 +1,4 @@ -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import { faList } from "@fortawesome/free-solid-svg-icons"; import { ColumnDef } from "@tanstack/react-table"; import { UsePaginationQueryResult } from "@/apis/queries/hooks"; diff --git a/frontend/src/pages/views/MassEditor.tsx b/frontend/src/pages/views/MassEditor.tsx index 48068d1c6..eac9dcb94 100644 --- a/frontend/src/pages/views/MassEditor.tsx +++ b/frontend/src/pages/views/MassEditor.tsx @@ -1,5 +1,5 @@ import { useCallback, useMemo, useRef, useState } from "react"; -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import { Box, Container, useCombobox } from "@mantine/core"; import { faCheck, faUndo } from "@fortawesome/free-solid-svg-icons"; import { UseMutationResult } from "@tanstack/react-query"; diff --git a/frontend/src/tests/index.tsx b/frontend/src/tests/index.tsx index 8b4d64c64..bc02e75cf 100644 --- a/frontend/src/tests/index.tsx +++ b/frontend/src/tests/index.tsx @@ -4,11 +4,7 @@ import { ReactElement, StrictMode, } from "react"; -import { - createBrowserRouter, - RouteObject, - RouterProvider, -} from "react-router-dom"; +import { createBrowserRouter, RouteObject, RouterProvider } from "react-router"; import { render, RenderOptions } from "@testing-library/react"; import { AllProviders } from "@/providers"; diff --git a/frontend/src/utilities/hooks.ts b/frontend/src/utilities/hooks.ts index 6ae8a2366..9dc8a1236 100644 --- a/frontend/src/utilities/hooks.ts +++ b/frontend/src/utilities/hooks.ts @@ -6,7 +6,7 @@ import { useRef, useState, } from "react"; -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import { SliderProps } from "@mantine/core"; import { SelectorOption, SelectorProps } from "@/components"; diff --git a/frontend/src/utilities/routers.ts b/frontend/src/utilities/routers.ts index f3f82c8cd..8583f999e 100644 --- a/frontend/src/utilities/routers.ts +++ b/frontend/src/utilities/routers.ts @@ -1,7 +1,7 @@ // A workaround of built-in hooks in React-Router v6 // https://gist.github.com/rmorse/426ffcc579922a82749934826fa9f743 -import { unstable_usePrompt as useUnstablePrompt } from "react-router-dom"; +import { unstable_usePrompt as useUnstablePrompt } from "react-router"; // TODO: Replace with Mantine's confirmation modal export function usePrompt(when: boolean, message: string) { From e780edd0b71924859d187f949d5669a791efe7c1 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Mon, 13 Jan 2025 21:45:47 -0500 Subject: [PATCH 09/92] Fixed issue with API not returning proper subtitles hi or forced subtitles in some edge cases --- bazarr/api/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bazarr/api/utils.py b/bazarr/api/utils.py index 75d3bd9bd..13be1f96f 100644 --- a/bazarr/api/utils.py +++ b/bazarr/api/utils.py @@ -73,8 +73,8 @@ def postprocess(item): if len(language) > 1: item['subtitles'][i].update( { - "forced": language[1] == 'forced', - "hi": language[1] == 'hi', + "forced": language[1].lower() == 'forced', + "hi": language[1].lower() == 'hi', } ) if settings.general.embedded_subs_show_desired and item.get('profileId'): From 58880117a9130368acc1eb8f636f0a564a1e123b Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Mon, 13 Jan 2025 22:08:26 -0500 Subject: [PATCH 10/92] Fixed issue with some custom languages subtitles while trying to index them. #2815 --- bazarr/subtitles/indexer/utils.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/bazarr/subtitles/indexer/utils.py b/bazarr/subtitles/indexer/utils.py index 4e7c339a6..aa375ca68 100644 --- a/bazarr/subtitles/indexer/utils.py +++ b/bazarr/subtitles/indexer/utils.py @@ -11,6 +11,7 @@ from charset_normalizer import detect from constants import MAXIMUM_SUBTITLE_SIZE from app.config import settings from utilities.path_mappings import path_mappings +from languages.custom_lang import CustomLanguage def get_external_subtitles_path(file, subtitle): @@ -54,8 +55,7 @@ def guess_external_subtitles(dest_folder, subtitles, media_type, previously_inde break if x_found_lang: if not language: - x_hi = ':hi' in x_found_lang - subtitles[subtitle] = Language.rebuild(Language.fromietf(x_found_lang), hi=x_hi) + subtitles[subtitle] = _get_lang_from_str(x_found_lang) continue if not language: @@ -141,3 +141,23 @@ def guess_external_subtitles(dest_folder, subtitles, media_type, previously_inde None): subtitles[subtitle] = Language.rebuild(subtitles[subtitle], forced=False, hi=True) return subtitles + + +def _get_lang_from_str(x_found_lang): + x_found_lang_split = x_found_lang.split(':')[0] + x_hi = ':hi' in x_found_lang.lower() + x_forced = ':forced' in x_found_lang.lower() + + if len(x_found_lang_split) == 2: + x_custom_lang_attr = "alpha2" + elif len(x_found_lang_split) == 3: + x_custom_lang_attr = "alpha3" + else: + x_custom_lang_attr = "language" + + x_custom_lang = CustomLanguage.from_value(x_found_lang_split, attr=x_custom_lang_attr) + + if x_custom_lang is not None: + return Language.rebuild(x_custom_lang.subzero_language(), hi=x_hi, forced=x_forced) + else: + return Language.rebuild(Language.fromietf(x_found_lang), hi=x_hi, forced=x_forced) From d572ab7b05119d10509f30668eee4ca4cfa61280 Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Tue, 14 Jan 2025 15:06:23 +0900 Subject: [PATCH 11/92] no log: Bumped react to 19 (#2824) --- frontend/package-lock.json | 405 ++++++++++-------- frontend/package.json | 26 +- frontend/src/components/toolbox/Button.tsx | 1 + .../pages/Settings/Providers/components.tsx | 1 + .../src/pages/System/Announcements/table.tsx | 2 +- frontend/src/pages/System/Status/index.tsx | 1 + frontend/src/utilities/hooks.ts | 4 +- frontend/src/utilities/validate.ts | 7 - 8 files changed, 242 insertions(+), 205 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 55cfe0f4b..717ad7e82 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,18 +9,18 @@ "version": "1.0.0", "license": "GPL-3", "dependencies": { - "@mantine/core": "^7.14.3", - "@mantine/dropzone": "^7.14.3", - "@mantine/form": "^7.14.3", - "@mantine/hooks": "^7.14.3", - "@mantine/modals": "^7.14.3", - "@mantine/notifications": "^7.14.3", - "@tanstack/react-query": "^5.40.1", + "@mantine/core": "^7.15.3", + "@mantine/dropzone": "^7.15.3", + "@mantine/form": "^7.15.3", + "@mantine/hooks": "^7.15.3", + "@mantine/modals": "^7.15.3", + "@mantine/notifications": "^7.15.3", + "@tanstack/react-query": "^5.64.1", "@tanstack/react-table": "^8.19.2", "axios": "^1.7.4", "braces": "^3.0.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "react-router": "^7.1.1", "socket.io-client": "^4.7.5" }, @@ -33,13 +33,13 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@tanstack/react-query-devtools": "^5.40.1", "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^15.0.5", + "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", "@types/jest": "^29.5.12", "@types/lodash": "^4.17.1", "@types/node": "^20.12.6", - "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.0", + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "@vite-pwa/assets-generator": "^0.2.4", @@ -60,7 +60,7 @@ "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^3.2.4", "pretty-quick": "^4.0.0", - "recharts": "^2.12.7", + "recharts": "^2.15.0", "sass": "^1.74.1", "typescript": "^5.4.4", "vite": "^5.4.8", @@ -2373,26 +2373,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/react": { "version": "0.26.28", "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", @@ -2407,6 +2410,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -2416,9 +2420,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" }, "node_modules/@fontsource/roboto": { "version": "5.0.12", @@ -2639,19 +2644,20 @@ } }, "node_modules/@mantine/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.14.3.tgz", - "integrity": "sha512-niAi+ZYBr4KrG+X2Mx+muvEzUOOHc/Rx0vsbIGYeNe7urwHSm/xNEGsaapmCqeRC0CSL4KI6TJOq8QhnSuQZcw==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.15.3.tgz", + "integrity": "sha512-8IMTq5xDJDjByDUYkDNKImikASStzrnPtVumKsrEnyEY0zhAWkAe/z/+PjTUMcN44ncJ/PrXQkJ6qMaVWzSZwA==", + "license": "MIT", "dependencies": { "@floating-ui/react": "^0.26.28", "clsx": "^2.1.1", - "react-number-format": "^5.4.2", - "react-remove-scroll": "^2.6.0", - "react-textarea-autosize": "8.5.5", + "react-number-format": "^5.4.3", + "react-remove-scroll": "^2.6.2", + "react-textarea-autosize": "8.5.6", "type-fest": "^4.27.0" }, "peerDependencies": { - "@mantine/hooks": "7.14.3", + "@mantine/hooks": "7.15.3", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } @@ -2668,23 +2674,25 @@ } }, "node_modules/@mantine/dropzone": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.14.3.tgz", - "integrity": "sha512-9ExiWRod5/gBHBd4hsUnPk7Rles0BiJr5FE2Kuq7lqeEXbtYfuSognJD/f5atMgu/5mMEkkyK/Bq5XesZBumBQ==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.15.3.tgz", + "integrity": "sha512-3BZNKqfWyE6/DXOUoYbT72kVDiAu4jRLxUM7KsWojlSy1ucgd8X5oC6yvMlCa2nSDbrVlCNzsDADrezh2MxaNA==", + "license": "MIT", "dependencies": { "react-dropzone-esm": "15.2.0" }, "peerDependencies": { - "@mantine/core": "7.14.3", - "@mantine/hooks": "7.14.3", + "@mantine/core": "7.15.3", + "@mantine/hooks": "7.15.3", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/form": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.14.3.tgz", - "integrity": "sha512-NquXVQz3IRCT5WTWCEdQjQzThMj7FpX/u0PDD+8XydiMPB7zJGPM9IdV88mWDI2ghT9vS6rBn22XWjTYsKa8+A==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.15.3.tgz", + "integrity": "sha512-E+xrY/z6Y4JoHqL4f91AoMeNspuAe+nET667wKVBSUu4yLQX0FS8uvdypoaasb3LcTk7GRmnDNYyfC37zz4zkg==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "klona": "^2.0.6" @@ -2694,43 +2702,47 @@ } }, "node_modules/@mantine/hooks": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.14.3.tgz", - "integrity": "sha512-cU3R9b8GLs6aCvpsVC56ZOOJCUIoDqX3RcLWkcfpA5a47LjWa/rzegP4YWfNW6/E9vodPJT4AEbYXVffYlyNwA==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.15.3.tgz", + "integrity": "sha512-rZYObhrmww3OIb4O30pDox/rc+9k3AExO0FSw13t7cfz5/Di+Ho1cChswVFAshnp81ucGEod1fiDOfuyGW7JhA==", + "license": "MIT", "peerDependencies": { "react": "^18.x || ^19.x" } }, "node_modules/@mantine/modals": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.14.3.tgz", - "integrity": "sha512-wn2eMSROG7bPbeSH2OnTp8iVv1wH9L9tLeBt88mTEXLg3vIPfQtWD9g/kFrjhoCjygYYtyJeqMQFYPUkHQMXDw==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.15.3.tgz", + "integrity": "sha512-S/nu/4OcQw2sBbFVEIU1FfyiLDKVN9qOxnxhQBxaR9BFk4gEALzuU2uCorlu4f8TKUMo2kho0b0iTuYluQ07Dw==", + "license": "MIT", "peerDependencies": { - "@mantine/core": "7.14.3", - "@mantine/hooks": "7.14.3", + "@mantine/core": "7.15.3", + "@mantine/hooks": "7.15.3", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/notifications": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.14.3.tgz", - "integrity": "sha512-7N9u4upi1On8TL94UvrUNhpDGxp1sAkbcgiNcu6zhvy4j29TPFapoXB5CRE9zzjAf3CYq3AigE96bXlCDm9xuQ==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.15.3.tgz", + "integrity": "sha512-C1obM5dQsSHIB3B3Kajk0TdLnBpLXFMOIy0otG5khoL/8c8qOU4U0kHxtPVFBFvU/hw4rx7/idiiJdjp8DepDQ==", + "license": "MIT", "dependencies": { - "@mantine/store": "7.14.3", + "@mantine/store": "7.15.3", "react-transition-group": "4.4.5" }, "peerDependencies": { - "@mantine/core": "7.14.3", - "@mantine/hooks": "7.14.3", + "@mantine/core": "7.15.3", + "@mantine/hooks": "7.15.3", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/store": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.14.3.tgz", - "integrity": "sha512-o15vbTUNlLqD/yLOtEClnc4fY2ONDaCZiaL9REUy0xhCDbVTeeqnu9BV604yuym50ZH5mhMHix1TX3K9vGsWvA==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.15.3.tgz", + "integrity": "sha512-E3pCEm5ozRF/iK/jM1liKntjqaKhotvPtNAqSBcx6AkWSJ8bt16JhNrmrs3J3RmWvfqzF+fftT8HI/3HYbgu9w==", + "license": "MIT", "peerDependencies": { "react": "^18.x || ^19.x" } @@ -3114,9 +3126,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.40.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.40.0.tgz", - "integrity": "sha512-eD8K8jsOIq0Z5u/QbvOmfvKKE/XC39jA7yv4hgpl/1SRiU+J8QCIwgM/mEHuunQsL87dcvnHqSVLmf9pD4CiaA==", + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.64.1.tgz", + "integrity": "sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==", "license": "MIT", "funding": { "type": "github", @@ -3135,19 +3147,19 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.40.1.tgz", - "integrity": "sha512-gOcmu+gpFd2taHrrgMM9RemLYYEDYfsCqszxCC0xtx+csDa4R8t7Hr7SfWXQP13S2sF+mOxySo/+FNXJFYBqcA==", + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.64.1.tgz", + "integrity": "sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.40.0" + "@tanstack/query-core": "5.64.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "react": "^18.0.0" + "react": "^18 || ^19" } }, "node_modules/@tanstack/react-query-devtools": { @@ -3206,6 +3218,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.0.0.tgz", "integrity": "sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3285,21 +3298,31 @@ "dev": true }, "node_modules/@testing-library/react": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.5.tgz", - "integrity": "sha512-ttodVWYA2i2w4hRa6krKrmS1vKxAEkwDz34y+CwbcrbZUxFzUYN3a5xZyFKo+K6LBseCRCUkwcjATpaNn/UsIA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.1.0.tgz", + "integrity": "sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^10.0.0", - "@types/react-dom": "^18.0.0" + "@babel/runtime": "^7.12.5" }, "engines": { "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, "node_modules/@testing-library/user-event": { @@ -3319,7 +3342,8 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -3525,29 +3549,24 @@ "undici-types": "~5.26.4" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true - }, "node_modules/@types/react": { - "version": "18.3.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", - "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", + "version": "19.0.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.6.tgz", + "integrity": "sha512-gIlMztcTeDgXCUj0vCBOqEuSEhX//63fW9SZtCJ+agxoQTOklwDfiEMlTWn4mR/C/UK5VHlpwsCsOyf7/hc4lw==", "devOptional": true, + "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.3.tgz", + "integrity": "sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==", "dev": true, - "dependencies": { - "@types/react": "*" + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/resolve": { @@ -5726,7 +5745,8 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/diff-sequences": { "version": "29.6.3", @@ -5765,12 +5785,14 @@ "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -6312,10 +6334,11 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -6643,6 +6666,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -7081,14 +7105,6 @@ "node": ">=12" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -7950,6 +7966,7 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -8750,6 +8767,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -8764,6 +8782,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -8775,7 +8794,8 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/pretty-quick": { "version": "4.0.0", @@ -8924,26 +8944,24 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-dropzone-esm": { @@ -8966,12 +8984,13 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-number-format": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.2.tgz", - "integrity": "sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.3.tgz", + "integrity": "sha512-VCY5hFg/soBighAoGcdE+GagkJq0230qN6jcS5sp8wQX1qy1fYN/RX7/BXkrs0oyzzwqR8/+eSUrqXbGeywdUQ==", + "license": "MIT", "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-refresh": { @@ -8984,22 +9003,23 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz", + "integrity": "sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==", + "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.6", + "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", + "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.2" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9008,19 +9028,20 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -9053,35 +9074,36 @@ } }, "node_modules/react-smooth": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", - "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", "dev": true, + "license": "MIT", "dependencies": { "fast-equals": "^5.0.1", "prop-types": "^15.8.1", "react-transition-group": "^4.4.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9090,9 +9112,10 @@ } }, "node_modules/react-textarea-autosize": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.5.tgz", - "integrity": "sha512-CVA94zmfp8m4bSHtWwmANaBR8EPsKy2aZ7KwqhoS4Ftib87F9Kvi7XQhOixypPLMc6kVYgOXvKFuuzZDpHGRPg==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.6.tgz", + "integrity": "sha512-aT3ioKXMa8f6zHYGebhbdMD2L00tKeRX1zuVuDx9YQK/JLLRSaSxq3ugECEmUB9z2kvk6bFSIoRHLkkUv0RJiw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", @@ -9102,13 +9125,14 @@ "node": ">=10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -9148,15 +9172,16 @@ } }, "node_modules/recharts": { - "version": "2.12.7", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", - "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.0.tgz", + "integrity": "sha512-cIvMxDfpAmqAmVgc4yb7pgm/O1tmmkl/CjrvXuW+62/+7jj/iF9Ykm+hb/UJt42TREHMyd3gb+pkgoa2MxgDIw==", "dev": true, + "license": "MIT", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", "lodash": "^4.17.21", - "react-is": "^16.10.2", + "react-is": "^18.3.1", "react-smooth": "^4.0.0", "recharts-scale": "^0.4.4", "tiny-invariant": "^1.3.1", @@ -9166,8 +9191,8 @@ "node": ">=14" }, "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/recharts-scale": { @@ -9179,6 +9204,13 @@ "decimal.js-light": "^2.4.1" } }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -9504,12 +9536,10 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", @@ -10139,7 +10169,8 @@ "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" }, "node_modules/tar-fs": { "version": "3.0.6", @@ -10702,9 +10733,10 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -10712,8 +10744,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -10722,19 +10754,26 @@ } }, "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", + "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -10743,14 +10782,15 @@ } }, "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "license": "MIT", "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -10759,9 +10799,10 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -10770,8 +10811,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { diff --git a/frontend/package.json b/frontend/package.json index cee38c33a..52c0119f4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,18 +13,18 @@ }, "private": true, "dependencies": { - "@mantine/core": "^7.14.3", - "@mantine/dropzone": "^7.14.3", - "@mantine/form": "^7.14.3", - "@mantine/hooks": "^7.14.3", - "@mantine/modals": "^7.14.3", - "@mantine/notifications": "^7.14.3", - "@tanstack/react-query": "^5.40.1", + "@mantine/core": "^7.15.3", + "@mantine/dropzone": "^7.15.3", + "@mantine/form": "^7.15.3", + "@mantine/hooks": "^7.15.3", + "@mantine/modals": "^7.15.3", + "@mantine/notifications": "^7.15.3", + "@tanstack/react-query": "^5.64.1", "@tanstack/react-table": "^8.19.2", "axios": "^1.7.4", "braces": "^3.0.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "react-router": "^7.1.1", "socket.io-client": "^4.7.5" }, @@ -37,13 +37,13 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@tanstack/react-query-devtools": "^5.40.1", "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^15.0.5", + "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", "@types/jest": "^29.5.12", "@types/lodash": "^4.17.1", "@types/node": "^20.12.6", - "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.0", + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "@vite-pwa/assets-generator": "^0.2.4", @@ -64,7 +64,7 @@ "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^3.2.4", "pretty-quick": "^4.0.0", - "recharts": "^2.12.7", + "recharts": "^2.15.0", "sass": "^1.74.1", "typescript": "^5.4.4", "vite": "^5.4.8", diff --git a/frontend/src/components/toolbox/Button.tsx b/frontend/src/components/toolbox/Button.tsx index 0a1d311e1..3767522ef 100644 --- a/frontend/src/components/toolbox/Button.tsx +++ b/frontend/src/components/toolbox/Button.tsx @@ -1,6 +1,7 @@ import { ComponentProps, FunctionComponent, + JSX, PropsWithChildren, useCallback, useState, diff --git a/frontend/src/pages/Settings/Providers/components.tsx b/frontend/src/pages/Settings/Providers/components.tsx index d50f0c93c..f342ab0a9 100644 --- a/frontend/src/pages/Settings/Providers/components.tsx +++ b/frontend/src/pages/Settings/Providers/components.tsx @@ -1,6 +1,7 @@ import { Fragment, FunctionComponent, + JSX, useCallback, useMemo, useRef, diff --git a/frontend/src/pages/System/Announcements/table.tsx b/frontend/src/pages/System/Announcements/table.tsx index 910fb4bd5..56d94c66d 100644 --- a/frontend/src/pages/System/Announcements/table.tsx +++ b/frontend/src/pages/System/Announcements/table.tsx @@ -1,4 +1,4 @@ -import { FunctionComponent, useMemo } from "react"; +import { FunctionComponent, JSX, useMemo } from "react"; import { Anchor, Text } from "@mantine/core"; import { faWindowClose } from "@fortawesome/free-solid-svg-icons"; import { ColumnDef } from "@tanstack/react-table"; diff --git a/frontend/src/pages/System/Status/index.tsx b/frontend/src/pages/System/Status/index.tsx index 157935dfb..09981f451 100644 --- a/frontend/src/pages/System/Status/index.tsx +++ b/frontend/src/pages/System/Status/index.tsx @@ -1,5 +1,6 @@ import { FunctionComponent, + JSX, PropsWithChildren, ReactNode, useCallback, diff --git a/frontend/src/utilities/hooks.ts b/frontend/src/utilities/hooks.ts index 9dc8a1236..517305cbf 100644 --- a/frontend/src/utilities/hooks.ts +++ b/frontend/src/utilities/hooks.ts @@ -111,7 +111,7 @@ export function useThrottle(fn: F, ms: number) { const fnRef = useRef(fn); fnRef.current = fn; - const timer = useRef(); + const timer = useRef(undefined); return useCallback( (...args: Parameters) => { @@ -153,7 +153,7 @@ export function useOnValueChange(value: T, onChange: (value: T) => void) { // Mantine's useInterval has some weird issues. This is a workaround. export function useInterval(fn: VoidFunction, ms: number) { - const timer = useRef(); + const timer = useRef(undefined); useEffect(() => { timer.current = window.setInterval(fn, ms); diff --git a/frontend/src/utilities/validate.ts b/frontend/src/utilities/validate.ts index 2b3f028f6..56f2d9883 100644 --- a/frontend/src/utilities/validate.ts +++ b/frontend/src/utilities/validate.ts @@ -1,10 +1,3 @@ -import { ReactText } from "react"; -import { isNumber, isString } from "lodash"; - -export function isReactText(v: unknown): v is ReactText { - return isString(v) || isNumber(v); -} - export function isMovie(v: object): v is Item.Movie { return "radarrId" in v; } From dbcbf4ecde016145fb1085699279c2dba4cbf0d7 Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Thu, 16 Jan 2025 11:40:25 +0900 Subject: [PATCH 12/92] Persist pages on url and hydrate on page load (#2826) --- frontend/src/apis/queries/hooks.ts | 17 +++++++++++++++-- frontend/src/components/tables/PageControl.tsx | 17 ++++++++++------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/frontend/src/apis/queries/hooks.ts b/frontend/src/apis/queries/hooks.ts index 2f17b5efe..40a7d69ee 100644 --- a/frontend/src/apis/queries/hooks.ts +++ b/frontend/src/apis/queries/hooks.ts @@ -1,4 +1,5 @@ import { useCallback, useEffect, useState } from "react"; +import { useSearchParams } from "react-router"; import { QueryKey, useQuery, @@ -34,7 +35,12 @@ export function usePaginationQuery< ): UsePaginationQueryResult { const client = useQueryClient(); - const [page, setIndex] = useState(0); + const [searchParams] = useSearchParams(); + + const [page, setIndex] = useState( + searchParams.get("page") ? Number(searchParams.get("page")) - 1 : 0, + ); + const pageSize = usePageSize(); const start = page * pageSize; @@ -62,7 +68,14 @@ export function usePaginationQuery< } }); } - }, [results.isSuccess, results.data, client, cacheIndividual, queryKey]); + }, [ + results.isSuccess, + results.data, + client, + cacheIndividual, + queryKey, + page, + ]); const totalCount = data?.total ?? 0; const pageCount = Math.ceil(totalCount / pageSize); diff --git a/frontend/src/components/tables/PageControl.tsx b/frontend/src/components/tables/PageControl.tsx index bcdf290e3..317b4a3c3 100644 --- a/frontend/src/components/tables/PageControl.tsx +++ b/frontend/src/components/tables/PageControl.tsx @@ -1,4 +1,5 @@ -import { FunctionComponent, useEffect } from "react"; +import { FunctionComponent } from "react"; +import { useSearchParams } from "react-router"; import { Group, Pagination, Text } from "@mantine/core"; import { useIsLoading } from "@/contexts"; @@ -22,11 +23,7 @@ const PageControl: FunctionComponent = ({ const end = Math.min(size * (index + 1), total); const isLoading = useIsLoading(); - - // Jump to first page if total page count changes - useEffect(() => { - goto(0); - }, [total, goto]); + const [searchParams, setSearchParams] = useSearchParams(); return ( @@ -37,7 +34,13 @@ const PageControl: FunctionComponent = ({ size="sm" color={isLoading ? "gray" : "primary"} value={index + 1} - onChange={(page) => goto(page - 1)} + onChange={(page) => { + searchParams.set("page", page.toString()); + + setSearchParams(searchParams, { replace: true }); + + return goto(page - 1); + }} hidden={count <= 1} total={count} > From e17bad6ec49421a315d463522ae40c5c9cd06dc9 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Wed, 15 Jan 2025 22:32:00 -0500 Subject: [PATCH 13/92] Added some failsafe to RegieLive provider to try to prevent getting redirected to captcha validation or being completely blocked for a while. #2165 --- bazarr/app/get_providers.py | 7 ++- .../subliminal_patch/providers/regielive.py | 51 ++++++++++++++++--- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/bazarr/app/get_providers.py b/bazarr/app/get_providers.py index a4316a9d5..b73e91c11 100644 --- a/bazarr/app/get_providers.py +++ b/bazarr/app/get_providers.py @@ -15,7 +15,7 @@ import re from requests import ConnectionError from subzero.language import Language from subliminal_patch.exceptions import TooManyRequests, APIThrottled, ParseResponseError, IPAddressBlocked, \ - MustGetBlacklisted, SearchLimitReached + MustGetBlacklisted, SearchLimitReached, ProviderError from subliminal.providers.opensubtitles import DownloadLimitReached, PaymentRequired, Unauthorized from subliminal.exceptions import DownloadLimitExceeded, ServiceUnavailable, AuthenticationError, ConfigurationError from subliminal import region as subliminal_cache_region @@ -123,6 +123,11 @@ def provider_throttle_map(): "whisperai": { ConnectionError: (datetime.timedelta(hours=24), "24 hours"), }, + "regielive": { + APIThrottled: (datetime.timedelta(hours=1), "1 hour"), + TooManyRequests: (datetime.timedelta(minutes=5), "5 minutes"), + ProviderError: (datetime.timedelta(minutes=10), "10 minutes"), + }, } diff --git a/custom_libs/subliminal_patch/providers/regielive.py b/custom_libs/subliminal_patch/providers/regielive.py index 8c7363bf0..a65379f93 100644 --- a/custom_libs/subliminal_patch/providers/regielive.py +++ b/custom_libs/subliminal_patch/providers/regielive.py @@ -4,8 +4,9 @@ import logging import io import os -from requests import Session +from requests import Session, JSONDecodeError from guessit import guessit +from subliminal_patch.exceptions import TooManyRequests, APIThrottled, ProviderError from subliminal_patch.providers import Provider from subliminal_patch.subtitle import Subtitle, guess_matches from subliminal.subtitle import SUBTITLE_EXTENSIONS, fix_line_ending @@ -87,13 +88,18 @@ class RegieLiveProvider(Provider): payload['nume'] = video.title payload['an'] = video.year - response = self.session.get( - self.url + "?" + urllib.parse.urlencode(payload), - data=payload, headers=self.headers) + response = self.checked( + lambda: self.session.get( + self.url + "?" + urllib.parse.urlencode(payload), + data=payload, headers=self.headers) + ) subtitles = [] if response.status_code == 200: - results = response.json() + try: + results = response.json() + except JSONDecodeError: + raise ProviderError('Unable to parse JSON response') if len(results) > 0: results_subs = results['rezultate'] for film in results_subs: @@ -122,9 +128,13 @@ class RegieLiveProvider(Provider): 'Cache-Control': 'no-cache' } session.headers.update(_addheaders) - res = session.get('https://subtitrari.regielive.ro') + res = self.checked( + lambda: session.get('https://subtitrari.regielive.ro') + ) cookies = res.cookies - _zipped = session.get(subtitle.page_link, cookies=cookies) + _zipped = self.checked( + lambda: session.get(subtitle.page_link, cookies=cookies, allow_redirects=False) + ) if _zipped: if _zipped.text == '500': raise ValueError('Error 500 on server') @@ -135,7 +145,8 @@ class RegieLiveProvider(Provider): return subtitle raise ValueError('Problems conecting to the server') - def _get_subtitle_from_archive(self, archive): + @staticmethod + def _get_subtitle_from_archive(archive): # some files have a non subtitle with .txt extension _tmp = list(SUBTITLE_EXTENSIONS) _tmp.remove('.txt') @@ -153,3 +164,27 @@ class RegieLiveProvider(Provider): return archive.read(name) raise APIThrottled('Can not find the subtitle in the compressed file') + + @staticmethod + def checked(fn): + """Run :fn: and check the response status before returning it. + + :param fn: the function to make an API call to provider. + :return: the response. + + """ + response = None + try: + response = fn() + except Exception: + logger.exception('Unhandled exception raised.') + raise ProviderError('Unhandled exception raised. Check log.') + else: + status_code = response.status_code + + if status_code == 301: + raise APIThrottled() + elif status_code == 429: + raise TooManyRequests() + + return response From 4f77710f462ccd8765465b97ca7f5eac334c30cb Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Thu, 16 Jan 2025 23:33:31 +0900 Subject: [PATCH 14/92] Fixed modal with tables application crash --- frontend/src/components/tables/PageControl.tsx | 6 ------ frontend/src/components/tables/QueryPageTable.tsx | 11 ++++++++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/tables/PageControl.tsx b/frontend/src/components/tables/PageControl.tsx index 317b4a3c3..e328de7cf 100644 --- a/frontend/src/components/tables/PageControl.tsx +++ b/frontend/src/components/tables/PageControl.tsx @@ -1,5 +1,4 @@ import { FunctionComponent } from "react"; -import { useSearchParams } from "react-router"; import { Group, Pagination, Text } from "@mantine/core"; import { useIsLoading } from "@/contexts"; @@ -23,7 +22,6 @@ const PageControl: FunctionComponent = ({ const end = Math.min(size * (index + 1), total); const isLoading = useIsLoading(); - const [searchParams, setSearchParams] = useSearchParams(); return ( @@ -35,10 +33,6 @@ const PageControl: FunctionComponent = ({ color={isLoading ? "gray" : "primary"} value={index + 1} onChange={(page) => { - searchParams.set("page", page.toString()); - - setSearchParams(searchParams, { replace: true }); - return goto(page - 1); }} hidden={count <= 1} diff --git a/frontend/src/components/tables/QueryPageTable.tsx b/frontend/src/components/tables/QueryPageTable.tsx index 797d7a08e..21889adf7 100644 --- a/frontend/src/components/tables/QueryPageTable.tsx +++ b/frontend/src/components/tables/QueryPageTable.tsx @@ -1,4 +1,5 @@ import { useEffect } from "react"; +import { useSearchParams } from "react-router"; import { UsePaginationQueryResult } from "@/apis/queries/hooks"; import SimpleTable, { SimpleTableProps } from "@/components/tables/SimpleTable"; import { LoadingProvider } from "@/contexts"; @@ -18,6 +19,8 @@ export default function QueryPageTable(props: Props) { controls: { gotoPage }, } = query; + const [searchParams, setSearchParams] = useSearchParams(); + useEffect(() => { ScrollToTop(); }, [page]); @@ -30,7 +33,13 @@ export default function QueryPageTable(props: Props) { index={page} size={pageSize} total={totalCount} - goto={gotoPage} + goto={(page) => { + searchParams.set("page", (page + 1).toString()); + + setSearchParams(searchParams, { replace: true }); + + gotoPage(page); + }} > ); From 1cc63ce8c7d956e3411613d3bfc096b7f4adf415 Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Fri, 17 Jan 2025 09:19:01 +0900 Subject: [PATCH 15/92] no log: Bumped jsdom to v26.0.0 --- frontend/package-lock.json | 331 ++++++++++++++++++++++++++----------- frontend/package.json | 2 +- 2 files changed, 240 insertions(+), 93 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 717ad7e82..d4004ee7b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -53,7 +53,7 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-testing-library": "^6.2.0", "husky": "^9.0.11", - "jsdom": "^24.0.0", + "jsdom": "^26.0.0", "lodash": "^4.17.21", "postcss-preset-mantine": "^1.14.4", "postcss-simple-vars": "^7.0.1", @@ -108,6 +108,27 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz", + "integrity": "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@babel/code-frame": { "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", @@ -1898,6 +1919,121 @@ "dev": true, "license": "MIT" }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", + "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", + "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", + "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -4578,13 +4714,11 @@ } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } @@ -5362,12 +5496,14 @@ } }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz", + "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==", "dev": true, + "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "@asamuzakjp/css-color": "^2.8.2", + "rrweb-cssom": "^0.8.0" }, "engines": { "node": ">=18" @@ -5856,6 +5992,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6527,9 +6664,10 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6927,12 +7065,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -7711,38 +7850,39 @@ } }, "node_modules/jsdom": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", - "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", + "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", "dev": true, + "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "form-data": "^4.0.0", + "form-data": "^4.0.1", "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", + "whatwg-url": "^14.1.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "canvas": "^2.11.2" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -7750,6 +7890,28 @@ } } }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8277,10 +8439,11 @@ } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", @@ -8410,12 +8573,13 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -8848,12 +9012,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -8874,12 +9032,6 @@ "node": ">=6" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9322,12 +9474,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -9416,10 +9562,11 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", @@ -10327,6 +10474,26 @@ "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "6.1.72", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.72.tgz", + "integrity": "sha512-QNtgIqSUb9o2CoUjX9T5TwaIvUUJFU1+12PJkgt42DFV2yf9J6549yTF2uGloQsJ/JOC8X+gIB81ind97hRiIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.72" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.72", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.72.tgz", + "integrity": "sha512-FW3H9aCaGTJ8l8RVCR3EX8GxsxDbQXuwetwwgXA2chYdsX+NY1ytCBl61narjjehWmCw92tc1AxlcY3668CU8g==", + "dev": true, + "license": "MIT" + }, "node_modules/to-data-view": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-1.1.0.tgz", @@ -10365,18 +10532,16 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz", + "integrity": "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/tr46": { @@ -10663,15 +10828,6 @@ "node": ">=8" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -10722,16 +10878,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", @@ -11415,10 +11561,11 @@ } }, "node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", + "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" diff --git a/frontend/package.json b/frontend/package.json index 52c0119f4..160a32964 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -57,7 +57,7 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-testing-library": "^6.2.0", "husky": "^9.0.11", - "jsdom": "^24.0.0", + "jsdom": "^26.0.0", "lodash": "^4.17.21", "postcss-preset-mantine": "^1.14.4", "postcss-simple-vars": "^7.0.1", From 214b8153aef1cd1f308eb85bdc89d813b0cea83d Mon Sep 17 00:00:00 2001 From: Anderson Shindy Oki Date: Fri, 17 Jan 2025 09:23:04 +0900 Subject: [PATCH 16/92] no log: Bumped mantine to v7.16.0 --- frontend/package-lock.json | 70 +++++++++++++++++++------------------- frontend/package.json | 12 +++---- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d4004ee7b..16ec84969 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,12 +9,12 @@ "version": "1.0.0", "license": "GPL-3", "dependencies": { - "@mantine/core": "^7.15.3", - "@mantine/dropzone": "^7.15.3", - "@mantine/form": "^7.15.3", - "@mantine/hooks": "^7.15.3", - "@mantine/modals": "^7.15.3", - "@mantine/notifications": "^7.15.3", + "@mantine/core": "^7.16.0", + "@mantine/dropzone": "^7.16.0", + "@mantine/form": "^7.16.0", + "@mantine/hooks": "^7.16.0", + "@mantine/modals": "^7.16.0", + "@mantine/notifications": "^7.16.0", "@tanstack/react-query": "^5.64.1", "@tanstack/react-table": "^8.19.2", "axios": "^1.7.4", @@ -2780,9 +2780,9 @@ } }, "node_modules/@mantine/core": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.15.3.tgz", - "integrity": "sha512-8IMTq5xDJDjByDUYkDNKImikASStzrnPtVumKsrEnyEY0zhAWkAe/z/+PjTUMcN44ncJ/PrXQkJ6qMaVWzSZwA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.16.0.tgz", + "integrity": "sha512-lYYwa4Itz77uC8zQzdiKiKdz9Q01NBOYPZsotIKsP/Zqij0qhpsVxoJ8MK3P8IqFyLfThTMmR4sT1qlGfLTA9Q==", "license": "MIT", "dependencies": { "@floating-ui/react": "^0.26.28", @@ -2793,7 +2793,7 @@ "type-fest": "^4.27.0" }, "peerDependencies": { - "@mantine/hooks": "7.15.3", + "@mantine/hooks": "7.16.0", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } @@ -2810,24 +2810,24 @@ } }, "node_modules/@mantine/dropzone": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.15.3.tgz", - "integrity": "sha512-3BZNKqfWyE6/DXOUoYbT72kVDiAu4jRLxUM7KsWojlSy1ucgd8X5oC6yvMlCa2nSDbrVlCNzsDADrezh2MxaNA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.16.0.tgz", + "integrity": "sha512-lZwv96MswNTc0zSt/ObM8uykv2pZbM3eK6pNoA25jn+hZSrcB/TiET15Uhc7k0E/naxvQbZTxeNxQRpN3xrKRQ==", "license": "MIT", "dependencies": { "react-dropzone-esm": "15.2.0" }, "peerDependencies": { - "@mantine/core": "7.15.3", - "@mantine/hooks": "7.15.3", + "@mantine/core": "7.16.0", + "@mantine/hooks": "7.16.0", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/form": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.15.3.tgz", - "integrity": "sha512-E+xrY/z6Y4JoHqL4f91AoMeNspuAe+nET667wKVBSUu4yLQX0FS8uvdypoaasb3LcTk7GRmnDNYyfC37zz4zkg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.16.0.tgz", + "integrity": "sha512-PUxX5v8XMoNwjFdZbns4dDcQf8U9lIfagFsDGz3KKStgsuBcgnn97/MDP6SpsOHV3g7AGEJoF65+ax1fMOkkNA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2838,46 +2838,46 @@ } }, "node_modules/@mantine/hooks": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.15.3.tgz", - "integrity": "sha512-rZYObhrmww3OIb4O30pDox/rc+9k3AExO0FSw13t7cfz5/Di+Ho1cChswVFAshnp81ucGEod1fiDOfuyGW7JhA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.16.0.tgz", + "integrity": "sha512-8KxrhckesbrV6tyOndm6fJ+jSKA4KX/67ppDFlfYMMbV6Yh+s0zRO4KLi2uCtl6tgckQd2/zDzX3kQk+VYKqDA==", "license": "MIT", "peerDependencies": { "react": "^18.x || ^19.x" } }, "node_modules/@mantine/modals": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.15.3.tgz", - "integrity": "sha512-S/nu/4OcQw2sBbFVEIU1FfyiLDKVN9qOxnxhQBxaR9BFk4gEALzuU2uCorlu4f8TKUMo2kho0b0iTuYluQ07Dw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.16.0.tgz", + "integrity": "sha512-2AUFqwuz9JhEnNNjf7Oly4oj1nePKn6QcMKJOQx6Kr1eBcSZRsZ4EmlSONFvfTz/9UJDvm30Hk4HPOPoi0i5fQ==", "license": "MIT", "peerDependencies": { - "@mantine/core": "7.15.3", - "@mantine/hooks": "7.15.3", + "@mantine/core": "7.16.0", + "@mantine/hooks": "7.16.0", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/notifications": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.15.3.tgz", - "integrity": "sha512-C1obM5dQsSHIB3B3Kajk0TdLnBpLXFMOIy0otG5khoL/8c8qOU4U0kHxtPVFBFvU/hw4rx7/idiiJdjp8DepDQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.16.0.tgz", + "integrity": "sha512-ofwpMLoe/QaXTEqrLNA2vEq4KblacKHLg1xJn7a40irt6uQ6GSlFoLveKjOupiG0xUa+gIbevA1uv3tHJuJ6uA==", "license": "MIT", "dependencies": { - "@mantine/store": "7.15.3", + "@mantine/store": "7.16.0", "react-transition-group": "4.4.5" }, "peerDependencies": { - "@mantine/core": "7.15.3", - "@mantine/hooks": "7.15.3", + "@mantine/core": "7.16.0", + "@mantine/hooks": "7.16.0", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/store": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.15.3.tgz", - "integrity": "sha512-E3pCEm5ozRF/iK/jM1liKntjqaKhotvPtNAqSBcx6AkWSJ8bt16JhNrmrs3J3RmWvfqzF+fftT8HI/3HYbgu9w==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.16.0.tgz", + "integrity": "sha512-IeeKk8w+a5Z5sctMUYrLBVVA9173B2oKPP4Rh656eoXH+vz/KCpL/ITnFWrt0Cv9Fyv/V+zm1UyAnUWRdQ6uXA==", "license": "MIT", "peerDependencies": { "react": "^18.x || ^19.x" diff --git a/frontend/package.json b/frontend/package.json index 160a32964..638ac8efe 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,12 +13,12 @@ }, "private": true, "dependencies": { - "@mantine/core": "^7.15.3", - "@mantine/dropzone": "^7.15.3", - "@mantine/form": "^7.15.3", - "@mantine/hooks": "^7.15.3", - "@mantine/modals": "^7.15.3", - "@mantine/notifications": "^7.15.3", + "@mantine/core": "^7.16.0", + "@mantine/dropzone": "^7.16.0", + "@mantine/form": "^7.16.0", + "@mantine/hooks": "^7.16.0", + "@mantine/modals": "^7.16.0", + "@mantine/notifications": "^7.16.0", "@tanstack/react-query": "^5.64.1", "@tanstack/react-table": "^8.19.2", "axios": "^1.7.4", From 6fc6ca5ec20138d52e1c2637b9f291af7a2c0b7c Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Fri, 17 Jan 2025 21:59:39 -0500 Subject: [PATCH 17/92] Fixed podnapisi TypeError since we've merged #2790. --- custom_libs/subliminal_patch/providers/podnapisi.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/custom_libs/subliminal_patch/providers/podnapisi.py b/custom_libs/subliminal_patch/providers/podnapisi.py index c4ec284c0..4309a8a91 100644 --- a/custom_libs/subliminal_patch/providers/podnapisi.py +++ b/custom_libs/subliminal_patch/providers/podnapisi.py @@ -204,12 +204,12 @@ class PodnapisiProvider(_PodnapisiProvider, ProviderSubtitleArchiveMixin): # query the server content = None try: - content = self.session.get(self.server_url + 'search/old', params=params, timeout=30).content - xml = etree.fromstring(content) + content = self.session.get(self.server_url + 'search/old', params=params, timeout=30) + xml = etree.fromstring(content.content) except etree.ParseError: - if '429 Too Many Requests' in content: + if '429 Too Many Requests' in content.text: raise TooManyRequests - logger.error("Wrong data returned: %r", content) + logger.error("Wrong data returned: %r", content.text) break # exit if no results From 2fc8f10a949d4e08c3038eada35d453fe3000b13 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Sat, 18 Jan 2025 10:02:09 -0500 Subject: [PATCH 18/92] Updated vendored modules --- libs/Flask_Cors-4.0.0.dist-info/RECORD | 12 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 29 +- libs/Flask_Cors-5.0.0.dist-info/RECORD | 12 + .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 13 +- .../RECORD | 18 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 libs/Flask_SocketIO-5.3.6.dist-info/RECORD | 10 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 9 +- libs/Flask_SocketIO-5.5.1.dist-info/RECORD | 10 + .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 libs/Jinja2-3.1.3.dist-info/RECORD | 34 - libs/Jinja2-3.1.3.dist-info/entry_points.txt | 2 - libs/Jinja2-3.1.3.dist-info/top_level.txt | 1 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 10 +- .../RECORD | 26 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../entry_points.txt | 0 .../top_level.txt | 0 libs/Markdown-3.5.2.dist-info/LICENSE.md | 29 - .../INSTALLER | 0 libs/Markdown-3.7.dist-info/LICENSE.md | 30 + .../METADATA | 49 +- .../RECORD | 30 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../entry_points.txt | 0 .../top_level.txt | 0 libs/MarkupSafe-2.1.5.dist-info/RECORD | 2 +- .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 8 +- .../RECORD | 16 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 libs/SQLAlchemy-2.0.27.dist-info/RECORD | 276 - .../INSTALLER | 0 .../LICENSE | 2 +- .../METADATA | 7 +- libs/SQLAlchemy-2.0.37.dist-info/RECORD | 275 + .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 libs/alembic-1.13.1.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 4 +- .../METADATA | 2 +- .../RECORD | 80 +- .../REQUESTED | 0 libs/alembic-1.14.0.dist-info/WHEEL | 5 + .../entry_points.txt | 0 .../top_level.txt | 0 libs/alembic/__init__.py | 2 +- libs/alembic/autogenerate/api.py | 6 +- libs/alembic/autogenerate/compare.py | 2 +- libs/alembic/autogenerate/render.py | 51 +- libs/alembic/command.py | 39 +- libs/alembic/config.py | 15 +- libs/alembic/ddl/_autogen.py | 26 +- libs/alembic/ddl/base.py | 27 +- libs/alembic/ddl/impl.py | 88 +- libs/alembic/ddl/mysql.py | 80 +- libs/alembic/ddl/oracle.py | 8 +- libs/alembic/ddl/postgresql.py | 3 +- libs/alembic/op.pyi | 21 +- libs/alembic/operations/base.py | 34 +- libs/alembic/operations/ops.py | 28 +- libs/alembic/operations/schemaobj.py | 10 +- libs/alembic/operations/toimpl.py | 16 +- libs/alembic/runtime/environment.py | 12 +- libs/alembic/runtime/migration.py | 47 +- libs/alembic/script/base.py | 28 +- libs/alembic/script/revision.py | 43 +- libs/alembic/templates/async/alembic.ini.mako | 11 +- .../templates/generic/alembic.ini.mako | 9 +- .../templates/multidb/alembic.ini.mako | 9 +- libs/alembic/testing/assertions.py | 17 +- libs/alembic/testing/env.py | 8 +- libs/alembic/testing/fixtures.py | 28 +- .../testing/suite/test_autogen_computed.py | 1 + .../alembic/testing/suite/test_environment.py | 6 +- libs/alembic/util/langhelpers.py | 9 +- libs/alembic/util/messaging.py | 12 +- libs/alembic/util/sqla_compat.py | 8 +- .../INSTALLER | 0 .../LICENSE | 2 +- .../METADATA | 11 +- libs/aniso8601-10.0.0.dist-info/RECORD | 34 + .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 libs/aniso8601-9.0.1.dist-info/RECORD | 34 - libs/aniso8601/__init__.py | 4 +- libs/aniso8601/builders/__init__.py | 34 +- libs/aniso8601/builders/python.py | 39 +- libs/aniso8601/builders/tests/__init__.py | 2 +- libs/aniso8601/builders/tests/test_init.py | 2 +- libs/aniso8601/builders/tests/test_python.py | 19 +- libs/aniso8601/compat.py | 2 +- libs/aniso8601/date.py | 13 +- libs/aniso8601/decimalfraction.py | 2 +- libs/aniso8601/duration.py | 12 +- libs/aniso8601/exceptions.py | 2 +- libs/aniso8601/interval.py | 22 +- libs/aniso8601/resolution.py | 2 +- libs/aniso8601/tests/__init__.py | 2 +- libs/aniso8601/tests/compat.py | 2 +- libs/aniso8601/tests/test_compat.py | 2 +- libs/aniso8601/tests/test_date.py | 16 +- libs/aniso8601/tests/test_decimalfraction.py | 2 +- libs/aniso8601/tests/test_duration.py | 2 +- libs/aniso8601/tests/test_init.py | 2 +- libs/aniso8601/tests/test_interval.py | 2 +- libs/aniso8601/tests/test_time.py | 2 +- libs/aniso8601/tests/test_timezone.py | 2 +- libs/aniso8601/tests/test_utcoffset.py | 2 +- libs/aniso8601/time.py | 4 +- libs/aniso8601/timezone.py | 11 +- libs/aniso8601/utcoffset.py | 4 +- libs/apprise-1.7.6.dist-info/RECORD | 183 - .../INSTALLER | 0 .../LICENSE | 2 +- .../METADATA | 159 +- libs/apprise-1.9.2.dist-info/RECORD | 204 + .../REQUESTED | 0 .../WHEEL | 0 .../entry_points.txt | 0 .../top_level.txt | 0 libs/apprise/__init__.py | 45 +- libs/apprise/{Apprise.py => apprise.py} | 23 +- libs/apprise/{Apprise.pyi => apprise.pyi} | 0 ...iseAttachment.py => apprise_attachment.py} | 19 +- ...eAttachment.pyi => apprise_attachment.pyi} | 0 .../{AppriseConfig.py => apprise_config.py} | 11 +- .../{AppriseConfig.pyi => apprise_config.pyi} | 0 libs/apprise/{AppriseAsset.py => asset.py} | 119 +- libs/apprise/{AppriseAsset.pyi => asset.pyi} | 0 libs/apprise/attachment/__init__.py | 7 +- .../attachment/{AttachBase.py => base.py} | 144 +- .../attachment/{AttachBase.pyi => base.pyi} | 0 .../attachment/{AttachFile.py => file.py} | 23 +- .../attachment/{AttachHTTP.py => http.py} | 16 +- libs/apprise/attachment/memory.py | 231 + libs/apprise/cli.py | 561 +- libs/apprise/common.py | 38 +- libs/apprise/config/__init__.py | 7 +- .../apprise/config/{ConfigBase.py => base.py} | 17 +- .../config/{ConfigBase.pyi => base.pyi} | 0 .../apprise/config/{ConfigFile.py => file.py} | 14 +- .../apprise/config/{ConfigHTTP.py => http.py} | 8 +- .../config/{ConfigMemory.py => memory.py} | 6 +- libs/apprise/conversion.py | 8 +- libs/apprise/decorators/__init__.py | 2 +- .../{CustomNotifyPlugin.py => base.py} | 18 +- libs/apprise/decorators/notify.py | 4 +- libs/apprise/emojis.py | 2 +- libs/apprise/exception.py | 61 + libs/apprise/i18n/en/LC_MESSAGES/apprise.mo | Bin 3959 -> 3959 bytes libs/apprise/{AppriseLocale.py => locale.py} | 2 +- libs/apprise/logger.py | 2 +- libs/apprise/manager.py | 96 +- ...chmentManager.py => manager_attachment.py} | 7 +- ...figurationManager.py => manager_config.py} | 7 +- ...ificationManager.py => manager_plugins.py} | 8 +- libs/apprise/persistent_store.py | 1676 + libs/apprise/plugins/NotifyBoxcar.py | 395 - libs/apprise/plugins/__init__.py | 15 +- libs/apprise/plugins/africas_talking.py | 468 + .../{NotifyAppriseAPI.py => apprise_api.py} | 53 +- .../plugins/{NotifyAprs.py => aprs.py} | 20 +- .../plugins/{NotifyBark.py => bark.py} | 58 +- .../plugins/{NotifyBase.py => base.py} | 85 +- .../plugins/{NotifyBase.pyi => base.pyi} | 0 .../plugins/{NotifyBulkSMS.py => bulksms.py} | 27 +- .../plugins/{NotifyBulkVS.py => bulkvs.py} | 21 +- .../{NotifyBurstSMS.py => burstsms.py} | 23 +- .../plugins/{NotifyChantify.py => chanify.py} | 51 +- .../{NotifyClickSend.py => clicksend.py} | 42 +- .../plugins/{NotifyForm.py => custom_form.py} | 137 +- .../plugins/{NotifyJSON.py => custom_json.py} | 157 +- .../plugins/{NotifyXML.py => custom_xml.py} | 168 +- .../{NotifyD7Networks.py => d7networks.py} | 21 +- .../plugins/{NotifyDapnet.py => dapnet.py} | 23 +- .../plugins/{NotifyDBus.py => dbus.py} | 13 +- .../{NotifyDingTalk.py => dingtalk.py} | 20 +- .../plugins/{NotifyDiscord.py => discord.py} | 43 +- libs/apprise/plugins/email/__init__.py | 53 + .../plugins/{NotifyEmail.py => email/base.py} | 830 +- libs/apprise/plugins/email/common.py | 84 + libs/apprise/plugins/email/templates.py | 272 + .../plugins/{NotifyEmby.py => emby.py} | 22 +- .../plugins/{NotifyEnigma2.py => enigma2.py} | 22 +- .../plugins/{NotifyFCM => fcm}/__init__.py | 23 +- .../plugins/{NotifyFCM => fcm}/color.py | 6 +- .../plugins/{NotifyFCM => fcm}/common.py | 2 +- .../plugins/{NotifyFCM => fcm}/oauth.py | 2 +- .../plugins/{NotifyFCM => fcm}/priority.py | 2 +- .../plugins/{NotifyFeishu.py => feishu.py} | 17 +- .../plugins/{NotifyFlock.py => flock.py} | 19 +- .../{NotifyFreeMobile.py => freemobile.py} | 16 +- .../plugins/{NotifyGnome.py => gnome.py} | 12 +- .../{NotifyGoogleChat.py => google_chat.py} | 20 +- .../plugins/{NotifyGotify.py => gotify.py} | 22 +- .../plugins/{NotifyGrowl.py => growl.py} | 23 +- .../plugins/{NotifyGuilded.py => guilded.py} | 7 +- ...tifyHomeAssistant.py => home_assistant.py} | 32 +- .../plugins/{NotifyHttpSMS.py => httpsms.py} | 19 +- .../plugins/{NotifyIFTTT.py => ifttt.py} | 18 +- .../plugins/{NotifyJoin.py => join.py} | 19 +- .../{NotifyKavenegar.py => kavenegar.py} | 19 +- .../plugins/{NotifyKumulos.py => kumulos.py} | 17 +- .../{NotifyLametric.py => lametric.py} | 42 +- .../plugins/{NotifyLine.py => line.py} | 21 +- .../plugins/{NotifyLunaSea.py => lunasea.py} | 32 +- .../plugins/{NotifyMacOSX.py => macosx.py} | 12 +- .../plugins/{NotifyMailgun.py => mailgun.py} | 31 +- .../{NotifyMastodon.py => mastodon.py} | 26 +- .../plugins/{NotifyMatrix.py => matrix.py} | 507 +- .../{NotifyMattermost.py => mattermost.py} | 94 +- .../{NotifyMessageBird.py => messagebird.py} | 19 +- .../plugins/{NotifyMisskey.py => misskey.py} | 23 +- .../plugins/{NotifyMQTT.py => mqtt.py} | 48 +- .../plugins/{NotifyMSG91.py => msg91.py} | 20 +- .../plugins/{NotifyMSTeams.py => msteams.py} | 145 +- .../{NotifyNextcloud.py => nextcloud.py} | 22 +- ...otifyNextcloudTalk.py => nextcloudtalk.py} | 22 +- .../plugins/{NotifyNotica.py => notica.py} | 23 +- .../{NotifyNotifiarr.py => notifiarr.py} | 108 +- .../{NotifyNotifico.py => notifico.py} | 18 +- .../plugins/{NotifyNtfy.py => ntfy.py} | 93 +- .../{NotifyOffice365.py => office365.py} | 630 +- .../{NotifyOneSignal.py => one_signal.py} | 166 +- .../{NotifyOpsgenie.py => opsgenie.py} | 416 +- .../{NotifyPagerDuty.py => pagerduty.py} | 23 +- .../{NotifyPagerTree.py => pagertree.py} | 18 +- ...otifyParsePlatform.py => parseplatform.py} | 21 +- libs/apprise/plugins/plivo.py | 403 + ...tifyPopcornNotify.py => popcorn_notify.py} | 22 +- .../plugins/{NotifyProwl.py => prowl.py} | 17 +- .../{NotifyPushBullet.py => pushbullet.py} | 26 +- .../{NotifyPushDeer.py => pushdeer.py} | 20 +- .../plugins/{NotifyPushed.py => pushed.py} | 20 +- .../plugins/{NotifyPushjet.py => pushjet.py} | 22 +- .../plugins/{NotifyPushMe.py => pushme.py} | 18 +- .../{NotifyPushover.py => pushover.py} | 20 +- .../{NotifyPushSafer.py => pushsafer.py} | 60 +- .../plugins/{NotifyPushy.py => pushy.py} | 18 +- .../plugins/{NotifyReddit.py => reddit.py} | 24 +- .../plugins/{NotifyRevolt.py => revolt.py} | 18 +- .../{NotifyRocketChat.py => rocketchat.py} | 28 +- .../plugins/{NotifyRSyslog.py => rsyslog.py} | 21 +- .../plugins/{NotifyRyver.py => ryver.py} | 18 +- .../{NotifySendGrid.py => sendgrid.py} | 65 +- .../{NotifyServerChan.py => serverchan.py} | 19 +- libs/apprise/plugins/{NotifySES.py => ses.py} | 31 +- libs/apprise/plugins/seven.py | 290 + libs/apprise/plugins/sfr.py | 442 + .../{NotifySignalAPI.py => signal_api.py} | 47 +- .../{NotifySimplePush.py => simplepush.py} | 37 +- .../plugins/{NotifySinch.py => sinch.py} | 24 +- .../plugins/{NotifySlack.py => slack.py} | 263 +- .../{NotifySMSEagle.py => smseagle.py} | 56 +- .../{NotifySMSManager.py => smsmanager.py} | 21 +- .../plugins/{NotifySMTP2Go.py => smtp2go.py} | 57 +- libs/apprise/plugins/{NotifySNS.py => sns.py} | 24 +- .../{NotifySparkPost.py => sparkpost.py} | 63 +- libs/apprise/plugins/splunk.py | 500 + .../{NotifyStreamlabs.py => streamlabs.py} | 21 +- .../{NotifySynology.py => synology.py} | 21 +- .../plugins/{NotifySyslog.py => syslog.py} | 12 +- ...{NotifyTechulusPush.py => techuluspush.py} | 17 +- .../{NotifyTelegram.py => telegram.py} | 58 +- .../plugins/{NotifyThreema.py => threema.py} | 22 +- .../plugins/{NotifyTwilio.py => twilio.py} | 114 +- .../plugins/{NotifyTwist.py => twist.py} | 23 +- .../plugins/{NotifyTwitter.py => twitter.py} | 36 +- .../plugins/{NotifyVoipms.py => voipms.py} | 71 +- .../plugins/{NotifyVonage.py => vonage.py} | 21 +- .../{NotifyWebexTeams.py => webexteams.py} | 17 +- .../{NotifyWeComBot.py => wecombot.py} | 17 +- .../{NotifyWhatsApp.py => whatsapp.py} | 19 +- .../plugins/{NotifyWindows.py => windows.py} | 12 +- libs/apprise/plugins/workflows.py | 575 + libs/apprise/plugins/wxpusher.py | 373 + .../plugins/{NotifyXBMC.py => xbmc.py} | 29 +- .../plugins/{NotifyZulip.py => zulip.py} | 28 +- libs/apprise/{URLBase.py => url.py} | 188 +- libs/apprise/{URLBase.pyi => url.pyi} | 0 libs/apprise/utils/__init__.py | 27 + libs/apprise/utils/base64.py | 88 + libs/apprise/utils/cwe312.py | 197 + libs/apprise/utils/disk.py | 178 + libs/apprise/utils/logic.py | 121 + libs/apprise/utils/module.py | 59 + libs/apprise/{utils.py => utils/parse.py} | 570 +- libs/apprise/utils/pgp.py | 354 + libs/apprise/utils/singleton.py | 43 + libs/apprise/utils/templates.py | 84 + libs/attr/__init__.py | 58 +- libs/attr/__init__.pyi | 480 +- libs/attr/_cmp.py | 36 +- libs/attr/_cmp.pyi | 14 +- libs/attr/_compat.py | 23 +- libs/attr/_config.py | 2 +- libs/attr/_funcs.py | 303 +- libs/attr/_make.py | 1284 +- libs/attr/_next_gen.py | 458 +- libs/attr/converters.py | 116 +- libs/attr/converters.pyi | 20 +- libs/attr/filters.py | 28 +- libs/attr/filters.pyi | 6 +- libs/attr/setters.py | 16 +- libs/attr/setters.pyi | 3 +- libs/attr/validators.py | 353 +- libs/attr/validators.pyi | 52 +- libs/attrs-23.2.0.dist-info/METADATA | 202 - libs/attrs-23.2.0.dist-info/RECORD | 37 - .../INSTALLER | 0 libs/attrs-24.3.0.dist-info/METADATA | 246 + libs/attrs-24.3.0.dist-info/RECORD | 37 + .../REQUESTED | 0 .../WHEEL | 2 +- .../licenses/LICENSE | 0 libs/attrs/__init__.py | 14 +- libs/attrs/__init__.pyi | 254 +- .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 13 +- .../RECORD | 21 +- .../REQUESTED | 0 .../WHEEL | 2 +- libs/babelfish/compat.py | 37 + libs/babelfish/converters/__init__.py | 2 +- libs/babelfish/country.py | 2 +- libs/babelfish/language.py | 2 +- libs/babelfish/script.py | 2 +- .../RECORD | 2 +- .../WHEEL | 2 +- .../METADATA | 4 +- .../backports.zoneinfo-0.2.1.dist-info/RECORD | 6 +- libs/backports.zoneinfo-0.2.1.dist-info/WHEEL | 2 +- libs/beautifulsoup4-4.12.3.dist-info/METADATA | 2 +- libs/beautifulsoup4-4.12.3.dist-info/RECORD | 4 +- libs/beautifulsoup4-4.12.3.dist-info/WHEEL | 2 +- libs/bidict-0.23.1.dist-info/RECORD | 2 +- libs/bidict-0.23.1.dist-info/WHEEL | 2 +- libs/blinker-1.7.0.dist-info/METADATA | 62 - libs/blinker-1.7.0.dist-info/RECORD | 11 - .../INSTALLER | 0 .../LICENSE.txt} | 0 libs/blinker-1.8.2.dist-info/METADATA | 60 + libs/blinker-1.8.2.dist-info/RECORD | 10 + .../REQUESTED | 0 .../WHEEL | 2 +- libs/blinker/__init__.py | 61 +- libs/blinker/_saferef.py | 230 - libs/blinker/_utilities.py | 127 +- libs/blinker/base.py | 701 +- .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 4 +- libs/certifi-2024.12.14.dist-info/RECORD | 12 + .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 libs/certifi-2024.2.2.dist-info/RECORD | 12 - libs/certifi/__init__.py | 2 +- libs/certifi/cacert.pem | 268 +- libs/chardet-5.2.0.dist-info/RECORD | 2 +- libs/chardet-5.2.0.dist-info/WHEEL | 2 +- .../charset_normalizer-3.3.2.dist-info/RECORD | 22 - .../entry_points.txt | 2 - .../INSTALLER | 0 .../LICENSE | 4 +- .../METADATA | 82 +- .../charset_normalizer-3.4.1.dist-info/RECORD | 22 + .../REQUESTED | 0 libs/charset_normalizer-3.4.1.dist-info/WHEEL | 5 + .../entry_points.txt | 2 + .../top_level.txt | 0 libs/charset_normalizer/__init__.py | 4 +- libs/charset_normalizer/__main__.py | 2 + libs/charset_normalizer/api.py | 136 +- libs/charset_normalizer/cd.py | 68 +- libs/charset_normalizer/cli/__init__.py | 2 + libs/charset_normalizer/cli/__main__.py | 47 +- libs/charset_normalizer/constant.py | 29 +- libs/charset_normalizer/legacy.py | 20 +- libs/charset_normalizer/md.py | 65 +- libs/charset_normalizer/models.py | 106 +- libs/charset_normalizer/utils.py | 75 +- libs/charset_normalizer/version.py | 4 +- libs/click-8.1.7.dist-info/METADATA | 103 - libs/click-8.1.7.dist-info/RECORD | 24 - libs/click-8.1.7.dist-info/top_level.txt | 1 - .../INSTALLER | 0 .../LICENSE.txt} | 0 libs/click-8.1.8.dist-info/METADATA | 74 + libs/click-8.1.8.dist-info/RECORD | 23 + .../REQUESTED | 0 .../WHEEL | 2 +- libs/click/__init__.py | 4 +- libs/click/_compat.py | 2 +- libs/click/_termui_impl.py | 113 +- libs/click/core.py | 129 +- libs/click/decorators.py | 81 +- libs/click/exceptions.py | 14 +- libs/click/globals.py | 7 +- libs/click/parser.py | 4 +- libs/click/shell_completion.py | 15 +- libs/click/termui.py | 2 +- libs/click/testing.py | 6 +- libs/click/types.py | 16 +- libs/click/utils.py | 10 +- libs/colorama-0.4.6.dist-info/METADATA | 2 +- libs/colorama-0.4.6.dist-info/RECORD | 4 +- libs/colorama-0.4.6.dist-info/WHEEL | 2 +- libs/dateutil/__init__.py | 16 + libs/dateutil/_version.py | 4 +- libs/dateutil/parser/isoparser.py | 2 +- libs/dateutil/relativedelta.py | 2 +- libs/dateutil/rrule.py | 2 +- libs/dateutil/tz/tz.py | 2 +- .../zoneinfo/dateutil-zoneinfo.tar.gz | Bin 174394 -> 156385 bytes .../deep_translator-1.11.4.dist-info/METADATA | 1 + libs/deep_translator-1.11.4.dist-info/RECORD | 4 +- libs/deep_translator-1.11.4.dist-info/WHEEL | 2 +- libs/dnspython-2.6.1.dist-info/METADATA | 2 +- libs/dnspython-2.6.1.dist-info/RECORD | 4 +- libs/dnspython-2.6.1.dist-info/WHEEL | 2 +- libs/dogpile.cache-1.3.2.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 2 +- .../RECORD | 24 +- .../REQUESTED | 0 libs/dogpile.cache-1.3.3.dist-info/WHEEL | 5 + .../entry_points.txt | 0 .../top_level.txt | 0 libs/dogpile/__init__.py | 2 +- libs/dogpile/cache/api.py | 18 +- libs/dogpile/cache/backends/memcached.py | 88 +- libs/dogpile/cache/region.py | 14 +- .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 7 +- .../RECORD | 78 +- .../REQUESTED | 0 .../WHEEL | 0 .../box-LICENSE.txt | 0 .../click-LICENSE.rst | 0 .../entry_points.txt | 0 .../licenses.sh | 0 .../python-dotenv-LICENSE.txt | 0 .../ruamel.yaml-LICENSE.txt | 0 .../toml-LICENSE.txt | 0 .../tomli-LICENSE.txt | 0 .../top_level.txt | 0 .../vendor_versions.txt | 0 libs/dynaconf/__init__.py | 16 +- libs/dynaconf/base.py | 26 +- libs/dynaconf/cli.py | 32 +- libs/dynaconf/contrib/__init__.py | 6 +- libs/dynaconf/contrib/django_dynaconf_v2.py | 2 +- libs/dynaconf/contrib/flask_dynaconf.py | 3 +- libs/dynaconf/default_settings.py | 8 +- libs/dynaconf/hooking.py | 65 +- libs/dynaconf/loaders/__init__.py | 9 +- libs/dynaconf/loaders/base.py | 3 +- libs/dynaconf/loaders/ini_loader.py | 1 - libs/dynaconf/loaders/json_loader.py | 1 - libs/dynaconf/loaders/py_loader.py | 1 - libs/dynaconf/loaders/vault_loader.py | 3 +- libs/dynaconf/loaders/yaml_loader.py | 10 +- libs/dynaconf/strategies/filtering.py | 16 +- libs/dynaconf/utils/__init__.py | 9 +- libs/dynaconf/utils/boxing.py | 16 +- libs/dynaconf/utils/inspect.py | 8 +- libs/dynaconf/utils/parse_conf.py | 50 +- libs/dynaconf/validator.py | 4 +- libs/dynaconf/validator_conditions.py | 1 + libs/engineio/async_client.py | 46 +- .../engineio/async_drivers/_websocket_wsgi.py | 2 +- libs/engineio/async_drivers/aiohttp.py | 6 +- libs/engineio/async_drivers/asgi.py | 63 +- libs/engineio/async_drivers/eventlet.py | 4 +- libs/engineio/async_drivers/gevent_uwsgi.py | 8 +- libs/engineio/async_drivers/sanic.py | 9 +- libs/engineio/async_drivers/tornado.py | 6 +- libs/engineio/async_server.py | 111 +- libs/engineio/async_socket.py | 25 +- libs/engineio/base_client.py | 14 +- libs/engineio/base_server.py | 13 + libs/engineio/base_socket.py | 1 - libs/engineio/client.py | 37 +- libs/engineio/middleware.py | 4 +- libs/engineio/packet.py | 2 +- libs/engineio/payload.py | 2 +- libs/engineio/server.py | 74 +- libs/engineio/socket.py | 20 +- libs/enzyme-0.4.1.dist-info/LICENSE | 13 - libs/enzyme-0.4.1.dist-info/METADATA | 84 - libs/enzyme-0.4.1.dist-info/RECORD | 20 - .../INSTALLER | 0 libs/enzyme-0.5.2.dist-info/LICENSE | 22 + libs/enzyme-0.5.2.dist-info/METADATA | 70 + libs/enzyme-0.5.2.dist-info/RECORD | 15 + .../REQUESTED | 0 libs/enzyme-0.5.2.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/enzyme/__init__.py | 11 +- libs/enzyme/compat.py | 13 - libs/enzyme/exceptions.py | 8 +- libs/enzyme/mkv.py | 344 +- libs/enzyme/parsers/__init__.py | 1 - libs/enzyme/parsers/ebml/__init__.py | 1 - libs/enzyme/parsers/ebml/core.py | 103 +- libs/enzyme/parsers/ebml/readers.py | 112 +- libs/enzyme/tests/__init__.py | 10 - libs/enzyme/tests/parsers/ebml/test1.mkv.yml | 2974 -- libs/enzyme/tests/test_mkv.py | 607 - libs/enzyme/tests/test_parsers.py | 122 - libs/fcache-0.5.2.dist-info/METADATA | 2 +- libs/fcache-0.5.2.dist-info/RECORD | 4 +- libs/fcache-0.5.2.dist-info/WHEEL | 2 +- libs/fese-0.3.0.dist-info/RECORD | 2 +- libs/fese-0.3.0.dist-info/WHEEL | 2 +- .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 4 +- .../RECORD | 28 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../entry_points.txt | 0 .../top_level.txt | 0 libs/ffsubsync/_version.py | 8 +- libs/ffsubsync/ffmpeg_utils.py | 4 + libs/ffsubsync/ffsubsync.py | 48 +- libs/ffsubsync/generic_subtitles.py | 4 +- libs/ffsubsync/speech_transformers.py | 2 + libs/ffsubsync/subtitle_parser.py | 2 +- .../INSTALLER | 0 .../LICENSE.txt} | 0 .../METADATA | 93 +- .../RECORD | 30 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../entry_points.txt | 0 libs/flask/app.py | 10 + libs/flask/blueprints.py | 38 + libs/flask/cli.py | 6 +- libs/flask/config.py | 6 +- libs/flask/json/tag.py | 1 + libs/flask/sansio/app.py | 4 - libs/flask/sansio/scaffold.py | 12 +- libs/flask/sessions.py | 10 +- libs/flask_cors/core.py | 8 +- libs/flask_cors/extension.py | 26 +- libs/flask_cors/version.py | 2 +- libs/flask_migrate/__init__.py | 12 +- libs/flask_migrate/cli.py | 48 +- libs/flask_socketio/__init__.py | 38 +- libs/flask_socketio/namespace.py | 16 +- libs/flask_socketio/test_client.py | 2 +- libs/ftfy-6.1.3.dist-info/RECORD | 20 - .../INSTALLER | 0 .../LICENSE.txt | 0 .../METADATA | 38 +- libs/ftfy-6.2.3.dist-info/RECORD | 18 + .../REQUESTED | 0 .../WHEEL | 2 +- .../entry_points.txt | 0 libs/ftfy/__init__.py | 53 +- libs/ftfy/bad_codecs/__init__.py | 9 +- libs/ftfy/bad_codecs/sloppy.py | 28 +- libs/ftfy/bad_codecs/utf8_variants.py | 29 +- libs/ftfy/badness.py | 6 +- libs/ftfy/chardata.py | 16 +- libs/ftfy/cli.py | 8 +- libs/ftfy/fixes.py | 61 +- libs/ftfy/formatting.py | 8 +- libs/ga4mp-2.0.4.dist-info/METADATA | 1 + libs/ga4mp-2.0.4.dist-info/RECORD | 4 +- libs/ga4mp-2.0.4.dist-info/WHEEL | 2 +- libs/guessit-3.8.0.dist-info/METADATA | 32 +- libs/guessit-3.8.0.dist-info/RECORD | 4 +- libs/guessit-3.8.0.dist-info/WHEEL | 2 +- libs/h11-0.14.0.dist-info/METADATA | 2 +- libs/h11-0.14.0.dist-info/RECORD | 4 +- libs/h11-0.14.0.dist-info/WHEEL | 2 +- .../INSTALLER | 0 .../LICENSE.md | 2 +- .../METADATA | 23 +- libs/idna-3.10.dist-info/RECORD | 15 + .../REQUESTED | 0 .../WHEEL | 0 libs/idna-3.6.dist-info/RECORD | 15 - libs/idna/__init__.py | 3 +- libs/idna/codec.py | 58 +- libs/idna/compat.py | 10 +- libs/idna/core.py | 289 +- libs/idna/idnadata.py | 5593 ++-- libs/idna/intranges.py | 11 +- libs/idna/package_data.py | 3 +- libs/idna/uts46data.py | 16439 +++++----- .../importlib_metadata-7.0.1.dist-info/RECORD | 18 - libs/importlib_metadata-7.0.1.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 55 +- .../importlib_metadata-7.2.1.dist-info/RECORD | 20 + .../REQUESTED | 0 libs/importlib_metadata-7.2.1.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/importlib_metadata/__init__.py | 142 +- libs/importlib_metadata/_meta.py | 47 +- .../compat}/__init__.py | 0 libs/importlib_metadata/compat/py311.py | 22 + .../{_py39compat.py => compat/py39.py} | 7 +- .../RECORD | 50 - .../importlib_resources-6.1.2.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 46 +- .../RECORD | 38 + .../REQUESTED | 0 .../importlib_resources-6.4.5.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/importlib_resources/__init__.py | 28 +- libs/importlib_resources/_common.py | 16 +- libs/importlib_resources/_functional.py | 81 + libs/importlib_resources/compat/py39.py | 4 +- libs/importlib_resources/future/adapters.py | 51 +- libs/importlib_resources/readers.py | 25 +- libs/importlib_resources/simple.py | 2 +- libs/importlib_resources/tests/_compat.py | 32 - libs/importlib_resources/tests/_path.py | 52 +- .../subdirectory => compat}/__init__.py | 0 .../importlib_resources/tests/compat/py312.py | 18 + libs/importlib_resources/tests/compat/py39.py | 13 + .../tests/data01/binary.file | Bin 4 -> 0 bytes .../tests/data01/subdirectory/binary.file | 1 - .../tests/data01/utf-16.file | Bin 44 -> 0 bytes .../tests/data01/utf-8.file | 1 - .../tests/data02/one/resource1.txt | 1 - .../subdirectory/subsubdir/resource.txt | 1 - .../tests/data02/two/__init__.py | 0 .../tests/data02/two/resource2.txt | 1 - .../tests/namespacedata01/binary.file | Bin 4 -> 0 bytes .../namespacedata01/subdirectory/binary.file | 1 - .../tests/namespacedata01/utf-16.file | Bin 44 -> 0 bytes .../tests/namespacedata01/utf-8.file | 1 - .../tests/test_contents.py | 15 +- libs/importlib_resources/tests/test_custom.py | 2 +- libs/importlib_resources/tests/test_files.py | 161 +- .../tests/test_functional.py | 255 + libs/importlib_resources/tests/test_open.py | 15 +- libs/importlib_resources/tests/test_path.py | 5 +- libs/importlib_resources/tests/test_read.py | 14 +- libs/importlib_resources/tests/test_reader.py | 48 +- .../tests/test_resource.py | 64 +- libs/importlib_resources/tests/util.py | 75 +- libs/importlib_resources/tests/zip.py | 26 +- libs/inflect-7.0.0.dist-info/RECORD | 12 - libs/inflect-7.0.0.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 71 +- libs/inflect-7.4.0.dist-info/RECORD | 11 + .../REQUESTED | 0 libs/inflect-7.4.0.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/inflect/__init__.py | 418 +- libs/inflect/compat/py38.py | 7 + libs/inflect/compat/pydantic.py | 19 - libs/inflect/compat/pydantic1.py | 8 - libs/itsdangerous-2.1.2.dist-info/METADATA | 94 - libs/itsdangerous-2.1.2.dist-info/RECORD | 16 - libs/itsdangerous-2.1.2.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../INSTALLER | 0 .../LICENSE.txt} | 0 libs/itsdangerous-2.2.0.dist-info/METADATA | 60 + libs/itsdangerous-2.2.0.dist-info/RECORD | 15 + .../REQUESTED | 0 .../WHEEL | 0 libs/itsdangerous/__init__.py | 21 +- libs/itsdangerous/_json.py | 8 +- libs/itsdangerous/encoding.py | 14 +- libs/itsdangerous/exc.py | 29 +- libs/itsdangerous/serializer.py | 215 +- libs/itsdangerous/signer.py | 63 +- libs/itsdangerous/timed.py | 84 +- libs/itsdangerous/url_safe.py | 23 +- .../INSTALLER | 0 .../LICENSE.txt} | 0 .../METADATA | 90 +- libs/jinja2-3.1.5.dist-info/RECORD | 33 + .../REQUESTED | 0 .../WHEEL | 2 +- libs/jinja2-3.1.5.dist-info/entry_points.txt | 3 + libs/jinja2/__init__.py | 3 +- libs/jinja2/async_utils.py | 29 +- libs/jinja2/bccache.py | 10 +- libs/jinja2/compiler.py | 122 +- libs/jinja2/debug.py | 2 +- libs/jinja2/environment.py | 89 +- libs/jinja2/ext.py | 21 +- libs/jinja2/filters.py | 108 +- libs/jinja2/idtracking.py | 26 +- libs/jinja2/lexer.py | 12 +- libs/jinja2/loaders.py | 74 +- libs/jinja2/meta.py | 1 + libs/jinja2/nodes.py | 4 +- libs/jinja2/optimizer.py | 1 + libs/jinja2/parser.py | 61 +- libs/jinja2/runtime.py | 55 +- libs/jinja2/sandbox.py | 88 +- libs/jinja2/tests.py | 5 +- libs/jinja2/utils.py | 23 +- libs/jinja2/visitor.py | 4 +- libs/jsonschema-4.17.3.dist-info/METADATA | 2 +- libs/jsonschema-4.17.3.dist-info/RECORD | 4 +- libs/jsonschema-4.17.3.dist-info/WHEEL | 2 +- libs/mako/__init__.py | 2 +- libs/mako/codegen.py | 26 +- libs/mako/lexer.py | 2 +- libs/mako/parsetree.py | 2 +- libs/mako/pyparser.py | 16 + libs/markdown/__meta__.py | 2 +- libs/markdown/blockprocessors.py | 5 + libs/markdown/extensions/abbr.py | 142 +- libs/markdown/extensions/attr_list.py | 86 +- libs/markdown/extensions/fenced_code.py | 15 +- libs/markdown/extensions/smarty.py | 2 +- libs/markdown/extensions/toc.py | 104 +- libs/msgpack-1.0.7.dist-info/RECORD | 23 - .../COPYING | 0 .../INSTALLER | 0 .../METADATA | 131 +- libs/msgpack-1.1.0.dist-info/RECORD | 12 + .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 libs/msgpack/__init__.py | 16 +- libs/msgpack/_cmsgpack.cpp | 25187 ---------------- libs/msgpack/_cmsgpack.pyx | 11 - libs/msgpack/_packer.pyx | 374 - libs/msgpack/_unpacker.pyx | 547 - libs/msgpack/buff_converter.h | 8 - libs/msgpack/ext.py | 8 +- libs/msgpack/fallback.py | 82 +- libs/msgpack/pack.h | 89 - libs/msgpack/pack_template.h | 820 - libs/msgpack/sysdep.h | 194 - libs/msgpack/unpack.h | 391 - libs/msgpack/unpack_define.h | 95 - libs/msgpack/unpack_template.h | 464 - libs/platformdirs-4.2.0.dist-info/RECORD | 15 - .../INSTALLER | 0 .../METADATA | 38 +- libs/platformdirs-4.3.6.dist-info/RECORD | 15 + .../REQUESTED | 0 libs/platformdirs-4.3.6.dist-info/WHEEL | 4 + .../licenses/LICENSE | 0 libs/platformdirs/__init__.py | 102 +- libs/platformdirs/__main__.py | 2 +- libs/platformdirs/android.py | 66 +- libs/platformdirs/api.py | 39 +- libs/platformdirs/macos.py | 25 +- libs/platformdirs/unix.py | 43 +- libs/platformdirs/version.py | 4 +- libs/platformdirs/windows.py | 35 +- libs/pycountry-23.12.11.dist-info/METADATA | 384 - libs/pycountry-23.12.11.dist-info/WHEEL | 4 - .../INSTALLER | 0 .../LICENSE.txt | 0 libs/pycountry-24.6.1.dist-info/METADATA | 410 + .../RECORD | 227 +- .../REQUESTED | 0 libs/pycountry-24.6.1.dist-info/WHEEL | 4 + libs/pycountry/COPYRIGHT.txt | 46 + libs/pycountry/__init__.py | 14 +- libs/pycountry/databases/iso3166-2.json | 3605 +-- libs/pycountry/db.py | 30 +- .../locales/ach/LC_MESSAGES/iso3166-1.mo | Bin 9088 -> 9144 bytes .../locales/ast/LC_MESSAGES/iso639-5.mo | Bin 372 -> 4029 bytes .../locales/be/LC_MESSAGES/iso3166-2.mo | Bin 201179 -> 194548 bytes .../locales/bg/LC_MESSAGES/iso3166-2.mo | Bin 15126 -> 15883 bytes .../locales/bn/LC_MESSAGES/iso639-5.mo | Bin 1205 -> 5688 bytes .../locales/bn_IN/LC_MESSAGES/iso3166-1.mo | Bin 35713 -> 36015 bytes .../locales/cs/LC_MESSAGES/iso639-5.mo | Bin 371 -> 3971 bytes .../locales/cy/LC_MESSAGES/iso3166-2.mo | Bin 35290 -> 34985 bytes .../locales/cy/LC_MESSAGES/iso639-5.mo | Bin 1419 -> 2109 bytes .../locales/da/LC_MESSAGES/iso3166-2.mo | Bin 135392 -> 134479 bytes .../locales/da/LC_MESSAGES/iso639-5.mo | Bin 910 -> 3961 bytes .../locales/de/LC_MESSAGES/iso3166-2.mo | Bin 219517 -> 212230 bytes .../locales/de/LC_MESSAGES/iso639-3.mo | Bin 395556 -> 395660 bytes .../locales/el/LC_MESSAGES/iso639-5.mo | Bin 1951 -> 2391 bytes .../locales/en/LC_MESSAGES/iso3166-2.mo | Bin 91227 -> 90768 bytes .../locales/eo/LC_MESSAGES/iso3166-2.mo | Bin 47595 -> 46967 bytes .../locales/eo/LC_MESSAGES/iso639-5.mo | Bin 5484 -> 6705 bytes .../locales/es/LC_MESSAGES/iso3166-1.mo | Bin 23741 -> 24037 bytes .../locales/es/LC_MESSAGES/iso3166-2.mo | Bin 15724 -> 15680 bytes .../locales/es/LC_MESSAGES/iso3166-3.mo | Bin 2796 -> 2927 bytes .../locales/es/LC_MESSAGES/iso4217.mo | Bin 8923 -> 9745 bytes .../locales/et/LC_MESSAGES/iso3166-2.mo | Bin 5140 -> 12218 bytes .../locales/et/LC_MESSAGES/iso4217.mo | Bin 9145 -> 9565 bytes .../locales/et/LC_MESSAGES/iso639-3.mo | Bin 30637 -> 32017 bytes .../locales/eu/LC_MESSAGES/iso3166-2.mo | Bin 23772 -> 23745 bytes .../locales/fi/LC_MESSAGES/iso3166-2.mo | Bin 5172 -> 5183 bytes .../locales/fr/LC_MESSAGES/iso15924.mo | Bin 10249 -> 10260 bytes .../locales/fr/LC_MESSAGES/iso3166-1.mo | Bin 24141 -> 24340 bytes .../locales/fr/LC_MESSAGES/iso3166-2.mo | Bin 166186 -> 160680 bytes .../locales/fr/LC_MESSAGES/iso3166-3.mo | Bin 2725 -> 2860 bytes .../locales/fr/LC_MESSAGES/iso4217.mo | Bin 9303 -> 9998 bytes .../locales/fr/LC_MESSAGES/iso639-3.mo | Bin 407281 -> 418827 bytes .../locales/fr/LC_MESSAGES/iso639-5.mo | Bin 7886 -> 7943 bytes .../locales/fur/LC_MESSAGES/iso3166-1.mo | Bin 23756 -> 23950 bytes .../locales/fur/LC_MESSAGES/iso3166-3.mo | Bin 1048 -> 1483 bytes .../locales/fur/LC_MESSAGES/iso639-5.mo | Bin 7043 -> 7791 bytes .../locales/he/LC_MESSAGES/iso3166-2.mo | Bin 34323 -> 43708 bytes .../locales/hr/LC_MESSAGES/iso3166-2.mo | Bin 26178 -> 25948 bytes .../locales/hu/LC_MESSAGES/iso3166-1.mo | Bin 24519 -> 24602 bytes .../locales/hu/LC_MESSAGES/iso3166-2.mo | Bin 69162 -> 68957 bytes .../locales/hu/LC_MESSAGES/iso4217.mo | Bin 8986 -> 9822 bytes .../locales/ia/LC_MESSAGES/iso3166-1.mo | Bin 23338 -> 23347 bytes .../locales/id/LC_MESSAGES/iso3166-2.mo | Bin 165253 -> 159848 bytes .../locales/it/LC_MESSAGES/iso3166-2.mo | Bin 163383 -> 157445 bytes .../locales/it/LC_MESSAGES/iso639-5.mo | Bin 6606 -> 6985 bytes .../locales/ja/LC_MESSAGES/iso3166-2.mo | Bin 100171 -> 99516 bytes .../locales/ka/LC_MESSAGES/iso15924.mo | Bin 4520 -> 6755 bytes .../locales/ka/LC_MESSAGES/iso3166-2.mo | Bin 109788 -> 111221 bytes .../locales/kab/LC_MESSAGES/iso3166-2.mo | Bin 572 -> 1099 bytes .../locales/km/LC_MESSAGES/iso3166-1.mo | Bin 35806 -> 36282 bytes .../locales/km/LC_MESSAGES/iso3166-2.mo | Bin 0 -> 372 bytes .../locales/km/LC_MESSAGES/iso4217.mo | Bin 0 -> 5396 bytes .../locales/ko/LC_MESSAGES/iso3166-1.mo | Bin 24204 -> 24296 bytes .../locales/ko/LC_MESSAGES/iso3166-2.mo | Bin 3047 -> 4513 bytes .../locales/ko/LC_MESSAGES/iso3166-3.mo | Bin 2577 -> 2783 bytes .../locales/ko/LC_MESSAGES/iso4217.mo | Bin 9975 -> 10767 bytes .../locales/lt/LC_MESSAGES/iso15924.mo | Bin 7253 -> 10170 bytes .../locales/lt/LC_MESSAGES/iso3166-1.mo | Bin 23186 -> 24199 bytes .../locales/lt/LC_MESSAGES/iso3166-2.mo | Bin 75936 -> 75519 bytes .../locales/lt/LC_MESSAGES/iso3166-3.mo | Bin 2767 -> 2987 bytes .../locales/lt/LC_MESSAGES/iso4217.mo | Bin 7034 -> 10089 bytes .../locales/lt/LC_MESSAGES/iso639-5.mo | Bin 0 -> 7646 bytes .../locales/nb/LC_MESSAGES/iso3166-1.mo | Bin 23349 -> 0 bytes .../locales/nb/LC_MESSAGES/iso3166-3.mo | Bin 2713 -> 0 bytes .../{nb => nb_NO}/LC_MESSAGES/iso15924.mo | Bin .../locales/nb_NO/LC_MESSAGES/iso3166-1.mo | Bin 0 -> 23547 bytes .../locales/nb_NO/LC_MESSAGES/iso3166-2.mo | Bin 1294 -> 1305 bytes .../locales/nb_NO/LC_MESSAGES/iso3166-3.mo | Bin 0 -> 2838 bytes .../{nb => nb_NO}/LC_MESSAGES/iso4217.mo | Bin .../{nb => nb_NO}/LC_MESSAGES/iso639-3.mo | Bin .../locales/nl/LC_MESSAGES/iso3166-2.mo | Bin 213685 -> 215191 bytes .../locales/oc/LC_MESSAGES/iso3166-2.mo | Bin 5714 -> 5637 bytes .../locales/oc/LC_MESSAGES/iso639-5.mo | Bin 807 -> 856 bytes .../locales/pa/LC_MESSAGES/iso3166-1.mo | Bin 30504 -> 30877 bytes .../locales/pa/LC_MESSAGES/iso3166-3.mo | Bin 3356 -> 3558 bytes .../locales/pl/LC_MESSAGES/iso3166-2.mo | Bin 188055 -> 203350 bytes .../locales/pt_BR/LC_MESSAGES/iso3166-3.mo | Bin 2728 -> 2874 bytes .../locales/ro/LC_MESSAGES/iso15924.mo | Bin 8284 -> 10632 bytes .../locales/ro/LC_MESSAGES/iso3166-1.mo | Bin 22866 -> 23486 bytes .../locales/ro/LC_MESSAGES/iso3166-2.mo | Bin 27706 -> 229998 bytes .../locales/ro/LC_MESSAGES/iso3166-3.mo | Bin 2818 -> 2987 bytes .../locales/ro/LC_MESSAGES/iso4217.mo | Bin 7042 -> 9977 bytes .../locales/ro/LC_MESSAGES/iso639-5.mo | Bin 0 -> 10650 bytes .../{mo => ro_MD}/LC_MESSAGES/iso3166-1.mo | Bin .../locales/ru/LC_MESSAGES/iso3166-2.mo | Bin 112174 -> 105964 bytes .../locales/sc/LC_MESSAGES/iso3166-2.mo | Bin 104509 -> 99178 bytes .../locales/sk/LC_MESSAGES/iso3166-1.mo | Bin 23531 -> 24190 bytes .../locales/sk/LC_MESSAGES/iso3166-2.mo | Bin 13211 -> 13180 bytes .../locales/sk/LC_MESSAGES/iso3166-3.mo | Bin 2690 -> 2887 bytes .../locales/sl/LC_MESSAGES/iso3166-2.mo | Bin 79740 -> 79342 bytes .../locales/sq/LC_MESSAGES/iso639-5.mo | Bin 371 -> 3810 bytes .../locales/sr/LC_MESSAGES/iso3166-2.mo | Bin 145300 -> 144341 bytes .../locales/sr/LC_MESSAGES/iso639-5.mo | Bin 4031 -> 6247 bytes .../locales/sr@latin/LC_MESSAGES/iso3166-2.mo | Bin 122426 -> 121630 bytes .../locales/sr@latin/LC_MESSAGES/iso639-5.mo | Bin 3277 -> 5040 bytes .../locales/sv/LC_MESSAGES/iso3166-2.mo | Bin 164336 -> 158999 bytes .../locales/ta/LC_MESSAGES/iso15924.mo | Bin 0 -> 15455 bytes .../locales/ta/LC_MESSAGES/iso3166-1.mo | Bin 31984 -> 35476 bytes .../locales/ta/LC_MESSAGES/iso3166-2.mo | Bin 0 -> 372 bytes .../locales/ta/LC_MESSAGES/iso3166-3.mo | Bin 4036 -> 4343 bytes .../locales/ta/LC_MESSAGES/iso4217.mo | Bin 0 -> 14738 bytes .../locales/ta/LC_MESSAGES/iso639-3.mo | Bin 438383 -> 438885 bytes .../locales/ta/LC_MESSAGES/iso639-5.mo | Bin 0 -> 11658 bytes .../locales/th/LC_MESSAGES/iso3166-2.mo | Bin 83632 -> 82740 bytes .../locales/tr/LC_MESSAGES/iso3166-2.mo | Bin 77264 -> 76675 bytes .../locales/uk/LC_MESSAGES/iso3166-2.mo | Bin 265202 -> 255945 bytes .../locales/vi/LC_MESSAGES/iso3166-2.mo | Bin 135733 -> 135199 bytes .../locales/zh_CN/LC_MESSAGES/iso3166-2.mo | Bin 117078 -> 116542 bytes .../locales/zh_TW/LC_MESSAGES/iso3166-2.mo | Bin 18281 -> 18208 bytes libs/pycountry/tests/test_general.py | 121 +- libs/pygments-2.17.2.dist-info/RECORD | 330 - .../INSTALLER | 0 .../METADATA | 11 +- libs/pygments-2.19.1.dist-info/RECORD | 346 + .../REQUESTED | 0 libs/pygments-2.19.1.dist-info/WHEEL | 4 + .../entry_points.txt | 0 .../licenses/AUTHORS | 14 +- .../licenses/LICENSE | 0 libs/pygments/__init__.py | 4 +- libs/pygments/__main__.py | 2 +- libs/pygments/cmdline.py | 24 +- libs/pygments/console.py | 10 +- libs/pygments/filter.py | 5 +- libs/pygments/filters/__init__.py | 8 +- libs/pygments/formatter.py | 7 +- libs/pygments/formatters/__init__.py | 13 +- libs/pygments/formatters/_mapping.py | 0 libs/pygments/formatters/bbcode.py | 4 +- libs/pygments/formatters/groff.py | 6 +- libs/pygments/formatters/html.py | 85 +- libs/pygments/formatters/img.py | 24 +- libs/pygments/formatters/irc.py | 2 +- libs/pygments/formatters/latex.py | 51 +- libs/pygments/formatters/other.py | 7 +- libs/pygments/formatters/pangomarkup.py | 4 +- libs/pygments/formatters/rtf.py | 251 +- libs/pygments/formatters/svg.py | 37 +- libs/pygments/formatters/terminal.py | 2 +- libs/pygments/formatters/terminal256.py | 2 +- libs/pygments/lexer.py | 42 +- libs/pygments/lexers/__init__.py | 23 +- libs/pygments/lexers/_ada_builtins.py | 2 +- libs/pygments/lexers/_asy_builtins.py | 2 +- libs/pygments/lexers/_cl_builtins.py | 2 +- libs/pygments/lexers/_cocoa_builtins.py | 4 +- libs/pygments/lexers/_csound_builtins.py | 2 +- libs/pygments/lexers/_css_builtins.py | 2 +- libs/pygments/lexers/_googlesql_builtins.py | 918 + libs/pygments/lexers/_julia_builtins.py | 2 +- libs/pygments/lexers/_lasso_builtins.py | 2 +- libs/pygments/lexers/_lilypond_builtins.py | 2 +- libs/pygments/lexers/_lua_builtins.py | 10 +- libs/pygments/lexers/_luau_builtins.py | 62 + libs/pygments/lexers/_mapping.py | 40 +- libs/pygments/lexers/_mql_builtins.py | 2 +- libs/pygments/lexers/_mysql_builtins.py | 6 +- libs/pygments/lexers/_openedge_builtins.py | 2 +- libs/pygments/lexers/_php_builtins.py | 6 +- libs/pygments/lexers/_postgres_builtins.py | 10 +- libs/pygments/lexers/_qlik_builtins.py | 2 +- libs/pygments/lexers/_scheme_builtins.py | 2 +- libs/pygments/lexers/_scilab_builtins.py | 8 +- libs/pygments/lexers/_sourcemod_builtins.py | 6 +- libs/pygments/lexers/_stan_builtins.py | 2 +- libs/pygments/lexers/_stata_builtins.py | 2 +- libs/pygments/lexers/_tsql_builtins.py | 2 +- libs/pygments/lexers/_usd_builtins.py | 2 +- libs/pygments/lexers/_vbscript_builtins.py | 2 +- libs/pygments/lexers/_vim_builtins.py | 2 +- libs/pygments/lexers/actionscript.py | 14 +- libs/pygments/lexers/ada.py | 6 +- libs/pygments/lexers/agile.py | 4 +- libs/pygments/lexers/algebra.py | 21 +- libs/pygments/lexers/ambient.py | 5 +- libs/pygments/lexers/amdgpu.py | 6 +- libs/pygments/lexers/ampl.py | 5 +- libs/pygments/lexers/apdlexer.py | 7 +- libs/pygments/lexers/apl.py | 5 +- libs/pygments/lexers/archetype.py | 20 +- libs/pygments/lexers/arrow.py | 5 +- libs/pygments/lexers/arturo.py | 5 +- libs/pygments/lexers/asc.py | 6 +- libs/pygments/lexers/asm.py | 82 +- libs/pygments/lexers/asn1.py | 5 +- libs/pygments/lexers/automation.py | 14 +- libs/pygments/lexers/bare.py | 5 +- libs/pygments/lexers/basic.py | 105 +- libs/pygments/lexers/bdd.py | 7 +- libs/pygments/lexers/berry.py | 8 +- libs/pygments/lexers/bibtex.py | 10 +- libs/pygments/lexers/blueprint.py | 5 +- libs/pygments/lexers/boa.py | 8 +- libs/pygments/lexers/bqn.py | 36 +- libs/pygments/lexers/business.py | 43 +- libs/pygments/lexers/c_cpp.py | 5 +- libs/pygments/lexers/c_like.py | 126 +- libs/pygments/lexers/capnproto.py | 5 +- libs/pygments/lexers/carbon.py | 7 +- libs/pygments/lexers/cddl.py | 17 +- libs/pygments/lexers/chapel.py | 5 +- libs/pygments/lexers/clean.py | 3 +- libs/pygments/lexers/codeql.py | 80 + libs/pygments/lexers/comal.py | 3 +- libs/pygments/lexers/compiled.py | 3 +- libs/pygments/lexers/configs.py | 106 +- libs/pygments/lexers/console.py | 10 +- libs/pygments/lexers/cplint.py | 5 +- libs/pygments/lexers/crystal.py | 7 +- libs/pygments/lexers/csound.py | 14 +- libs/pygments/lexers/css.py | 12 +- libs/pygments/lexers/d.py | 7 +- libs/pygments/lexers/dalvik.py | 5 +- libs/pygments/lexers/data.py | 16 +- libs/pygments/lexers/dax.py | 5 +- libs/pygments/lexers/devicetree.py | 5 +- libs/pygments/lexers/diff.py | 13 +- libs/pygments/lexers/dns.py | 17 +- libs/pygments/lexers/dotnet.py | 84 +- libs/pygments/lexers/dsls.py | 54 +- libs/pygments/lexers/dylan.py | 18 +- libs/pygments/lexers/ecl.py | 5 +- libs/pygments/lexers/eiffel.py | 5 +- libs/pygments/lexers/elm.py | 5 +- libs/pygments/lexers/elpi.py | 78 +- libs/pygments/lexers/email.py | 6 +- libs/pygments/lexers/erlang.py | 46 +- libs/pygments/lexers/esoteric.py | 23 +- libs/pygments/lexers/ezhil.py | 5 +- libs/pygments/lexers/factor.py | 5 +- libs/pygments/lexers/fantom.py | 6 +- libs/pygments/lexers/felix.py | 19 +- libs/pygments/lexers/fift.py | 3 +- libs/pygments/lexers/floscript.py | 5 +- libs/pygments/lexers/forth.py | 5 +- libs/pygments/lexers/fortran.py | 9 +- libs/pygments/lexers/foxpro.py | 6 +- libs/pygments/lexers/freefem.py | 5 +- libs/pygments/lexers/func.py | 4 +- libs/pygments/lexers/functional.py | 3 +- libs/pygments/lexers/futhark.py | 13 +- libs/pygments/lexers/gcodelexer.py | 6 +- libs/pygments/lexers/gdscript.py | 3 +- libs/pygments/lexers/gleam.py | 74 + libs/pygments/lexers/go.py | 5 +- libs/pygments/lexers/grammar_notation.py | 15 +- libs/pygments/lexers/graph.py | 5 +- libs/pygments/lexers/graphics.py | 30 +- libs/pygments/lexers/graphql.py | 5 +- libs/pygments/lexers/graphviz.py | 5 +- libs/pygments/lexers/gsql.py | 5 +- libs/pygments/lexers/hare.py | 73 + libs/pygments/lexers/haskell.py | 63 +- libs/pygments/lexers/haxe.py | 8 +- libs/pygments/lexers/hdl.py | 15 +- libs/pygments/lexers/hexdump.py | 6 +- libs/pygments/lexers/html.py | 79 +- libs/pygments/lexers/idl.py | 5 +- libs/pygments/lexers/igor.py | 9 +- libs/pygments/lexers/inferno.py | 5 +- libs/pygments/lexers/installers.py | 91 +- libs/pygments/lexers/int_fiction.py | 312 +- libs/pygments/lexers/iolang.py | 5 +- libs/pygments/lexers/j.py | 5 +- libs/pygments/lexers/javascript.py | 41 +- libs/pygments/lexers/jmespath.py | 3 +- libs/pygments/lexers/jslt.py | 5 +- libs/pygments/lexers/json5.py | 83 + libs/pygments/lexers/jsonnet.py | 7 +- libs/pygments/lexers/jsx.py | 106 +- libs/pygments/lexers/julia.py | 10 +- libs/pygments/lexers/jvm.py | 216 +- libs/pygments/lexers/kuin.py | 5 +- libs/pygments/lexers/kusto.py | 5 +- libs/pygments/lexers/ldap.py | 8 +- libs/pygments/lexers/lean.py | 145 +- libs/pygments/lexers/lilypond.py | 5 +- libs/pygments/lexers/lisp.py | 428 +- libs/pygments/lexers/macaulay2.py | 263 +- libs/pygments/lexers/make.py | 11 +- libs/pygments/lexers/maple.py | 291 + libs/pygments/lexers/markup.py | 232 +- libs/pygments/lexers/math.py | 3 +- libs/pygments/lexers/matlab.py | 29 +- libs/pygments/lexers/maxima.py | 5 +- libs/pygments/lexers/meson.py | 5 +- libs/pygments/lexers/mime.py | 8 +- libs/pygments/lexers/minecraft.py | 43 +- libs/pygments/lexers/mips.py | 4 +- libs/pygments/lexers/ml.py | 114 +- libs/pygments/lexers/modeling.py | 41 +- libs/pygments/lexers/modula2.py | 5 +- libs/pygments/lexers/mojo.py | 707 + libs/pygments/lexers/monte.py | 5 +- libs/pygments/lexers/mosel.py | 6 +- libs/pygments/lexers/ncl.py | 7 +- libs/pygments/lexers/nimrod.py | 15 +- libs/pygments/lexers/nit.py | 5 +- libs/pygments/lexers/nix.py | 13 +- libs/pygments/lexers/numbair.py | 63 + libs/pygments/lexers/oberon.py | 6 +- libs/pygments/lexers/objective.py | 42 +- libs/pygments/lexers/ooc.py | 9 +- libs/pygments/lexers/openscad.py | 5 +- libs/pygments/lexers/other.py | 3 +- libs/pygments/lexers/parasail.py | 5 +- libs/pygments/lexers/parsers.py | 85 +- libs/pygments/lexers/pascal.py | 9 +- libs/pygments/lexers/pawn.py | 10 +- libs/pygments/lexers/pddl.py | 82 + libs/pygments/lexers/perl.py | 6 +- libs/pygments/lexers/phix.py | 5 +- libs/pygments/lexers/php.py | 9 +- libs/pygments/lexers/pointless.py | 5 +- libs/pygments/lexers/pony.py | 6 +- libs/pygments/lexers/praat.py | 5 +- libs/pygments/lexers/procfile.py | 5 +- libs/pygments/lexers/prolog.py | 25 +- libs/pygments/lexers/promql.py | 3 +- libs/pygments/lexers/prql.py | 5 +- libs/pygments/lexers/ptx.py | 5 +- libs/pygments/lexers/python.py | 89 +- libs/pygments/lexers/q.py | 11 +- libs/pygments/lexers/qlik.py | 6 +- libs/pygments/lexers/qvt.py | 8 +- libs/pygments/lexers/r.py | 22 +- libs/pygments/lexers/rdf.py | 32 +- libs/pygments/lexers/rebol.py | 14 +- libs/pygments/lexers/rego.py | 57 + libs/pygments/lexers/resource.py | 11 +- libs/pygments/lexers/ride.py | 9 +- libs/pygments/lexers/rita.py | 5 +- libs/pygments/lexers/rnc.py | 5 +- libs/pygments/lexers/roboconf.py | 10 +- libs/pygments/lexers/robotframework.py | 5 +- libs/pygments/lexers/ruby.py | 10 +- libs/pygments/lexers/rust.py | 19 +- libs/pygments/lexers/sas.py | 6 +- libs/pygments/lexers/savi.py | 213 +- libs/pygments/lexers/scdoc.py | 5 +- libs/pygments/lexers/scripting.py | 432 +- libs/pygments/lexers/sgf.py | 5 +- libs/pygments/lexers/shell.py | 240 +- libs/pygments/lexers/sieve.py | 6 +- libs/pygments/lexers/slash.py | 9 +- libs/pygments/lexers/smalltalk.py | 8 +- libs/pygments/lexers/smithy.py | 5 +- libs/pygments/lexers/smv.py | 6 +- libs/pygments/lexers/snobol.py | 6 +- libs/pygments/lexers/solidity.py | 6 +- libs/pygments/lexers/soong.py | 78 + libs/pygments/lexers/sophia.py | 7 +- libs/pygments/lexers/special.py | 12 +- libs/pygments/lexers/spice.py | 16 +- libs/pygments/lexers/sql.py | 224 +- libs/pygments/lexers/srcinfo.py | 6 +- libs/pygments/lexers/stata.py | 5 +- libs/pygments/lexers/supercollider.py | 5 +- libs/pygments/lexers/tablegen.py | 177 + libs/pygments/lexers/tact.py | 303 + libs/pygments/lexers/tal.py | 8 +- libs/pygments/lexers/tcl.py | 5 +- libs/pygments/lexers/teal.py | 5 +- libs/pygments/lexers/templates.py | 207 +- libs/pygments/lexers/teraterm.py | 5 +- libs/pygments/lexers/testing.py | 9 +- libs/pygments/lexers/text.py | 5 +- libs/pygments/lexers/textedit.py | 15 +- libs/pygments/lexers/textfmts.py | 22 +- libs/pygments/lexers/theorem.py | 57 +- libs/pygments/lexers/thingsdb.py | 76 +- libs/pygments/lexers/tlb.py | 4 +- libs/pygments/lexers/tls.py | 5 +- libs/pygments/lexers/tnt.py | 5 +- libs/pygments/lexers/trafficscript.py | 6 +- libs/pygments/lexers/typoscript.py | 13 +- libs/pygments/lexers/typst.py | 160 + libs/pygments/lexers/ul4.py | 52 +- libs/pygments/lexers/unicon.py | 16 +- libs/pygments/lexers/urbi.py | 6 +- libs/pygments/lexers/usd.py | 17 +- libs/pygments/lexers/varnish.py | 10 +- libs/pygments/lexers/verification.py | 9 +- libs/pygments/lexers/verifpal.py | 5 +- libs/pygments/lexers/vip.py | 8 +- libs/pygments/lexers/vyper.py | 7 +- libs/pygments/lexers/web.py | 3 +- libs/pygments/lexers/webassembly.py | 5 +- libs/pygments/lexers/webidl.py | 5 +- libs/pygments/lexers/webmisc.py | 26 +- libs/pygments/lexers/wgsl.py | 13 +- libs/pygments/lexers/whiley.py | 5 +- libs/pygments/lexers/wowtoc.py | 6 +- libs/pygments/lexers/wren.py | 7 +- libs/pygments/lexers/x10.py | 13 +- libs/pygments/lexers/xorg.py | 3 +- libs/pygments/lexers/yang.py | 5 +- libs/pygments/lexers/yara.py | 5 +- libs/pygments/lexers/zig.py | 3 +- libs/pygments/modeline.py | 8 +- libs/pygments/plugin.py | 22 +- libs/pygments/regexopt.py | 2 +- libs/pygments/scanner.py | 2 +- libs/pygments/sphinxext.py | 24 +- libs/pygments/style.py | 4 +- libs/pygments/styles/__init__.py | 6 +- libs/pygments/styles/_mapping.py | 1 + libs/pygments/styles/abap.py | 2 +- libs/pygments/styles/algol.py | 2 +- libs/pygments/styles/algol_nu.py | 2 +- libs/pygments/styles/arduino.py | 2 +- libs/pygments/styles/autumn.py | 2 +- libs/pygments/styles/borland.py | 2 +- libs/pygments/styles/bw.py | 2 +- libs/pygments/styles/coffee.py | 80 + libs/pygments/styles/colorful.py | 2 +- libs/pygments/styles/default.py | 2 +- libs/pygments/styles/dracula.py | 2 +- libs/pygments/styles/emacs.py | 2 +- libs/pygments/styles/friendly.py | 2 +- libs/pygments/styles/friendly_grayscale.py | 2 +- libs/pygments/styles/fruity.py | 2 +- libs/pygments/styles/gh_dark.py | 2 +- libs/pygments/styles/gruvbox.py | 2 +- libs/pygments/styles/igor.py | 2 +- libs/pygments/styles/inkpot.py | 2 +- libs/pygments/styles/lightbulb.py | 2 +- libs/pygments/styles/lilypond.py | 2 +- libs/pygments/styles/lovelace.py | 2 +- libs/pygments/styles/manni.py | 2 +- libs/pygments/styles/material.py | 2 +- libs/pygments/styles/monokai.py | 2 +- libs/pygments/styles/murphy.py | 2 +- libs/pygments/styles/native.py | 8 +- libs/pygments/styles/nord.py | 2 +- libs/pygments/styles/onedark.py | 2 +- libs/pygments/styles/paraiso_dark.py | 2 +- libs/pygments/styles/paraiso_light.py | 2 +- libs/pygments/styles/pastie.py | 2 +- libs/pygments/styles/perldoc.py | 2 +- libs/pygments/styles/rainbow_dash.py | 38 +- libs/pygments/styles/rrt.py | 5 +- libs/pygments/styles/sas.py | 2 +- libs/pygments/styles/solarized.py | 2 +- libs/pygments/styles/staroffice.py | 2 +- libs/pygments/styles/stata_dark.py | 2 +- libs/pygments/styles/stata_light.py | 2 +- libs/pygments/styles/tango.py | 2 +- libs/pygments/styles/trac.py | 2 +- libs/pygments/styles/vim.py | 2 +- libs/pygments/styles/vs.py | 2 +- libs/pygments/styles/xcode.py | 2 +- libs/pygments/styles/zenburn.py | 2 +- libs/pygments/token.py | 2 +- libs/pygments/unistring.py | 10 +- libs/pygments/util.py | 32 +- libs/pyparsing-3.1.1.dist-info/RECORD | 18 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 3 +- libs/pyparsing-3.1.4.dist-info/RECORD | 18 + .../REQUESTED | 0 .../WHEEL | 0 libs/pyparsing/__init__.py | 6 +- libs/pyparsing/actions.py | 23 +- libs/pyparsing/common.py | 32 +- libs/pyparsing/core.py | 1139 +- libs/pyparsing/diagram/__init__.py | 47 +- libs/pyparsing/exceptions.py | 78 +- libs/pyparsing/helpers.py | 96 +- libs/pyparsing/results.py | 227 +- libs/pyparsing/testing.py | 118 +- libs/pyparsing/unicode.py | 41 +- libs/pyparsing/util.py | 15 +- libs/pyrsistent-0.20.0.dist-info/RECORD | 4 +- libs/pyrsistent-0.20.0.dist-info/WHEEL | 2 +- libs/pysubs2-1.7.2.dist-info/RECORD | 47 - libs/pysubs2-1.7.2.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE.txt | 0 .../METADATA | 2 +- libs/pysubs2-1.7.3.dist-info/RECORD | 28 + .../REQUESTED | 0 libs/pysubs2-1.7.3.dist-info/WHEEL | 5 + .../entry_points.txt | 0 .../top_level.txt | 0 libs/pysubs2/common.py | 2 +- libs/pysubs2/exceptions.py | 12 +- libs/pysubs2/formats/jsonformat.py | 5 +- libs/python_dateutil-2.8.2.dist-info/RECORD | 27 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 9 +- libs/python_dateutil-2.9.0.dist-info/RECORD | 27 + .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 .../zip-safe | 0 .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 2 +- libs/python_engineio-4.11.2.dist-info/RECORD | 33 + .../REQUESTED | 0 libs/python_engineio-4.11.2.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/python_engineio-4.9.0.dist-info/RECORD | 33 - libs/python_engineio-4.9.0.dist-info/WHEEL | 5 - libs/python_socketio-5.11.1.dist-info/RECORD | 38 - libs/python_socketio-5.11.1.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 4 +- libs/python_socketio-5.12.1.dist-info/RECORD | 38 + .../REQUESTED | 0 libs/python_socketio-5.12.1.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/pytz-2024.1.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE.txt | 0 .../METADATA | 3 +- .../RECORD | 110 +- .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 .../zip-safe | 0 libs/pytz/__init__.py | 5 +- libs/pytz/zoneinfo/Africa/Blantyre | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Bujumbura | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Gaborone | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Harare | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Kigali | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Lubumbashi | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Lusaka | Bin 149 -> 149 bytes libs/pytz/zoneinfo/Africa/Maputo | Bin 149 -> 149 bytes libs/pytz/zoneinfo/America/Bahia_Banderas | Bin 1152 -> 1100 bytes libs/pytz/zoneinfo/America/Cancun | Bin 834 -> 864 bytes libs/pytz/zoneinfo/America/Chihuahua | Bin 1102 -> 1102 bytes libs/pytz/zoneinfo/America/Ciudad_Juarez | Bin 1538 -> 1538 bytes libs/pytz/zoneinfo/America/Ensenada | Bin 2374 -> 2458 bytes libs/pytz/zoneinfo/America/Hermosillo | Bin 456 -> 388 bytes libs/pytz/zoneinfo/America/Mazatlan | Bin 1128 -> 1060 bytes libs/pytz/zoneinfo/America/Merida | Bin 1004 -> 1004 bytes libs/pytz/zoneinfo/America/Mexico_City | Bin 1222 -> 1222 bytes libs/pytz/zoneinfo/America/Monterrey | Bin 980 -> 1114 bytes libs/pytz/zoneinfo/America/Ojinaga | Bin 1524 -> 1524 bytes libs/pytz/zoneinfo/America/Santa_Isabel | Bin 2374 -> 2458 bytes libs/pytz/zoneinfo/America/Tijuana | Bin 2374 -> 2458 bytes libs/pytz/zoneinfo/Asia/Choibalsan | Bin 935 -> 877 bytes libs/pytz/zoneinfo/Asia/Dili | Bin 213 -> 257 bytes libs/pytz/zoneinfo/Atlantic/Azores | Bin 3498 -> 3442 bytes libs/pytz/zoneinfo/Atlantic/Madeira | Bin 3503 -> 3377 bytes libs/pytz/zoneinfo/CET | Bin 2094 -> 2933 bytes libs/pytz/zoneinfo/CST6CDT | Bin 2310 -> 3592 bytes libs/pytz/zoneinfo/EET | Bin 1908 -> 2262 bytes libs/pytz/zoneinfo/EST | Bin 114 -> 182 bytes libs/pytz/zoneinfo/EST5EDT | Bin 2310 -> 3552 bytes libs/pytz/zoneinfo/Europe/Lisbon | Bin 3497 -> 3527 bytes libs/pytz/zoneinfo/HST | Bin 115 -> 329 bytes libs/pytz/zoneinfo/MET | Bin 2094 -> 2933 bytes libs/pytz/zoneinfo/MST | Bin 114 -> 360 bytes libs/pytz/zoneinfo/MST7MDT | Bin 2310 -> 2460 bytes libs/pytz/zoneinfo/Mexico/BajaNorte | Bin 2374 -> 2458 bytes libs/pytz/zoneinfo/Mexico/BajaSur | Bin 1128 -> 1060 bytes libs/pytz/zoneinfo/Mexico/General | Bin 1222 -> 1222 bytes libs/pytz/zoneinfo/PST8PDT | Bin 2310 -> 2852 bytes libs/pytz/zoneinfo/Portugal | Bin 3497 -> 3527 bytes libs/pytz/zoneinfo/WET | Bin 1905 -> 3527 bytes libs/pytz/zoneinfo/leapseconds | 8 +- libs/pytz/zoneinfo/tzdata.zi | 1651 +- libs/pytz/zoneinfo/zone.tab | 3 +- libs/pytz/zoneinfo/zone1970.tab | 3 +- libs/pytz/zoneinfo/zonenow.tab | 8 +- .../METADATA | 6 +- .../RECORD | 4 +- .../WHEEL | 2 +- libs/rarfile-4.1.dist-info/RECORD | 8 - libs/rarfile-4.1.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 2 +- .../METADATA | 6 +- libs/rarfile-4.2.dist-info/RECORD | 8 + .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 libs/rarfile.py | 39 +- libs/referencing-0.23.0.dist-info/METADATA | 2 +- libs/referencing-0.23.0.dist-info/RECORD | 4 +- libs/referencing-0.23.0.dist-info/WHEEL | 2 +- libs/requests-2.31.0.dist-info/RECORD | 25 - libs/requests-2.31.0.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 24 +- libs/requests-2.32.3.dist-info/RECORD | 25 + .../REQUESTED | 0 libs/requests-2.32.3.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/requests/__init__.py | 6 +- libs/requests/__version__.py | 6 +- libs/requests/adapters.py | 225 +- libs/requests/api.py | 2 +- libs/requests/auth.py | 1 - libs/requests/compat.py | 25 +- libs/requests/cookies.py | 16 +- libs/requests/exceptions.py | 10 + libs/requests/models.py | 13 +- libs/requests/packages.py | 23 +- libs/requests/sessions.py | 12 +- libs/requests/status_codes.py | 10 +- libs/requests/utils.py | 16 +- libs/requests_oauthlib-1.3.1.dist-info/RECORD | 22 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 40 +- libs/requests_oauthlib-2.0.0.dist-info/RECORD | 22 + .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 libs/requests_oauthlib/__init__.py | 3 +- .../compliance_fixes/__init__.py | 3 +- .../compliance_fixes/douban.py | 4 +- .../compliance_fixes/ebay.py | 3 +- .../compliance_fixes/facebook.py | 10 +- .../compliance_fixes/fitbit.py | 4 +- .../compliance_fixes/instagram.py | 5 +- .../compliance_fixes/mailchimp.py | 6 +- .../compliance_fixes/plentymarkets.py | 4 +- .../compliance_fixes/slack.py | 5 +- .../compliance_fixes/weibo.py | 4 +- libs/requests_oauthlib/oauth1_auth.py | 13 +- libs/requests_oauthlib/oauth1_session.py | 13 +- libs/requests_oauthlib/oauth2_auth.py | 1 - libs/requests_oauthlib/oauth2_session.py | 65 +- libs/rich-13.7.0.dist-info/WHEEL | 4 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 18 +- .../RECORD | 72 +- .../REQUESTED | 0 libs/rich-13.9.4.dist-info/WHEEL | 4 + libs/rich/_cell_widths.py | 367 +- libs/rich/_inspect.py | 2 - libs/rich/_null_file.py | 2 +- libs/rich/_win32_console.py | 7 +- libs/rich/align.py | 1 + libs/rich/ansi.py | 1 + libs/rich/cells.py | 53 +- libs/rich/color.py | 4 +- libs/rich/console.py | 82 +- libs/rich/default_styles.py | 3 +- libs/rich/filesize.py | 3 +- libs/rich/highlighter.py | 2 +- libs/rich/live.py | 2 +- libs/rich/logging.py | 8 + libs/rich/markdown.py | 102 +- libs/rich/padding.py | 10 +- libs/rich/panel.py | 20 +- libs/rich/pretty.py | 71 +- libs/rich/progress.py | 34 +- libs/rich/progress_bar.py | 2 +- libs/rich/prompt.py | 31 +- libs/rich/segment.py | 52 +- libs/rich/spinner.py | 1 + libs/rich/style.py | 2 +- libs/rich/syntax.py | 24 +- libs/rich/table.py | 23 +- libs/rich/text.py | 18 +- libs/rich/theme.py | 4 +- libs/rich/traceback.py | 96 +- libs/rich/tree.py | 24 +- libs/semver-3.0.2.dist-info/RECORD | 2 +- libs/semver-3.0.2.dist-info/WHEEL | 2 +- .../INSTALLER | 0 libs/semver-3.0.3.dist-info/LICENSE.txt | 27 + libs/semver-3.0.3.dist-info/METADATA | 164 + libs/semver-3.0.3.dist-info/RECORD | 17 + .../REQUESTED | 0 libs/semver-3.0.3.dist-info/WHEEL | 5 + libs/semver-3.0.3.dist-info/entry_points.txt | 2 + libs/semver-3.0.3.dist-info/top_level.txt | 1 + libs/semver/__about__.py | 2 +- libs/semver/__main__.py | 1 + libs/semver/_deprecated.py | 1 + libs/semver/version.py | 26 +- libs/simple_websocket-1.0.0.dist-info/RECORD | 12 - libs/simple_websocket-1.0.0.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 12 +- libs/simple_websocket-1.1.0.dist-info/RECORD | 12 + .../REQUESTED | 0 libs/simple_websocket-1.1.0.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/simple_websocket/errors.py | 10 +- libs/simple_websocket/ws.py | 18 +- libs/six-1.16.0.dist-info/RECORD | 8 - .../INSTALLER | 0 .../LICENSE | 2 +- .../METADATA | 6 +- libs/six-1.17.0.dist-info/RECORD | 8 + .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 libs/six.py | 15 +- libs/socketio/admin.py | 96 +- libs/socketio/asgi.py | 9 +- libs/socketio/async_admin.py | 94 +- libs/socketio/async_client.py | 71 +- libs/socketio/async_manager.py | 3 +- libs/socketio/async_namespace.py | 44 +- libs/socketio/async_pubsub_manager.py | 3 +- libs/socketio/async_server.py | 38 +- libs/socketio/base_client.py | 5 +- libs/socketio/base_manager.py | 3 +- libs/socketio/base_namespace.py | 2 +- libs/socketio/base_server.py | 7 +- libs/socketio/client.py | 52 +- libs/socketio/kafka_manager.py | 3 +- libs/socketio/kombu_manager.py | 2 +- libs/socketio/manager.py | 3 +- libs/socketio/namespace.py | 22 +- libs/socketio/packet.py | 4 +- libs/socketio/pubsub_manager.py | 3 +- libs/socketio/redis_manager.py | 3 +- libs/socketio/server.py | 31 +- libs/socketio/zmq_manager.py | 2 +- libs/soupsieve-2.3.2.post1.dist-info/METADATA | 2 +- libs/soupsieve-2.3.2.post1.dist-info/RECORD | 4 +- libs/soupsieve-2.3.2.post1.dist-info/WHEEL | 2 +- libs/sqlalchemy/__init__.py | 4 +- libs/sqlalchemy/connectors/__init__.py | 2 +- libs/sqlalchemy/connectors/aioodbc.py | 2 +- libs/sqlalchemy/connectors/asyncio.py | 21 +- libs/sqlalchemy/connectors/pyodbc.py | 2 +- libs/sqlalchemy/cyextension/.gitignore | 5 - libs/sqlalchemy/cyextension/__init__.py | 2 +- libs/sqlalchemy/dialects/__init__.py | 2 +- libs/sqlalchemy/dialects/_typing.py | 19 +- libs/sqlalchemy/dialects/mssql/__init__.py | 2 +- libs/sqlalchemy/dialects/mssql/aioodbc.py | 5 +- libs/sqlalchemy/dialects/mssql/base.py | 252 +- .../dialects/mssql/information_schema.py | 2 +- libs/sqlalchemy/dialects/mssql/json.py | 10 +- libs/sqlalchemy/dialects/mssql/provision.py | 9 +- libs/sqlalchemy/dialects/mssql/pymssql.py | 3 +- libs/sqlalchemy/dialects/mssql/pyodbc.py | 37 +- libs/sqlalchemy/dialects/mysql/__init__.py | 7 +- libs/sqlalchemy/dialects/mysql/aiomysql.py | 27 +- libs/sqlalchemy/dialects/mysql/asyncmy.py | 26 +- libs/sqlalchemy/dialects/mysql/base.py | 364 +- libs/sqlalchemy/dialects/mysql/cymysql.py | 2 +- libs/sqlalchemy/dialects/mysql/dml.py | 10 +- libs/sqlalchemy/dialects/mysql/enumerated.py | 7 +- libs/sqlalchemy/dialects/mysql/expression.py | 6 +- libs/sqlalchemy/dialects/mysql/json.py | 2 +- libs/sqlalchemy/dialects/mysql/mariadb.py | 31 +- .../dialects/mysql/mariadbconnector.py | 11 +- .../dialects/mysql/mysqlconnector.py | 3 +- libs/sqlalchemy/dialects/mysql/mysqldb.py | 19 +- libs/sqlalchemy/dialects/mysql/provision.py | 5 +- libs/sqlalchemy/dialects/mysql/pymysql.py | 3 +- libs/sqlalchemy/dialects/mysql/pyodbc.py | 17 +- libs/sqlalchemy/dialects/mysql/reflection.py | 4 +- .../dialects/mysql/reserved_words.py | 6 +- libs/sqlalchemy/dialects/mysql/types.py | 15 +- libs/sqlalchemy/dialects/oracle/__init__.py | 2 +- libs/sqlalchemy/dialects/oracle/base.py | 565 +- libs/sqlalchemy/dialects/oracle/cx_oracle.py | 324 +- libs/sqlalchemy/dialects/oracle/dictionary.py | 2 +- libs/sqlalchemy/dialects/oracle/oracledb.py | 712 +- libs/sqlalchemy/dialects/oracle/provision.py | 4 +- libs/sqlalchemy/dialects/oracle/types.py | 65 +- .../dialects/postgresql/__init__.py | 4 +- .../dialects/postgresql/_psycopg_common.py | 2 +- libs/sqlalchemy/dialects/postgresql/array.py | 115 +- .../sqlalchemy/dialects/postgresql/asyncpg.py | 121 +- libs/sqlalchemy/dialects/postgresql/base.py | 708 +- libs/sqlalchemy/dialects/postgresql/dml.py | 51 +- libs/sqlalchemy/dialects/postgresql/ext.py | 41 +- libs/sqlalchemy/dialects/postgresql/hstore.py | 39 +- libs/sqlalchemy/dialects/postgresql/json.py | 69 +- .../dialects/postgresql/named_types.py | 48 +- .../dialects/postgresql/operators.py | 2 +- libs/sqlalchemy/dialects/postgresql/pg8000.py | 14 +- .../dialects/postgresql/pg_catalog.py | 32 +- .../dialects/postgresql/provision.py | 4 +- .../sqlalchemy/dialects/postgresql/psycopg.py | 80 +- .../dialects/postgresql/psycopg2.py | 106 +- .../dialects/postgresql/psycopg2cffi.py | 2 +- libs/sqlalchemy/dialects/postgresql/ranges.py | 4 +- libs/sqlalchemy/dialects/postgresql/types.py | 10 +- libs/sqlalchemy/dialects/sqlite/__init__.py | 2 +- libs/sqlalchemy/dialects/sqlite/aiosqlite.py | 25 +- libs/sqlalchemy/dialects/sqlite/base.py | 306 +- libs/sqlalchemy/dialects/sqlite/dml.py | 51 +- libs/sqlalchemy/dialects/sqlite/json.py | 2 +- libs/sqlalchemy/dialects/sqlite/provision.py | 2 +- .../sqlalchemy/dialects/sqlite/pysqlcipher.py | 12 +- libs/sqlalchemy/dialects/sqlite/pysqlite.py | 66 +- libs/sqlalchemy/engine/__init__.py | 2 +- libs/sqlalchemy/engine/_py_processors.py | 2 +- libs/sqlalchemy/engine/_py_row.py | 2 +- libs/sqlalchemy/engine/_py_util.py | 2 +- libs/sqlalchemy/engine/base.py | 84 +- libs/sqlalchemy/engine/characteristics.py | 80 +- libs/sqlalchemy/engine/create.py | 20 +- libs/sqlalchemy/engine/cursor.py | 124 +- libs/sqlalchemy/engine/default.py | 200 +- libs/sqlalchemy/engine/events.py | 56 +- libs/sqlalchemy/engine/interfaces.py | 103 +- libs/sqlalchemy/engine/mock.py | 6 +- libs/sqlalchemy/engine/processors.py | 2 +- libs/sqlalchemy/engine/reflection.py | 26 +- libs/sqlalchemy/engine/result.py | 28 +- libs/sqlalchemy/engine/row.py | 7 +- libs/sqlalchemy/engine/strategies.py | 2 +- libs/sqlalchemy/engine/url.py | 30 +- libs/sqlalchemy/engine/util.py | 5 +- libs/sqlalchemy/event/__init__.py | 2 +- libs/sqlalchemy/event/api.py | 25 +- libs/sqlalchemy/event/attr.py | 2 +- libs/sqlalchemy/event/base.py | 88 +- libs/sqlalchemy/event/legacy.py | 2 +- libs/sqlalchemy/event/registry.py | 8 +- libs/sqlalchemy/events.py | 2 +- libs/sqlalchemy/exc.py | 6 +- libs/sqlalchemy/ext/__init__.py | 2 +- libs/sqlalchemy/ext/associationproxy.py | 20 +- libs/sqlalchemy/ext/asyncio/__init__.py | 2 +- libs/sqlalchemy/ext/asyncio/base.py | 6 +- libs/sqlalchemy/ext/asyncio/engine.py | 42 +- libs/sqlalchemy/ext/asyncio/exc.py | 2 +- libs/sqlalchemy/ext/asyncio/result.py | 18 +- libs/sqlalchemy/ext/asyncio/scoping.py | 26 +- libs/sqlalchemy/ext/asyncio/session.py | 68 +- libs/sqlalchemy/ext/automap.py | 179 +- libs/sqlalchemy/ext/baked.py | 16 +- libs/sqlalchemy/ext/compiler.py | 151 +- libs/sqlalchemy/ext/declarative/__init__.py | 2 +- libs/sqlalchemy/ext/declarative/extensions.py | 64 +- libs/sqlalchemy/ext/horizontal_shard.py | 17 +- libs/sqlalchemy/ext/hybrid.py | 83 +- libs/sqlalchemy/ext/indexable.py | 56 +- libs/sqlalchemy/ext/instrumentation.py | 2 +- libs/sqlalchemy/ext/mutable.py | 62 +- libs/sqlalchemy/ext/mypy/__init__.py | 2 +- libs/sqlalchemy/ext/mypy/apply.py | 6 +- libs/sqlalchemy/ext/mypy/decl_class.py | 2 +- libs/sqlalchemy/ext/mypy/infer.py | 6 +- libs/sqlalchemy/ext/mypy/names.py | 31 +- libs/sqlalchemy/ext/mypy/plugin.py | 2 +- libs/sqlalchemy/ext/mypy/util.py | 23 +- libs/sqlalchemy/ext/orderinglist.py | 35 +- libs/sqlalchemy/ext/serializer.py | 54 +- libs/sqlalchemy/future/__init__.py | 2 +- libs/sqlalchemy/future/engine.py | 2 +- libs/sqlalchemy/inspection.py | 2 +- libs/sqlalchemy/log.py | 2 +- libs/sqlalchemy/orm/__init__.py | 2 +- libs/sqlalchemy/orm/_orm_constructors.py | 224 +- libs/sqlalchemy/orm/_typing.py | 2 +- libs/sqlalchemy/orm/attributes.py | 14 +- libs/sqlalchemy/orm/base.py | 7 +- libs/sqlalchemy/orm/bulk_persistence.py | 169 +- libs/sqlalchemy/orm/clsregistry.py | 7 +- libs/sqlalchemy/orm/collections.py | 33 +- libs/sqlalchemy/orm/context.py | 45 +- libs/sqlalchemy/orm/decl_api.py | 120 +- libs/sqlalchemy/orm/decl_base.py | 66 +- libs/sqlalchemy/orm/dependency.py | 2 +- libs/sqlalchemy/orm/descriptor_props.py | 11 +- libs/sqlalchemy/orm/dynamic.py | 12 +- libs/sqlalchemy/orm/evaluator.py | 13 +- libs/sqlalchemy/orm/events.py | 116 +- libs/sqlalchemy/orm/exc.py | 7 +- libs/sqlalchemy/orm/identity.py | 2 +- libs/sqlalchemy/orm/instrumentation.py | 2 +- libs/sqlalchemy/orm/interfaces.py | 72 +- libs/sqlalchemy/orm/loading.py | 49 +- libs/sqlalchemy/orm/mapped_collection.py | 29 +- libs/sqlalchemy/orm/mapper.py | 58 +- libs/sqlalchemy/orm/path_registry.py | 27 +- libs/sqlalchemy/orm/persistence.py | 2 +- libs/sqlalchemy/orm/properties.py | 55 +- libs/sqlalchemy/orm/query.py | 312 +- libs/sqlalchemy/orm/relationships.py | 146 +- libs/sqlalchemy/orm/scoping.py | 18 +- libs/sqlalchemy/orm/session.py | 150 +- libs/sqlalchemy/orm/state.py | 21 +- libs/sqlalchemy/orm/state_changes.py | 2 +- libs/sqlalchemy/orm/strategies.py | 275 +- libs/sqlalchemy/orm/strategy_options.py | 236 +- libs/sqlalchemy/orm/sync.py | 2 +- libs/sqlalchemy/orm/unitofwork.py | 2 +- libs/sqlalchemy/orm/util.py | 137 +- libs/sqlalchemy/orm/writeonly.py | 2 +- libs/sqlalchemy/pool/__init__.py | 2 +- libs/sqlalchemy/pool/base.py | 2 +- libs/sqlalchemy/pool/events.py | 8 +- libs/sqlalchemy/pool/impl.py | 40 +- libs/sqlalchemy/schema.py | 2 +- libs/sqlalchemy/sql/__init__.py | 2 +- libs/sqlalchemy/sql/_dml_constructors.py | 20 +- libs/sqlalchemy/sql/_elements_constructors.py | 342 +- libs/sqlalchemy/sql/_orm_types.py | 2 +- libs/sqlalchemy/sql/_py_util.py | 2 +- .../sql/_selectable_constructors.py | 40 +- libs/sqlalchemy/sql/_typing.py | 20 +- libs/sqlalchemy/sql/annotation.py | 2 +- libs/sqlalchemy/sql/base.py | 57 +- libs/sqlalchemy/sql/cache_key.py | 20 +- libs/sqlalchemy/sql/coercions.py | 80 +- libs/sqlalchemy/sql/compiler.py | 226 +- libs/sqlalchemy/sql/crud.py | 4 +- libs/sqlalchemy/sql/ddl.py | 82 +- libs/sqlalchemy/sql/default_comparator.py | 2 +- libs/sqlalchemy/sql/dml.py | 32 +- libs/sqlalchemy/sql/elements.py | 421 +- libs/sqlalchemy/sql/events.py | 31 +- libs/sqlalchemy/sql/expression.py | 2 +- libs/sqlalchemy/sql/functions.py | 56 +- libs/sqlalchemy/sql/lambdas.py | 20 +- libs/sqlalchemy/sql/naming.py | 2 +- libs/sqlalchemy/sql/operators.py | 208 +- libs/sqlalchemy/sql/roles.py | 2 +- libs/sqlalchemy/sql/schema.py | 329 +- libs/sqlalchemy/sql/selectable.py | 630 +- libs/sqlalchemy/sql/sqltypes.py | 422 +- libs/sqlalchemy/sql/traversals.py | 4 +- libs/sqlalchemy/sql/type_api.py | 156 +- libs/sqlalchemy/sql/util.py | 41 +- libs/sqlalchemy/sql/visitors.py | 6 +- libs/sqlalchemy/testing/__init__.py | 3 +- libs/sqlalchemy/testing/assertions.py | 2 +- libs/sqlalchemy/testing/assertsql.py | 2 +- libs/sqlalchemy/testing/asyncio.py | 19 +- libs/sqlalchemy/testing/config.py | 18 +- libs/sqlalchemy/testing/engines.py | 29 +- libs/sqlalchemy/testing/entities.py | 2 +- libs/sqlalchemy/testing/exclusions.py | 2 +- libs/sqlalchemy/testing/fixtures/__init__.py | 2 +- libs/sqlalchemy/testing/fixtures/base.py | 2 +- libs/sqlalchemy/testing/fixtures/mypy.py | 2 +- libs/sqlalchemy/testing/fixtures/orm.py | 2 +- libs/sqlalchemy/testing/fixtures/sql.py | 25 +- libs/sqlalchemy/testing/pickleable.py | 2 +- libs/sqlalchemy/testing/plugin/__init__.py | 2 +- libs/sqlalchemy/testing/plugin/bootstrap.py | 2 +- libs/sqlalchemy/testing/plugin/plugin_base.py | 2 +- .../sqlalchemy/testing/plugin/pytestplugin.py | 8 +- libs/sqlalchemy/testing/profiling.py | 2 +- libs/sqlalchemy/testing/provision.py | 14 +- libs/sqlalchemy/testing/requirements.py | 63 +- libs/sqlalchemy/testing/schema.py | 2 +- libs/sqlalchemy/testing/suite/__init__.py | 2 +- libs/sqlalchemy/testing/suite/test_cte.py | 2 +- libs/sqlalchemy/testing/suite/test_ddl.py | 2 +- .../testing/suite/test_deprecations.py | 2 +- libs/sqlalchemy/testing/suite/test_dialect.py | 2 +- libs/sqlalchemy/testing/suite/test_insert.py | 2 +- .../testing/suite/test_reflection.py | 179 +- libs/sqlalchemy/testing/suite/test_results.py | 54 +- .../sqlalchemy/testing/suite/test_rowcount.py | 2 +- libs/sqlalchemy/testing/suite/test_select.py | 113 +- .../sqlalchemy/testing/suite/test_sequence.py | 2 +- libs/sqlalchemy/testing/suite/test_types.py | 72 +- .../testing/suite/test_unicode_ddl.py | 2 +- .../testing/suite/test_update_delete.py | 2 +- libs/sqlalchemy/testing/util.py | 35 +- libs/sqlalchemy/testing/warnings.py | 2 +- libs/sqlalchemy/types.py | 2 +- libs/sqlalchemy/util/__init__.py | 3 +- libs/sqlalchemy/util/_collections.py | 12 +- libs/sqlalchemy/util/_concurrency_py3k.py | 127 +- libs/sqlalchemy/util/_has_cy.py | 2 +- libs/sqlalchemy/util/_py_collections.py | 2 +- libs/sqlalchemy/util/compat.py | 5 +- libs/sqlalchemy/util/concurrency.py | 51 +- libs/sqlalchemy/util/deprecations.py | 6 +- libs/sqlalchemy/util/langhelpers.py | 54 +- libs/sqlalchemy/util/preloaded.py | 2 +- libs/sqlalchemy/util/queue.py | 2 +- libs/sqlalchemy/util/tool_support.py | 2 +- libs/sqlalchemy/util/topological.py | 2 +- libs/sqlalchemy/util/typing.py | 297 +- libs/stevedore-5.2.0.dist-info/WHEEL | 5 - libs/stevedore-5.2.0.dist-info/pbr.json | 1 - .../AUTHORS | 0 .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 4 +- .../RECORD | 20 +- .../REQUESTED | 0 .../WHEEL | 0 .../entry_points.txt | 0 libs/stevedore-5.3.0.dist-info/pbr.json | 1 + .../top_level.txt | 0 libs/textdistance-4.6.2.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 804 +- .../RECORD | 46 +- .../REQUESTED | 0 libs/textdistance-4.6.3.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/textdistance/algorithms/token_based.py | 2 +- libs/tld-0.13.dist-info/RECORD | 2 +- libs/tld-0.13.dist-info/WHEEL | 2 +- libs/tqdm-4.66.2.dist-info/RECORD | 43 - libs/tqdm-4.66.2.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENCE | 0 .../METADATA | 30 +- libs/tqdm-4.67.1.dist-info/RECORD | 43 + .../REQUESTED | 0 libs/tqdm-4.67.1.dist-info/WHEEL | 5 + .../entry_points.txt | 0 .../top_level.txt | 0 libs/tqdm/_dist_ver.py | 2 +- libs/tqdm/asyncio.py | 2 +- libs/tqdm/cli.py | 57 +- libs/tqdm/contrib/__init__.py | 2 +- libs/tqdm/contrib/discord.py | 91 +- libs/tqdm/contrib/logging.py | 2 +- libs/tqdm/contrib/slack.py | 8 +- libs/tqdm/contrib/telegram.py | 10 +- libs/tqdm/dask.py | 2 +- libs/tqdm/gui.py | 19 +- libs/tqdm/notebook.py | 14 +- libs/tqdm/rich.py | 7 +- libs/tqdm/std.py | 2 +- libs/tqdm/tk.py | 4 +- libs/tqdm/utils.py | 8 +- libs/trakit-0.2.1.dist-info/WHEEL | 4 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 4 +- .../RECORD | 18 +- .../REQUESTED | 0 libs/trakit-0.2.2.dist-info/WHEEL | 4 + .../entry_points.txt | 0 libs/trakit/__init__.py | 1 - libs/trakit/config.py | 8 +- .../typing_extensions-4.10.0.dist-info/RECORD | 7 - .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 3 +- .../typing_extensions-4.12.2.dist-info/RECORD | 7 + .../REQUESTED | 0 .../WHEEL | 0 libs/typing_extensions.py | 652 +- .../INSTALLER | 0 .../LICENSE | 0 .../LICENSE_APACHE | 0 .../METADATA | 2 +- .../RECORD | 112 +- .../REQUESTED | 0 .../WHEEL | 2 +- .../top_level.txt | 0 libs/tzdata/__init__.py | 4 +- libs/tzdata/zoneinfo/Africa/Blantyre | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Bujumbura | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Gaborone | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Harare | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Kigali | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Lubumbashi | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Lusaka | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/Africa/Maputo | Bin 131 -> 131 bytes libs/tzdata/zoneinfo/America/Bahia_Banderas | Bin 728 -> 700 bytes libs/tzdata/zoneinfo/America/Cancun | Bin 529 -> 538 bytes libs/tzdata/zoneinfo/America/Chihuahua | Bin 691 -> 691 bytes libs/tzdata/zoneinfo/America/Ciudad_Juarez | Bin 718 -> 718 bytes libs/tzdata/zoneinfo/America/Ensenada | Bin 1025 -> 1079 bytes libs/tzdata/zoneinfo/America/Hermosillo | Bin 286 -> 258 bytes libs/tzdata/zoneinfo/America/Mazatlan | Bin 718 -> 690 bytes libs/tzdata/zoneinfo/America/Merida | Bin 654 -> 654 bytes libs/tzdata/zoneinfo/America/Mexico_City | Bin 773 -> 773 bytes libs/tzdata/zoneinfo/America/Monterrey | Bin 644 -> 709 bytes libs/tzdata/zoneinfo/America/Ojinaga | Bin 718 -> 718 bytes libs/tzdata/zoneinfo/America/Santa_Isabel | Bin 1025 -> 1079 bytes libs/tzdata/zoneinfo/America/Tijuana | Bin 1025 -> 1079 bytes libs/tzdata/zoneinfo/Asia/Choibalsan | Bin 619 -> 594 bytes libs/tzdata/zoneinfo/Asia/Dili | Bin 170 -> 170 bytes libs/tzdata/zoneinfo/Atlantic/Azores | Bin 1453 -> 1401 bytes libs/tzdata/zoneinfo/Atlantic/Madeira | Bin 1453 -> 1372 bytes libs/tzdata/zoneinfo/CET | Bin 621 -> 1103 bytes libs/tzdata/zoneinfo/CST6CDT | Bin 951 -> 1754 bytes libs/tzdata/zoneinfo/EET | Bin 497 -> 682 bytes libs/tzdata/zoneinfo/EST | Bin 111 -> 149 bytes libs/tzdata/zoneinfo/EST5EDT | Bin 951 -> 1744 bytes libs/tzdata/zoneinfo/Europe/Lisbon | Bin 1454 -> 1463 bytes libs/tzdata/zoneinfo/HST | Bin 112 -> 221 bytes libs/tzdata/zoneinfo/MET | Bin 621 -> 1103 bytes libs/tzdata/zoneinfo/MST | Bin 111 -> 240 bytes libs/tzdata/zoneinfo/MST7MDT | Bin 951 -> 1042 bytes libs/tzdata/zoneinfo/Mexico/BajaNorte | Bin 1025 -> 1079 bytes libs/tzdata/zoneinfo/Mexico/BajaSur | Bin 718 -> 690 bytes libs/tzdata/zoneinfo/Mexico/General | Bin 773 -> 773 bytes libs/tzdata/zoneinfo/PST8PDT | Bin 951 -> 1294 bytes libs/tzdata/zoneinfo/Portugal | Bin 1454 -> 1463 bytes libs/tzdata/zoneinfo/WET | Bin 494 -> 1463 bytes libs/tzdata/zoneinfo/leapseconds | 8 +- libs/tzdata/zoneinfo/tzdata.zi | 1653 +- libs/tzdata/zoneinfo/zone.tab | 3 +- libs/tzdata/zoneinfo/zone1970.tab | 3 +- libs/tzdata/zoneinfo/zonenow.tab | 8 +- libs/tzdata/zones | 24 +- libs/tzlocal-5.2.dist-info/RECORD | 2 +- libs/tzlocal-5.2.dist-info/WHEEL | 2 +- libs/urllib3-2.2.1.dist-info/RECORD | 42 - libs/urllib3-2.2.1.dist-info/WHEEL | 4 - .../INSTALLER | 0 .../METADATA | 5 +- libs/urllib3-2.2.3.dist-info/RECORD | 44 + .../REQUESTED | 0 libs/urllib3-2.2.3.dist-info/WHEEL | 4 + .../licenses/LICENSE.txt | 0 libs/urllib3/_base_connection.py | 8 +- libs/urllib3/_collections.py | 6 +- libs/urllib3/_request_methods.py | 5 +- libs/urllib3/_version.py | 18 +- libs/urllib3/connection.py | 219 +- libs/urllib3/connectionpool.py | 18 +- libs/urllib3/contrib/emscripten/response.py | 19 +- libs/urllib3/contrib/pyopenssl.py | 4 + libs/urllib3/contrib/socks.py | 4 +- libs/urllib3/http2.py | 229 - libs/urllib3/http2/__init__.py | 53 + libs/urllib3/http2/connection.py | 356 + libs/urllib3/http2/probe.py | 87 + libs/urllib3/poolmanager.py | 11 +- libs/urllib3/response.py | 62 +- libs/urllib3/util/connection.py | 2 +- libs/urllib3/util/request.py | 4 +- libs/urllib3/util/retry.py | 10 +- libs/urllib3/util/ssl_.py | 24 +- libs/urllib3/util/ssltransport.py | 12 +- libs/version.txt | 122 +- libs/waitress-3.0.0.dist-info/RECORD | 2 +- libs/waitress-3.0.0.dist-info/WHEEL | 2 +- libs/websocket/__init__.py | 6 +- libs/websocket/_abnf.py | 4 +- libs/websocket/_app.py | 18 +- libs/websocket/_cookiejar.py | 20 +- libs/websocket/_core.py | 20 +- libs/websocket/_exceptions.py | 2 +- libs/websocket/_handshake.py | 10 +- libs/websocket/_http.py | 34 +- libs/websocket/_logging.py | 2 +- libs/websocket/_socket.py | 11 +- libs/websocket/_ssl_compat.py | 16 +- libs/websocket/_url.py | 5 +- libs/websocket/_utils.py | 2 +- libs/websocket/_wsdump.py | 2 +- libs/websocket/tests/echo-server.py | 2 +- libs/websocket/tests/test_abnf.py | 28 +- libs/websocket/tests/test_app.py | 53 +- libs/websocket/tests/test_cookiejar.py | 8 +- libs/websocket/tests/test_http.py | 29 +- libs/websocket/tests/test_url.py | 53 +- libs/websocket/tests/test_websocket.py | 82 +- libs/websocket_client-1.7.0.dist-info/RECORD | 34 - libs/websocket_client-1.7.0.dist-info/WHEEL | 5 - .../INSTALLER | 0 .../LICENSE | 2 +- .../METADATA | 15 +- libs/websocket_client-1.8.0.dist-info/RECORD | 34 + .../REQUESTED | 0 .../WHEEL | 0 .../entry_points.txt | 0 .../top_level.txt | 0 libs/werkzeug-3.0.1.dist-info/RECORD | 74 - .../INSTALLER | 0 .../LICENSE.txt} | 0 .../METADATA | 73 +- libs/werkzeug-3.0.6.dist-info/RECORD | 74 + .../REQUESTED | 0 libs/werkzeug-3.0.6.dist-info/WHEEL | 4 + libs/werkzeug/_internal.py | 15 +- libs/werkzeug/_reloader.py | 31 +- libs/werkzeug/datastructures/auth.py | 8 +- .../werkzeug/datastructures/cache_control.pyi | 18 +- libs/werkzeug/datastructures/file_storage.pyi | 6 +- libs/werkzeug/datastructures/mixins.pyi | 2 +- libs/werkzeug/datastructures/structures.py | 12 +- libs/werkzeug/datastructures/structures.pyi | 28 +- libs/werkzeug/debug/__init__.py | 57 +- libs/werkzeug/debug/console.py | 2 +- libs/werkzeug/debug/repr.py | 15 +- libs/werkzeug/debug/shared/debugger.js | 36 +- libs/werkzeug/debug/tbtools.py | 21 +- libs/werkzeug/exceptions.py | 18 +- libs/werkzeug/formparser.py | 45 +- libs/werkzeug/http.py | 125 +- libs/werkzeug/local.py | 68 +- libs/werkzeug/middleware/dispatcher.py | 1 + libs/werkzeug/middleware/http_proxy.py | 1 + libs/werkzeug/middleware/lint.py | 49 +- libs/werkzeug/middleware/profiler.py | 1 + libs/werkzeug/middleware/proxy_fix.py | 1 + libs/werkzeug/middleware/shared_data.py | 11 +- libs/werkzeug/routing/__init__.py | 1 + libs/werkzeug/routing/converters.py | 16 +- libs/werkzeug/routing/exceptions.py | 16 +- libs/werkzeug/routing/map.py | 39 +- libs/werkzeug/routing/matcher.py | 2 +- libs/werkzeug/routing/rules.py | 65 +- libs/werkzeug/sansio/http.py | 4 +- libs/werkzeug/sansio/multipart.py | 2 + libs/werkzeug/sansio/request.py | 6 +- libs/werkzeug/sansio/response.py | 49 +- libs/werkzeug/sansio/utils.py | 2 +- libs/werkzeug/security.py | 14 +- libs/werkzeug/serving.py | 28 +- libs/werkzeug/test.py | 30 +- libs/werkzeug/testapp.py | 27 +- libs/werkzeug/urls.py | 25 +- libs/werkzeug/utils.py | 23 +- libs/werkzeug/wrappers/__init__.py | 2 +- libs/werkzeug/wrappers/request.py | 19 +- libs/werkzeug/wrappers/response.py | 30 +- libs/yaml/__init__.py | 2 +- libs/zipp-3.17.0.dist-info/RECORD | 10 - libs/zipp-3.17.0.dist-info/WHEEL | 5 - libs/zipp-3.20.2.dist-info/INSTALLER | 1 + .../LICENSE | 0 .../METADATA | 70 +- libs/zipp-3.20.2.dist-info/RECORD | 12 + .../REQUESTED} | 0 libs/zipp-3.20.2.dist-info/WHEEL | 5 + .../top_level.txt | 0 libs/zipp/__init__.py | 46 +- .../data02/one => zipp/compat}/__init__.py | 0 libs/zipp/compat/overlay.py | 37 + libs/zipp/{py310compat.py => compat/py310.py} | 4 +- libs/zipp/glob.py | 120 +- 2037 files changed, 61083 insertions(+), 68809 deletions(-) delete mode 100644 libs/Flask_Cors-4.0.0.dist-info/RECORD rename libs/{Flask_Cors-4.0.0.dist-info => Flask_Cors-5.0.0.dist-info}/INSTALLER (100%) rename libs/{Flask_Cors-4.0.0.dist-info => Flask_Cors-5.0.0.dist-info}/LICENSE (100%) rename libs/{Flask_Cors-4.0.0.dist-info => Flask_Cors-5.0.0.dist-info}/METADATA (89%) create mode 100644 libs/Flask_Cors-5.0.0.dist-info/RECORD rename libs/{Flask_Cors-4.0.0.dist-info => Flask_Cors-5.0.0.dist-info}/REQUESTED (100%) rename libs/{Flask_Cors-4.0.0.dist-info => Flask_Cors-5.0.0.dist-info}/WHEEL (100%) rename libs/{Flask_Cors-4.0.0.dist-info => Flask_Cors-5.0.0.dist-info}/top_level.txt (100%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/INSTALLER (100%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/LICENSE (100%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/METADATA (89%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/RECORD (73%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/REQUESTED (100%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/WHEEL (65%) rename libs/{Flask_Migrate-4.0.5.dist-info => Flask_Migrate-4.1.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/Flask_SocketIO-5.3.6.dist-info/RECORD rename libs/{Flask_SocketIO-5.3.6.dist-info => Flask_SocketIO-5.5.1.dist-info}/INSTALLER (100%) rename libs/{Flask_SocketIO-5.3.6.dist-info => Flask_SocketIO-5.5.1.dist-info}/LICENSE (100%) rename libs/{Flask_SocketIO-5.3.6.dist-info => Flask_SocketIO-5.5.1.dist-info}/METADATA (92%) create mode 100644 libs/Flask_SocketIO-5.5.1.dist-info/RECORD rename libs/{Flask_SocketIO-5.3.6.dist-info => Flask_SocketIO-5.5.1.dist-info}/REQUESTED (100%) rename libs/{Flask_SocketIO-5.3.6.dist-info => Flask_SocketIO-5.5.1.dist-info}/WHEEL (65%) rename libs/{Flask_SocketIO-5.3.6.dist-info => Flask_SocketIO-5.5.1.dist-info}/top_level.txt (100%) delete mode 100644 libs/Jinja2-3.1.3.dist-info/RECORD delete mode 100644 libs/Jinja2-3.1.3.dist-info/entry_points.txt delete mode 100644 libs/Jinja2-3.1.3.dist-info/top_level.txt rename libs/{Jinja2-3.1.3.dist-info => Mako-1.3.8.dist-info}/INSTALLER (100%) rename libs/{Mako-1.3.2.dist-info => Mako-1.3.8.dist-info}/LICENSE (100%) rename libs/{Mako-1.3.2.dist-info => Mako-1.3.8.dist-info}/METADATA (94%) rename libs/{Mako-1.3.2.dist-info => Mako-1.3.8.dist-info}/RECORD (72%) rename libs/{Jinja2-3.1.3.dist-info => Mako-1.3.8.dist-info}/REQUESTED (100%) rename libs/{Mako-1.3.2.dist-info => Mako-1.3.8.dist-info}/WHEEL (65%) rename libs/{Mako-1.3.2.dist-info => Mako-1.3.8.dist-info}/entry_points.txt (100%) rename libs/{Mako-1.3.2.dist-info => Mako-1.3.8.dist-info}/top_level.txt (100%) delete mode 100644 libs/Markdown-3.5.2.dist-info/LICENSE.md rename libs/{Mako-1.3.2.dist-info => Markdown-3.7.dist-info}/INSTALLER (100%) create mode 100644 libs/Markdown-3.7.dist-info/LICENSE.md rename libs/{Markdown-3.5.2.dist-info => Markdown-3.7.dist-info}/METADATA (76%) rename libs/{Markdown-3.5.2.dist-info => Markdown-3.7.dist-info}/RECORD (64%) rename libs/{Mako-1.3.2.dist-info => Markdown-3.7.dist-info}/REQUESTED (100%) rename libs/{Markdown-3.5.2.dist-info => Markdown-3.7.dist-info}/WHEEL (65%) rename libs/{Markdown-3.5.2.dist-info => Markdown-3.7.dist-info}/entry_points.txt (100%) rename libs/{Markdown-3.5.2.dist-info => Markdown-3.7.dist-info}/top_level.txt (100%) rename libs/{Markdown-3.5.2.dist-info => PyYAML-6.0.2.dist-info}/INSTALLER (100%) rename libs/{PyYAML-6.0.1.dist-info => PyYAML-6.0.2.dist-info}/LICENSE (100%) rename libs/{PyYAML-6.0.1.dist-info => PyYAML-6.0.2.dist-info}/METADATA (93%) rename libs/{PyYAML-6.0.1.dist-info => PyYAML-6.0.2.dist-info}/RECORD (71%) rename libs/{Markdown-3.5.2.dist-info => PyYAML-6.0.2.dist-info}/REQUESTED (100%) rename libs/{PyYAML-6.0.1.dist-info => PyYAML-6.0.2.dist-info}/WHEEL (70%) rename libs/{PyYAML-6.0.1.dist-info => PyYAML-6.0.2.dist-info}/top_level.txt (100%) delete mode 100644 libs/SQLAlchemy-2.0.27.dist-info/RECORD rename libs/{PyYAML-6.0.1.dist-info => SQLAlchemy-2.0.37.dist-info}/INSTALLER (100%) rename libs/{SQLAlchemy-2.0.27.dist-info => SQLAlchemy-2.0.37.dist-info}/LICENSE (94%) rename libs/{SQLAlchemy-2.0.27.dist-info => SQLAlchemy-2.0.37.dist-info}/METADATA (95%) create mode 100644 libs/SQLAlchemy-2.0.37.dist-info/RECORD rename libs/{PyYAML-6.0.1.dist-info => SQLAlchemy-2.0.37.dist-info}/REQUESTED (100%) rename libs/{SQLAlchemy-2.0.27.dist-info => SQLAlchemy-2.0.37.dist-info}/WHEEL (70%) rename libs/{SQLAlchemy-2.0.27.dist-info => SQLAlchemy-2.0.37.dist-info}/top_level.txt (100%) delete mode 100644 libs/alembic-1.13.1.dist-info/WHEEL rename libs/{SQLAlchemy-2.0.27.dist-info => alembic-1.14.0.dist-info}/INSTALLER (100%) rename libs/{alembic-1.13.1.dist-info => alembic-1.14.0.dist-info}/LICENSE (95%) rename libs/{alembic-1.13.1.dist-info => alembic-1.14.0.dist-info}/METADATA (99%) rename libs/{alembic-1.13.1.dist-info => alembic-1.14.0.dist-info}/RECORD (55%) rename libs/{SQLAlchemy-2.0.27.dist-info => alembic-1.14.0.dist-info}/REQUESTED (100%) create mode 100644 libs/alembic-1.14.0.dist-info/WHEEL rename libs/{alembic-1.13.1.dist-info => alembic-1.14.0.dist-info}/entry_points.txt (100%) rename libs/{alembic-1.13.1.dist-info => alembic-1.14.0.dist-info}/top_level.txt (100%) rename libs/{alembic-1.13.1.dist-info => aniso8601-10.0.0.dist-info}/INSTALLER (100%) rename libs/{aniso8601-9.0.1.dist-info => aniso8601-10.0.0.dist-info}/LICENSE (97%) rename libs/{aniso8601-9.0.1.dist-info => aniso8601-10.0.0.dist-info}/METADATA (98%) create mode 100644 libs/aniso8601-10.0.0.dist-info/RECORD rename libs/{alembic-1.13.1.dist-info => aniso8601-10.0.0.dist-info}/REQUESTED (100%) rename libs/{aniso8601-9.0.1.dist-info => aniso8601-10.0.0.dist-info}/WHEEL (100%) rename libs/{aniso8601-9.0.1.dist-info => aniso8601-10.0.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/aniso8601-9.0.1.dist-info/RECORD delete mode 100644 libs/apprise-1.7.6.dist-info/RECORD rename libs/{aniso8601-9.0.1.dist-info => apprise-1.9.2.dist-info}/INSTALLER (100%) rename libs/{apprise-1.7.6.dist-info => apprise-1.9.2.dist-info}/LICENSE (95%) rename libs/{apprise-1.7.6.dist-info => apprise-1.9.2.dist-info}/METADATA (80%) create mode 100644 libs/apprise-1.9.2.dist-info/RECORD rename libs/{aniso8601-9.0.1.dist-info => apprise-1.9.2.dist-info}/REQUESTED (100%) rename libs/{Jinja2-3.1.3.dist-info => apprise-1.9.2.dist-info}/WHEEL (100%) rename libs/{apprise-1.7.6.dist-info => apprise-1.9.2.dist-info}/entry_points.txt (100%) rename libs/{apprise-1.7.6.dist-info => apprise-1.9.2.dist-info}/top_level.txt (100%) rename libs/apprise/{Apprise.py => apprise.py} (98%) rename libs/apprise/{Apprise.pyi => apprise.pyi} (100%) rename libs/apprise/{AppriseAttachment.py => apprise_attachment.py} (96%) rename libs/apprise/{AppriseAttachment.pyi => apprise_attachment.pyi} (100%) rename libs/apprise/{AppriseConfig.py => apprise_config.py} (98%) rename libs/apprise/{AppriseConfig.pyi => apprise_config.pyi} (100%) rename libs/apprise/{AppriseAsset.py => asset.py} (75%) rename libs/apprise/{AppriseAsset.pyi => asset.pyi} (100%) rename libs/apprise/attachment/{AttachBase.py => base.py} (76%) rename libs/apprise/attachment/{AttachBase.pyi => base.pyi} (100%) rename libs/apprise/attachment/{AttachFile.py => file.py} (88%) rename libs/apprise/attachment/{AttachHTTP.py => http.py} (97%) create mode 100644 libs/apprise/attachment/memory.py rename libs/apprise/config/{ConfigBase.py => base.py} (99%) rename libs/apprise/config/{ConfigBase.pyi => base.pyi} (100%) rename libs/apprise/config/{ConfigFile.py => file.py} (94%) rename libs/apprise/config/{ConfigHTTP.py => http.py} (98%) rename libs/apprise/config/{ConfigMemory.py => memory.py} (95%) rename libs/apprise/decorators/{CustomNotifyPlugin.py => base.py} (95%) create mode 100644 libs/apprise/exception.py rename libs/apprise/{AppriseLocale.py => locale.py} (99%) rename libs/apprise/{AttachmentManager.py => manager_attachment.py} (90%) rename libs/apprise/{ConfigurationManager.py => manager_config.py} (90%) rename libs/apprise/{NotificationManager.py => manager_plugins.py} (89%) create mode 100644 libs/apprise/persistent_store.py delete mode 100644 libs/apprise/plugins/NotifyBoxcar.py create mode 100644 libs/apprise/plugins/africas_talking.py rename libs/apprise/plugins/{NotifyAppriseAPI.py => apprise_api.py} (91%) rename libs/apprise/plugins/{NotifyAprs.py => aprs.py} (98%) rename libs/apprise/plugins/{NotifyBark.py => bark.py} (90%) rename libs/apprise/plugins/{NotifyBase.py => base.py} (91%) rename libs/apprise/plugins/{NotifyBase.pyi => base.pyi} (100%) rename libs/apprise/plugins/{NotifyBulkSMS.py => bulksms.py} (95%) rename libs/apprise/plugins/{NotifyBulkVS.py => bulkvs.py} (96%) rename libs/apprise/plugins/{NotifyBurstSMS.py => burstsms.py} (96%) rename libs/apprise/plugins/{NotifyChantify.py => chanify.py} (81%) rename libs/apprise/plugins/{NotifyClickSend.py => clicksend.py} (91%) rename libs/apprise/plugins/{NotifyForm.py => custom_form.py} (95%) rename libs/apprise/plugins/{NotifyJSON.py => custom_json.py} (89%) rename libs/apprise/plugins/{NotifyXML.py => custom_xml.py} (89%) rename libs/apprise/plugins/{NotifyD7Networks.py => d7networks.py} (96%) rename libs/apprise/plugins/{NotifyDapnet.py => dapnet.py} (96%) rename libs/apprise/plugins/{NotifyDBus.py => dbus.py} (97%) rename libs/apprise/plugins/{NotifyDingTalk.py => dingtalk.py} (95%) rename libs/apprise/plugins/{NotifyDiscord.py => discord.py} (95%) create mode 100644 libs/apprise/plugins/email/__init__.py rename libs/apprise/plugins/{NotifyEmail.py => email/base.py} (66%) create mode 100644 libs/apprise/plugins/email/common.py create mode 100644 libs/apprise/plugins/email/templates.py rename libs/apprise/plugins/{NotifyEmby.py => emby.py} (97%) rename libs/apprise/plugins/{NotifyEnigma2.py => enigma2.py} (94%) rename libs/apprise/plugins/{NotifyFCM => fcm}/__init__.py (97%) rename libs/apprise/plugins/{NotifyFCM => fcm}/color.py (97%) rename libs/apprise/plugins/{NotifyFCM => fcm}/common.py (96%) rename libs/apprise/plugins/{NotifyFCM => fcm}/oauth.py (99%) rename libs/apprise/plugins/{NotifyFCM => fcm}/priority.py (99%) rename libs/apprise/plugins/{NotifyFeishu.py => feishu.py} (94%) rename libs/apprise/plugins/{NotifyFlock.py => flock.py} (96%) rename libs/apprise/plugins/{NotifyFreeMobile.py => freemobile.py} (93%) rename libs/apprise/plugins/{NotifyGnome.py => gnome.py} (96%) rename libs/apprise/plugins/{NotifyGoogleChat.py => google_chat.py} (95%) rename libs/apprise/plugins/{NotifyGotify.py => gotify.py} (94%) rename libs/apprise/plugins/{NotifyGrowl.py => growl.py} (95%) rename libs/apprise/plugins/{NotifyGuilded.py => guilded.py} (94%) rename libs/apprise/plugins/{NotifyHomeAssistant.py => home_assistant.py} (91%) rename libs/apprise/plugins/{NotifyHttpSMS.py => httpsms.py} (95%) rename libs/apprise/plugins/{NotifyIFTTT.py => ifttt.py} (96%) rename libs/apprise/plugins/{NotifyJoin.py => join.py} (96%) rename libs/apprise/plugins/{NotifyKavenegar.py => kavenegar.py} (96%) rename libs/apprise/plugins/{NotifyKumulos.py => kumulos.py} (94%) rename libs/apprise/plugins/{NotifyLametric.py => lametric.py} (96%) rename libs/apprise/plugins/{NotifyLine.py => line.py} (95%) rename libs/apprise/plugins/{NotifyLunaSea.py => lunasea.py} (93%) rename libs/apprise/plugins/{NotifyMacOSX.py => macosx.py} (96%) rename libs/apprise/plugins/{NotifyMailgun.py => mailgun.py} (96%) rename libs/apprise/plugins/{NotifyMastodon.py => mastodon.py} (98%) rename libs/apprise/plugins/{NotifyMatrix.py => matrix.py} (74%) rename libs/apprise/plugins/{NotifyMattermost.py => mattermost.py} (80%) rename libs/apprise/plugins/{NotifyMessageBird.py => messagebird.py} (96%) rename libs/apprise/plugins/{NotifyMisskey.py => misskey.py} (94%) rename libs/apprise/plugins/{NotifyMQTT.py => mqtt.py} (92%) rename libs/apprise/plugins/{NotifyMSG91.py => msg91.py} (96%) rename libs/apprise/plugins/{NotifyMSTeams.py => msteams.py} (82%) rename libs/apprise/plugins/{NotifyNextcloud.py => nextcloud.py} (95%) rename libs/apprise/plugins/{NotifyNextcloudTalk.py => nextcloudtalk.py} (94%) rename libs/apprise/plugins/{NotifyNotica.py => notica.py} (95%) rename libs/apprise/plugins/{NotifyNotifiarr.py => notifiarr.py} (86%) rename libs/apprise/plugins/{NotifyNotifico.py => notifico.py} (96%) rename libs/apprise/plugins/{NotifyNtfy.py => ntfy.py} (91%) rename libs/apprise/plugins/{NotifyOffice365.py => office365.py} (51%) rename libs/apprise/plugins/{NotifyOneSignal.py => one_signal.py} (78%) rename libs/apprise/plugins/{NotifyOpsgenie.py => opsgenie.py} (59%) rename libs/apprise/plugins/{NotifyPagerDuty.py => pagerduty.py} (96%) rename libs/apprise/plugins/{NotifyPagerTree.py => pagertree.py} (96%) rename libs/apprise/plugins/{NotifyParsePlatform.py => parseplatform.py} (94%) create mode 100644 libs/apprise/plugins/plivo.py rename libs/apprise/plugins/{NotifyPopcornNotify.py => popcorn_notify.py} (95%) rename libs/apprise/plugins/{NotifyProwl.py => prowl.py} (95%) rename libs/apprise/plugins/{NotifyPushBullet.py => pushbullet.py} (95%) rename libs/apprise/plugins/{NotifyPushDeer.py => pushdeer.py} (92%) rename libs/apprise/plugins/{NotifyPushed.py => pushed.py} (95%) rename libs/apprise/plugins/{NotifyPushjet.py => pushjet.py} (93%) rename libs/apprise/plugins/{NotifyPushMe.py => pushme.py} (93%) rename libs/apprise/plugins/{NotifyPushover.py => pushover.py} (97%) rename libs/apprise/plugins/{NotifyPushSafer.py => pushsafer.py} (94%) rename libs/apprise/plugins/{NotifyPushy.py => pushy.py} (96%) rename libs/apprise/plugins/{NotifyReddit.py => reddit.py} (97%) rename libs/apprise/plugins/{NotifyRevolt.py => revolt.py} (96%) rename libs/apprise/plugins/{NotifyRocketChat.py => rocketchat.py} (97%) rename libs/apprise/plugins/{NotifyRSyslog.py => rsyslog.py} (95%) rename libs/apprise/plugins/{NotifyRyver.py => ryver.py} (96%) rename libs/apprise/plugins/{NotifySendGrid.py => sendgrid.py} (88%) rename libs/apprise/plugins/{NotifyServerChan.py => serverchan.py} (91%) rename libs/apprise/plugins/{NotifySES.py => ses.py} (97%) create mode 100644 libs/apprise/plugins/seven.py create mode 100644 libs/apprise/plugins/sfr.py rename libs/apprise/plugins/{NotifySignalAPI.py => signal_api.py} (92%) rename libs/apprise/plugins/{NotifySimplePush.py => simplepush.py} (88%) rename libs/apprise/plugins/{NotifySinch.py => sinch.py} (96%) rename libs/apprise/plugins/{NotifySlack.py => slack.py} (85%) rename libs/apprise/plugins/{NotifySMSEagle.py => smseagle.py} (94%) rename libs/apprise/plugins/{NotifySMSManager.py => smsmanager.py} (96%) rename libs/apprise/plugins/{NotifySMTP2Go.py => smtp2go.py} (92%) rename libs/apprise/plugins/{NotifySNS.py => sns.py} (97%) rename libs/apprise/plugins/{NotifySparkPost.py => sparkpost.py} (94%) create mode 100644 libs/apprise/plugins/splunk.py rename libs/apprise/plugins/{NotifyStreamlabs.py => streamlabs.py} (96%) rename libs/apprise/plugins/{NotifySynology.py => synology.py} (94%) rename libs/apprise/plugins/{NotifySyslog.py => syslog.py} (96%) rename libs/apprise/plugins/{NotifyTechulusPush.py => techuluspush.py} (94%) rename libs/apprise/plugins/{NotifyTelegram.py => telegram.py} (95%) rename libs/apprise/plugins/{NotifyThreema.py => threema.py} (95%) rename libs/apprise/plugins/{NotifyTwilio.py => twilio.py} (81%) rename libs/apprise/plugins/{NotifyTwist.py => twist.py} (97%) rename libs/apprise/plugins/{NotifyTwitter.py => twitter.py} (96%) rename libs/apprise/plugins/{NotifyVoipms.py => voipms.py} (84%) rename libs/apprise/plugins/{NotifyVonage.py => vonage.py} (96%) rename libs/apprise/plugins/{NotifyWebexTeams.py => webexteams.py} (95%) rename libs/apprise/plugins/{NotifyWeComBot.py => wecombot.py} (95%) rename libs/apprise/plugins/{NotifyWhatsApp.py => whatsapp.py} (97%) rename libs/apprise/plugins/{NotifyWindows.py => windows.py} (96%) create mode 100644 libs/apprise/plugins/workflows.py create mode 100644 libs/apprise/plugins/wxpusher.py rename libs/apprise/plugins/{NotifyXBMC.py => xbmc.py} (93%) rename libs/apprise/plugins/{NotifyZulip.py => zulip.py} (95%) rename libs/apprise/{URLBase.py => url.py} (80%) rename libs/apprise/{URLBase.pyi => url.pyi} (100%) create mode 100644 libs/apprise/utils/__init__.py create mode 100644 libs/apprise/utils/base64.py create mode 100644 libs/apprise/utils/cwe312.py create mode 100644 libs/apprise/utils/disk.py create mode 100644 libs/apprise/utils/logic.py create mode 100644 libs/apprise/utils/module.py rename libs/apprise/{utils.py => utils/parse.py} (71%) create mode 100644 libs/apprise/utils/pgp.py create mode 100644 libs/apprise/utils/singleton.py create mode 100644 libs/apprise/utils/templates.py delete mode 100644 libs/attrs-23.2.0.dist-info/METADATA delete mode 100644 libs/attrs-23.2.0.dist-info/RECORD rename libs/{apprise-1.7.6.dist-info => attrs-24.3.0.dist-info}/INSTALLER (100%) create mode 100644 libs/attrs-24.3.0.dist-info/METADATA create mode 100644 libs/attrs-24.3.0.dist-info/RECORD rename libs/{apprise-1.7.6.dist-info => attrs-24.3.0.dist-info}/REQUESTED (100%) rename libs/{attrs-23.2.0.dist-info => attrs-24.3.0.dist-info}/WHEEL (67%) rename libs/{attrs-23.2.0.dist-info => attrs-24.3.0.dist-info}/licenses/LICENSE (100%) rename libs/{attrs-23.2.0.dist-info => babelfish-0.6.1.dist-info}/INSTALLER (100%) rename libs/{babelfish-0.6.0.dist-info => babelfish-0.6.1.dist-info}/LICENSE (100%) rename libs/{babelfish-0.6.0.dist-info => babelfish-0.6.1.dist-info}/METADATA (89%) rename libs/{babelfish-0.6.0.dist-info => babelfish-0.6.1.dist-info}/RECORD (61%) rename libs/{attrs-23.2.0.dist-info => babelfish-0.6.1.dist-info}/REQUESTED (100%) rename libs/{babelfish-0.6.0.dist-info => babelfish-0.6.1.dist-info}/WHEEL (67%) create mode 100644 libs/babelfish/compat.py delete mode 100644 libs/blinker-1.7.0.dist-info/METADATA delete mode 100644 libs/blinker-1.7.0.dist-info/RECORD rename libs/{babelfish-0.6.0.dist-info => blinker-1.8.2.dist-info}/INSTALLER (100%) rename libs/{blinker-1.7.0.dist-info/LICENSE.rst => blinker-1.8.2.dist-info/LICENSE.txt} (100%) create mode 100644 libs/blinker-1.8.2.dist-info/METADATA create mode 100644 libs/blinker-1.8.2.dist-info/RECORD rename libs/{babelfish-0.6.0.dist-info => blinker-1.8.2.dist-info}/REQUESTED (100%) rename libs/{werkzeug-3.0.1.dist-info => blinker-1.8.2.dist-info}/WHEEL (71%) delete mode 100644 libs/blinker/_saferef.py rename libs/{blinker-1.7.0.dist-info => certifi-2024.12.14.dist-info}/INSTALLER (100%) rename libs/{certifi-2024.2.2.dist-info => certifi-2024.12.14.dist-info}/LICENSE (100%) rename libs/{certifi-2024.2.2.dist-info => certifi-2024.12.14.dist-info}/METADATA (94%) create mode 100644 libs/certifi-2024.12.14.dist-info/RECORD rename libs/{blinker-1.7.0.dist-info => certifi-2024.12.14.dist-info}/REQUESTED (100%) rename libs/{apprise-1.7.6.dist-info => certifi-2024.12.14.dist-info}/WHEEL (100%) rename libs/{certifi-2024.2.2.dist-info => certifi-2024.12.14.dist-info}/top_level.txt (100%) delete mode 100644 libs/certifi-2024.2.2.dist-info/RECORD delete mode 100644 libs/charset_normalizer-3.3.2.dist-info/RECORD delete mode 100644 libs/charset_normalizer-3.3.2.dist-info/entry_points.txt rename libs/{certifi-2024.2.2.dist-info => charset_normalizer-3.4.1.dist-info}/INSTALLER (100%) rename libs/{charset_normalizer-3.3.2.dist-info => charset_normalizer-3.4.1.dist-info}/LICENSE (95%) rename libs/{charset_normalizer-3.3.2.dist-info => charset_normalizer-3.4.1.dist-info}/METADATA (91%) create mode 100644 libs/charset_normalizer-3.4.1.dist-info/RECORD rename libs/{certifi-2024.2.2.dist-info => charset_normalizer-3.4.1.dist-info}/REQUESTED (100%) create mode 100644 libs/charset_normalizer-3.4.1.dist-info/WHEEL create mode 100644 libs/charset_normalizer-3.4.1.dist-info/entry_points.txt rename libs/{charset_normalizer-3.3.2.dist-info => charset_normalizer-3.4.1.dist-info}/top_level.txt (100%) delete mode 100644 libs/click-8.1.7.dist-info/METADATA delete mode 100644 libs/click-8.1.7.dist-info/RECORD delete mode 100644 libs/click-8.1.7.dist-info/top_level.txt rename libs/{charset_normalizer-3.3.2.dist-info => click-8.1.8.dist-info}/INSTALLER (100%) rename libs/{click-8.1.7.dist-info/LICENSE.rst => click-8.1.8.dist-info/LICENSE.txt} (100%) create mode 100644 libs/click-8.1.8.dist-info/METADATA create mode 100644 libs/click-8.1.8.dist-info/RECORD rename libs/{charset_normalizer-3.3.2.dist-info => click-8.1.8.dist-info}/REQUESTED (100%) rename libs/{typing_extensions-4.10.0.dist-info => click-8.1.8.dist-info}/WHEEL (71%) delete mode 100644 libs/dogpile.cache-1.3.2.dist-info/WHEEL rename libs/{click-8.1.7.dist-info => dogpile.cache-1.3.3.dist-info}/INSTALLER (100%) rename libs/{dogpile.cache-1.3.2.dist-info => dogpile.cache-1.3.3.dist-info}/LICENSE (100%) rename libs/{dogpile.cache-1.3.2.dist-info => dogpile.cache-1.3.3.dist-info}/METADATA (99%) rename libs/{dogpile.cache-1.3.2.dist-info => dogpile.cache-1.3.3.dist-info}/RECORD (70%) rename libs/{click-8.1.7.dist-info => dogpile.cache-1.3.3.dist-info}/REQUESTED (100%) create mode 100644 libs/dogpile.cache-1.3.3.dist-info/WHEEL rename libs/{dogpile.cache-1.3.2.dist-info => dogpile.cache-1.3.3.dist-info}/entry_points.txt (100%) rename libs/{dogpile.cache-1.3.2.dist-info => dogpile.cache-1.3.3.dist-info}/top_level.txt (100%) rename libs/{dogpile.cache-1.3.2.dist-info => dynaconf-3.2.6.dist-info}/INSTALLER (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/LICENSE (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/METADATA (97%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/RECORD (72%) rename libs/{dogpile.cache-1.3.2.dist-info => dynaconf-3.2.6.dist-info}/REQUESTED (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/WHEEL (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/box-LICENSE.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/click-LICENSE.rst (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/entry_points.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/licenses.sh (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/python-dotenv-LICENSE.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/ruamel.yaml-LICENSE.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/toml-LICENSE.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/tomli-LICENSE.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/top_level.txt (100%) rename libs/{dynaconf-3.2.4.dist-info => dynaconf-3.2.6.dist-info}/vendor_versions.txt (100%) delete mode 100644 libs/enzyme-0.4.1.dist-info/LICENSE delete mode 100644 libs/enzyme-0.4.1.dist-info/METADATA delete mode 100644 libs/enzyme-0.4.1.dist-info/RECORD rename libs/{dynaconf-3.2.4.dist-info => enzyme-0.5.2.dist-info}/INSTALLER (100%) create mode 100644 libs/enzyme-0.5.2.dist-info/LICENSE create mode 100644 libs/enzyme-0.5.2.dist-info/METADATA create mode 100644 libs/enzyme-0.5.2.dist-info/RECORD rename libs/{dynaconf-3.2.4.dist-info => enzyme-0.5.2.dist-info}/REQUESTED (100%) create mode 100644 libs/enzyme-0.5.2.dist-info/WHEEL rename libs/{enzyme-0.4.1.dist-info => enzyme-0.5.2.dist-info}/top_level.txt (100%) delete mode 100644 libs/enzyme/compat.py delete mode 100644 libs/enzyme/tests/__init__.py delete mode 100644 libs/enzyme/tests/parsers/ebml/test1.mkv.yml delete mode 100644 libs/enzyme/tests/test_mkv.py delete mode 100644 libs/enzyme/tests/test_parsers.py rename libs/{enzyme-0.4.1.dist-info => ffsubsync-0.4.27.dist-info}/INSTALLER (100%) rename libs/{ffsubsync-0.4.25.dist-info => ffsubsync-0.4.27.dist-info}/LICENSE (100%) rename libs/{ffsubsync-0.4.25.dist-info => ffsubsync-0.4.27.dist-info}/METADATA (99%) rename libs/{ffsubsync-0.4.25.dist-info => ffsubsync-0.4.27.dist-info}/RECORD (51%) rename libs/{enzyme-0.4.1.dist-info => ffsubsync-0.4.27.dist-info}/REQUESTED (100%) rename libs/{ffsubsync-0.4.25.dist-info => ffsubsync-0.4.27.dist-info}/WHEEL (70%) rename libs/{ffsubsync-0.4.25.dist-info => ffsubsync-0.4.27.dist-info}/entry_points.txt (100%) rename libs/{ffsubsync-0.4.25.dist-info => ffsubsync-0.4.27.dist-info}/top_level.txt (100%) rename libs/{ffsubsync-0.4.25.dist-info => flask-3.0.3.dist-info}/INSTALLER (100%) rename libs/{flask-3.0.2.dist-info/LICENSE.rst => flask-3.0.3.dist-info/LICENSE.txt} (100%) rename libs/{flask-3.0.2.dist-info => flask-3.0.3.dist-info}/METADATA (53%) rename libs/{flask-3.0.2.dist-info => flask-3.0.3.dist-info}/RECORD (58%) rename libs/{ffsubsync-0.4.25.dist-info => flask-3.0.3.dist-info}/REQUESTED (100%) rename libs/{pygments-2.17.2.dist-info => flask-3.0.3.dist-info}/WHEEL (67%) rename libs/{flask-3.0.2.dist-info => flask-3.0.3.dist-info}/entry_points.txt (100%) delete mode 100644 libs/ftfy-6.1.3.dist-info/RECORD rename libs/{flask-3.0.2.dist-info => ftfy-6.2.3.dist-info}/INSTALLER (100%) rename libs/{ftfy-6.1.3.dist-info => ftfy-6.2.3.dist-info}/LICENSE.txt (100%) rename libs/{ftfy-6.1.3.dist-info => ftfy-6.2.3.dist-info}/METADATA (74%) create mode 100644 libs/ftfy-6.2.3.dist-info/RECORD rename libs/{flask-3.0.2.dist-info => ftfy-6.2.3.dist-info}/REQUESTED (100%) rename libs/{ftfy-6.1.3.dist-info => ftfy-6.2.3.dist-info}/WHEEL (67%) rename libs/{ftfy-6.1.3.dist-info => ftfy-6.2.3.dist-info}/entry_points.txt (100%) rename libs/{ftfy-6.1.3.dist-info => idna-3.10.dist-info}/INSTALLER (100%) rename libs/{idna-3.6.dist-info => idna-3.10.dist-info}/LICENSE.md (96%) rename libs/{idna-3.6.dist-info => idna-3.10.dist-info}/METADATA (93%) create mode 100644 libs/idna-3.10.dist-info/RECORD rename libs/{ftfy-6.1.3.dist-info => idna-3.10.dist-info}/REQUESTED (100%) rename libs/{blinker-1.7.0.dist-info => idna-3.10.dist-info}/WHEEL (100%) delete mode 100644 libs/idna-3.6.dist-info/RECORD delete mode 100644 libs/importlib_metadata-7.0.1.dist-info/RECORD delete mode 100644 libs/importlib_metadata-7.0.1.dist-info/WHEEL rename libs/{idna-3.6.dist-info => importlib_metadata-7.2.1.dist-info}/INSTALLER (100%) rename libs/{importlib_metadata-7.0.1.dist-info => importlib_metadata-7.2.1.dist-info}/LICENSE (100%) rename libs/{importlib_metadata-7.0.1.dist-info => importlib_metadata-7.2.1.dist-info}/METADATA (71%) create mode 100644 libs/importlib_metadata-7.2.1.dist-info/RECORD rename libs/{idna-3.6.dist-info => importlib_metadata-7.2.1.dist-info}/REQUESTED (100%) create mode 100644 libs/importlib_metadata-7.2.1.dist-info/WHEEL rename libs/{importlib_metadata-7.0.1.dist-info => importlib_metadata-7.2.1.dist-info}/top_level.txt (100%) rename libs/{importlib_resources/tests/data01 => importlib_metadata/compat}/__init__.py (100%) create mode 100644 libs/importlib_metadata/compat/py311.py rename libs/importlib_metadata/{_py39compat.py => compat/py39.py} (82%) delete mode 100644 libs/importlib_resources-6.1.2.dist-info/RECORD delete mode 100644 libs/importlib_resources-6.1.2.dist-info/WHEEL rename libs/{importlib_metadata-7.0.1.dist-info => importlib_resources-6.4.5.dist-info}/INSTALLER (100%) rename libs/{importlib_resources-6.1.2.dist-info => importlib_resources-6.4.5.dist-info}/LICENSE (100%) rename libs/{importlib_resources-6.1.2.dist-info => importlib_resources-6.4.5.dist-info}/METADATA (73%) create mode 100644 libs/importlib_resources-6.4.5.dist-info/RECORD rename libs/{importlib_metadata-7.0.1.dist-info => importlib_resources-6.4.5.dist-info}/REQUESTED (100%) create mode 100644 libs/importlib_resources-6.4.5.dist-info/WHEEL rename libs/{importlib_resources-6.1.2.dist-info => importlib_resources-6.4.5.dist-info}/top_level.txt (100%) create mode 100644 libs/importlib_resources/_functional.py delete mode 100644 libs/importlib_resources/tests/_compat.py rename libs/importlib_resources/tests/{data01/subdirectory => compat}/__init__.py (100%) create mode 100644 libs/importlib_resources/tests/compat/py312.py create mode 100644 libs/importlib_resources/tests/compat/py39.py delete mode 100644 libs/importlib_resources/tests/data01/binary.file delete mode 100644 libs/importlib_resources/tests/data01/subdirectory/binary.file delete mode 100644 libs/importlib_resources/tests/data01/utf-16.file delete mode 100644 libs/importlib_resources/tests/data01/utf-8.file delete mode 100644 libs/importlib_resources/tests/data02/one/resource1.txt delete mode 100644 libs/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txt delete mode 100644 libs/importlib_resources/tests/data02/two/__init__.py delete mode 100644 libs/importlib_resources/tests/data02/two/resource2.txt delete mode 100644 libs/importlib_resources/tests/namespacedata01/binary.file delete mode 100644 libs/importlib_resources/tests/namespacedata01/subdirectory/binary.file delete mode 100644 libs/importlib_resources/tests/namespacedata01/utf-16.file delete mode 100644 libs/importlib_resources/tests/namespacedata01/utf-8.file create mode 100644 libs/importlib_resources/tests/test_functional.py delete mode 100644 libs/inflect-7.0.0.dist-info/RECORD delete mode 100644 libs/inflect-7.0.0.dist-info/WHEEL rename libs/{importlib_resources-6.1.2.dist-info => inflect-7.4.0.dist-info}/INSTALLER (100%) rename libs/{inflect-7.0.0.dist-info => inflect-7.4.0.dist-info}/LICENSE (100%) rename libs/{inflect-7.0.0.dist-info => inflect-7.4.0.dist-info}/METADATA (92%) create mode 100644 libs/inflect-7.4.0.dist-info/RECORD rename libs/{importlib_resources-6.1.2.dist-info => inflect-7.4.0.dist-info}/REQUESTED (100%) create mode 100644 libs/inflect-7.4.0.dist-info/WHEEL rename libs/{inflect-7.0.0.dist-info => inflect-7.4.0.dist-info}/top_level.txt (100%) create mode 100644 libs/inflect/compat/py38.py delete mode 100644 libs/inflect/compat/pydantic.py delete mode 100644 libs/inflect/compat/pydantic1.py delete mode 100644 libs/itsdangerous-2.1.2.dist-info/METADATA delete mode 100644 libs/itsdangerous-2.1.2.dist-info/RECORD delete mode 100644 libs/itsdangerous-2.1.2.dist-info/WHEEL delete mode 100644 libs/itsdangerous-2.1.2.dist-info/top_level.txt rename libs/{inflect-7.0.0.dist-info => itsdangerous-2.2.0.dist-info}/INSTALLER (100%) rename libs/{itsdangerous-2.1.2.dist-info/LICENSE.rst => itsdangerous-2.2.0.dist-info/LICENSE.txt} (100%) create mode 100644 libs/itsdangerous-2.2.0.dist-info/METADATA create mode 100644 libs/itsdangerous-2.2.0.dist-info/RECORD rename libs/{inflect-7.0.0.dist-info => itsdangerous-2.2.0.dist-info}/REQUESTED (100%) rename libs/{flask-3.0.2.dist-info => itsdangerous-2.2.0.dist-info}/WHEEL (100%) rename libs/{itsdangerous-2.1.2.dist-info => jinja2-3.1.5.dist-info}/INSTALLER (100%) rename libs/{Jinja2-3.1.3.dist-info/LICENSE.rst => jinja2-3.1.5.dist-info/LICENSE.txt} (100%) rename libs/{Jinja2-3.1.3.dist-info => jinja2-3.1.5.dist-info}/METADATA (57%) create mode 100644 libs/jinja2-3.1.5.dist-info/RECORD rename libs/{itsdangerous-2.1.2.dist-info => jinja2-3.1.5.dist-info}/REQUESTED (100%) rename libs/{platformdirs-4.2.0.dist-info => jinja2-3.1.5.dist-info}/WHEEL (67%) create mode 100644 libs/jinja2-3.1.5.dist-info/entry_points.txt delete mode 100644 libs/msgpack-1.0.7.dist-info/RECORD rename libs/{msgpack-1.0.7.dist-info => msgpack-1.1.0.dist-info}/COPYING (100%) rename libs/{msgpack-1.0.7.dist-info => msgpack-1.1.0.dist-info}/INSTALLER (100%) rename libs/{msgpack-1.0.7.dist-info => msgpack-1.1.0.dist-info}/METADATA (79%) create mode 100644 libs/msgpack-1.1.0.dist-info/RECORD rename libs/{msgpack-1.0.7.dist-info => msgpack-1.1.0.dist-info}/REQUESTED (100%) rename libs/{msgpack-1.0.7.dist-info => msgpack-1.1.0.dist-info}/WHEEL (70%) rename libs/{msgpack-1.0.7.dist-info => msgpack-1.1.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/msgpack/_cmsgpack.cpp delete mode 100644 libs/msgpack/_cmsgpack.pyx delete mode 100644 libs/msgpack/_packer.pyx delete mode 100644 libs/msgpack/_unpacker.pyx delete mode 100644 libs/msgpack/buff_converter.h delete mode 100644 libs/msgpack/pack.h delete mode 100644 libs/msgpack/pack_template.h delete mode 100644 libs/msgpack/sysdep.h delete mode 100644 libs/msgpack/unpack.h delete mode 100644 libs/msgpack/unpack_define.h delete mode 100644 libs/msgpack/unpack_template.h delete mode 100644 libs/platformdirs-4.2.0.dist-info/RECORD rename libs/{platformdirs-4.2.0.dist-info => platformdirs-4.3.6.dist-info}/INSTALLER (100%) rename libs/{platformdirs-4.2.0.dist-info => platformdirs-4.3.6.dist-info}/METADATA (89%) create mode 100644 libs/platformdirs-4.3.6.dist-info/RECORD rename libs/{platformdirs-4.2.0.dist-info => platformdirs-4.3.6.dist-info}/REQUESTED (100%) create mode 100644 libs/platformdirs-4.3.6.dist-info/WHEEL rename libs/{platformdirs-4.2.0.dist-info => platformdirs-4.3.6.dist-info}/licenses/LICENSE (100%) delete mode 100644 libs/pycountry-23.12.11.dist-info/METADATA delete mode 100644 libs/pycountry-23.12.11.dist-info/WHEEL rename libs/{pycountry-23.12.11.dist-info => pycountry-24.6.1.dist-info}/INSTALLER (100%) rename libs/{pycountry-23.12.11.dist-info => pycountry-24.6.1.dist-info}/LICENSE.txt (100%) create mode 100644 libs/pycountry-24.6.1.dist-info/METADATA rename libs/{pycountry-23.12.11.dist-info => pycountry-24.6.1.dist-info}/RECORD (80%) rename libs/{pycountry-23.12.11.dist-info => pycountry-24.6.1.dist-info}/REQUESTED (100%) create mode 100644 libs/pycountry-24.6.1.dist-info/WHEEL create mode 100644 libs/pycountry/COPYRIGHT.txt create mode 100644 libs/pycountry/locales/km/LC_MESSAGES/iso3166-2.mo create mode 100644 libs/pycountry/locales/km/LC_MESSAGES/iso4217.mo create mode 100644 libs/pycountry/locales/lt/LC_MESSAGES/iso639-5.mo delete mode 100644 libs/pycountry/locales/nb/LC_MESSAGES/iso3166-1.mo delete mode 100644 libs/pycountry/locales/nb/LC_MESSAGES/iso3166-3.mo rename libs/pycountry/locales/{nb => nb_NO}/LC_MESSAGES/iso15924.mo (100%) create mode 100644 libs/pycountry/locales/nb_NO/LC_MESSAGES/iso3166-1.mo create mode 100644 libs/pycountry/locales/nb_NO/LC_MESSAGES/iso3166-3.mo rename libs/pycountry/locales/{nb => nb_NO}/LC_MESSAGES/iso4217.mo (100%) rename libs/pycountry/locales/{nb => nb_NO}/LC_MESSAGES/iso639-3.mo (100%) create mode 100644 libs/pycountry/locales/ro/LC_MESSAGES/iso639-5.mo rename libs/pycountry/locales/{mo => ro_MD}/LC_MESSAGES/iso3166-1.mo (100%) create mode 100644 libs/pycountry/locales/ta/LC_MESSAGES/iso15924.mo create mode 100644 libs/pycountry/locales/ta/LC_MESSAGES/iso3166-2.mo create mode 100644 libs/pycountry/locales/ta/LC_MESSAGES/iso4217.mo create mode 100644 libs/pycountry/locales/ta/LC_MESSAGES/iso639-5.mo delete mode 100644 libs/pygments-2.17.2.dist-info/RECORD rename libs/{pygments-2.17.2.dist-info => pygments-2.19.1.dist-info}/INSTALLER (100%) rename libs/{pygments-2.17.2.dist-info => pygments-2.19.1.dist-info}/METADATA (90%) create mode 100644 libs/pygments-2.19.1.dist-info/RECORD rename libs/{pygments-2.17.2.dist-info => pygments-2.19.1.dist-info}/REQUESTED (100%) create mode 100644 libs/pygments-2.19.1.dist-info/WHEEL rename libs/{pygments-2.17.2.dist-info => pygments-2.19.1.dist-info}/entry_points.txt (100%) rename libs/{pygments-2.17.2.dist-info => pygments-2.19.1.dist-info}/licenses/AUTHORS (94%) rename libs/{pygments-2.17.2.dist-info => pygments-2.19.1.dist-info}/licenses/LICENSE (100%) mode change 100755 => 100644 libs/pygments/formatters/_mapping.py create mode 100644 libs/pygments/lexers/_googlesql_builtins.py create mode 100644 libs/pygments/lexers/_luau_builtins.py create mode 100644 libs/pygments/lexers/codeql.py create mode 100644 libs/pygments/lexers/gleam.py mode change 100755 => 100644 libs/pygments/lexers/gsql.py create mode 100644 libs/pygments/lexers/hare.py create mode 100644 libs/pygments/lexers/json5.py create mode 100644 libs/pygments/lexers/maple.py create mode 100644 libs/pygments/lexers/mojo.py create mode 100644 libs/pygments/lexers/numbair.py create mode 100644 libs/pygments/lexers/pddl.py create mode 100644 libs/pygments/lexers/rego.py create mode 100644 libs/pygments/lexers/soong.py create mode 100644 libs/pygments/lexers/tablegen.py create mode 100644 libs/pygments/lexers/tact.py create mode 100644 libs/pygments/lexers/typst.py create mode 100644 libs/pygments/styles/coffee.py delete mode 100644 libs/pyparsing-3.1.1.dist-info/RECORD rename libs/{pyparsing-3.1.1.dist-info => pyparsing-3.1.4.dist-info}/INSTALLER (100%) rename libs/{pyparsing-3.1.1.dist-info => pyparsing-3.1.4.dist-info}/LICENSE (100%) rename libs/{pyparsing-3.1.1.dist-info => pyparsing-3.1.4.dist-info}/METADATA (98%) create mode 100644 libs/pyparsing-3.1.4.dist-info/RECORD rename libs/{pyparsing-3.1.1.dist-info => pyparsing-3.1.4.dist-info}/REQUESTED (100%) rename libs/{idna-3.6.dist-info => pyparsing-3.1.4.dist-info}/WHEEL (100%) delete mode 100644 libs/pysubs2-1.7.2.dist-info/RECORD delete mode 100644 libs/pysubs2-1.7.2.dist-info/WHEEL rename libs/{pysubs2-1.7.2.dist-info => pysubs2-1.7.3.dist-info}/INSTALLER (100%) rename libs/{pysubs2-1.7.2.dist-info => pysubs2-1.7.3.dist-info}/LICENSE.txt (100%) rename libs/{pysubs2-1.7.2.dist-info => pysubs2-1.7.3.dist-info}/METADATA (99%) create mode 100644 libs/pysubs2-1.7.3.dist-info/RECORD rename libs/{pysubs2-1.7.2.dist-info => pysubs2-1.7.3.dist-info}/REQUESTED (100%) create mode 100644 libs/pysubs2-1.7.3.dist-info/WHEEL rename libs/{pysubs2-1.7.2.dist-info => pysubs2-1.7.3.dist-info}/entry_points.txt (100%) rename libs/{pysubs2-1.7.2.dist-info => pysubs2-1.7.3.dist-info}/top_level.txt (100%) delete mode 100644 libs/python_dateutil-2.8.2.dist-info/RECORD rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/INSTALLER (100%) rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/LICENSE (100%) rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/METADATA (97%) create mode 100644 libs/python_dateutil-2.9.0.dist-info/RECORD rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/REQUESTED (100%) rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/WHEEL (70%) rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/top_level.txt (100%) rename libs/{python_dateutil-2.8.2.dist-info => python_dateutil-2.9.0.dist-info}/zip-safe (100%) rename libs/{python_engineio-4.9.0.dist-info => python_engineio-4.11.2.dist-info}/INSTALLER (100%) rename libs/{python_engineio-4.9.0.dist-info => python_engineio-4.11.2.dist-info}/LICENSE (100%) rename libs/{python_engineio-4.9.0.dist-info => python_engineio-4.11.2.dist-info}/METADATA (99%) create mode 100644 libs/python_engineio-4.11.2.dist-info/RECORD rename libs/{python_engineio-4.9.0.dist-info => python_engineio-4.11.2.dist-info}/REQUESTED (100%) create mode 100644 libs/python_engineio-4.11.2.dist-info/WHEEL rename libs/{python_engineio-4.9.0.dist-info => python_engineio-4.11.2.dist-info}/top_level.txt (100%) delete mode 100644 libs/python_engineio-4.9.0.dist-info/RECORD delete mode 100644 libs/python_engineio-4.9.0.dist-info/WHEEL delete mode 100644 libs/python_socketio-5.11.1.dist-info/RECORD delete mode 100644 libs/python_socketio-5.11.1.dist-info/WHEEL rename libs/{python_socketio-5.11.1.dist-info => python_socketio-5.12.1.dist-info}/INSTALLER (100%) rename libs/{python_socketio-5.11.1.dist-info => python_socketio-5.12.1.dist-info}/LICENSE (100%) rename libs/{python_socketio-5.11.1.dist-info => python_socketio-5.12.1.dist-info}/METADATA (98%) create mode 100644 libs/python_socketio-5.12.1.dist-info/RECORD rename libs/{python_socketio-5.11.1.dist-info => python_socketio-5.12.1.dist-info}/REQUESTED (100%) create mode 100644 libs/python_socketio-5.12.1.dist-info/WHEEL rename libs/{python_socketio-5.11.1.dist-info => python_socketio-5.12.1.dist-info}/top_level.txt (100%) delete mode 100644 libs/pytz-2024.1.dist-info/WHEEL rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/INSTALLER (100%) rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/LICENSE.txt (100%) rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/METADATA (99%) rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/RECORD (91%) rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/REQUESTED (100%) rename libs/{certifi-2024.2.2.dist-info => pytz-2024.2.dist-info}/WHEEL (100%) rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/top_level.txt (100%) rename libs/{pytz-2024.1.dist-info => pytz-2024.2.dist-info}/zip-safe (100%) delete mode 100644 libs/rarfile-4.1.dist-info/RECORD delete mode 100644 libs/rarfile-4.1.dist-info/WHEEL rename libs/{rarfile-4.1.dist-info => rarfile-4.2.dist-info}/INSTALLER (100%) rename libs/{rarfile-4.1.dist-info => rarfile-4.2.dist-info}/LICENSE (92%) rename libs/{rarfile-4.1.dist-info => rarfile-4.2.dist-info}/METADATA (95%) create mode 100644 libs/rarfile-4.2.dist-info/RECORD rename libs/{rarfile-4.1.dist-info => rarfile-4.2.dist-info}/REQUESTED (100%) rename libs/{charset_normalizer-3.3.2.dist-info => rarfile-4.2.dist-info}/WHEEL (100%) rename libs/{rarfile-4.1.dist-info => rarfile-4.2.dist-info}/top_level.txt (100%) delete mode 100644 libs/requests-2.31.0.dist-info/RECORD delete mode 100644 libs/requests-2.31.0.dist-info/WHEEL rename libs/{requests-2.31.0.dist-info => requests-2.32.3.dist-info}/INSTALLER (100%) rename libs/{requests-2.31.0.dist-info => requests-2.32.3.dist-info}/LICENSE (100%) rename libs/{requests-2.31.0.dist-info => requests-2.32.3.dist-info}/METADATA (89%) create mode 100644 libs/requests-2.32.3.dist-info/RECORD rename libs/{requests-2.31.0.dist-info => requests-2.32.3.dist-info}/REQUESTED (100%) create mode 100644 libs/requests-2.32.3.dist-info/WHEEL rename libs/{requests-2.31.0.dist-info => requests-2.32.3.dist-info}/top_level.txt (100%) delete mode 100644 libs/requests_oauthlib-1.3.1.dist-info/RECORD rename libs/{requests_oauthlib-1.3.1.dist-info => requests_oauthlib-2.0.0.dist-info}/INSTALLER (100%) rename libs/{requests_oauthlib-1.3.1.dist-info => requests_oauthlib-2.0.0.dist-info}/LICENSE (100%) rename libs/{requests_oauthlib-1.3.1.dist-info => requests_oauthlib-2.0.0.dist-info}/METADATA (88%) create mode 100644 libs/requests_oauthlib-2.0.0.dist-info/RECORD rename libs/{requests_oauthlib-1.3.1.dist-info => requests_oauthlib-2.0.0.dist-info}/REQUESTED (100%) rename libs/{requests_oauthlib-1.3.1.dist-info => requests_oauthlib-2.0.0.dist-info}/WHEEL (100%) rename libs/{requests_oauthlib-1.3.1.dist-info => requests_oauthlib-2.0.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/rich-13.7.0.dist-info/WHEEL rename libs/{rich-13.7.0.dist-info => rich-13.9.4.dist-info}/INSTALLER (100%) rename libs/{rich-13.7.0.dist-info => rich-13.9.4.dist-info}/LICENSE (100%) rename libs/{rich-13.7.0.dist-info => rich-13.9.4.dist-info}/METADATA (96%) rename libs/{rich-13.7.0.dist-info => rich-13.9.4.dist-info}/RECORD (58%) rename libs/{rich-13.7.0.dist-info => rich-13.9.4.dist-info}/REQUESTED (100%) create mode 100644 libs/rich-13.9.4.dist-info/WHEEL rename libs/{simple_websocket-1.0.0.dist-info => semver-3.0.3.dist-info}/INSTALLER (100%) create mode 100644 libs/semver-3.0.3.dist-info/LICENSE.txt create mode 100644 libs/semver-3.0.3.dist-info/METADATA create mode 100644 libs/semver-3.0.3.dist-info/RECORD rename libs/{simple_websocket-1.0.0.dist-info => semver-3.0.3.dist-info}/REQUESTED (100%) create mode 100644 libs/semver-3.0.3.dist-info/WHEEL create mode 100644 libs/semver-3.0.3.dist-info/entry_points.txt create mode 100644 libs/semver-3.0.3.dist-info/top_level.txt delete mode 100644 libs/simple_websocket-1.0.0.dist-info/RECORD delete mode 100644 libs/simple_websocket-1.0.0.dist-info/WHEEL rename libs/{six-1.16.0.dist-info => simple_websocket-1.1.0.dist-info}/INSTALLER (100%) rename libs/{simple_websocket-1.0.0.dist-info => simple_websocket-1.1.0.dist-info}/LICENSE (100%) rename libs/{simple_websocket-1.0.0.dist-info => simple_websocket-1.1.0.dist-info}/METADATA (78%) create mode 100644 libs/simple_websocket-1.1.0.dist-info/RECORD rename libs/{six-1.16.0.dist-info => simple_websocket-1.1.0.dist-info}/REQUESTED (100%) create mode 100644 libs/simple_websocket-1.1.0.dist-info/WHEEL rename libs/{simple_websocket-1.0.0.dist-info => simple_websocket-1.1.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/six-1.16.0.dist-info/RECORD rename libs/{stevedore-5.2.0.dist-info => six-1.17.0.dist-info}/INSTALLER (100%) rename libs/{six-1.16.0.dist-info => six-1.17.0.dist-info}/LICENSE (96%) rename libs/{six-1.16.0.dist-info => six-1.17.0.dist-info}/METADATA (91%) create mode 100644 libs/six-1.17.0.dist-info/RECORD rename libs/{stevedore-5.2.0.dist-info => six-1.17.0.dist-info}/REQUESTED (100%) rename libs/{six-1.16.0.dist-info => six-1.17.0.dist-info}/WHEEL (100%) rename libs/{six-1.16.0.dist-info => six-1.17.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/sqlalchemy/cyextension/.gitignore delete mode 100644 libs/stevedore-5.2.0.dist-info/WHEEL delete mode 100644 libs/stevedore-5.2.0.dist-info/pbr.json rename libs/{stevedore-5.2.0.dist-info => stevedore-5.3.0.dist-info}/AUTHORS (100%) rename libs/{textdistance-4.6.2.dist-info => stevedore-5.3.0.dist-info}/INSTALLER (100%) rename libs/{stevedore-5.2.0.dist-info => stevedore-5.3.0.dist-info}/LICENSE (100%) rename libs/{stevedore-5.2.0.dist-info => stevedore-5.3.0.dist-info}/METADATA (97%) rename libs/{stevedore-5.2.0.dist-info => stevedore-5.3.0.dist-info}/RECORD (82%) rename libs/{textdistance-4.6.2.dist-info => stevedore-5.3.0.dist-info}/REQUESTED (100%) rename libs/{click-8.1.7.dist-info => stevedore-5.3.0.dist-info}/WHEEL (100%) rename libs/{stevedore-5.2.0.dist-info => stevedore-5.3.0.dist-info}/entry_points.txt (100%) create mode 100644 libs/stevedore-5.3.0.dist-info/pbr.json rename libs/{stevedore-5.2.0.dist-info => stevedore-5.3.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/textdistance-4.6.2.dist-info/WHEEL rename libs/{tqdm-4.66.2.dist-info => textdistance-4.6.3.dist-info}/INSTALLER (100%) rename libs/{textdistance-4.6.2.dist-info => textdistance-4.6.3.dist-info}/LICENSE (100%) rename libs/{textdistance-4.6.2.dist-info => textdistance-4.6.3.dist-info}/METADATA (78%) rename libs/{textdistance-4.6.2.dist-info => textdistance-4.6.3.dist-info}/RECORD (70%) rename libs/{tqdm-4.66.2.dist-info => textdistance-4.6.3.dist-info}/REQUESTED (100%) create mode 100644 libs/textdistance-4.6.3.dist-info/WHEEL rename libs/{textdistance-4.6.2.dist-info => textdistance-4.6.3.dist-info}/top_level.txt (100%) delete mode 100644 libs/tqdm-4.66.2.dist-info/RECORD delete mode 100644 libs/tqdm-4.66.2.dist-info/WHEEL rename libs/{trakit-0.2.1.dist-info => tqdm-4.67.1.dist-info}/INSTALLER (100%) rename libs/{tqdm-4.66.2.dist-info => tqdm-4.67.1.dist-info}/LICENCE (100%) rename libs/{tqdm-4.66.2.dist-info => tqdm-4.67.1.dist-info}/METADATA (98%) create mode 100644 libs/tqdm-4.67.1.dist-info/RECORD rename libs/{trakit-0.2.1.dist-info => tqdm-4.67.1.dist-info}/REQUESTED (100%) create mode 100644 libs/tqdm-4.67.1.dist-info/WHEEL rename libs/{tqdm-4.66.2.dist-info => tqdm-4.67.1.dist-info}/entry_points.txt (100%) rename libs/{tqdm-4.66.2.dist-info => tqdm-4.67.1.dist-info}/top_level.txt (100%) delete mode 100644 libs/trakit-0.2.1.dist-info/WHEEL rename libs/{typing_extensions-4.10.0.dist-info => trakit-0.2.2.dist-info}/INSTALLER (100%) rename libs/{trakit-0.2.1.dist-info => trakit-0.2.2.dist-info}/LICENSE (100%) rename libs/{trakit-0.2.1.dist-info => trakit-0.2.2.dist-info}/METADATA (98%) rename libs/{trakit-0.2.1.dist-info => trakit-0.2.2.dist-info}/RECORD (60%) rename libs/{typing_extensions-4.10.0.dist-info => trakit-0.2.2.dist-info}/REQUESTED (100%) create mode 100644 libs/trakit-0.2.2.dist-info/WHEEL rename libs/{trakit-0.2.1.dist-info => trakit-0.2.2.dist-info}/entry_points.txt (100%) delete mode 100644 libs/typing_extensions-4.10.0.dist-info/RECORD rename libs/{tzdata-2024.1.dist-info => typing_extensions-4.12.2.dist-info}/INSTALLER (100%) rename libs/{typing_extensions-4.10.0.dist-info => typing_extensions-4.12.2.dist-info}/LICENSE (100%) rename libs/{typing_extensions-4.10.0.dist-info => typing_extensions-4.12.2.dist-info}/METADATA (97%) create mode 100644 libs/typing_extensions-4.12.2.dist-info/RECORD rename libs/{tzdata-2024.1.dist-info => typing_extensions-4.12.2.dist-info}/REQUESTED (100%) rename libs/{pyparsing-3.1.1.dist-info => typing_extensions-4.12.2.dist-info}/WHEEL (100%) rename libs/{urllib3-2.2.1.dist-info => tzdata-2024.2.dist-info}/INSTALLER (100%) rename libs/{tzdata-2024.1.dist-info => tzdata-2024.2.dist-info}/LICENSE (100%) rename libs/{tzdata-2024.1.dist-info => tzdata-2024.2.dist-info}/LICENSE_APACHE (100%) rename libs/{tzdata-2024.1.dist-info => tzdata-2024.2.dist-info}/METADATA (98%) rename libs/{tzdata-2024.1.dist-info => tzdata-2024.2.dist-info}/RECORD (91%) rename libs/{urllib3-2.2.1.dist-info => tzdata-2024.2.dist-info}/REQUESTED (100%) rename libs/{tzdata-2024.1.dist-info => tzdata-2024.2.dist-info}/WHEEL (70%) rename libs/{tzdata-2024.1.dist-info => tzdata-2024.2.dist-info}/top_level.txt (100%) delete mode 100644 libs/urllib3-2.2.1.dist-info/RECORD delete mode 100644 libs/urllib3-2.2.1.dist-info/WHEEL rename libs/{websocket_client-1.7.0.dist-info => urllib3-2.2.3.dist-info}/INSTALLER (100%) rename libs/{urllib3-2.2.1.dist-info => urllib3-2.2.3.dist-info}/METADATA (98%) create mode 100644 libs/urllib3-2.2.3.dist-info/RECORD rename libs/{websocket_client-1.7.0.dist-info => urllib3-2.2.3.dist-info}/REQUESTED (100%) create mode 100644 libs/urllib3-2.2.3.dist-info/WHEEL rename libs/{urllib3-2.2.1.dist-info => urllib3-2.2.3.dist-info}/licenses/LICENSE.txt (100%) delete mode 100644 libs/urllib3/http2.py create mode 100644 libs/urllib3/http2/__init__.py create mode 100644 libs/urllib3/http2/connection.py create mode 100644 libs/urllib3/http2/probe.py delete mode 100644 libs/websocket_client-1.7.0.dist-info/RECORD delete mode 100644 libs/websocket_client-1.7.0.dist-info/WHEEL rename libs/{werkzeug-3.0.1.dist-info => websocket_client-1.8.0.dist-info}/INSTALLER (100%) rename libs/{websocket_client-1.7.0.dist-info => websocket_client-1.8.0.dist-info}/LICENSE (99%) rename libs/{websocket_client-1.7.0.dist-info => websocket_client-1.8.0.dist-info}/METADATA (95%) create mode 100644 libs/websocket_client-1.8.0.dist-info/RECORD rename libs/{werkzeug-3.0.1.dist-info => websocket_client-1.8.0.dist-info}/REQUESTED (100%) rename libs/{enzyme-0.4.1.dist-info => websocket_client-1.8.0.dist-info}/WHEEL (100%) rename libs/{websocket_client-1.7.0.dist-info => websocket_client-1.8.0.dist-info}/entry_points.txt (100%) rename libs/{websocket_client-1.7.0.dist-info => websocket_client-1.8.0.dist-info}/top_level.txt (100%) delete mode 100644 libs/werkzeug-3.0.1.dist-info/RECORD rename libs/{zipp-3.17.0.dist-info => werkzeug-3.0.6.dist-info}/INSTALLER (100%) rename libs/{werkzeug-3.0.1.dist-info/LICENSE.rst => werkzeug-3.0.6.dist-info/LICENSE.txt} (100%) rename libs/{werkzeug-3.0.1.dist-info => werkzeug-3.0.6.dist-info}/METADATA (68%) create mode 100644 libs/werkzeug-3.0.6.dist-info/RECORD rename libs/{zipp-3.17.0.dist-info => werkzeug-3.0.6.dist-info}/REQUESTED (100%) create mode 100644 libs/werkzeug-3.0.6.dist-info/WHEEL delete mode 100644 libs/zipp-3.17.0.dist-info/RECORD delete mode 100644 libs/zipp-3.17.0.dist-info/WHEEL create mode 100644 libs/zipp-3.20.2.dist-info/INSTALLER rename libs/{zipp-3.17.0.dist-info => zipp-3.20.2.dist-info}/LICENSE (100%) rename libs/{zipp-3.17.0.dist-info => zipp-3.20.2.dist-info}/METADATA (55%) create mode 100644 libs/zipp-3.20.2.dist-info/RECORD rename libs/{importlib_resources/tests/data02/__init__.py => zipp-3.20.2.dist-info/REQUESTED} (100%) create mode 100644 libs/zipp-3.20.2.dist-info/WHEEL rename libs/{zipp-3.17.0.dist-info => zipp-3.20.2.dist-info}/top_level.txt (100%) rename libs/{importlib_resources/tests/data02/one => zipp/compat}/__init__.py (100%) create mode 100644 libs/zipp/compat/overlay.py rename libs/zipp/{py310compat.py => compat/py310.py} (51%) diff --git a/libs/Flask_Cors-4.0.0.dist-info/RECORD b/libs/Flask_Cors-4.0.0.dist-info/RECORD deleted file mode 100644 index eae9c8673..000000000 --- a/libs/Flask_Cors-4.0.0.dist-info/RECORD +++ /dev/null @@ -1,12 +0,0 @@ -Flask_Cors-4.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Flask_Cors-4.0.0.dist-info/LICENSE,sha256=bhob3FSDTB4HQMvOXV9vLK4chG_Sp_SCsRZJWU-vvV0,1069 -Flask_Cors-4.0.0.dist-info/METADATA,sha256=gH5CIZManWT1lJuvM-YzOlSGJNdzB03QkylAtEc24tY,5417 -Flask_Cors-4.0.0.dist-info/RECORD,, -Flask_Cors-4.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Flask_Cors-4.0.0.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110 -Flask_Cors-4.0.0.dist-info/top_level.txt,sha256=aWye_0QNZPp_QtPF4ZluLHqnyVLT9CPJsfiGhwqkWuo,11 -flask_cors/__init__.py,sha256=wZDCvPTHspA2g1VV7KyKN7R-uCdBnirTlsCzgPDcQtI,792 -flask_cors/core.py,sha256=e1u_o5SOcS_gMWGjcQrkyk91uPICnzZ3AXZvy5jQ_FE,14063 -flask_cors/decorator.py,sha256=BeJsyX1wYhVKWN04FAhb6z8YqffiRr7wKqwzHPap4bw,5009 -flask_cors/extension.py,sha256=nP4Zq_BhgDVWwPdIl_f-uucNxD38pXUo-dkL-voXc58,7832 -flask_cors/version.py,sha256=61rJjfThnbRdElpSP2tm31hPmFnHJmcwoPhtqA0Bi_Q,22 diff --git a/libs/Flask_Cors-4.0.0.dist-info/INSTALLER b/libs/Flask_Cors-5.0.0.dist-info/INSTALLER similarity index 100% rename from libs/Flask_Cors-4.0.0.dist-info/INSTALLER rename to libs/Flask_Cors-5.0.0.dist-info/INSTALLER diff --git a/libs/Flask_Cors-4.0.0.dist-info/LICENSE b/libs/Flask_Cors-5.0.0.dist-info/LICENSE similarity index 100% rename from libs/Flask_Cors-4.0.0.dist-info/LICENSE rename to libs/Flask_Cors-5.0.0.dist-info/LICENSE diff --git a/libs/Flask_Cors-4.0.0.dist-info/METADATA b/libs/Flask_Cors-5.0.0.dist-info/METADATA similarity index 89% rename from libs/Flask_Cors-4.0.0.dist-info/METADATA rename to libs/Flask_Cors-5.0.0.dist-info/METADATA index c6e2af695..99902fe9d 100644 --- a/libs/Flask_Cors-4.0.0.dist-info/METADATA +++ b/libs/Flask_Cors-5.0.0.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: Flask-Cors -Version: 4.0.0 +Version: 5.0.0 Summary: A Flask extension adding a decorator for CORS support Home-page: https://github.com/corydolphin/flask-cors Author: Cory Dolphin @@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content @@ -31,10 +32,10 @@ Flask-CORS A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible. -This package has a simple philosophy: when you want to enable CORS, you wish to enable it for all use cases on a domain. -This means no mucking around with different allowed headers, methods, etc. +This package has a simple philosophy: when you want to enable CORS, you wish to enable it for all use cases on a domain. +This means no mucking around with different allowed headers, methods, etc. -By default, submission of cookies across domains is disabled due to the security implications. +By default, submission of cookies across domains is disabled due to the security implications. Please see the documentation for how to enable credential'ed requests, and please make sure you add some sort of `CSRF `__ protection before doing so! Installation @@ -49,14 +50,14 @@ Install the extension with using pip, or easy\_install. Usage ----- -This package exposes a Flask extension which by default enables CORS support on all routes, for all origins and methods. -It allows parameterization of all CORS headers on a per-resource level. +This package exposes a Flask extension which by default enables CORS support on all routes, for all origins and methods. +It allows parameterization of all CORS headers on a per-resource level. The package also contains a decorator, for those who prefer this approach. Simple Usage ~~~~~~~~~~~~ -In the simplest case, initialize the Flask-Cors extension with default arguments in order to allow CORS for all domains on all routes. +In the simplest case, initialize the Flask-Cors extension with default arguments in order to allow CORS for all domains on all routes. See the full list of options in the `documentation `__. .. code:: python @@ -75,7 +76,7 @@ See the full list of options in the `documentation `__. .. code:: python @@ -90,8 +91,8 @@ See the full list of options in the `documentation `__. .. code:: python @@ -119,7 +120,7 @@ If things aren't working as you expect, enable logging to help understand what i Tests ----- -A simple set of tests is included in ``test/``. +A simple set of tests is included in ``test/``. To run, install nose, and simply invoke ``nosetests`` or ``python setup.py test`` to exercise the tests. If nosetests does not work for you, due to it no longer working with newer python versions. @@ -128,8 +129,8 @@ You can use pytest to run the tests instead. Contributing ------------ -Questions, comments or improvements? -Please create an issue on `Github `__, tweet at `@corydolphin `__ or send me an email. +Questions, comments or improvements? +Please create an issue on `Github `__, tweet at `@corydolphin `__ or send me an email. I do my best to include every contribution proposed in any way that I can. Credits @@ -137,7 +138,7 @@ Credits This Flask extension is based upon the `Decorator for the HTTP Access Control `__ written by Armin Ronacher. -.. |Build Status| image:: https://api.travis-ci.org/corydolphin/flask-cors.svg?branch=master +.. |Build Status| image:: https://github.com/corydolphin/flask-cors/actions/workflows/unittests.yaml/badge.svg :target: https://travis-ci.org/corydolphin/flask-cors .. |Latest Version| image:: https://img.shields.io/pypi/v/Flask-Cors.svg :target: https://pypi.python.org/pypi/Flask-Cors/ diff --git a/libs/Flask_Cors-5.0.0.dist-info/RECORD b/libs/Flask_Cors-5.0.0.dist-info/RECORD new file mode 100644 index 000000000..5e942ce53 --- /dev/null +++ b/libs/Flask_Cors-5.0.0.dist-info/RECORD @@ -0,0 +1,12 @@ +Flask_Cors-5.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Flask_Cors-5.0.0.dist-info/LICENSE,sha256=bhob3FSDTB4HQMvOXV9vLK4chG_Sp_SCsRZJWU-vvV0,1069 +Flask_Cors-5.0.0.dist-info/METADATA,sha256=V2L_s849dFlZXsOhcgXVqv5Slj_JKSVuiiuRgDOft5s,5474 +Flask_Cors-5.0.0.dist-info/RECORD,, +Flask_Cors-5.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Flask_Cors-5.0.0.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110 +Flask_Cors-5.0.0.dist-info/top_level.txt,sha256=aWye_0QNZPp_QtPF4ZluLHqnyVLT9CPJsfiGhwqkWuo,11 +flask_cors/__init__.py,sha256=wZDCvPTHspA2g1VV7KyKN7R-uCdBnirTlsCzgPDcQtI,792 +flask_cors/core.py,sha256=y76xxLasWTdV_3ka19IxpdJPOgROBZQZ5L8t20IjqRA,14252 +flask_cors/decorator.py,sha256=BeJsyX1wYhVKWN04FAhb6z8YqffiRr7wKqwzHPap4bw,5009 +flask_cors/extension.py,sha256=gzv6zWUwSDYlGHBWzMuTI_hoQ7gQmp9DlcAcrKTVHdw,8602 +flask_cors/version.py,sha256=JzYPYpvaglqIJRGCDrh5-hYmXI0ISrDDed0V1QQZAGU,22 diff --git a/libs/Flask_Cors-4.0.0.dist-info/REQUESTED b/libs/Flask_Cors-5.0.0.dist-info/REQUESTED similarity index 100% rename from libs/Flask_Cors-4.0.0.dist-info/REQUESTED rename to libs/Flask_Cors-5.0.0.dist-info/REQUESTED diff --git a/libs/Flask_Cors-4.0.0.dist-info/WHEEL b/libs/Flask_Cors-5.0.0.dist-info/WHEEL similarity index 100% rename from libs/Flask_Cors-4.0.0.dist-info/WHEEL rename to libs/Flask_Cors-5.0.0.dist-info/WHEEL diff --git a/libs/Flask_Cors-4.0.0.dist-info/top_level.txt b/libs/Flask_Cors-5.0.0.dist-info/top_level.txt similarity index 100% rename from libs/Flask_Cors-4.0.0.dist-info/top_level.txt rename to libs/Flask_Cors-5.0.0.dist-info/top_level.txt diff --git a/libs/Flask_Migrate-4.0.5.dist-info/INSTALLER b/libs/Flask_Migrate-4.1.0.dist-info/INSTALLER similarity index 100% rename from libs/Flask_Migrate-4.0.5.dist-info/INSTALLER rename to libs/Flask_Migrate-4.1.0.dist-info/INSTALLER diff --git a/libs/Flask_Migrate-4.0.5.dist-info/LICENSE b/libs/Flask_Migrate-4.1.0.dist-info/LICENSE similarity index 100% rename from libs/Flask_Migrate-4.0.5.dist-info/LICENSE rename to libs/Flask_Migrate-4.1.0.dist-info/LICENSE diff --git a/libs/Flask_Migrate-4.0.5.dist-info/METADATA b/libs/Flask_Migrate-4.1.0.dist-info/METADATA similarity index 89% rename from libs/Flask_Migrate-4.0.5.dist-info/METADATA rename to libs/Flask_Migrate-4.1.0.dist-info/METADATA index 0590a4cf5..ef8ede367 100644 --- a/libs/Flask_Migrate-4.0.5.dist-info/METADATA +++ b/libs/Flask_Migrate-4.1.0.dist-info/METADATA @@ -1,11 +1,10 @@ Metadata-Version: 2.1 Name: Flask-Migrate -Version: 4.0.5 +Version: 4.1.0 Summary: SQLAlchemy database migrations for Flask applications using Alembic. -Home-page: https://github.com/miguelgrinberg/flask-migrate -Author: Miguel Grinberg -Author-email: miguel.grinberg@gmail.com +Author-email: Miguel Grinberg License: MIT +Project-URL: Homepage, https://github.com/miguelgrinberg/flask-migrate Project-URL: Bug Tracker, https://github.com/miguelgrinberg/flask-migrate/issues Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers @@ -18,6 +17,12 @@ License-File: LICENSE Requires-Dist: Flask >=0.9 Requires-Dist: Flask-SQLAlchemy >=1.0 Requires-Dist: alembic >=1.9.0 +Provides-Extra: dev +Requires-Dist: tox ; extra == 'dev' +Requires-Dist: flake8 ; extra == 'dev' +Requires-Dist: pytest ; extra == 'dev' +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' Flask-Migrate ============= diff --git a/libs/Flask_Migrate-4.0.5.dist-info/RECORD b/libs/Flask_Migrate-4.1.0.dist-info/RECORD similarity index 73% rename from libs/Flask_Migrate-4.0.5.dist-info/RECORD rename to libs/Flask_Migrate-4.1.0.dist-info/RECORD index 740ada03e..d634fa09a 100644 --- a/libs/Flask_Migrate-4.0.5.dist-info/RECORD +++ b/libs/Flask_Migrate-4.1.0.dist-info/RECORD @@ -1,12 +1,12 @@ -Flask_Migrate-4.0.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Flask_Migrate-4.0.5.dist-info/LICENSE,sha256=kfkXGlJQvKy3Y__6tAJ8ynIp1HQfeROXhL8jZU1d-DI,1082 -Flask_Migrate-4.0.5.dist-info/METADATA,sha256=d-EcnhZa_vyVAph2u84OpGIteJaBmqLQxO5Rf6wUI7Y,3095 -Flask_Migrate-4.0.5.dist-info/RECORD,, -Flask_Migrate-4.0.5.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Flask_Migrate-4.0.5.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 -Flask_Migrate-4.0.5.dist-info/top_level.txt,sha256=jLoPgiMG6oR4ugNteXn3IHskVVIyIXVStZOVq-AWLdU,14 -flask_migrate/__init__.py,sha256=-JFdExGtr7UrwCpmjYvTfzFHqMjE7AmP0Rr3T53tBNU,10037 -flask_migrate/cli.py,sha256=H-N4NNS5HyEB61HpUADLU8pW3naejyDPgeEbzEqG5-w,10298 +Flask_Migrate-4.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Flask_Migrate-4.1.0.dist-info/LICENSE,sha256=kfkXGlJQvKy3Y__6tAJ8ynIp1HQfeROXhL8jZU1d-DI,1082 +Flask_Migrate-4.1.0.dist-info/METADATA,sha256=Oc_YNcJGhss0camLTDR64sz2RuLXAppze2rvHDzS8_0,3296 +Flask_Migrate-4.1.0.dist-info/RECORD,, +Flask_Migrate-4.1.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Flask_Migrate-4.1.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91 +Flask_Migrate-4.1.0.dist-info/top_level.txt,sha256=jLoPgiMG6oR4ugNteXn3IHskVVIyIXVStZOVq-AWLdU,14 +flask_migrate/__init__.py,sha256=JMySGA55Y8Gxy3HviWu7qq5rPUNQBWc2NID2OicpDyw,10082 +flask_migrate/cli.py,sha256=IxrxBSC82S5sPfWac8Qg83_FVsRvqTYtCG7HRyMW8RU,11097 flask_migrate/templates/aioflask-multidb/README,sha256=Ek4cJqTaxneVjtkue--BXMlfpfp3MmJRjqoZvnSizww,43 flask_migrate/templates/aioflask-multidb/alembic.ini.mako,sha256=SjYEmJKzz6K8QfuZWtLJAJWcCKOdRbfUhsVlpgv8ock,857 flask_migrate/templates/aioflask-multidb/env.py,sha256=UcjeqkAbyUjTkuQFmCFPG7QOvqhco8-uGp8QEbto0T8,6573 diff --git a/libs/Flask_Migrate-4.0.5.dist-info/REQUESTED b/libs/Flask_Migrate-4.1.0.dist-info/REQUESTED similarity index 100% rename from libs/Flask_Migrate-4.0.5.dist-info/REQUESTED rename to libs/Flask_Migrate-4.1.0.dist-info/REQUESTED diff --git a/libs/Flask_Migrate-4.0.5.dist-info/WHEEL b/libs/Flask_Migrate-4.1.0.dist-info/WHEEL similarity index 65% rename from libs/Flask_Migrate-4.0.5.dist-info/WHEEL rename to libs/Flask_Migrate-4.1.0.dist-info/WHEEL index 98c0d20b7..9b78c4451 100644 --- a/libs/Flask_Migrate-4.0.5.dist-info/WHEEL +++ b/libs/Flask_Migrate-4.1.0.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: setuptools (75.3.0) Root-Is-Purelib: true Tag: py3-none-any diff --git a/libs/Flask_Migrate-4.0.5.dist-info/top_level.txt b/libs/Flask_Migrate-4.1.0.dist-info/top_level.txt similarity index 100% rename from libs/Flask_Migrate-4.0.5.dist-info/top_level.txt rename to libs/Flask_Migrate-4.1.0.dist-info/top_level.txt diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/RECORD b/libs/Flask_SocketIO-5.3.6.dist-info/RECORD deleted file mode 100644 index 4a6082118..000000000 --- a/libs/Flask_SocketIO-5.3.6.dist-info/RECORD +++ /dev/null @@ -1,10 +0,0 @@ -Flask_SocketIO-5.3.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Flask_SocketIO-5.3.6.dist-info/LICENSE,sha256=aNCWbkgKjS_T1cJtACyZbvCM36KxWnfQ0LWTuavuYKQ,1082 -Flask_SocketIO-5.3.6.dist-info/METADATA,sha256=vmIOzjkNLXRjmocRXtso6hLV27aiJgH7_A55TVJyD4k,2631 -Flask_SocketIO-5.3.6.dist-info/RECORD,, -Flask_SocketIO-5.3.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Flask_SocketIO-5.3.6.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 -Flask_SocketIO-5.3.6.dist-info/top_level.txt,sha256=C1ugzQBJ3HHUJsWGzyt70XRVOX-y4CUAR8MWKjwJOQ8,15 -flask_socketio/__init__.py,sha256=ea3QXRYKBje4JQGcNSEOmj42qlf2peRNbCzZZWfD9DE,54731 -flask_socketio/namespace.py,sha256=b3oyXEemu2po-wpoy4ILTHQMVuVQqicogCDxfymfz_w,2020 -flask_socketio/test_client.py,sha256=9_R1y_vP8yr8wzimQUEMAUyVqX12FMXurLj8t1ecDdc,11034 diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/INSTALLER b/libs/Flask_SocketIO-5.5.1.dist-info/INSTALLER similarity index 100% rename from libs/Flask_SocketIO-5.3.6.dist-info/INSTALLER rename to libs/Flask_SocketIO-5.5.1.dist-info/INSTALLER diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/LICENSE b/libs/Flask_SocketIO-5.5.1.dist-info/LICENSE similarity index 100% rename from libs/Flask_SocketIO-5.3.6.dist-info/LICENSE rename to libs/Flask_SocketIO-5.5.1.dist-info/LICENSE diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/METADATA b/libs/Flask_SocketIO-5.5.1.dist-info/METADATA similarity index 92% rename from libs/Flask_SocketIO-5.3.6.dist-info/METADATA rename to libs/Flask_SocketIO-5.5.1.dist-info/METADATA index ddec6b09a..8676b6140 100644 --- a/libs/Flask_SocketIO-5.3.6.dist-info/METADATA +++ b/libs/Flask_SocketIO-5.5.1.dist-info/METADATA @@ -1,10 +1,9 @@ Metadata-Version: 2.1 Name: Flask-SocketIO -Version: 5.3.6 +Version: 5.5.1 Summary: Socket.IO integration for Flask applications -Home-page: https://github.com/miguelgrinberg/flask-socketio -Author: Miguel Grinberg -Author-email: miguel.grinberg@gmail.com +Author-email: Miguel Grinberg +Project-URL: Homepage, https://github.com/miguelgrinberg/flask-socketio Project-URL: Bug Tracker, https://github.com/miguelgrinberg/flask-socketio/issues Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers @@ -15,7 +14,7 @@ Requires-Python: >=3.6 Description-Content-Type: text/markdown License-File: LICENSE Requires-Dist: Flask >=0.9 -Requires-Dist: python-socketio >=5.0.2 +Requires-Dist: python-socketio >=5.12.0 Provides-Extra: docs Requires-Dist: sphinx ; extra == 'docs' diff --git a/libs/Flask_SocketIO-5.5.1.dist-info/RECORD b/libs/Flask_SocketIO-5.5.1.dist-info/RECORD new file mode 100644 index 000000000..2b50d3dda --- /dev/null +++ b/libs/Flask_SocketIO-5.5.1.dist-info/RECORD @@ -0,0 +1,10 @@ +Flask_SocketIO-5.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Flask_SocketIO-5.5.1.dist-info/LICENSE,sha256=aNCWbkgKjS_T1cJtACyZbvCM36KxWnfQ0LWTuavuYKQ,1082 +Flask_SocketIO-5.5.1.dist-info/METADATA,sha256=6NSCK70GFvnCHNKwcr6lmffkRAKLd9dOnGq6TbAJlfs,2638 +Flask_SocketIO-5.5.1.dist-info/RECORD,, +Flask_SocketIO-5.5.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Flask_SocketIO-5.5.1.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91 +Flask_SocketIO-5.5.1.dist-info/top_level.txt,sha256=C1ugzQBJ3HHUJsWGzyt70XRVOX-y4CUAR8MWKjwJOQ8,15 +flask_socketio/__init__.py,sha256=5hN0LE0hfGMUDcX4FheZrtXERJ1IBEPagv0pgeqdtlU,54904 +flask_socketio/namespace.py,sha256=UkVryJvFYgnCMKWSF35GVfGdyh2cXRDyRbfmEPPchVA,2329 +flask_socketio/test_client.py,sha256=rClk02TSRqgidH8IyeohspKVKdpRx7gcZBjg1YUtZpA,11026 diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/REQUESTED b/libs/Flask_SocketIO-5.5.1.dist-info/REQUESTED similarity index 100% rename from libs/Flask_SocketIO-5.3.6.dist-info/REQUESTED rename to libs/Flask_SocketIO-5.5.1.dist-info/REQUESTED diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/WHEEL b/libs/Flask_SocketIO-5.5.1.dist-info/WHEEL similarity index 65% rename from libs/Flask_SocketIO-5.3.6.dist-info/WHEEL rename to libs/Flask_SocketIO-5.5.1.dist-info/WHEEL index 98c0d20b7..9b78c4451 100644 --- a/libs/Flask_SocketIO-5.3.6.dist-info/WHEEL +++ b/libs/Flask_SocketIO-5.5.1.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: setuptools (75.3.0) Root-Is-Purelib: true Tag: py3-none-any diff --git a/libs/Flask_SocketIO-5.3.6.dist-info/top_level.txt b/libs/Flask_SocketIO-5.5.1.dist-info/top_level.txt similarity index 100% rename from libs/Flask_SocketIO-5.3.6.dist-info/top_level.txt rename to libs/Flask_SocketIO-5.5.1.dist-info/top_level.txt diff --git a/libs/Jinja2-3.1.3.dist-info/RECORD b/libs/Jinja2-3.1.3.dist-info/RECORD deleted file mode 100644 index e80904634..000000000 --- a/libs/Jinja2-3.1.3.dist-info/RECORD +++ /dev/null @@ -1,34 +0,0 @@ -Jinja2-3.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Jinja2-3.1.3.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 -Jinja2-3.1.3.dist-info/METADATA,sha256=0cLNbRCI91jytc7Bzv3XAQfZzFDF2gxkJuH46eF5vew,3301 -Jinja2-3.1.3.dist-info/RECORD,, -Jinja2-3.1.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Jinja2-3.1.3.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92 -Jinja2-3.1.3.dist-info/entry_points.txt,sha256=zRd62fbqIyfUpsRtU7EVIFyiu1tPwfgO7EvPErnxgTE,59 -Jinja2-3.1.3.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 -jinja2/__init__.py,sha256=NTBwMwsECrdHmxeXF7seusHLzrh6Ldn1A9qhS5cDuf0,1927 -jinja2/_identifier.py,sha256=_zYctNKzRqlk_murTNlzrju1FFJL7Va_Ijqqd7ii2lU,1958 -jinja2/async_utils.py,sha256=dFcmh6lMNfbh7eLKrBio8JqAKLHdZbpCuurFN4OERtY,2447 -jinja2/bccache.py,sha256=mhz5xtLxCcHRAa56azOhphIAe19u1we0ojifNMClDio,14061 -jinja2/compiler.py,sha256=PJzYdRLStlEOqmnQs1YxlizPrJoj3jTZuUleREn6AIQ,72199 -jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 -jinja2/debug.py,sha256=iWJ432RadxJNnaMOPrjIDInz50UEgni3_HKuFXi2vuQ,6299 -jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 -jinja2/environment.py,sha256=0qldX3VQKZcm6lgn7zHz94oRFow7YPYERiqkquomNjU,61253 -jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 -jinja2/ext.py,sha256=5fnMpllaXkfm2P_93RIvi-OnK7Tk8mCW8Du-GcD12Hc,31844 -jinja2/filters.py,sha256=vYjKb2zaPShvYtn_LpSmqfS8SScbrA_KOanNibsMDIE,53862 -jinja2/idtracking.py,sha256=GfNmadir4oDALVxzn3DL9YInhJDr69ebXeA2ygfuCGA,10704 -jinja2/lexer.py,sha256=DW2nX9zk-6MWp65YR2bqqj0xqCvLtD-u9NWT8AnFRxQ,29726 -jinja2/loaders.py,sha256=ayAwxfrA1SAffQta0nwSDm3TDT4KYiIGN_D9Z45B310,23085 -jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396 -jinja2/nativetypes.py,sha256=7GIGALVJgdyL80oZJdQUaUfwSt5q2lSSZbXt0dNf_M4,4210 -jinja2/nodes.py,sha256=i34GPRAZexXMT6bwuf5SEyvdmS-bRCy9KMjwN5O6pjk,34550 -jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650 -jinja2/parser.py,sha256=Y199wPL-G67gJoi5G_5sHuu9uEP1PJkjjLEW_xTH8-k,39736 -jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -jinja2/runtime.py,sha256=_6LkKIWFJjQdqlrgA3K39zBFQ-7Orm3wGDm96RwxQoE,33406 -jinja2/sandbox.py,sha256=Y0xZeXQnH6EX5VjaV2YixESxoepnRbW_3UeQosaBU3M,14584 -jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905 -jinja2/utils.py,sha256=IMwRIcN1SsTw2-jdQtlH2KzNABsXZBW_-tnFXafQBvY,23933 -jinja2/visitor.py,sha256=MH14C6yq24G_KVtWzjwaI7Wg14PCJIYlWW1kpkxYak0,3568 diff --git a/libs/Jinja2-3.1.3.dist-info/entry_points.txt b/libs/Jinja2-3.1.3.dist-info/entry_points.txt deleted file mode 100644 index 7b9666c8e..000000000 --- a/libs/Jinja2-3.1.3.dist-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[babel.extractors] -jinja2 = jinja2.ext:babel_extract[i18n] diff --git a/libs/Jinja2-3.1.3.dist-info/top_level.txt b/libs/Jinja2-3.1.3.dist-info/top_level.txt deleted file mode 100644 index 7f7afbf3b..000000000 --- a/libs/Jinja2-3.1.3.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jinja2 diff --git a/libs/Jinja2-3.1.3.dist-info/INSTALLER b/libs/Mako-1.3.8.dist-info/INSTALLER similarity index 100% rename from libs/Jinja2-3.1.3.dist-info/INSTALLER rename to libs/Mako-1.3.8.dist-info/INSTALLER diff --git a/libs/Mako-1.3.2.dist-info/LICENSE b/libs/Mako-1.3.8.dist-info/LICENSE similarity index 100% rename from libs/Mako-1.3.2.dist-info/LICENSE rename to libs/Mako-1.3.8.dist-info/LICENSE diff --git a/libs/Mako-1.3.2.dist-info/METADATA b/libs/Mako-1.3.8.dist-info/METADATA similarity index 94% rename from libs/Mako-1.3.2.dist-info/METADATA rename to libs/Mako-1.3.8.dist-info/METADATA index 4558ed984..bf0b1f45b 100644 --- a/libs/Mako-1.3.2.dist-info/METADATA +++ b/libs/Mako-1.3.8.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: Mako -Version: 1.3.2 +Version: 1.3.8 Summary: A super-fast templating language that borrows the best ideas from the existing templating languages. Home-page: https://www.makotemplates.org/ Author: Mike Bayer @@ -25,13 +25,13 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Requires-Python: >=3.8 Description-Content-Type: text/x-rst License-File: LICENSE -Requires-Dist: MarkupSafe >=0.9.2 +Requires-Dist: MarkupSafe>=0.9.2 Provides-Extra: babel -Requires-Dist: Babel ; extra == 'babel' +Requires-Dist: Babel; extra == "babel" Provides-Extra: lingua -Requires-Dist: lingua ; extra == 'lingua' +Requires-Dist: lingua; extra == "lingua" Provides-Extra: testing -Requires-Dist: pytest ; extra == 'testing' +Requires-Dist: pytest; extra == "testing" ========================= Mako Templates for Python diff --git a/libs/Mako-1.3.2.dist-info/RECORD b/libs/Mako-1.3.8.dist-info/RECORD similarity index 72% rename from libs/Mako-1.3.2.dist-info/RECORD rename to libs/Mako-1.3.8.dist-info/RECORD index fed8f2c56..7e79ae7aa 100644 --- a/libs/Mako-1.3.2.dist-info/RECORD +++ b/libs/Mako-1.3.8.dist-info/RECORD @@ -1,18 +1,18 @@ ../../bin/mako-render,sha256=NK39DgCmw8pz5T7ALDcW2MB6hFGNVOpWXAHq3-GKyss,236 -Mako-1.3.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Mako-1.3.2.dist-info/LICENSE,sha256=FWJ7NrONBynN1obfmr9gZQPZnWJLL17FyyVKddWvqJE,1098 -Mako-1.3.2.dist-info/METADATA,sha256=G3lsPTYAPanaYdk-_e8yek5DZpuOjT3Qcf-RMLrlMU0,2900 -Mako-1.3.2.dist-info/RECORD,, -Mako-1.3.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Mako-1.3.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 -Mako-1.3.2.dist-info/entry_points.txt,sha256=LsKkUsOsJQYbJ2M72hZCm968wi5K8Ywb5uFxCuN8Obk,512 -Mako-1.3.2.dist-info/top_level.txt,sha256=LItdH8cDPetpUu8rUyBG3DObS6h9Gcpr9j_WLj2S-R0,5 -mako/__init__.py,sha256=brA7o1ju8zST1YWfFRXDxaKmMlKiRHVqefjxeUN6YjI,242 +Mako-1.3.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Mako-1.3.8.dist-info/LICENSE,sha256=FWJ7NrONBynN1obfmr9gZQPZnWJLL17FyyVKddWvqJE,1098 +Mako-1.3.8.dist-info/METADATA,sha256=YtMX8Z6wVX7TvuBzOsUAOAq_jdceHFW4rR6hwvMNZgE,2896 +Mako-1.3.8.dist-info/RECORD,, +Mako-1.3.8.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Mako-1.3.8.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91 +Mako-1.3.8.dist-info/entry_points.txt,sha256=LsKkUsOsJQYbJ2M72hZCm968wi5K8Ywb5uFxCuN8Obk,512 +Mako-1.3.8.dist-info/top_level.txt,sha256=LItdH8cDPetpUu8rUyBG3DObS6h9Gcpr9j_WLj2S-R0,5 +mako/__init__.py,sha256=sMLX8sANJQjjeIsZjbrwotWPXHEpRcKxELPgkx2Cyw8,242 mako/_ast_util.py,sha256=CenxCrdES1irHDhOQU6Ldta4rdsytfYaMkN6s0TlveM,20247 mako/ast.py,sha256=pY7MH-5cLnUuVz5YAwoGhWgWfgoVvLQkRDtc_s9qqw0,6642 mako/cache.py,sha256=5DBBorj1NqiWDqNhN3ZJ8tMCm-h6Mew541276kdsxAU,7680 mako/cmd.py,sha256=vP5M5g9yc5sjAT5owVTQu056YwyS-YkpulFSDb0IMGw,2813 -mako/codegen.py,sha256=UgB8K6BMNiBTUGucR4UYkqFqlbNUJfErKI9A-n4Wteg,47307 +mako/codegen.py,sha256=XRhzcuGEleDUXTfmOjw4alb6TkczbmEfBCLqID8x4bA,47736 mako/compat.py,sha256=wjVMf7uMg0TlC_aI5hdwWizza99nqJuGNdrnTNrZbt0,1820 mako/exceptions.py,sha256=pfdd5-1lCZ--I2YqQ_oHODZLmo62bn_lO5Kz_1__72w,12530 mako/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 @@ -25,11 +25,11 @@ mako/ext/preprocessors.py,sha256=zKQy42Ce6dOmU0Yk_rUVDAAn38-RUUfQolVKTJjLotA,576 mako/ext/pygmentplugin.py,sha256=qBdsAhKktlQX7d5Yv1sAXufUNOZqcnJmKuC7V4D_srM,4753 mako/ext/turbogears.py,sha256=0emY1WiMnuY8Pf6ARv5JBArKtouUdmuTljI-w6rE3J4,2141 mako/filters.py,sha256=F7aDIKTUxnT-Og4rgboQtnML7Q87DJTHQyhi_dY_Ih4,4658 -mako/lexer.py,sha256=dtCZU1eoF3ymEdiCwCzEIw5SH0lgJkDsHJy9VHI_2XY,16324 +mako/lexer.py,sha256=Xi6Lk8CnASf3UYAaPoYrfjuPkrYauNjvYvULCUkKYaY,16321 mako/lookup.py,sha256=rkMvT5T7EOS5KRvPtgYii-sjh1nWWyKok_mEk-cEzrM,12428 -mako/parsetree.py,sha256=7RNVRTsKcsMt8vU4NQi5C7e4vhdUyA9tqyd1yIkvAAQ,19007 +mako/parsetree.py,sha256=BHdZI9vyxKB27Q4hzym5TdZ_982_3k31_HMsGLz3Tlg,19021 mako/pygen.py,sha256=d4f_ugRACCXuV9hJgEk6Ncoj38EaRHA3RTxkr_tK7UQ,10416 -mako/pyparser.py,sha256=81rIcSn4PoALpZF0WO6D5rB65TvF8R9Qn_hBSfTGS5Q,7029 +mako/pyparser.py,sha256=eY_a94QDXaK3vIA2jZYT9so7oXKKJLT0SO_Yrl3IOb8,7478 mako/runtime.py,sha256=ZsUEN22nX3d3dECQujF69mBKDQS6yVv2nvz_0eTvFGg,27804 mako/template.py,sha256=4xQzwruZd5XzPw7iONZMZJj4SdFsctYYg4PfBYs2PLk,23857 mako/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/libs/Jinja2-3.1.3.dist-info/REQUESTED b/libs/Mako-1.3.8.dist-info/REQUESTED similarity index 100% rename from libs/Jinja2-3.1.3.dist-info/REQUESTED rename to libs/Mako-1.3.8.dist-info/REQUESTED diff --git a/libs/Mako-1.3.2.dist-info/WHEEL b/libs/Mako-1.3.8.dist-info/WHEEL similarity index 65% rename from libs/Mako-1.3.2.dist-info/WHEEL rename to libs/Mako-1.3.8.dist-info/WHEEL index 98c0d20b7..9b78c4451 100644 --- a/libs/Mako-1.3.2.dist-info/WHEEL +++ b/libs/Mako-1.3.8.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: setuptools (75.3.0) Root-Is-Purelib: true Tag: py3-none-any diff --git a/libs/Mako-1.3.2.dist-info/entry_points.txt b/libs/Mako-1.3.8.dist-info/entry_points.txt similarity index 100% rename from libs/Mako-1.3.2.dist-info/entry_points.txt rename to libs/Mako-1.3.8.dist-info/entry_points.txt diff --git a/libs/Mako-1.3.2.dist-info/top_level.txt b/libs/Mako-1.3.8.dist-info/top_level.txt similarity index 100% rename from libs/Mako-1.3.2.dist-info/top_level.txt rename to libs/Mako-1.3.8.dist-info/top_level.txt diff --git a/libs/Markdown-3.5.2.dist-info/LICENSE.md b/libs/Markdown-3.5.2.dist-info/LICENSE.md deleted file mode 100644 index 2652d97ad..000000000 --- a/libs/Markdown-3.5.2.dist-info/LICENSE.md +++ /dev/null @@ -1,29 +0,0 @@ -Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) -Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) -Copyright 2004 Manfred Stienstra (the original version) - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of the Python Markdown Project nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/libs/Mako-1.3.2.dist-info/INSTALLER b/libs/Markdown-3.7.dist-info/INSTALLER similarity index 100% rename from libs/Mako-1.3.2.dist-info/INSTALLER rename to libs/Markdown-3.7.dist-info/INSTALLER diff --git a/libs/Markdown-3.7.dist-info/LICENSE.md b/libs/Markdown-3.7.dist-info/LICENSE.md new file mode 100644 index 000000000..6249d60ce --- /dev/null +++ b/libs/Markdown-3.7.dist-info/LICENSE.md @@ -0,0 +1,30 @@ +BSD 3-Clause License + +Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) +Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) +Copyright 2004 Manfred Stienstra (the original version) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/libs/Markdown-3.5.2.dist-info/METADATA b/libs/Markdown-3.7.dist-info/METADATA similarity index 76% rename from libs/Markdown-3.5.2.dist-info/METADATA rename to libs/Markdown-3.7.dist-info/METADATA index 866453f0b..233bc55ba 100644 --- a/libs/Markdown-3.5.2.dist-info/METADATA +++ b/libs/Markdown-3.7.dist-info/METADATA @@ -1,40 +1,41 @@ Metadata-Version: 2.1 Name: Markdown -Version: 3.5.2 +Version: 3.7 Summary: Python implementation of John Gruber's Markdown. Author: Manfred Stienstra, Yuri Takhteyev Author-email: Waylan limberg Maintainer: Isaac Muse Maintainer-email: Waylan Limberg -License: Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) - Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) - Copyright 2004 Manfred Stienstra (the original version) +License: BSD 3-Clause License - All rights reserved. + Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) + Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) + Copyright 2004 Manfred Stienstra (the original version) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Python Markdown Project nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT - BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Project-URL: Homepage, https://Python-Markdown.github.io/ Project-URL: Documentation, https://Python-Markdown.github.io/ diff --git a/libs/Markdown-3.5.2.dist-info/RECORD b/libs/Markdown-3.7.dist-info/RECORD similarity index 64% rename from libs/Markdown-3.5.2.dist-info/RECORD rename to libs/Markdown-3.7.dist-info/RECORD index a3e6a9479..34d25a0c7 100644 --- a/libs/Markdown-3.5.2.dist-info/RECORD +++ b/libs/Markdown-3.7.dist-info/RECORD @@ -1,26 +1,26 @@ ../../bin/markdown_py,sha256=a0a3HrUHepb4z4hcrRdCfAEQ8SiB-QoWxf9g1e-KLv8,237 -Markdown-3.5.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Markdown-3.5.2.dist-info/LICENSE.md,sha256=bxGTy2NHGOZcOlN9biXr1hSCDsDvaTz8EiSBEmONZNo,1645 -Markdown-3.5.2.dist-info/METADATA,sha256=9pbPWhPBzgBE-uAwHn0vC0CGT-mw0KC8-SanIkqAFUo,7029 -Markdown-3.5.2.dist-info/RECORD,, -Markdown-3.5.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Markdown-3.5.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 -Markdown-3.5.2.dist-info/entry_points.txt,sha256=lMEyiiA_ZZyfPCBlDviBl-SiU0cfoeuEKpwxw361sKQ,1102 -Markdown-3.5.2.dist-info/top_level.txt,sha256=IAxs8x618RXoH1uCqeLLxXsDefJvE_mIibr_M4sOlyk,9 +Markdown-3.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Markdown-3.7.dist-info/LICENSE.md,sha256=e6TrbRCzKy0R3OE4ITQDUc27swuozMZ4Qdsv_Ybnmso,1650 +Markdown-3.7.dist-info/METADATA,sha256=nY8sewcY6R1akyROqkyO-Jk_eUDY8am_C4MkRP79sWA,7040 +Markdown-3.7.dist-info/RECORD,, +Markdown-3.7.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Markdown-3.7.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91 +Markdown-3.7.dist-info/entry_points.txt,sha256=lMEyiiA_ZZyfPCBlDviBl-SiU0cfoeuEKpwxw361sKQ,1102 +Markdown-3.7.dist-info/top_level.txt,sha256=IAxs8x618RXoH1uCqeLLxXsDefJvE_mIibr_M4sOlyk,9 markdown/__init__.py,sha256=dfzwwdpG9L8QLEPBpLFPIHx_BN056aZXp9xZifTxYIU,1777 markdown/__main__.py,sha256=innFBxRqwPBNxG1zhKktJji4bnRKtVyYYd30ID13Tcw,5859 -markdown/__meta__.py,sha256=K-Yr6cieMQWMYt9f7Rx8PGkX2PYqz4aVJdupZf_CE2Q,1712 +markdown/__meta__.py,sha256=RhwfJ30zyGvJaJXLHwQdNH5jw69-5fVKu2p-CVaJz0U,1712 markdown/blockparser.py,sha256=j4CQImVpiq7g9pz8wCxvzT61X_T2iSAjXupHJk8P3eA,5728 -markdown/blockprocessors.py,sha256=dZFoOXABuOs5AFNpWrrsVEmPe1i8_JVe4rOusdRRPAA,26648 +markdown/blockprocessors.py,sha256=koY5rq8DixzBCHcquvZJp6x2JYyBGjrwxMWNZhd6D2U,27013 markdown/core.py,sha256=DyyzDsmd-KcuEp8ZWUKJAeUCt7B7G3J3NeqZqp3LphI,21335 markdown/extensions/__init__.py,sha256=9z1khsdKCVrmrJ_2GfxtPAdjD3FyMe5vhC7wmM4O9m0,4822 -markdown/extensions/abbr.py,sha256=J27cKf_vKY5wdKA_Bunwk83c3RpxwfgDeGarFF0FCuk,3540 +markdown/extensions/abbr.py,sha256=Gqt9TUtLWez2cbsy3SQk5152RZekops2fUJj01bfkfw,6903 markdown/extensions/admonition.py,sha256=Hqcn3I8JG0i-OPWdoqI189TmlQRgH6bs5PmpCANyLlg,6547 -markdown/extensions/attr_list.py,sha256=6PzqkH7N_U5lks7PGH7dSGmEGVuMCYR9MaR3g8c9Spw,6584 +markdown/extensions/attr_list.py,sha256=t3PrgAr5Ebldnq3nJNbteBt79bN0ccXS5RemmQfUZ9g,7820 markdown/extensions/codehilite.py,sha256=ChlmpM6S--j-UK7t82859UpYjm8EftdiLqmgDnknyes,13503 markdown/extensions/def_list.py,sha256=J3NVa6CllfZPsboJCEycPyRhtjBHnOn8ET6omEvVlDo,4029 markdown/extensions/extra.py,sha256=1vleT284kued4HQBtF83IjSumJVo0q3ng6MjTkVNfNQ,2163 -markdown/extensions/fenced_code.py,sha256=Xy4sQDjEsSJuShiAf9bwpv8Khtyf7Y6QDjNlH7QVM-Q,7817 +markdown/extensions/fenced_code.py,sha256=-fYSmRZ9DTYQ8HO9b_78i47kVyVu6mcVJlqVTMdzvo4,8300 markdown/extensions/footnotes.py,sha256=bRFlmIBOKDI5efG1jZfDkMoV2osfqWip1rN1j2P-mMg,16710 markdown/extensions/legacy_attrs.py,sha256=oWcyNrfP0F6zsBoBOaD5NiwrJyy4kCpgQLl12HA7JGU,2788 markdown/extensions/legacy_em.py,sha256=-Z_w4PEGSS-Xg-2-BtGAnXwwy5g5GDgv2tngASnPgxg,1693 @@ -28,9 +28,9 @@ markdown/extensions/md_in_html.py,sha256=y4HEWEnkvfih22fojcaJeAmjx1AtF8N-a_jb6ID markdown/extensions/meta.py,sha256=v_4Uq7nbcQ76V1YAvqVPiNLbRLIQHJsnfsk-tN70RmY,2600 markdown/extensions/nl2br.py,sha256=9KKcrPs62c3ENNnmOJZs0rrXXqUtTCfd43j1_OPpmgU,1090 markdown/extensions/sane_lists.py,sha256=ogAKcm7gEpcXV7fSTf8JZH5YdKAssPCEOUzdGM3C9Tw,2150 -markdown/extensions/smarty.py,sha256=DLmH22prpdZLDkV7GOCC1OTlCbTknKPHT9UNPs5-TwQ,11048 +markdown/extensions/smarty.py,sha256=yqT0OiE2AqYrqqZtcUFFmp2eJsQHomiKzgyG2JFb9rI,11048 markdown/extensions/tables.py,sha256=oTDvGD1qp9xjVWPGYNgDBWe9NqsX5gS6UU5wUsQ1bC8,8741 -markdown/extensions/toc.py,sha256=Vo2PFW4I0-ixOxTXzhoMhUTIAGiDeLPT7l0LNc9ZcBI,15293 +markdown/extensions/toc.py,sha256=PGg-EqbBubm3n0b633r8Xa9kc6JIdbo20HGAOZ6GEl8,18322 markdown/extensions/wikilinks.py,sha256=j7D2sozica6sqXOUa_GuAXqIzxp-7Hi60bfXymiuma8,3285 markdown/htmlparser.py,sha256=dEr6IE7i9b6Tc1gdCLZGeWw6g6-E-jK1Z4KPj8yGk8Q,14332 markdown/inlinepatterns.py,sha256=7_HF5nTOyQag_CyBgU4wwmuI6aMjtadvGadyS9IP21w,38256 diff --git a/libs/Mako-1.3.2.dist-info/REQUESTED b/libs/Markdown-3.7.dist-info/REQUESTED similarity index 100% rename from libs/Mako-1.3.2.dist-info/REQUESTED rename to libs/Markdown-3.7.dist-info/REQUESTED diff --git a/libs/Markdown-3.5.2.dist-info/WHEEL b/libs/Markdown-3.7.dist-info/WHEEL similarity index 65% rename from libs/Markdown-3.5.2.dist-info/WHEEL rename to libs/Markdown-3.7.dist-info/WHEEL index 98c0d20b7..da25d7b42 100644 --- a/libs/Markdown-3.5.2.dist-info/WHEEL +++ b/libs/Markdown-3.7.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: setuptools (75.2.0) Root-Is-Purelib: true Tag: py3-none-any diff --git a/libs/Markdown-3.5.2.dist-info/entry_points.txt b/libs/Markdown-3.7.dist-info/entry_points.txt similarity index 100% rename from libs/Markdown-3.5.2.dist-info/entry_points.txt rename to libs/Markdown-3.7.dist-info/entry_points.txt diff --git a/libs/Markdown-3.5.2.dist-info/top_level.txt b/libs/Markdown-3.7.dist-info/top_level.txt similarity index 100% rename from libs/Markdown-3.5.2.dist-info/top_level.txt rename to libs/Markdown-3.7.dist-info/top_level.txt diff --git a/libs/MarkupSafe-2.1.5.dist-info/RECORD b/libs/MarkupSafe-2.1.5.dist-info/RECORD index 2b3c4338b..57cd62847 100644 --- a/libs/MarkupSafe-2.1.5.dist-info/RECORD +++ b/libs/MarkupSafe-2.1.5.dist-info/RECORD @@ -8,6 +8,6 @@ MarkupSafe-2.1.5.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_ markupsafe/__init__.py,sha256=r7VOTjUq7EMQ4v3p4R1LoVOGJg6ysfYRncLr34laRBs,10958 markupsafe/_native.py,sha256=GR86Qvo_GcgKmKreA1WmYN9ud17OFwkww8E-fiW-57s,1713 markupsafe/_speedups.c,sha256=X2XvQVtIdcK4Usz70BvkzoOfjTCmQlDkkjYSn-swE0g,7083 -markupsafe/_speedups.cpython-38-darwin.so,sha256=_9uBZXDBin5PdKhWn3XnAUpjp031_nC6MFOMuSDD-3g,51480 +markupsafe/_speedups.cpython-38-darwin.so,sha256=1yfD14PZ-QrFSi3XHMHazowfHExBdp5WS7IC86gAuRc,18712 markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229 markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/libs/Markdown-3.5.2.dist-info/INSTALLER b/libs/PyYAML-6.0.2.dist-info/INSTALLER similarity index 100% rename from libs/Markdown-3.5.2.dist-info/INSTALLER rename to libs/PyYAML-6.0.2.dist-info/INSTALLER diff --git a/libs/PyYAML-6.0.1.dist-info/LICENSE b/libs/PyYAML-6.0.2.dist-info/LICENSE similarity index 100% rename from libs/PyYAML-6.0.1.dist-info/LICENSE rename to libs/PyYAML-6.0.2.dist-info/LICENSE diff --git a/libs/PyYAML-6.0.1.dist-info/METADATA b/libs/PyYAML-6.0.2.dist-info/METADATA similarity index 93% rename from libs/PyYAML-6.0.1.dist-info/METADATA rename to libs/PyYAML-6.0.2.dist-info/METADATA index c8905983e..db029b770 100644 --- a/libs/PyYAML-6.0.1.dist-info/METADATA +++ b/libs/PyYAML-6.0.2.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: PyYAML -Version: 6.0.1 +Version: 6.0.2 Summary: YAML parser and emitter for Python Home-page: https://pyyaml.org/ Download-URL: https://pypi.org/project/PyYAML/ @@ -20,17 +20,17 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Cython Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing :: Markup -Requires-Python: >=3.6 +Requires-Python: >=3.8 License-File: LICENSE YAML is a data serialization format designed for human readability diff --git a/libs/PyYAML-6.0.1.dist-info/RECORD b/libs/PyYAML-6.0.2.dist-info/RECORD similarity index 71% rename from libs/PyYAML-6.0.1.dist-info/RECORD rename to libs/PyYAML-6.0.2.dist-info/RECORD index 079577cf1..f01fe7622 100644 --- a/libs/PyYAML-6.0.1.dist-info/RECORD +++ b/libs/PyYAML-6.0.2.dist-info/RECORD @@ -1,12 +1,12 @@ -PyYAML-6.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -PyYAML-6.0.1.dist-info/LICENSE,sha256=jTko-dxEkP1jVwfLiOsmvXZBAqcoKVQwfT5RZ6V36KQ,1101 -PyYAML-6.0.1.dist-info/METADATA,sha256=UNNF8-SzzwOKXVo-kV5lXUGH2_wDWMBmGxqISpp5HQk,2058 -PyYAML-6.0.1.dist-info/RECORD,, -PyYAML-6.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -PyYAML-6.0.1.dist-info/WHEEL,sha256=UkJU7GAEhyIKVwGX1j1L5OGjUFT--MirwyCseqfCpZU,109 -PyYAML-6.0.1.dist-info/top_level.txt,sha256=rpj0IVMTisAjh_1vG3Ccf9v5jpCQwAz6cD1IVU5ZdhQ,11 +PyYAML-6.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyYAML-6.0.2.dist-info/LICENSE,sha256=jTko-dxEkP1jVwfLiOsmvXZBAqcoKVQwfT5RZ6V36KQ,1101 +PyYAML-6.0.2.dist-info/METADATA,sha256=9-odFB5seu4pGPcEv7E8iyxNF51_uKnaNGjLAhz2lto,2060 +PyYAML-6.0.2.dist-info/RECORD,, +PyYAML-6.0.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +PyYAML-6.0.2.dist-info/WHEEL,sha256=39uaw0gKzAUihvDPhgMAk_aKXc5F8smdVlzAUVAVruU,109 +PyYAML-6.0.2.dist-info/top_level.txt,sha256=rpj0IVMTisAjh_1vG3Ccf9v5jpCQwAz6cD1IVU5ZdhQ,11 _yaml/__init__.py,sha256=04Ae_5osxahpJHa3XBZUAf4wi6XX32gR8D6X6p64GEA,1402 -yaml/__init__.py,sha256=bhl05qSeO-1ZxlSRjGrvl2m9nrXb1n9-GQatTN0Mrqc,12311 +yaml/__init__.py,sha256=N35S01HMesFTe0aRRMWkPj0Pa8IEbHpE9FK7cr5Bdtw,12311 yaml/composer.py,sha256=_Ko30Wr6eDWUeUpauUGT3Lcg9QPBnOPVlTnIMRGJ9FM,4883 yaml/constructor.py,sha256=kNgkfaeLUkwQYY_Q6Ff1Tz2XVw_pG1xVE9Ak7z-viLA,28639 yaml/cyaml.py,sha256=6ZrAG9fAYvdVe2FK_w0hmXoG7ZYsoYUwapG8CiC72H0,3851 diff --git a/libs/Markdown-3.5.2.dist-info/REQUESTED b/libs/PyYAML-6.0.2.dist-info/REQUESTED similarity index 100% rename from libs/Markdown-3.5.2.dist-info/REQUESTED rename to libs/PyYAML-6.0.2.dist-info/REQUESTED diff --git a/libs/PyYAML-6.0.1.dist-info/WHEEL b/libs/PyYAML-6.0.2.dist-info/WHEEL similarity index 70% rename from libs/PyYAML-6.0.1.dist-info/WHEEL rename to libs/PyYAML-6.0.2.dist-info/WHEEL index 844cf17ca..b8b9cfd4c 100644 --- a/libs/PyYAML-6.0.1.dist-info/WHEEL +++ b/libs/PyYAML-6.0.2.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: bdist_wheel (0.44.0) Root-Is-Purelib: false Tag: cp38-cp38-macosx_12_0_x86_64 diff --git a/libs/PyYAML-6.0.1.dist-info/top_level.txt b/libs/PyYAML-6.0.2.dist-info/top_level.txt similarity index 100% rename from libs/PyYAML-6.0.1.dist-info/top_level.txt rename to libs/PyYAML-6.0.2.dist-info/top_level.txt diff --git a/libs/SQLAlchemy-2.0.27.dist-info/RECORD b/libs/SQLAlchemy-2.0.27.dist-info/RECORD deleted file mode 100644 index 1563d2d52..000000000 --- a/libs/SQLAlchemy-2.0.27.dist-info/RECORD +++ /dev/null @@ -1,276 +0,0 @@ -SQLAlchemy-2.0.27.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -SQLAlchemy-2.0.27.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100 -SQLAlchemy-2.0.27.dist-info/METADATA,sha256=fZGrNxgSqoY_vLjP6pXy7Ax_9Fvpy6P0SN_Qmjpaf8M,9602 -SQLAlchemy-2.0.27.dist-info/RECORD,, -SQLAlchemy-2.0.27.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -SQLAlchemy-2.0.27.dist-info/WHEEL,sha256=UkJU7GAEhyIKVwGX1j1L5OGjUFT--MirwyCseqfCpZU,109 -SQLAlchemy-2.0.27.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11 -sqlalchemy/__init__.py,sha256=s94qQVe-QqqRL9xhlih382KZikm_5rCLehCmTVeMkxo,13033 -sqlalchemy/connectors/__init__.py,sha256=PzXPqZqi3BzEnrs1eW0DcsR4lyknAzhhN9rWcQ97hb4,476 -sqlalchemy/connectors/aioodbc.py,sha256=GSTiNMO9h0qjPxgqaxDwWZ8HvhWMFNVR6MJQnN1oc40,5288 -sqlalchemy/connectors/asyncio.py,sha256=6s4hDYfuMjJ9KbJ4s7bF1fp5DmcgV77ozgZ5-bwZ0wc,5955 -sqlalchemy/connectors/pyodbc.py,sha256=t7AjyxIOnaWg3CrlUEpBs4Y5l0HFdNt3P_cSSKhbi0Y,8501 -sqlalchemy/cyextension/.gitignore,sha256=_4eLZEBj5Ht5WoM-WvbiDSycdViEzM62ucOZYPQWw9c,64 -sqlalchemy/cyextension/__init__.py,sha256=GzhhN8cjMnDTE0qerlUlpbrNmFPHQWCZ4Gk74OAxl04,244 -sqlalchemy/cyextension/collections.cpython-38-darwin.so,sha256=T-PB8ecKVTCk2cZ2puq_f5XZg9d7gJEfgWTUEVD6sEo,258336 -sqlalchemy/cyextension/collections.pyx,sha256=L7DZ3DGKpgw2MT2ZZRRxCnrcyE5pU1NAFowWgAzQPEc,12571 -sqlalchemy/cyextension/immutabledict.cpython-38-darwin.so,sha256=hNhW_0eX4BbJKF-YaZoWSh8nFzoh-iWjs5pzdakZr5A,127440 -sqlalchemy/cyextension/immutabledict.pxd,sha256=3x3-rXG5eRQ7bBnktZ-OJ9-6ft8zToPmTDOd92iXpB0,291 -sqlalchemy/cyextension/immutabledict.pyx,sha256=KfDTYbTfebstE8xuqAtuXsHNAK0_b5q_ymUiinUe_xs,3535 -sqlalchemy/cyextension/processors.cpython-38-darwin.so,sha256=NF8ouwV4ffK6AnAUb4ms9VaXC_5rc32Q16_cIy3HKKg,104648 -sqlalchemy/cyextension/processors.pyx,sha256=R1rHsGLEaGeBq5VeCydjClzYlivERIJ9B-XLOJlf2MQ,1792 -sqlalchemy/cyextension/resultproxy.cpython-38-darwin.so,sha256=4UKCNsTKsvERmKn5kSDC3cT06p0t1kwjtJ1FrSslVcA,106752 -sqlalchemy/cyextension/resultproxy.pyx,sha256=eWLdyBXiBy_CLQrF5ScfWJm7X0NeelscSXedtj1zv9Q,2725 -sqlalchemy/cyextension/util.cpython-38-darwin.so,sha256=i39G3r6E1dWN3wVt0n-j_uQE074_rcD9uFxOMs5vFYY,125832 -sqlalchemy/cyextension/util.pyx,sha256=B85orxa9LddLuQEaDoVSq1XmAXIbLKxrxpvuB8ogV_o,2530 -sqlalchemy/dialects/__init__.py,sha256=Kos9Gf5JZg1Vg6GWaCqEbD6e0r1jCwCmcnJIfcxDdcY,1770 -sqlalchemy/dialects/_typing.py,sha256=hyv0nKucX2gI8ispB1IsvaUgrEPn9zEcq9hS7kfstEw,888 -sqlalchemy/dialects/mssql/__init__.py,sha256=r5t8wFRNtBQoiUWh0WfIEWzXZW6f3D0uDt6NZTW_7Cc,1880 -sqlalchemy/dialects/mssql/aioodbc.py,sha256=UQd9ecSMIML713TDnLAviuBVJle7P7i1FtqGZZePk2Y,2022 -sqlalchemy/dialects/mssql/base.py,sha256=2Tx9sC5bOd0JbweaMaqnjGOgESur7ZaaN1S66KMTwHk,133298 -sqlalchemy/dialects/mssql/information_schema.py,sha256=HswjDc6y0mPXCf_x6VyylHlBdBa4PSY6Evxmmlch700,8084 -sqlalchemy/dialects/mssql/json.py,sha256=evUACW2O62TAPq8B7QIPagz7jfc664ql9ms68JqiYzg,4816 -sqlalchemy/dialects/mssql/provision.py,sha256=RTVbgYLFAHzEnpVQDJroU8ji_10MqBTiZfyP9_-QNT4,5362 -sqlalchemy/dialects/mssql/pymssql.py,sha256=eZRLz7HGt3SdoZUjFBmA9BS43N7AhIASw7VPBPEJuG0,4038 -sqlalchemy/dialects/mssql/pyodbc.py,sha256=vwM-vBlmRwrqxOc73P0sFOrBSwn24wzc5IkEOpalbXQ,27056 -sqlalchemy/dialects/mysql/__init__.py,sha256=bxbi4hkysUK2OOVvr1F49akUj1cky27kKb07tgFzI9U,2153 -sqlalchemy/dialects/mysql/aiomysql.py,sha256=67JrSUD1BmN88k_ASk6GvrttZFQiFjDY0wBiwdllxMk,9964 -sqlalchemy/dialects/mysql/asyncmy.py,sha256=CGILIRKf_2Ut9Ng2yBlmdg62laL-ockEm6GMuN7xlKE,10033 -sqlalchemy/dialects/mysql/base.py,sha256=KA7tvRxKUw0KwHwMth2rz-NWV0xMkVbYvPoBM9wrAFw,120850 -sqlalchemy/dialects/mysql/cymysql.py,sha256=eXT1ry0w_qRxjiO24M980c-8PZ9qSsbhqBHntjEiKB0,2300 -sqlalchemy/dialects/mysql/dml.py,sha256=HXJMAvimJsqvhj3UZO4vW_6LkF5RqaKbHvklAjor7yU,7645 -sqlalchemy/dialects/mysql/enumerated.py,sha256=ipEPPQqoXfFwcywNdcLlZCEzHBtnitHRah1Gn6nItcg,8448 -sqlalchemy/dialects/mysql/expression.py,sha256=lsmQCHKwfPezUnt27d2kR6ohk4IRFCA64KBS16kx5dc,4097 -sqlalchemy/dialects/mysql/json.py,sha256=l6MEZ0qp8FgiRrIQvOMhyEJq0q6OqiEnvDTx5Cbt9uQ,2269 -sqlalchemy/dialects/mysql/mariadb.py,sha256=kTfBLioLKk4JFFst4TY_iWqPtnvvQXFHknLfm89H2N8,853 -sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=VVRwKLb6GzDmitOM4wLNvmZw6RdhnIwkLl7IZfAmUy8,8734 -sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=qiQdfLPze3QHuASAZ9iqRzD0hDW8FbKoQnfAEQCF7tM,5675 -sqlalchemy/dialects/mysql/mysqldb.py,sha256=9x_JiY4hj4tykG1ckuEGPyH4jCtsh4fgBhNukVnjUos,9658 -sqlalchemy/dialects/mysql/provision.py,sha256=4oGkClQ8jC3YLPF54sB4kCjFc8HRTwf5zl5zftAAXGo,3474 -sqlalchemy/dialects/mysql/pymysql.py,sha256=GUnSHd2M2uKjmN46Hheymtm26g7phEgwYOXrX0zLY8M,4083 -sqlalchemy/dialects/mysql/pyodbc.py,sha256=072crI4qVyPhajYvHnsfFeSrNjLFVPIjBQKo5uyz5yk,4297 -sqlalchemy/dialects/mysql/reflection.py,sha256=XXM8AGpaRTqDvuObg89Bzn_4h2ETG03viYBpWZJM3vc,22822 -sqlalchemy/dialects/mysql/reserved_words.py,sha256=Dm7FINIAkrKLoXmdu26SpE6V8LDCGyp734nmHV2tMd0,9154 -sqlalchemy/dialects/mysql/types.py,sha256=aPzx7hqqZ21aGwByEC-yWZUl6OpMvkbxwTqdN3OUGGI,24267 -sqlalchemy/dialects/oracle/__init__.py,sha256=p4-2gw7TT0bX_MoJXTGD4i8WHctYsK9kCRbkpzykBrc,1493 -sqlalchemy/dialects/oracle/base.py,sha256=-7b5iubFPxJyDRoLXlxj8rk8eBRN2_IdZlB2zzzrrbw,118246 -sqlalchemy/dialects/oracle/cx_oracle.py,sha256=t5yH4svVz7xoDSITF958blgZ01hbCUEWUKrAXwiCiAE,55566 -sqlalchemy/dialects/oracle/dictionary.py,sha256=7WMrbPkqo8ZdGjaEZyQr-5f2pajSOF1OTGb8P97z8-g,19519 -sqlalchemy/dialects/oracle/oracledb.py,sha256=UFcZwrrk0pWfAp_SKJZ1B5rIQHtNhOvuu73_JaSnTbI,9487 -sqlalchemy/dialects/oracle/provision.py,sha256=O9ZpF4OG6Cx4mMzLRfZwhs8dZjrJETWR402n9c7726A,8304 -sqlalchemy/dialects/oracle/types.py,sha256=QK3hJvWzKnnCe3oD3rItwEEIwcoBze8qGg7VFOvVlIk,8231 -sqlalchemy/dialects/postgresql/__init__.py,sha256=kwgzMhtZKDHD12HMGo5MtdKCnDdy6wLezDGZPOEoU3Q,3895 -sqlalchemy/dialects/postgresql/_psycopg_common.py,sha256=7TudtgsPiSB8O5kX8W8KxcNYR8t5h_UHb86b_ChL0P8,5696 -sqlalchemy/dialects/postgresql/array.py,sha256=9dJ_1WjWSBX1-MGDZtJACJ38vtRO3da7d4UId79WsnQ,13713 -sqlalchemy/dialects/postgresql/asyncpg.py,sha256=12DN8hlK-Na_bEFmQ5kXK7MRqu87ze2IMX8aDyiSddU,40183 -sqlalchemy/dialects/postgresql/base.py,sha256=ogY8rcQvT9jjYdtStxZ_nhTl8LmhB_zeJyhZIaUyMLk,176486 -sqlalchemy/dialects/postgresql/dml.py,sha256=Pc69Le6qzmUHHb1FT5zeUSD31dWm6SBgdCAGW89cs3s,11212 -sqlalchemy/dialects/postgresql/ext.py,sha256=1bZ--iNh2O9ym7l2gXZX48yP3yMO4dqb9RpYro2Mj2Q,16262 -sqlalchemy/dialects/postgresql/hstore.py,sha256=otAx-RTDfpi_tcXkMuQV0JOIXtYgevgnsikLKKOkI6U,11541 -sqlalchemy/dialects/postgresql/json.py,sha256=-ffnp85fQBOyt0Bjb7XAupmOxloUdzFZZgixUG3Wj5w,11212 -sqlalchemy/dialects/postgresql/named_types.py,sha256=SFhs9_l108errKNuAMPl761RQ2imTO9PbUAnSv-WtRg,17100 -sqlalchemy/dialects/postgresql/operators.py,sha256=NsAaWun_tL3d_be0fs9YL6T4LPKK6crnmFxxIJHgyeY,2808 -sqlalchemy/dialects/postgresql/pg8000.py,sha256=3yoekiWSF-xnaWMqG76XrYPMqerg-42TdmfsW_ivK9E,18640 -sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=nAKavWTE_4cqxiDKDTdo-ivkCxxRIlzD5GO9Wl1yrG4,8884 -sqlalchemy/dialects/postgresql/provision.py,sha256=yqyx-aDFO9l2YcL9f4T5HBP_Lnt5dHsMjpuXUG8mi7A,5762 -sqlalchemy/dialects/postgresql/psycopg.py,sha256=TF53axr1EkTBAZD85JCq6wA7XTcJTzXueSz26txDbgc,22364 -sqlalchemy/dialects/postgresql/psycopg2.py,sha256=gAP3poHDUxEB6iut6sxe9PhBiOrV_iIMvnP0NUlC-Rw,31607 -sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=M7wAYSL6Pvt-4nbfacAHGyyw4XMKJ_bQZ1tc1pBtIdg,1756 -sqlalchemy/dialects/postgresql/ranges.py,sha256=6CgV7qkxEMJ9AQsiibo_XBLJYzGh-2ZxpG83sRaesVY,32949 -sqlalchemy/dialects/postgresql/types.py,sha256=Jfxqw9JaKNOq29JRWBublywgb3lLMyzx8YZI7CXpS2s,7300 -sqlalchemy/dialects/sqlite/__init__.py,sha256=lp9DIggNn349M-7IYhUA8et8--e8FRExWD2V_r1LJk4,1182 -sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=OMvxP2eWyqk5beF-sHhzxRmjzO4VCQp55q7NH2XPVTE,12305 -sqlalchemy/dialects/sqlite/base.py,sha256=lUtigjn7NdPBq831zQsLcBwdwRJqdgKM_tUaDrMElOE,96794 -sqlalchemy/dialects/sqlite/dml.py,sha256=9GE55WvwoktKy2fHeT-Wbc9xPHgsbh5oBfd_fckMH5Q,8443 -sqlalchemy/dialects/sqlite/json.py,sha256=Eoplbb_4dYlfrtmQaI8Xddd2suAIHA-IdbDQYM-LIhs,2777 -sqlalchemy/dialects/sqlite/provision.py,sha256=UCpmwxf4IWlrpb2eLHGbPTpCFVbdI_KAh2mKtjiLYao,5632 -sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=OL2S_05DK9kllZj6DOz7QtEl7jI7syxjW6woS725ii4,5356 -sqlalchemy/dialects/sqlite/pysqlite.py,sha256=TAOqsHIjhbUZOF_Qk7UooiekkVZNhYJNduxlGQjokeA,27900 -sqlalchemy/dialects/type_migration_guidelines.txt,sha256=-uHNdmYFGB7bzUNT6i8M5nb4j6j9YUKAtW4lcBZqsMg,8239 -sqlalchemy/engine/__init__.py,sha256=Stb2oV6l8w65JvqEo6J4qtKoApcmOpXy3AAxQud4C1o,2818 -sqlalchemy/engine/_py_processors.py,sha256=j9i_lcYYQOYJMcsDerPxI0sVFBIlX5sqoYMdMJlgWPI,3744 -sqlalchemy/engine/_py_row.py,sha256=wSqoUFzLOJ1f89kgDb6sJm9LUrF5LMFpXPcK1vUsKcs,3787 -sqlalchemy/engine/_py_util.py,sha256=f2DI3AN1kv6EplelowesCVpwS8hSXNufRkZoQmJtSH8,2484 -sqlalchemy/engine/base.py,sha256=NGD1iokXsJBw_6sBOpX4STo_05fQFd52qUl1YiJZsdU,122038 -sqlalchemy/engine/characteristics.py,sha256=Qbvt4CPrggJ3GfxHl0hOAxopjnCQy-W_pjtwLIe-Q1g,2590 -sqlalchemy/engine/create.py,sha256=5Me7rgLvmZVJM6QzoH8aBHz0lIratA2vXN8cW6kUgdY,32872 -sqlalchemy/engine/cursor.py,sha256=jSjpGM5DiwX1pwEHGx3wyqgHrgj8rwU5ZpVvMv5GaJs,74443 -sqlalchemy/engine/default.py,sha256=VSqSm-juosz-5WqZPWjgDQf8Fra27M-YsrVVcs7RwPU,84672 -sqlalchemy/engine/events.py,sha256=c0unNFFiHzTAvkUtXoJaxzMFMDwurBkHiiUhuN8qluc,37381 -sqlalchemy/engine/interfaces.py,sha256=gktNzgLjNK-KrYMU__Lk0h85SXQI8LCjDakkuLxagNE,112688 -sqlalchemy/engine/mock.py,sha256=yvpxgFmRw5G4QsHeF-ZwQGHKES-HqQOucTxFtN1uzdk,4179 -sqlalchemy/engine/processors.py,sha256=XyfINKbo-2fjN-mW55YybvFyQMOil50_kVqsunahkNs,2379 -sqlalchemy/engine/reflection.py,sha256=FlT5kPpKm7Lah50GNt5XcnlJWojTL3LD_x0SoCF9kfY,75127 -sqlalchemy/engine/result.py,sha256=j6BI4Wj2bziQNQG5OlG_Cm4KcNWY9AoYvTXVlJUU-D8,77603 -sqlalchemy/engine/row.py,sha256=9AAQo9zYDL88GcZ3bjcQTwMT-YIcuGTSMAyTfmBJ_yM,12032 -sqlalchemy/engine/strategies.py,sha256=DqFSWaXJPL-29Omot9O0aOcuGL8KmCGyOvnPGDkAJoE,442 -sqlalchemy/engine/url.py,sha256=8eWkUaIUyDExOcJ2D4xJXRcn4OY1GQJ3Q2duSX6UGAg,30784 -sqlalchemy/engine/util.py,sha256=hkEql1t19WHl6uzR55-F-Fs_VMCJ7p02KKQVNUDSXTk,5667 -sqlalchemy/event/__init__.py,sha256=KBrp622xojnC3FFquxa2JsMamwAbfkvzfv6Op0NKiYc,997 -sqlalchemy/event/api.py,sha256=BUTAZjSlzvq4Hn2v2pihP_P1yo3lvCVDczK8lV_XJ80,8227 -sqlalchemy/event/attr.py,sha256=X8QeHGK4ioSYht1vkhc11f606_mq_t91jMNIT314ubs,20751 -sqlalchemy/event/base.py,sha256=3n9FmUkcXYHHyGzfpjKDsrIUVCNST_hq4zOtrNm0_a4,14954 -sqlalchemy/event/legacy.py,sha256=teMPs00fO-4g8a_z2omcVKkYce5wj_1uvJO2n2MIeuo,8227 -sqlalchemy/event/registry.py,sha256=nfTSSyhjZZXc5wseWB4sXn-YibSc0LKX8mg17XlWmAo,10835 -sqlalchemy/events.py,sha256=k-ZD38aSPD29LYhED7CBqttp5MDVVx_YSaWC2-cu9ec,525 -sqlalchemy/exc.py,sha256=M_8-O1hd8i6gbyx-TapV400p_Lxq2QqTGMXUAO-YgCc,23976 -sqlalchemy/ext/__init__.py,sha256=S1fGKAbycnQDV01gs-JWGaFQ9GCD4QHwKcU2wnugg_o,322 -sqlalchemy/ext/associationproxy.py,sha256=5O5ANHARO8jytvqBQmOu-QjNVE4Hh3tfYquqKAj5ajs,65771 -sqlalchemy/ext/asyncio/__init__.py,sha256=1OqSxEyIUn7RWLGyO12F-jAUIvk1I6DXlVy80-Gvkds,1317 -sqlalchemy/ext/asyncio/base.py,sha256=fl7wxZD9KjgFiCtG3WXrYjHEvanamcsodCqq9pH9lOk,8905 -sqlalchemy/ext/asyncio/engine.py,sha256=vQRdpBnGuyzyG48ZssDZvFlcS6Y6ZXUYI0GEOQqdDxk,47941 -sqlalchemy/ext/asyncio/exc.py,sha256=8sII7VMXzs2TrhizhFQMzSfcroRtiesq8o3UwLfXSgQ,639 -sqlalchemy/ext/asyncio/result.py,sha256=ID2eh-NHW-lnNFTxbKhje8fr-tnsucUsiw_jcpGcSPc,30409 -sqlalchemy/ext/asyncio/scoping.py,sha256=BmE1UbFV_C4BXB4WngJc523DeMH-nTchNb8ORiSPYfE,52597 -sqlalchemy/ext/asyncio/session.py,sha256=Zhkrwwc4rqZJntUpzbgruQNgpuOwaRmjrBQb8ol19z0,62894 -sqlalchemy/ext/automap.py,sha256=hBlKAfZn2fgAAQh7vh4f2kClbb5ryOgV59tzVHEObQM,61389 -sqlalchemy/ext/baked.py,sha256=H6T1il7GY84BhzPFj49UECSpZh_eBuiHomA-QIsYOYQ,17807 -sqlalchemy/ext/compiler.py,sha256=ONPoxoKD2yUS9R2-oOhmPsA7efm-Bs0BXo7HE1dGlsU,20391 -sqlalchemy/ext/declarative/__init__.py,sha256=20psLdFQbbOWfpdXHZ0CTY6I1k4UqXvKemNVu1LvPOI,1818 -sqlalchemy/ext/declarative/extensions.py,sha256=uCjN1GisQt54AjqYnKYzJdUjnGd2pZBW47WWdPlS7FE,19547 -sqlalchemy/ext/horizontal_shard.py,sha256=wuwAPnHymln0unSBnyx-cpX0AfESKSsypaSQTYCvzDk,16750 -sqlalchemy/ext/hybrid.py,sha256=LXph2NOtBQj6rZMi5ar-WCxkY7qaFp-o-UFIvCy-ep0,52432 -sqlalchemy/ext/indexable.py,sha256=UkTelbydKCdKelzbv3HWFFavoET9WocKaGRPGEOVfN8,11032 -sqlalchemy/ext/instrumentation.py,sha256=sg8ghDjdHSODFXh_jAmpgemnNX1rxCeeXEG3-PMdrNk,15707 -sqlalchemy/ext/mutable.py,sha256=L5ZkHBGYhMaqO75Xtyrk2DBR44RDk0g6Rz2HzHH0F8Q,37355 -sqlalchemy/ext/mypy/__init__.py,sha256=0WebDIZmqBD0OTq5JLtd_PmfF9JGxe4d4Qv3Ml3PKUg,241 -sqlalchemy/ext/mypy/apply.py,sha256=Aek_-XA1eXihT4attxhfE43yBKtCgsxBSb--qgZKUqc,10550 -sqlalchemy/ext/mypy/decl_class.py,sha256=1vVJRII2apnLTUbc5HkJS6Z2GueaUv_eKvhbqh7Wik4,17384 -sqlalchemy/ext/mypy/infer.py,sha256=KVnmLFEVS33Al8pUKI7MJbJQu3KeveBUMl78EluBORw,19369 -sqlalchemy/ext/mypy/names.py,sha256=IQ16GLZFqKxfYxIZxkbTurBqOUYbUV-64V_DSRns1tc,10630 -sqlalchemy/ext/mypy/plugin.py,sha256=74ML8LI9xar0V86oCxnPFv5FQGEEfUzK64vOay4BKFs,9750 -sqlalchemy/ext/mypy/util.py,sha256=1zuDQG8ezmF-XhJmAQU_lcBHiD--sL-lq20clg8t4lE,9448 -sqlalchemy/ext/orderinglist.py,sha256=TGYbsGH72wEZcFNQDYDsZg9OSPuzf__P8YX8_2HtYUo,14384 -sqlalchemy/ext/serializer.py,sha256=YemanWdeMVUDweHCnQc-iMO6mVVXNo2qQ5NK0Eb2_Es,6178 -sqlalchemy/future/__init__.py,sha256=q2mw-gxk_xoxJLEvRoyMha3vO1xSRHrslcExOHZwmPA,512 -sqlalchemy/future/engine.py,sha256=AgIw6vMsef8W6tynOTkxsjd6o_OQDwGjLdbpoMD8ue8,495 -sqlalchemy/inspection.py,sha256=MF-LE358wZDUEl1IH8-Uwt2HI65EsQpQW5o5udHkZwA,5063 -sqlalchemy/log.py,sha256=8x9UR3nj0uFm6or6bQF-JWb4fYv2zOeQjG_w-0wOJFA,8607 -sqlalchemy/orm/__init__.py,sha256=ZYys5nL3RFUDCMOLFDBrRI52F6er3S1U1OY9TeORuKs,8463 -sqlalchemy/orm/_orm_constructors.py,sha256=VWY_MotbcQlECGx2uwEu3IcRkZ4RgLM_ufPad3IA9ZM,99354 -sqlalchemy/orm/_typing.py,sha256=DVBfpHmDVK4x1zxaGJPY2GoTrAsyR6uexv20Lzf1afc,4973 -sqlalchemy/orm/attributes.py,sha256=-IGg2RFjOPwAEr-boohvlZfitz7OtaXz1v8-7uG8ekw,92520 -sqlalchemy/orm/base.py,sha256=HhuarpRU-BpKSHE1LeeBaG8CpdkwwLrvTkUVRK-ofjg,27424 -sqlalchemy/orm/bulk_persistence.py,sha256=SSSR0Omv8A8BzpsOdSo4x75XICoqGpO1sUkyEWUVGso,70022 -sqlalchemy/orm/clsregistry.py,sha256=29LyYiuj0qbebOpgW6DbBPNB2ikTweFQar1byCst7I0,17958 -sqlalchemy/orm/collections.py,sha256=jpMsJGVixmrW9kfT8wevm9kpatKRqyDLcqWd7CjKPxE,52179 -sqlalchemy/orm/context.py,sha256=Wjx0d1Rkxd-wsX1mP2V2_4VbOxdNY6S_HijdXJ-TtKg,112001 -sqlalchemy/orm/decl_api.py,sha256=0gCZWM2sOXb_4OzUXfevVUisZWOUrErQTAHyaSQQL5k,63674 -sqlalchemy/orm/decl_base.py,sha256=Tq6I3Jm3bkM01mmoiHfdFXLE94YDk1ik2u2dXL1RxLc,81601 -sqlalchemy/orm/dependency.py,sha256=hgjksUWhgbmgHK5GdJdiDCBgDAIGQXIrY-Tj79tbL2k,47631 -sqlalchemy/orm/descriptor_props.py,sha256=pKtpP7H1LB_YuHRVrEYpfFZybEnUUdPwQXxduYFe2hA,37180 -sqlalchemy/orm/dynamic.py,sha256=jksBDCOsm6EBMVParcNGuMeaAv12hX4IzouKspC-HPA,9786 -sqlalchemy/orm/evaluator.py,sha256=q292K5vdpP69G7Z9y1RqI5GFAk2diUPwnsXE8De_Wgw,11925 -sqlalchemy/orm/events.py,sha256=_Ttun_bCSGgvsfg-VzAeEcsGpacf8p4c5z12JkSQkjM,127697 -sqlalchemy/orm/exc.py,sha256=w7MZkJMGGlu5J6jOFSmi9XXzc02ctnTv34jrEWpI-eM,7356 -sqlalchemy/orm/identity.py,sha256=jHdCxCpCyda_8mFOfGmN_Pr0XZdKiU-2hFZshlNxbHs,9249 -sqlalchemy/orm/instrumentation.py,sha256=M-kZmkUvHUxtf-0mCA8RIM5QmMH1hWlYR_pKMwaidjA,24321 -sqlalchemy/orm/interfaces.py,sha256=1yyppjMHcP5NPXjxfOlSeFNmc-3_T_o2upeF3KFZtc0,48378 -sqlalchemy/orm/loading.py,sha256=JN2zLnPjNnk7K9DERbyerxESCXin7m7X1XP0gfdWLOE,57537 -sqlalchemy/orm/mapped_collection.py,sha256=3cneB1dfPTLrsTvKoo9_oCY2xtq4UAHfe5WSXPyqIS4,19690 -sqlalchemy/orm/mapper.py,sha256=8SVHr7tO-DDNpNGi68usc7PLQ7mTwzkZNEJu1aMb6dQ,171059 -sqlalchemy/orm/path_registry.py,sha256=bIXllBRevK7Ic5irajYnZgl2iazJ0rKNRkhXJSlfxjY,25850 -sqlalchemy/orm/persistence.py,sha256=dzyB2JOXNwQgaCbN8kh0sEz00WFePr48qf8NWVCUZH8,61701 -sqlalchemy/orm/properties.py,sha256=81I-PIF7f7bB0qdH4BCYMWzCzRpe57yUiEIPv2tzBoA,29127 -sqlalchemy/orm/query.py,sha256=UVNWn_Rq4a8agh5UUWNeu0DJQtPceCWVpXx1-uW7A4E,117555 -sqlalchemy/orm/relationships.py,sha256=DqD3WBKpeVQ59ldh6eCxar_sIToA3tc2-bJPtp3zfpM,127709 -sqlalchemy/orm/scoping.py,sha256=gFYywLeMmd5qjFdVPzeuCX727mTaChrCv8aqn4wPke0,78677 -sqlalchemy/orm/session.py,sha256=yiKyoJBARQj4I1ZBjsIxc6ecCpt2Upjvlxruo2A5HRc,193181 -sqlalchemy/orm/state.py,sha256=mW2f1hMSNeTJ89foutOE1EqLLD6DZkrSeO-pgagZweg,37520 -sqlalchemy/orm/state_changes.py,sha256=qKYg7NxwrDkuUY3EPygAztym6oAVUFcP2wXn7QD3Mz4,6815 -sqlalchemy/orm/strategies.py,sha256=OtmMtWpCDk4ZiaM_ipzGn80sPOi6Opwj3Co4lUHpd_w,114206 -sqlalchemy/orm/strategy_options.py,sha256=RbFl-79Lrh8XIVUnZFmQ5GVvR586SG_szs3prw5DZLQ,84204 -sqlalchemy/orm/sync.py,sha256=g7iZfSge1HgxMk9SKRgUgtHEbpbZ1kP_CBqOIdTOXqc,5779 -sqlalchemy/orm/unitofwork.py,sha256=fiVaqcymbDDHRa1NjS90N9Z466nd5pkJOEi1dHO6QLY,27033 -sqlalchemy/orm/util.py,sha256=MSLKAWZNw3FzFTH094xpfrhoA2Ov5pJQinK_dU_M0zo,80351 -sqlalchemy/orm/writeonly.py,sha256=SYu2sAaHZONk2pW4PmtE871LG-O0P_bjidvKzY1H_zI,22305 -sqlalchemy/pool/__init__.py,sha256=qiDdq4r4FFAoDrK6ncugF_i6usi_X1LeJt-CuBHey0s,1804 -sqlalchemy/pool/base.py,sha256=WF4az4ZKuzQGuKeSJeyexaYjmWZUvYdC6KIi8zTGodw,52236 -sqlalchemy/pool/events.py,sha256=xGjkIUZl490ZDtCHqnQF9ZCwe2Jv93eGXmnQxftB11E,13147 -sqlalchemy/pool/impl.py,sha256=2k2YMY9AepEoqGD_ClP_sUodSoa6atkt3GLPPWI49i4,17717 -sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -sqlalchemy/schema.py,sha256=dKiWmgHYjcKQ4TiiD6vD0UMmIsD8u0Fsor1M9AAeGUs,3194 -sqlalchemy/sql/__init__.py,sha256=UNa9EUiYWoPayf-FzNcwVgQvpsBdInPZfpJesAStN9o,5820 -sqlalchemy/sql/_dml_constructors.py,sha256=YdBJex0MCVACv4q2nl_ii3uhxzwU6aDB8zAsratX5UQ,3867 -sqlalchemy/sql/_elements_constructors.py,sha256=rrxq5Nzyo7GbLaGxb8VRZxko2nW0z7SYEli8ArfMIXI,62550 -sqlalchemy/sql/_orm_types.py,sha256=T-vjcry4C1y0GToFKVxQCnmly_-Zsq4IO4SHN6bvUF4,625 -sqlalchemy/sql/_py_util.py,sha256=hiM9ePbRSGs60bAMxPFuJCIC_p9SQ1VzqXGiPchiYwE,2173 -sqlalchemy/sql/_selectable_constructors.py,sha256=wjE6HrLm9cR7bxvZXT8sFLUqT6t_J9G1XyQCnYmBDl0,18780 -sqlalchemy/sql/_typing.py,sha256=Z3tBzapYRP0sKL7IwqnzPE9b8Bbq9vQtc4iV9tvxDoU,12494 -sqlalchemy/sql/annotation.py,sha256=aqbbVz9kfbCT3_66CZ9GEirVN197Cukoqt8rq48FgkQ,18245 -sqlalchemy/sql/base.py,sha256=2MVQnIL0b8xuzp1Fcv0NAye6h_OcgYpsUgLB4sy8Ahk,73756 -sqlalchemy/sql/cache_key.py,sha256=sJhAA-2jovIteeIU7mw9hSL1liPP9Ez89CZZJFC3h6E,33548 -sqlalchemy/sql/coercions.py,sha256=1xzN_9U5BCJGgokdc5iYj5o2cMAfEEZkr1Oa9Q-JYj8,40493 -sqlalchemy/sql/compiler.py,sha256=aDD100xmz8WpBq8oe7PJ5ar8lk9emd54gEE5K2Hr76g,271187 -sqlalchemy/sql/crud.py,sha256=g9xcol2KRGjZi1qsb2-bVz8zgVy_53gfMtJcnNO2vyQ,56521 -sqlalchemy/sql/ddl.py,sha256=CIqMilCKfuQnF0lrZsQdTxgrbXqcTauKr0Ojzj77PFQ,45602 -sqlalchemy/sql/default_comparator.py,sha256=utXWsZVGEjflhFfCT4ywa6RnhORc1Rryo87Hga71Rps,16707 -sqlalchemy/sql/dml.py,sha256=pn0Lm1ofC5qVZzwGWFW73lPCiNba8OsTeemurJgwRyg,65614 -sqlalchemy/sql/elements.py,sha256=kGRUilpx-rr6TTZgZpC5b71OnxxmCgDJRF2fYjDtxh8,172025 -sqlalchemy/sql/events.py,sha256=iC_Q1Htm1Aobt5tOYxWfHHqNpoytrULORmUKcusH_-E,18290 -sqlalchemy/sql/expression.py,sha256=VMX-dLpsZYnVRJpYNDozDUgaj7iQ0HuewUKVefD57PE,7586 -sqlalchemy/sql/functions.py,sha256=MjXK0IVv45Y4n96_TMDZGJ7fwAhGHPRbFP8hOJgaplQ,63689 -sqlalchemy/sql/lambdas.py,sha256=6P__bsWsFnrD7M18FPiBXI0L0OdWZOEV25FAijT4bwo,49289 -sqlalchemy/sql/naming.py,sha256=ZHs1qSV3ou8TYmZ92uvU3sfdklUQlIz4uhe330n05SU,6858 -sqlalchemy/sql/operators.py,sha256=r4oQp4h5zTMFFOpiFNV56joIK-QIjJCobatsmaZ-724,75935 -sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662 -sqlalchemy/sql/schema.py,sha256=WOIBaDVdg-zahrP95CPYgY4--3OQN56DH6xm28JDF-Y,228262 -sqlalchemy/sql/selectable.py,sha256=7lxe79hZvnHyzHe1DobodI1lZ1eo8quSLZ6phw10Zj4,232848 -sqlalchemy/sql/sqltypes.py,sha256=UV46KTkgxSin48oPckPOqk3Gx0tZT1l60qXwk7SbKlo,127101 -sqlalchemy/sql/traversals.py,sha256=NFgJrVJzInO3HrnG90CklxrDXhFydZohPs2vRJkh3Bo,33589 -sqlalchemy/sql/type_api.py,sha256=5DzdVquCJomFfpfMyLYbCb66PWxjxbSRdjh6UYB1Yv4,83841 -sqlalchemy/sql/util.py,sha256=qGHQF-tPCj-m1FBerzT7weCanGcXU7dK5m-W7NHio-4,48077 -sqlalchemy/sql/visitors.py,sha256=71wdVvhhZL4nJvVwFAs6ssaW-qZgNRSmKjpAcOzF_TA,36317 -sqlalchemy/testing/__init__.py,sha256=VsrEHrORpAF5n7Vfl43YQgABh6EP1xBx_gHxs7pSXeE,3126 -sqlalchemy/testing/assertions.py,sha256=gL0rA7CCZJbcVgvWOPV91tTZTRwQc1_Ta0-ykBn83Ew,31439 -sqlalchemy/testing/assertsql.py,sha256=IgQG7l94WaiRP8nTbilJh1ZHZl125g7GPq-S5kmQZN0,16817 -sqlalchemy/testing/asyncio.py,sha256=fkdRz-E37d5OrQKw5hdjmglOTJyXGnJzaJpvNXOBLxg,3728 -sqlalchemy/testing/config.py,sha256=AqyH1qub_gDqX0BvlL-JBQe7N-t2wo8655FtwblUNOY,12090 -sqlalchemy/testing/engines.py,sha256=UnH-8--3zLlYz4IbbCPwC375Za_DC61Spz-oKulbs9Q,13347 -sqlalchemy/testing/entities.py,sha256=IphFegPKbff3Un47jY6bi7_MQXy6qkx_50jX2tHZJR4,3354 -sqlalchemy/testing/exclusions.py,sha256=T8B01hmm8WVs-EKcUOQRzabahPqblWJfOidi6bHJ6GA,12460 -sqlalchemy/testing/fixtures/__init__.py,sha256=dMClrIoxqlYIFpk2ia4RZpkbfxsS_3EBigr9QsPJ66g,1198 -sqlalchemy/testing/fixtures/base.py,sha256=9r_J2ksiTzClpUxW0TczICHrWR7Ny8PV8IsBz6TsGFI,12256 -sqlalchemy/testing/fixtures/mypy.py,sha256=gdxiwNFIzDlNGSOdvM3gbwDceVCC9t8oM5kKbwyhGBk,11973 -sqlalchemy/testing/fixtures/orm.py,sha256=8EFbnaBbXX_Bf4FcCzBUaAHgyVpsLGBHX16SGLqE3Fg,6095 -sqlalchemy/testing/fixtures/sql.py,sha256=MFOuYBUyPIpHJzjRCHL9vU-IT4bD6LXGGMvsp0v1FY8,15704 -sqlalchemy/testing/pickleable.py,sha256=U9mIqk-zaxq9Xfy7HErP7UrKgTov-A3QFnhZh-NiOjI,2833 -sqlalchemy/testing/plugin/__init__.py,sha256=79F--BIY_NTBzVRIlJGgAY5LNJJ3cD19XvrAo4X0W9A,247 -sqlalchemy/testing/plugin/bootstrap.py,sha256=oYScMbEW4pCnWlPEAq1insFruCXFQeEVBwo__i4McpU,1685 -sqlalchemy/testing/plugin/plugin_base.py,sha256=BgNzWNEmgpK4CwhyblQQKnH-7FDKVi_Uul5vw8fFjBU,21578 -sqlalchemy/testing/plugin/pytestplugin.py,sha256=Jtj073ArTcAmetv81sHmrUhlH0SblcSK4wyN8S4hmvo,27554 -sqlalchemy/testing/profiling.py,sha256=PbuPhRFbauFilUONeY3tV_Y_5lBkD7iCa8VVyH2Sk9Y,10148 -sqlalchemy/testing/provision.py,sha256=zXsw2D2Xpmw_chmYLsE1GXQqKQ-so3V8xU_joTcKan0,14619 -sqlalchemy/testing/requirements.py,sha256=N9pSj7z2wVMkBif-DQfPVa_cl9k6p9g_J5FY1OsWtrY,51817 -sqlalchemy/testing/schema.py,sha256=lr4GkGrGwagaHMuSGzWdzkMaj3HnS7dgfLLWfxt__-U,6513 -sqlalchemy/testing/suite/__init__.py,sha256=Y5DRNG0Yl1u3ypt9zVF0Z9suPZeuO_UQGLl-wRgvTjU,722 -sqlalchemy/testing/suite/test_cte.py,sha256=6zBC3W2OwX1Xs-HedzchcKN2S7EaLNkgkvV_JSZ_Pq0,6451 -sqlalchemy/testing/suite/test_ddl.py,sha256=1Npkf0C_4UNxphthAGjG078n0vPEgnSIHpDu5MfokxQ,12031 -sqlalchemy/testing/suite/test_deprecations.py,sha256=BcJxZTcjYqeOAENVElCg3hVvU6fkGEW3KGBMfnW8bng,5337 -sqlalchemy/testing/suite/test_dialect.py,sha256=EH4ZQWbnGdtjmx5amZtTyhYmrkXJCvW1SQoLahoE7uk,22923 -sqlalchemy/testing/suite/test_insert.py,sha256=9azifj6-OCD7s8h_tAO1uPw100ibQv8YoKc_VA3hn3c,18824 -sqlalchemy/testing/suite/test_reflection.py,sha256=tJSbJFg5fw0sSUv3I_FPmhN7rWWeJtq3YyxmylWJUlM,106466 -sqlalchemy/testing/suite/test_results.py,sha256=NQ23m8FDVd0ub751jN4PswGoAhk5nrqvjHvpYULZXnc,15937 -sqlalchemy/testing/suite/test_rowcount.py,sha256=3KDTlRgjpQ1OVfp__1cv8Hvq4CsDKzmrhJQ_WIJWoJg,7900 -sqlalchemy/testing/suite/test_select.py,sha256=FvMFYQW9IJpDWGYZiJk46is6YrtmdSghBdTjZCG8T0Y,58574 -sqlalchemy/testing/suite/test_sequence.py,sha256=66bCoy4xo99GBSaX6Hxb88foANAykLGRz1YEKbvpfuA,9923 -sqlalchemy/testing/suite/test_types.py,sha256=rFmTOg6XuMch9L2-XthfLJRCTTwpZbMfrNss2g09gmc,65677 -sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=c3_eIxLyORuSOhNDP0jWKxPyUf3SwMFpdalxtquwqlM,6141 -sqlalchemy/testing/suite/test_update_delete.py,sha256=yTiM2unnfOK9rK8ZkqeTTU_MkT-RsKFLmdYliniZfAY,3994 -sqlalchemy/testing/util.py,sha256=BFiSp3CEX95Dr-vv4l_7ZRu5vjZi9hjjnp-JKNfuS5E,14080 -sqlalchemy/testing/warnings.py,sha256=fJ-QJUY2zY2PPxZJKv9medW-BKKbCNbA4Ns_V3YwFXM,1546 -sqlalchemy/types.py,sha256=cQFM-hFRmaf1GErun1qqgEs6QxufvzMuwKqj9tuMPpE,3168 -sqlalchemy/util/__init__.py,sha256=B3bedg-LSQEscwqgmYYU-VENUX8_zAE3q9vb7tkfJNY,8277 -sqlalchemy/util/_collections.py,sha256=NE9dGJo8UNXIMbY3l3k8AO9BdPW04DlKTYraKCinchI,20063 -sqlalchemy/util/_concurrency_py3k.py,sha256=v8VVoBfFvFHe4j8mMkVLfdUrTbV897p8RWGAm73Ue9U,8574 -sqlalchemy/util/_has_cy.py,sha256=wCQmeSjT3jaH_oxfCEtGk-1g0gbSpt5MCK5UcWdMWqk,1247 -sqlalchemy/util/_py_collections.py,sha256=U6L5AoyLdgSv7cdqB4xxQbw1rpeJjyOZVXffgxgga8I,16714 -sqlalchemy/util/compat.py,sha256=R6bpBydldtbr6h7oJePihQxFb7jKiI-YDsK465MSOzk,8714 -sqlalchemy/util/concurrency.py,sha256=mhwHm0utriD14DRqxTBWgIW7QuwdSEiLgLiJdUjiR3w,2427 -sqlalchemy/util/deprecations.py,sha256=YBwvvYhSB8LhasIZRKvg_-WNoVhPUcaYI1ZrnjDn868,11971 -sqlalchemy/util/langhelpers.py,sha256=khoFN05HjHiWY9ddeehCYxYG2u8LDzuiIKLOGLSAihU,64905 -sqlalchemy/util/preloaded.py,sha256=az7NmLJLsqs0mtM9uBkIu10-841RYDq8wOyqJ7xXvqE,5904 -sqlalchemy/util/queue.py,sha256=CaeSEaYZ57YwtmLdNdOIjT5PK_LCuwMFiO0mpp39ybM,10185 -sqlalchemy/util/tool_support.py,sha256=9braZyidaiNrZVsWtGmkSmus50-byhuYrlAqvhjcmnA,6135 -sqlalchemy/util/topological.py,sha256=N3M3Le7KzGHCmqPGg0ZBqixTDGwmFLhOZvBtc4rHL_g,3458 -sqlalchemy/util/typing.py,sha256=FqH6WjV3p-8rz68YaXktpiZrPu3kmug2-gktJxBQSnI,16641 diff --git a/libs/PyYAML-6.0.1.dist-info/INSTALLER b/libs/SQLAlchemy-2.0.37.dist-info/INSTALLER similarity index 100% rename from libs/PyYAML-6.0.1.dist-info/INSTALLER rename to libs/SQLAlchemy-2.0.37.dist-info/INSTALLER diff --git a/libs/SQLAlchemy-2.0.27.dist-info/LICENSE b/libs/SQLAlchemy-2.0.37.dist-info/LICENSE similarity index 94% rename from libs/SQLAlchemy-2.0.27.dist-info/LICENSE rename to libs/SQLAlchemy-2.0.37.dist-info/LICENSE index 967cdc5dc..dfe1a4d81 100644 --- a/libs/SQLAlchemy-2.0.27.dist-info/LICENSE +++ b/libs/SQLAlchemy-2.0.37.dist-info/LICENSE @@ -1,4 +1,4 @@ -Copyright 2005-2024 SQLAlchemy authors and contributors . +Copyright 2005-2025 SQLAlchemy authors and contributors . Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/libs/SQLAlchemy-2.0.27.dist-info/METADATA b/libs/SQLAlchemy-2.0.37.dist-info/METADATA similarity index 95% rename from libs/SQLAlchemy-2.0.27.dist-info/METADATA rename to libs/SQLAlchemy-2.0.37.dist-info/METADATA index e43a4599d..e548f29da 100644 --- a/libs/SQLAlchemy-2.0.27.dist-info/METADATA +++ b/libs/SQLAlchemy-2.0.37.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: SQLAlchemy -Version: 2.0.27 +Version: 2.0.37 Summary: Database Abstraction Library Home-page: https://www.sqlalchemy.org Author: Mike Bayer @@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Database :: Front-Ends @@ -27,7 +28,7 @@ Requires-Python: >=3.7 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: typing-extensions >=4.6.0 -Requires-Dist: greenlet !=0.4.17 ; platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))) +Requires-Dist: greenlet !=0.4.17 ; python_version < "3.14" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32")))))) Requires-Dist: importlib-metadata ; python_version < "3.8" Provides-Extra: aiomysql Requires-Dist: greenlet !=0.4.17 ; extra == 'aiomysql' @@ -45,7 +46,7 @@ Provides-Extra: asyncmy Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncmy' Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy' Provides-Extra: mariadb_connector -Requires-Dist: mariadb !=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector' +Requires-Dist: mariadb !=1.1.10,!=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector' Provides-Extra: mssql Requires-Dist: pyodbc ; extra == 'mssql' Provides-Extra: mssql_pymssql diff --git a/libs/SQLAlchemy-2.0.37.dist-info/RECORD b/libs/SQLAlchemy-2.0.37.dist-info/RECORD new file mode 100644 index 000000000..d9bb0e04f --- /dev/null +++ b/libs/SQLAlchemy-2.0.37.dist-info/RECORD @@ -0,0 +1,275 @@ +SQLAlchemy-2.0.37.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +SQLAlchemy-2.0.37.dist-info/LICENSE,sha256=mCFyC1jUpWW2EyEAeorUOraZGjlZ5mzV203Z6uacffw,1100 +SQLAlchemy-2.0.37.dist-info/METADATA,sha256=UywKCGKcABKNtpI-G6qnmmxpFaI6iJcHIDeLUQ2RvWQ,9692 +SQLAlchemy-2.0.37.dist-info/RECORD,, +SQLAlchemy-2.0.37.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +SQLAlchemy-2.0.37.dist-info/WHEEL,sha256=j8_MCNBI7KgztMI2VCVmNiYcEly_P_7tu-qcbaOXbrw,108 +SQLAlchemy-2.0.37.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11 +sqlalchemy/__init__.py,sha256=m8AoRzqL1l_3uFAeJ_vwtlAfXkboxLKJ3oL1RqFnXbM,13033 +sqlalchemy/connectors/__init__.py,sha256=YeSHsOB0YhdM6jZUvHFQFwKqNXO02MlklmGW0yCywjI,476 +sqlalchemy/connectors/aioodbc.py,sha256=KT9xi2xQ4AJgDiGPTV5h_5qi9dummmenKAvWelwza3w,5288 +sqlalchemy/connectors/asyncio.py,sha256=00claZADdFUh2iQmlpqoLhLTBxK0i79Mwd9WZqUtleM,6138 +sqlalchemy/connectors/pyodbc.py,sha256=GsW9bD0H30OMTbGDx9SdaTT_ujgpxP7TM4rfhIzD4mo,8501 +sqlalchemy/cyextension/__init__.py,sha256=4npVIjitKfUs0NQ6f3UdQBDq4ipJ0_ZNB2mpKqtc5ik,244 +sqlalchemy/cyextension/collections.cpython-38-darwin.so,sha256=sEF81qKQrUMYUNYDc5rR0o9KN5ntUi5sU3VFXT_Gbs4,233760 +sqlalchemy/cyextension/collections.pyx,sha256=L7DZ3DGKpgw2MT2ZZRRxCnrcyE5pU1NAFowWgAzQPEc,12571 +sqlalchemy/cyextension/immutabledict.cpython-38-darwin.so,sha256=zPUP2rtm01kkegS3n-rYzu7VgmZNo1hQS65vgIUme4U,94672 +sqlalchemy/cyextension/immutabledict.pxd,sha256=3x3-rXG5eRQ7bBnktZ-OJ9-6ft8zToPmTDOd92iXpB0,291 +sqlalchemy/cyextension/immutabledict.pyx,sha256=KfDTYbTfebstE8xuqAtuXsHNAK0_b5q_ymUiinUe_xs,3535 +sqlalchemy/cyextension/processors.cpython-38-darwin.so,sha256=ZXviRx-dUBLWF5Z2xb2ImYGZR2s1VEEX0rvOvBihfYk,75864 +sqlalchemy/cyextension/processors.pyx,sha256=R1rHsGLEaGeBq5VeCydjClzYlivERIJ9B-XLOJlf2MQ,1792 +sqlalchemy/cyextension/resultproxy.cpython-38-darwin.so,sha256=uA4vRLlgWg8sEjeTXmJ5v4DAxpCubWTNMJGDRgtlgzY,78016 +sqlalchemy/cyextension/resultproxy.pyx,sha256=eWLdyBXiBy_CLQrF5ScfWJm7X0NeelscSXedtj1zv9Q,2725 +sqlalchemy/cyextension/util.cpython-38-darwin.so,sha256=BA75sGnaj5sISpo7_70Id7LycML4iHxagdVolVa8Mf4,93008 +sqlalchemy/cyextension/util.pyx,sha256=B85orxa9LddLuQEaDoVSq1XmAXIbLKxrxpvuB8ogV_o,2530 +sqlalchemy/dialects/__init__.py,sha256=4jxiSgI_fVCNXcz42gQYKEp0k07RAHyQN4ZpjaNsFUI,1770 +sqlalchemy/dialects/_typing.py,sha256=8YwrkOa8IvmBojwwegbL5mL_0UAuzdqYiKHKANpvHMw,971 +sqlalchemy/dialects/mssql/__init__.py,sha256=6t_aNpgbMLdPE9gpHYTf9o6QfVavncztRLbr21l2NaY,1880 +sqlalchemy/dialects/mssql/aioodbc.py,sha256=4CmhwIkZrabpG-r7_ogRVajD-nhRZSFJ0Swz2d0jIHM,2021 +sqlalchemy/dialects/mssql/base.py,sha256=2UCotpN3WBPgMddhXVP6Epc-srvNrYHCnK4kcEbjW6w,132713 +sqlalchemy/dialects/mssql/information_schema.py,sha256=v5MZz1FN72THEwF_u3Eh_2vnWdFE13RYydOioMMcuvU,8084 +sqlalchemy/dialects/mssql/json.py,sha256=F53pibuOVRzgDtjoclOI7LnkKXNVsaVfJyBH1XAhyDo,4756 +sqlalchemy/dialects/mssql/provision.py,sha256=P1tqxZ4f6Oeqn2gNi7dXl82LRLCg1-OB4eWiZc6CHek,5593 +sqlalchemy/dialects/mssql/pymssql.py,sha256=C7yAs3Pw81W1KTVNc6_0sHQuYlJ5iH82vKByY4TkB1g,4097 +sqlalchemy/dialects/mssql/pyodbc.py,sha256=CnO7KDWxbxb7AoZhp_PMDBvVSMuzwq1h4Cav2IWFWDo,27173 +sqlalchemy/dialects/mysql/__init__.py,sha256=ropOMUWrAcL-Q7h-9jQ_tb3ISAFIsNRQ8YVXvn0URl0,2206 +sqlalchemy/dialects/mysql/aiomysql.py,sha256=yrujoFtAG0QvtVlgbGBUMg3kXeXlIH62tvyYTCMUfnE,10013 +sqlalchemy/dialects/mysql/asyncmy.py,sha256=rmVSf86VYxgAUROIKfVtvS-grG9aPBiLY_Gu0KJMjuo,10081 +sqlalchemy/dialects/mysql/base.py,sha256=LkGJ6G1U2xygOawOtQYBfTipGh8MuiE1kNxaD7S9UIY,123432 +sqlalchemy/dialects/mysql/cymysql.py,sha256=KwxSsF4a6uUd6yblhSns8uj4hgmhv4hFInTZNdmRixA,2300 +sqlalchemy/dialects/mysql/dml.py,sha256=VjnTobe_SBNF2RN6tvqa5LOn-9x4teVUyzUedZkOmdc,7768 +sqlalchemy/dialects/mysql/enumerated.py,sha256=qI5gnBYhxk9dhPeUfGiijp0qT2Puazdp27-ba_38uWQ,8447 +sqlalchemy/dialects/mysql/expression.py,sha256=3PEKPwYIZ8mVXkjUgHaj_efPBYuBNWZSnfUcJuoZddA,4121 +sqlalchemy/dialects/mysql/json.py,sha256=W31DojiRypifXKVh3PJSWP7IHqFoeKwzLl-0CJH6QRI,2269 +sqlalchemy/dialects/mysql/mariadb.py,sha256=g4v4WQuXHn556Nn6k-RgvPrmfCql1R46fIEk6UEx0U8,1450 +sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=t4m6kfYBoURjNXRxlEsRajjvArNDc4lmaFGxHQh7VTo,8623 +sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=gdNOGdRqvnCbLZpKjpubu_0tGRQ5Tn_2TZvbp3v9rX0,5729 +sqlalchemy/dialects/mysql/mysqldb.py,sha256=5ME7B0WI9G8tw5482YBejDg38uVMXR2oUasNDOCsAqQ,9526 +sqlalchemy/dialects/mysql/provision.py,sha256=5LCeInPvyEbGuzxSs9rnnLYkMsFpW3IJ8lC-sjTfKnk,3575 +sqlalchemy/dialects/mysql/pymysql.py,sha256=osp0em1s3Cip5Vpcj-PeaH7btHEInorO-qs351muw3Q,4082 +sqlalchemy/dialects/mysql/pyodbc.py,sha256=ZiFNJQq2qiOTzTZLmNJQ938EnS1ItVsNDa3fvNEDqnI,4298 +sqlalchemy/dialects/mysql/reflection.py,sha256=eGV9taua0nZS_HsHyAy6zjcHEHFPXmFdux-bUmtOeWs,22834 +sqlalchemy/dialects/mysql/reserved_words.py,sha256=C9npWSuhsxoVCqETxCQ1zE_UEgy4gfiHw9zI5dPkjWI,9258 +sqlalchemy/dialects/mysql/types.py,sha256=w68OASMw04xkyAc0_GtXkuEhhVqlR6LTwaOch4KaAFQ,24343 +sqlalchemy/dialects/oracle/__init__.py,sha256=rp9qPRNQAk1Yq_Zhe7SsUH8EvFgNOAh8XOF17Lkxpyo,1493 +sqlalchemy/dialects/oracle/base.py,sha256=_JF4OwXmXjAsXj8wXq2m8M2vtMjoxdlOwg1hfcgn3bc,123096 +sqlalchemy/dialects/oracle/cx_oracle.py,sha256=ohENTgLxGUfobRH3K8KdeZgBRPG1rX3vY-ph9blj-2g,56612 +sqlalchemy/dialects/oracle/dictionary.py,sha256=J7tGVE0KyUPZKpPLOary3HdDq1DWd29arF5udLgv8_o,19519 +sqlalchemy/dialects/oracle/oracledb.py,sha256=veqto1AUIbSxRmpUQin0ysMV8Y6sWAkzXt7W8IIl118,33771 +sqlalchemy/dialects/oracle/provision.py,sha256=ga1gNQZlXZKk7DYuYegllUejJxZXRKDGa7dbi_S_poc,8313 +sqlalchemy/dialects/oracle/types.py,sha256=axN6Yidx9tGRIUAbDpBrhMWXE-C8jSllFpTghpGOOzU,9058 +sqlalchemy/dialects/postgresql/__init__.py,sha256=kD8W-SV5e2CesvWg2MQAtncXuZFwGPfR_UODvmRXE08,3892 +sqlalchemy/dialects/postgresql/_psycopg_common.py,sha256=szME-lCjVwqnW9-USA6e8ke8N_bN3IbqnIm_oZruvqc,5696 +sqlalchemy/dialects/postgresql/array.py,sha256=28kndSQwgvNWlO4z6MUh5WYAtNSgkgBa6qSEQCIflks,13856 +sqlalchemy/dialects/postgresql/asyncpg.py,sha256=ysIDXcGT3OG2lu0YdiIn-_pzfL0uDe-tmHs70fOWVVE,41283 +sqlalchemy/dialects/postgresql/base.py,sha256=otAswEHqeRhbN9_AGMxnwDo6r872ECkiJ5FMetXfS0k,179452 +sqlalchemy/dialects/postgresql/dml.py,sha256=2SmyMeYveAgm7OnT_CJvwad2nh8BP37yT6gFs8dBYN8,12126 +sqlalchemy/dialects/postgresql/ext.py,sha256=MtN4IU5sRYvoY-E8PTltJ1CuIGb-aCwY2pHMPJcTboA,16318 +sqlalchemy/dialects/postgresql/hstore.py,sha256=wR4gmvfQWPssHwYTXEsPJTb4LkBS6x4e4XXE6smtDH4,11934 +sqlalchemy/dialects/postgresql/json.py,sha256=9sHFGTRFyNbLsANrVYookw9NOJwIPTsEBRNIOUOzOGw,11612 +sqlalchemy/dialects/postgresql/named_types.py,sha256=TEWaBCjuHM2WJoQNrQErQ6f_bUkWypGJfW71wzVJXWc,17572 +sqlalchemy/dialects/postgresql/operators.py,sha256=ay3ckNsWtqDjxDseTdKMGGqYVzST6lmfhbbYHG_bxCw,2808 +sqlalchemy/dialects/postgresql/pg8000.py,sha256=RAykzZuO3Anr6AsyK2JYr7CPb2pru6WtkrX2phCyCGU,18638 +sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=lgJMn7aDuJI2XeHddLkge5NFy6oB2-aDSn8A47QpwAU,9254 +sqlalchemy/dialects/postgresql/provision.py,sha256=7pg9-nOnaK5XBzqByXNPuvi3rxtnRa3dJxdSPVq4eeA,5770 +sqlalchemy/dialects/postgresql/psycopg.py,sha256=k7zXsJj35aOXCrhsbMxwTQX5JWegrqirFJ1Hgbq-GjQ,23326 +sqlalchemy/dialects/postgresql/psycopg2.py,sha256=1KXw9RzsQEAXJazCBywdP5CwLu-HsCSDAD_Khc_rPTM,32032 +sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=nKilJfvO9mJwk5NRw5iZDekKY5vi379tvdUJ2vn5eyQ,1756 +sqlalchemy/dialects/postgresql/ranges.py,sha256=fnaj4YgCQGO-G_S4k5ea8bYMH7SzggKJdUX5qfaNp4Y,32978 +sqlalchemy/dialects/postgresql/types.py,sha256=sjb-m-h49lbLBFh0P30G8BWgf_aKNiNyVwWEktugwRw,7286 +sqlalchemy/dialects/sqlite/__init__.py,sha256=6Xcz3nPsl8lqCcZ4-VzPRmkMrkKgAp2buKsClZelU7c,1182 +sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=FWS-Nn2jnpITQKGd4xOZCYEW-l1C_erQ3IdDJC855t8,12348 +sqlalchemy/dialects/sqlite/base.py,sha256=PvwPzukomHAkufUzSqgfJcbKC2ZJAkJbVnW2BQB2T58,98271 +sqlalchemy/dialects/sqlite/dml.py,sha256=4N8qh06RuMphLoQgWw7wv5nXIrka57jIFvK2x9xTZqg,9138 +sqlalchemy/dialects/sqlite/json.py,sha256=A62xPyLRZxl2hvgTMM92jd_7jlw9UE_4Y6Udqt-8g04,2777 +sqlalchemy/dialects/sqlite/provision.py,sha256=iLJyeQSy8pfr9lwEu4_d4O_CI4OavAtkNeRi3qqys1U,5632 +sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=di8rYryfL0KAn3pRGepmunHyIRGy-4Hhr-2q_ehPzss,5371 +sqlalchemy/dialects/sqlite/pysqlite.py,sha256=rg7F1S2UOhUu6Y1xNVaqF8VbA-FsRY_Y_XpGTpkKpGs,28087 +sqlalchemy/dialects/type_migration_guidelines.txt,sha256=-uHNdmYFGB7bzUNT6i8M5nb4j6j9YUKAtW4lcBZqsMg,8239 +sqlalchemy/engine/__init__.py,sha256=EF4haWCPu95WtWx1GzcHRJ_bBmtJMznno3I2TQ-ZIHE,2818 +sqlalchemy/engine/_py_processors.py,sha256=7QxgkVOd5h1Qd22qFh-pPZdM7RBRzNjj8lWAMWrilcI,3744 +sqlalchemy/engine/_py_row.py,sha256=yNdrZe36yw6mO7x0OEbG0dGojH7CQkNReIwn9LMUPUs,3787 +sqlalchemy/engine/_py_util.py,sha256=LdpbNRQIrJo3EkmiwNkM5bxGUf4uWuL5uS_u-zHadWc,2484 +sqlalchemy/engine/base.py,sha256=9kCWrDp3ECOlQ7BHK_efYAILo3-emcPSk4F8AFRgN7E,122901 +sqlalchemy/engine/characteristics.py,sha256=PepmGApo1sL01dS1qtSbmHplu9ZCdtuSegiGI7L7NZY,4765 +sqlalchemy/engine/create.py,sha256=4gFkqV7fgJbI1906DC4zDgFFX1-xJQ96GIHIrQuc-w4,33217 +sqlalchemy/engine/cursor.py,sha256=6KIZqlwWMUMv02w_el4uNYFMYcfc7eWbkAxW27UyDLE,76305 +sqlalchemy/engine/default.py,sha256=SHM6boxcDNk7MW_Eyd0zCb557Eqf8KTdX1iTUbS0DLw,84705 +sqlalchemy/engine/events.py,sha256=4_e6Ip32ar2Eb27R4ipamiKC-7Tpg4lVz3txabhT5Rc,37400 +sqlalchemy/engine/interfaces.py,sha256=fGmcrBt8yT78ty0R3e3XUvsPh7XYDU_b1JW3QhK_MwY,113029 +sqlalchemy/engine/mock.py,sha256=_aXG1xzj_TO5UWdz8IthPj1ZJ8IlhsKw6D9mmFN_frQ,4181 +sqlalchemy/engine/processors.py,sha256=XK32bULBkuVVRa703u4-SrTCDi_a18Dxq1M09QFBEPw,2379 +sqlalchemy/engine/reflection.py,sha256=_v9zCy3h28hN4KKIUTc5_7KJv7argSgi8A011b_iCdc,75383 +sqlalchemy/engine/result.py,sha256=rgny4qFLmpj80GSdFK35Dpgc3Qk2tc3eJPpahGWVR-M,77622 +sqlalchemy/engine/row.py,sha256=BPtAwsceiRxB9ANpDNM24uQ1M_Zs0xFkSXoKR_I8xyY,12031 +sqlalchemy/engine/strategies.py,sha256=-0rieXY-iXgV83OrJZr-wozFFQn3amKKHchQ6kL-r7A,442 +sqlalchemy/engine/url.py,sha256=gaEeSEJCD0nVEb8J02rIMASrd5L2wYdq5ZXJaj7szVI,31069 +sqlalchemy/engine/util.py,sha256=4OmXwFlmnq6_vBlfUBHnz5LrI_8bT3TwgynX4wcJfnw,5682 +sqlalchemy/event/__init__.py,sha256=ZjVxFGbt9neH5AC4GFiUN5IG2O4j6Z9v2LdmyagJi9w,997 +sqlalchemy/event/api.py,sha256=NetgcQfbURaZzoxus7_801YDG_LJ7PYqaC3T1lws114,8111 +sqlalchemy/event/attr.py,sha256=YhPXVBPj63Cfyn0nS6h8Ljq0SEbD3mtAZn9HYlzGbtw,20751 +sqlalchemy/event/base.py,sha256=OevVb82IrUoVgFRrjH4b5GquS5pjFHOgzWAxPwwTKMY,15127 +sqlalchemy/event/legacy.py,sha256=lGafKAOF6PY8Bz0AqhN9Q6n-lpXqFLwdv-0T6-UBpow,8227 +sqlalchemy/event/registry.py,sha256=MNEMyR8HZhzQFgxk4Jk_Em6nXTihmGXiSIwPdUnalPM,11144 +sqlalchemy/events.py,sha256=VBRvtckn9JS3tfUfi6UstqUrvQ15J2xamcDByFysIrI,525 +sqlalchemy/exc.py,sha256=AjFBCrOl_V4vQdGegn72Y951RSRMPL6T5qjxnFTGFbM,23978 +sqlalchemy/ext/__init__.py,sha256=BkTNuOg454MpCY9QA3FLK8td7KQhD1W74fOEXxnWibE,322 +sqlalchemy/ext/associationproxy.py,sha256=VhOFB1vB8hmDYQP90_VdpPI9IFzP3NENkG_eDKziVoI,66062 +sqlalchemy/ext/asyncio/__init__.py,sha256=kTIfpwsHWhqZ-VMOBZFBq66kt1XeF0hNuwOToEDe4_Y,1317 +sqlalchemy/ext/asyncio/base.py,sha256=2YQ-nKaHbAm--7q6vbxbznzdwT8oPwetwAarKyu2O8E,8930 +sqlalchemy/ext/asyncio/engine.py,sha256=fe_RZrO-5DiiEgMZ3g-Lti-fdaR7z_Q8gDfPUf-30EY,48198 +sqlalchemy/ext/asyncio/exc.py,sha256=npijuILDXH2p4Q5RzhHzutKwZ5CjtqTcP-U0h9TZUmk,639 +sqlalchemy/ext/asyncio/result.py,sha256=zhhXe13vMT7OfdfGXapgtn4crtiqqctRLb3ka4mmGXY,30477 +sqlalchemy/ext/asyncio/scoping.py,sha256=4f7MX3zUd-4rA8A5wd7j0_GlqCSUxdOPfYd7BBIxkJI,52587 +sqlalchemy/ext/asyncio/session.py,sha256=2wxu06UtJGyf-be2edMFkcK4eLMh8xuGmsAlGRj0YPM,63166 +sqlalchemy/ext/automap.py,sha256=n88mktqvExwjqfsDu3yLIA4wbOIWUpQ1S35Uw3X6ffQ,61675 +sqlalchemy/ext/baked.py,sha256=w3SeRoqnPkIhPL2nRAxfVhyir2ypsiW4kmtmUGKs8qo,17753 +sqlalchemy/ext/compiler.py,sha256=f7o4qhUUldpsx4F1sQoUvdVaT2BhiemqNBCF4r_uQUo,20889 +sqlalchemy/ext/declarative/__init__.py,sha256=SuVflXOGDxx2sB2QSTqNEvqS0fyhOkh3-sy2lRsSOLA,1818 +sqlalchemy/ext/declarative/extensions.py,sha256=yHUPcztU-5E1JrNyELDFWKchAnaYK6Y9-dLcqyc1nUI,19531 +sqlalchemy/ext/horizontal_shard.py,sha256=vouIehpQAuwT0HXyWyynTL3m_gcBuLcB-X8lDB0uQ8U,16691 +sqlalchemy/ext/hybrid.py,sha256=DkvNGtiQYzlEBvs1rYEDXhM8vJEXXh_6DMigsHH9w4k,52531 +sqlalchemy/ext/indexable.py,sha256=_dTOgCS96jURcQd9L-hnUMIJDe9KUMyd9gfH57vs078,11065 +sqlalchemy/ext/instrumentation.py,sha256=iCp89rvfK7buW0jJyzKTBDKyMsd06oTRJDItOk4OVSw,15707 +sqlalchemy/ext/mutable.py,sha256=7Zyh2kQq2gm3J_JwsddinIXk7qUuKWbPzRZOmTultEk,37560 +sqlalchemy/ext/mypy/__init__.py,sha256=yVNtoBDNeTl1sqRoA_fSY3o1g6M8NxqUVvAHPRLmFTw,241 +sqlalchemy/ext/mypy/apply.py,sha256=v_Svc1WiBz9yBXqBVBKoCuPGN286TfVmuuCVZPlbyzo,10591 +sqlalchemy/ext/mypy/decl_class.py,sha256=Nuca4ofHkASAkdqEQlULYB7iLm_KID7Mp384seDhVGg,17384 +sqlalchemy/ext/mypy/infer.py,sha256=29vgn22Hi8E8oIZL6UJCBl6oipiPSAQjxccCEkVb410,19367 +sqlalchemy/ext/mypy/names.py,sha256=hn889DD1nlF0f3drsKi5KSGTG-JefJ2UJrrIQ4L8QWA,10479 +sqlalchemy/ext/mypy/plugin.py,sha256=9YHBp0Bwo92DbDZIUWwIr0hwXPcE4XvHs0-xshvSwUw,9750 +sqlalchemy/ext/mypy/util.py,sha256=CuW2fJ-g9YtkjcypzmrPRaFc-rAvQTzW5A2-w5VTANg,9960 +sqlalchemy/ext/orderinglist.py,sha256=MROa19cm4RZkWXuUuqc1029r7g4HrAJRc17fTHeThvI,14431 +sqlalchemy/ext/serializer.py,sha256=_z95wZMTn3G3sCGN52gwzD4CuKjrhGMr5Eu8g9MxQNg,6169 +sqlalchemy/future/__init__.py,sha256=R1h8VBwMiIUdP3QHv_tFNby557425FJOAGhUoXGvCmc,512 +sqlalchemy/future/engine.py,sha256=2nJFBQAXAE8pqe1cs-D3JjC6wUX2ya2h2e_tniuaBq0,495 +sqlalchemy/inspection.py,sha256=qKEKG37N1OjxpQeVzob1q9VwWjBbjI1x0movJG7fYJ4,5063 +sqlalchemy/log.py,sha256=e_ztNUfZM08FmTWeXN9-doD5YKW44nXxgKCUxxNs6Ow,8607 +sqlalchemy/orm/__init__.py,sha256=BICvTXpLaTNe2AiUaxnZHWzjL5miT9fd_IU-ip3OFNk,8463 +sqlalchemy/orm/_orm_constructors.py,sha256=NiAagQ1060QYS9n5y_gzPvHQQz44EN1dVtamGVtde6E,103626 +sqlalchemy/orm/_typing.py,sha256=vaYRl4_K3n-sjc9u0Rb4eWWpBOoOi92--OHqaGogRvA,4973 +sqlalchemy/orm/attributes.py,sha256=e_U0A4TGWAzL3yXVvk9YVhIRjKM4RTsIE2PNRLn8LbU,92534 +sqlalchemy/orm/base.py,sha256=oCgscNoRrqHwYvc1Iz8ZFhoVXhalu45g9z0m_7_ldaE,27502 +sqlalchemy/orm/bulk_persistence.py,sha256=Ciea9MhJ6ZbAi-uGy5-Kj6lodO9bfRqPq8GSf2qFshE,72663 +sqlalchemy/orm/clsregistry.py,sha256=syn6bB-Ylx-juh5GDCmNrPZ58C-z6sdwRkbZFeKysQU,17974 +sqlalchemy/orm/collections.py,sha256=XxZC8d9UX9E2R-WlNH198OPWRPmpLuYt0Y26LrdbuHc,52252 +sqlalchemy/orm/context.py,sha256=eyh7xTo3SyxIHl8_NBUqJ_GpJ0kZtmnTt32Z67cfqgs,112973 +sqlalchemy/orm/decl_api.py,sha256=SJ25fQjjKyWZDQbq5S69eiybpOzns0LkRziP10iW5-E,64969 +sqlalchemy/orm/decl_base.py,sha256=ZlZmyNVOsCPA_pThMeXuWmAhlJwlvTxdGXhnARsKxhk,83288 +sqlalchemy/orm/dependency.py,sha256=4NMhoogevOiX1Wm5B1_yY2u9MHYlIjJNNoEVRE0yLwA,47631 +sqlalchemy/orm/descriptor_props.py,sha256=LgfdiO_U5uznq5ImenfbWGV5T47bH4b_ztbzB4B7FsU,37231 +sqlalchemy/orm/dynamic.py,sha256=Z4GpcVL8rM8gi0bytQOZXw-_kKi-sExbRWGjU30dK3g,9816 +sqlalchemy/orm/evaluator.py,sha256=PKrUW1zEOvmv1XEgc_hBdYqNcyk4zjWr_rJhCEQBFIc,12353 +sqlalchemy/orm/events.py,sha256=OZtTCpI-DVaE6CY16e42GUVpci1U1GjdNO76xU-Tj5Y,127781 +sqlalchemy/orm/exc.py,sha256=zJgAIofYsWKjktqO5MFxze95GlJASziEOJJx-P5_wOU,7413 +sqlalchemy/orm/identity.py,sha256=5NFtF9ZPZWAOmtOqCPyVX2-_pQq9A5XeN2ns3Wirpv8,9249 +sqlalchemy/orm/instrumentation.py,sha256=WhElvvOWOn3Fuc-Asc5HmcKDX6EzFtBleLJKPZEc5A0,24321 +sqlalchemy/orm/interfaces.py,sha256=W6ADDLOixmm4tnSnUP_I9HFLj9MCO2bODk_WTNjkZGA,48797 +sqlalchemy/orm/loading.py,sha256=6Rd1hWtBPm7SfCUpjPQrcoUg_DSCcfhO8Qhz7SScjRE,58277 +sqlalchemy/orm/mapped_collection.py,sha256=FAqaTlOUCYqdws2KR_fW0T8mMWIrLuAxJGU5f4W1aGs,19682 +sqlalchemy/orm/mapper.py,sha256=-gkJKHeAJmIFT153WFIIySduyyLGbT5plCgSfnsa0I0,171668 +sqlalchemy/orm/path_registry.py,sha256=-aAEhGkDf_2ZUXmHQICQNOa4Z5xhTlhlYLag7eoVpxE,25920 +sqlalchemy/orm/persistence.py,sha256=Uz45Cwxi7FnNiSk2crbh3TzV7b9kb85vmcvOwy5NVmw,61701 +sqlalchemy/orm/properties.py,sha256=vbx_YiSjj3tI94-G-_ghbyWYcIIJQQeGG1P-0RC8Jv4,29065 +sqlalchemy/orm/query.py,sha256=GI_go9ErXYK1BteCmIh5E9iv-jfMJkRBVIlw0XmnYyk,118540 +sqlalchemy/orm/relationships.py,sha256=C40n_-oliMgJJ0FHfwsi1-dm963CrYeKJ5HEYjLdg_o,128899 +sqlalchemy/orm/scoping.py,sha256=-SNRAewfMJ4x4Um8X-yv0k1Thz8E1_kCBmbmG1l1auo,78617 +sqlalchemy/orm/session.py,sha256=1fzksIcb9DtKcwqkS1KkZngkrEYGUHmoNW_o6l8IXQ4,196114 +sqlalchemy/orm/state.py,sha256=1vtlz674sGFmwZ8Ih9TdrslA-0nhU2G52WgV-FoG2j0,37670 +sqlalchemy/orm/state_changes.py,sha256=XJLYYhTZu7nA6uD7xupbLZ9XSzqLYwrDJgW0ZAWvVGE,6815 +sqlalchemy/orm/strategies.py,sha256=qziXv4z2bJeF2qFSj6wogc9BLlxuOnT8nOcEvocVf88,119866 +sqlalchemy/orm/strategy_options.py,sha256=wMYd4E_nRb5ei8Fr3jWeSewNY2k1-AfqtYRGOLiHOFA,85043 +sqlalchemy/orm/sync.py,sha256=RdoxnhvgNjn3Lhtoq4QjvXpj8qfOz__wyibh0FMON0A,5779 +sqlalchemy/orm/unitofwork.py,sha256=hkSIcVonoSt0WWHk019bCDEw0g2o2fg4m4yqoTGyAoo,27033 +sqlalchemy/orm/util.py,sha256=rtClCjtg0eSSC8k-L30W0v6BauJaJuh9Nf-MSqofWuQ,80831 +sqlalchemy/orm/writeonly.py,sha256=R-MVxYDw0ZQ795H21yBtgGSZXWUzSovcb_SO1mv5hoI,22305 +sqlalchemy/pool/__init__.py,sha256=niqzCv2uOZT07DOiV2inlmjrW3lZyqDXGCjnOl1IqJ4,1804 +sqlalchemy/pool/base.py,sha256=mT-PHTlVUGcYRVsMB9LQwNgndjhOTOorWX5-hNRi2FM,52236 +sqlalchemy/pool/events.py,sha256=wdFfvat0fSrVF84Zzsz5E3HnVY0bhL7MPsGME-b2qa8,13149 +sqlalchemy/pool/impl.py,sha256=MLSh83SGNNtZZgZvA-5tvTIT8Dz7U95Bgt8HO_oR1Ps,18944 +sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +sqlalchemy/schema.py,sha256=yt4dcuMAKMleUHVidsAVAsm-JPpASFZXP2xM3pmzYHY,3194 +sqlalchemy/sql/__init__.py,sha256=Y-bZ25Zf-bxqsF2zUkpRGTjFuozNNVQHxUJV3Qmaq2M,5820 +sqlalchemy/sql/_dml_constructors.py,sha256=JF_XucNTfAk6Vz9fYiPWOgpIGtUkDj6VPILysLcrVhk,3795 +sqlalchemy/sql/_elements_constructors.py,sha256=eoQhkoRH0qox171ZSODyxxhj_HZEhO64rSowaN-I-v4,62630 +sqlalchemy/sql/_orm_types.py,sha256=0zeMit-V4rYZe-bB9X3xugnjFnPXH0gmeqkJou9Fows,625 +sqlalchemy/sql/_py_util.py,sha256=4KFXNvBq3hhfrr-A1J1uBml3b3CGguIf1dat9gsEHqE,2173 +sqlalchemy/sql/_selectable_constructors.py,sha256=fwVBsDHHWhngodBG205nvhM-Tb3uR1srbCnN3mPgrjA,18785 +sqlalchemy/sql/_typing.py,sha256=zYKlxXnUW_KIkGuBmBnzj-vFG1QON8_F9JN1dl9KSiM,12771 +sqlalchemy/sql/annotation.py,sha256=qHUEwbdmMD3Ybr0ez-Dyiw9l9UB_RUMHWAUIeO_r3gE,18245 +sqlalchemy/sql/base.py,sha256=kfmVNRimU5z6X6OKqMLMs1bDCFQ47BeyF_MZc23nkjY,73848 +sqlalchemy/sql/cache_key.py,sha256=ET2OIQ6jZK2FSxsdnCvhLCrNJ2Fp3zipQ-gvINgAjhQ,33668 +sqlalchemy/sql/coercions.py,sha256=lRciS5agnpVvx_vHYxJV-aN6QOVb_O4yCnMZ0s07GUE,40750 +sqlalchemy/sql/compiler.py,sha256=eT_zrKvApimVfycvcTdubQK8-QAzGHm5xWKdhOgnWUY,274965 +sqlalchemy/sql/crud.py,sha256=vFegNw5557ayS4kv761zh0bx0yikEKh1ovMrhErHelg,56514 +sqlalchemy/sql/ddl.py,sha256=rfb7gDvLmn_ktgH2xiXLRTczqnMOED1eakXuGuRPklg,45641 +sqlalchemy/sql/default_comparator.py,sha256=uXLr8B-X6KbybwTjLjZ2hN-WZAvqoMhZ-DDHJX7rAUw,16707 +sqlalchemy/sql/dml.py,sha256=oTW8PB-55qf6crAkbxh2JD-TvkT3MO1zqkKDrt5-2c8,65611 +sqlalchemy/sql/elements.py,sha256=RYq5N-IEPnhcDKtokeaCDIGZiUex8oDgwRLCDqjkk_g,176482 +sqlalchemy/sql/events.py,sha256=iWjc_nm1vClDBLg4ZhDnY75CkBdnlDPSPe0MGBSmbiM,18312 +sqlalchemy/sql/expression.py,sha256=rw5tAm8vbd5Vm4MofTZ0ZcXsphz4z9xO_exy-gem6TM,7586 +sqlalchemy/sql/functions.py,sha256=tbBxIeAqLV3kc1YDxyt68mxw0fFy6e93ctRUZSuuf3I,63858 +sqlalchemy/sql/lambdas.py,sha256=h9sPCETBgAanLtVHQsRPHeY-hTEjM5nscq3m4bDstwM,49196 +sqlalchemy/sql/naming.py,sha256=BU0ZdSzXXKHTPhoaKMWJ3gPMoeZSJJe9-3YDYflmjJw,6858 +sqlalchemy/sql/operators.py,sha256=h5bgu31gukGdsYsN_0-1C7IGAdSCFpBxuRjOUnu1Two,76792 +sqlalchemy/sql/roles.py,sha256=drAeWbevjgFAKNcMrH_EuJ-9sSvcq4aeXwAqMXXZGYw,7662 +sqlalchemy/sql/schema.py,sha256=WKKwxkC9oNRHN-B4s35NkWcr5dvavccKf-_1t35Do8A,229896 +sqlalchemy/sql/selectable.py,sha256=5Za7eh4USrgVwJgQGVX1bb2w1qXcy-hGzGpWNPbhf68,237610 +sqlalchemy/sql/sqltypes.py,sha256=yXHvZXfZJmaRvMoX4_jXqazAev33pk0Ltwl5c-D5Ha4,128609 +sqlalchemy/sql/traversals.py,sha256=7GALHt5mFceUv2SMUikIdAb9SUcSbACqhwoei5rPkxc,33664 +sqlalchemy/sql/type_api.py,sha256=wdi3nmOBRdhG6L1z21V_PwQGB8CIRouMdNKoIzJA4Zo,84440 +sqlalchemy/sql/util.py,sha256=G-2ZI6rZ7XxVu5YXaVvLrApeAk5VwSG4C--lqtglgGE,48086 +sqlalchemy/sql/visitors.py,sha256=URpw-GxxUkwjEDbD2xXJGyFJavG5lN6ISoY34JlYRS8,36319 +sqlalchemy/testing/__init__.py,sha256=GgUEqxUNCxg-92_GgBDnljUHsdCxaGPMG1TWy5tjwgk,3160 +sqlalchemy/testing/assertions.py,sha256=RFTkxGq-kDvn3JSUuT_6bU1y0vtoI6pE6ryZgV2YEx4,31439 +sqlalchemy/testing/assertsql.py,sha256=cmhtZrgPBjrqIfzFz3VBWxVNvxWoRllvmoWcUCoqsio,16817 +sqlalchemy/testing/asyncio.py,sha256=QsMzDWARFRrpLoWhuYqzYQPTUZ80fymlKrqOoDkmCmQ,3830 +sqlalchemy/testing/config.py,sha256=HySdB5_FgCW1iHAJVxYo-4wq5gUAEi0N8E93IC6M86Q,12058 +sqlalchemy/testing/engines.py,sha256=c1gFXfpo5S1dvNjGIL03mbW2eVYtUD_9M_ZEfQO2ArM,13414 +sqlalchemy/testing/entities.py,sha256=KdgTVPSALhi9KkAXj2giOYl62ld-1yZziIDBSV8E3vw,3354 +sqlalchemy/testing/exclusions.py,sha256=jzVrBXqyQlyMgvfChMjJOd0ZtReKgkJ4Ik-0mkWe6KM,12460 +sqlalchemy/testing/fixtures/__init__.py,sha256=e5YtfSlkKDRuyIZhEKBCycMX5BOO4MZ-0d97l1JDhJE,1198 +sqlalchemy/testing/fixtures/base.py,sha256=y5iEEdUZIft06fvAOXwKU73ciIFTO5AVgDDGzYD9nOY,12256 +sqlalchemy/testing/fixtures/mypy.py,sha256=9fuJ90F9LBki26dVEVOEtRVXG2koaK803k4nukTnA8o,11973 +sqlalchemy/testing/fixtures/orm.py,sha256=3JJoYdI2tj5-LL7AN8bVa79NV3Guo4d9p6IgheHkWGc,6095 +sqlalchemy/testing/fixtures/sql.py,sha256=ht-OD6fMZ0inxucRzRZG4kEMNicqY8oJdlKbZzHhAJc,15900 +sqlalchemy/testing/pickleable.py,sha256=G3L0xL9OtbX7wThfreRjWd0GW7q0kUKcTUuCN5ETGno,2833 +sqlalchemy/testing/plugin/__init__.py,sha256=vRfF7M763cGm9tLQDWK6TyBNHc80J1nX2fmGGxN14wY,247 +sqlalchemy/testing/plugin/bootstrap.py,sha256=VYnVSMb-u30hGY6xGn6iG-LqiF0CubT90AJPFY_6UiY,1685 +sqlalchemy/testing/plugin/plugin_base.py,sha256=TBWdg2XgXB6QgUUFdKLv1O9-SXMitjHLm2rNNIzXZhQ,21578 +sqlalchemy/testing/plugin/pytestplugin.py,sha256=0rRCp7RlnhJBg3gJEq0t0kJ-BCTQ34bqBE_lEQk5U3U,27656 +sqlalchemy/testing/profiling.py,sha256=SWhWiZImJvDsNn0rQyNki70xdNxZL53ZI98ihxiykbQ,10148 +sqlalchemy/testing/provision.py,sha256=6r2FTnm-t7u8MMbWo7eMhAH3qkL0w0WlmE29MUSEIu4,14702 +sqlalchemy/testing/requirements.py,sha256=MVuTKtZjeTZaYlrAU8XFIB1bhJA_AedqL_q7NwVEGiw,52956 +sqlalchemy/testing/schema.py,sha256=IImFumAdpzOyoKAs0WnaGakq8D3sSU4snD9W4LVOV3s,6513 +sqlalchemy/testing/suite/__init__.py,sha256=S8TLwTiif8xX67qlZUo5I9fl9UjZAFGSzvlptp2WoWc,722 +sqlalchemy/testing/suite/test_cte.py,sha256=d3OWDBNhnAwlyAz_QhFk-vKSWaAI3mADVnqdtTWOuwI,6451 +sqlalchemy/testing/suite/test_ddl.py,sha256=MItp-votCzvahlRqHRagte2Omyq9XUOFdFsgzCb6_-g,12031 +sqlalchemy/testing/suite/test_deprecations.py,sha256=7C6IbxRmq7wg_DLq56f1V5RCS9iVrAv3epJZQTB-dOo,5337 +sqlalchemy/testing/suite/test_dialect.py,sha256=eGJFZCwKmLrIl66ZlkLLZf5Fq6bzWI174gQsJt2bY2c,22923 +sqlalchemy/testing/suite/test_insert.py,sha256=pR0VWMQ9JJPbnANE6634PzR0VFmWMF8im6OTahc4vsQ,18824 +sqlalchemy/testing/suite/test_reflection.py,sha256=EJvTjRDimw9k90zlI5VCkmCzf7Tv5VF9y4O3D8SZMFU,109648 +sqlalchemy/testing/suite/test_results.py,sha256=9FFBNLeXcNRIC9FHfEjFKwfV6w2Bb58ulml_M8Zdokg,16914 +sqlalchemy/testing/suite/test_rowcount.py,sha256=UVyHHQsU0TxkzV_dqCOKR1aROvIq7frKYMVjwUqLWfE,7900 +sqlalchemy/testing/suite/test_select.py,sha256=S81w-Dox6W29Tjmi6LIBJ4HuB5E8dDAzmePDm0PKTYo,61732 +sqlalchemy/testing/suite/test_sequence.py,sha256=DMqyJkL1o4GClrNjzoy7GDn_jPNPTZNvk9t5e-MVXeo,9923 +sqlalchemy/testing/suite/test_types.py,sha256=gPA6t-90Icnpj2ZzITwbqka1DB-rNOoh6_xS9dC-4HU,67805 +sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=0zVc2e3zbCQag_xL4b0i7F062HblHwV46JHLMweYtcE,6141 +sqlalchemy/testing/suite/test_update_delete.py,sha256=_OxH0wggHUqPImalGEPI48RiRx6mO985Om1PtRYOCzA,3994 +sqlalchemy/testing/util.py,sha256=KsUInolFBXUPIXVZKAdb_8rQrW8yW8OCtiA3GXuYRvA,14571 +sqlalchemy/testing/warnings.py,sha256=sj4vfTtjodcfoX6FPH_Zykb4fomjmgqIYj81QPpSwH8,1546 +sqlalchemy/types.py,sha256=m3I9h6xoyT7cjeUx5XCzmaE-GHT2sJVwECiuSJl75Ss,3168 +sqlalchemy/util/__init__.py,sha256=tYWkZV6PYVfEW32zt48FCLH12VyV_kaNUa3KBAOYpSM,8312 +sqlalchemy/util/_collections.py,sha256=RbP4UixqNtRBUrl_QqYDiadVmELSVxxXm2drhvQaIKo,20078 +sqlalchemy/util/_concurrency_py3k.py,sha256=UtPDkb67OOVWYvBqYaQgENg0k_jOA2mQOE04XmrbYq0,9170 +sqlalchemy/util/_has_cy.py,sha256=3oh7s5iQtW9qcI8zYunCfGAKG6fzo2DIpzP5p1BnE8Q,1247 +sqlalchemy/util/_py_collections.py,sha256=irOg3nkzxmtdYfIS46un2cp0JqSiACI7WGQBg-BaEXU,16714 +sqlalchemy/util/compat.py,sha256=TdDfvL21VnBEdSUnjcx-F8XhmVFg9Mvyr67a4omWZAM,8760 +sqlalchemy/util/concurrency.py,sha256=eQVS3YDH3GwB3Uw5pbzmqEBSYTK90EbnE5mQ05fHERg,3304 +sqlalchemy/util/deprecations.py,sha256=L7D4GqeIozpjO8iVybf7jL9dDlgfTbAaQH4TQAX74qE,12012 +sqlalchemy/util/langhelpers.py,sha256=G67avnsStFbslILlbCHmsyAMnShS7RYftFr9a8uFDL8,65140 +sqlalchemy/util/preloaded.py,sha256=RMarsuhtMW8ZuvqLSuR0kwbp45VRlzKpJMLUe7p__qY,5904 +sqlalchemy/util/queue.py,sha256=w1ufhuiC7lzyiZDhciRtRz1uyxU72jRI7SWhhL-p600,10185 +sqlalchemy/util/tool_support.py,sha256=e7lWu6o1QlKq4e6c9PyDsuyFyiWe79vO72UQ_YX2pUA,6135 +sqlalchemy/util/topological.py,sha256=HcJgdCeU0XFIskgIBnTaHXfRXaulaEJRYRwKv4yPNek,3458 +sqlalchemy/util/typing.py,sha256=C4jF7QTNo0w0bjvcIqSSTOvoy8FttuZtyTzjiyoIzQQ,20920 diff --git a/libs/PyYAML-6.0.1.dist-info/REQUESTED b/libs/SQLAlchemy-2.0.37.dist-info/REQUESTED similarity index 100% rename from libs/PyYAML-6.0.1.dist-info/REQUESTED rename to libs/SQLAlchemy-2.0.37.dist-info/REQUESTED diff --git a/libs/SQLAlchemy-2.0.27.dist-info/WHEEL b/libs/SQLAlchemy-2.0.37.dist-info/WHEEL similarity index 70% rename from libs/SQLAlchemy-2.0.27.dist-info/WHEEL rename to libs/SQLAlchemy-2.0.37.dist-info/WHEEL index 844cf17ca..42e750dfb 100644 --- a/libs/SQLAlchemy-2.0.27.dist-info/WHEEL +++ b/libs/SQLAlchemy-2.0.37.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: setuptools (75.3.0) Root-Is-Purelib: false Tag: cp38-cp38-macosx_12_0_x86_64 diff --git a/libs/SQLAlchemy-2.0.27.dist-info/top_level.txt b/libs/SQLAlchemy-2.0.37.dist-info/top_level.txt similarity index 100% rename from libs/SQLAlchemy-2.0.27.dist-info/top_level.txt rename to libs/SQLAlchemy-2.0.37.dist-info/top_level.txt diff --git a/libs/alembic-1.13.1.dist-info/WHEEL b/libs/alembic-1.13.1.dist-info/WHEEL deleted file mode 100644 index 98c0d20b7..000000000 --- a/libs/alembic-1.13.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/libs/SQLAlchemy-2.0.27.dist-info/INSTALLER b/libs/alembic-1.14.0.dist-info/INSTALLER similarity index 100% rename from libs/SQLAlchemy-2.0.27.dist-info/INSTALLER rename to libs/alembic-1.14.0.dist-info/INSTALLER diff --git a/libs/alembic-1.13.1.dist-info/LICENSE b/libs/alembic-1.14.0.dist-info/LICENSE similarity index 95% rename from libs/alembic-1.13.1.dist-info/LICENSE rename to libs/alembic-1.14.0.dist-info/LICENSE index 74b9ce342..be8de0089 100644 --- a/libs/alembic-1.13.1.dist-info/LICENSE +++ b/libs/alembic-1.14.0.dist-info/LICENSE @@ -1,4 +1,4 @@ -Copyright 2009-2023 Michael Bayer. +Copyright 2009-2024 Michael Bayer. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/libs/alembic-1.13.1.dist-info/METADATA b/libs/alembic-1.14.0.dist-info/METADATA similarity index 99% rename from libs/alembic-1.13.1.dist-info/METADATA rename to libs/alembic-1.14.0.dist-info/METADATA index 7a6884d93..2f6963fc6 100644 --- a/libs/alembic-1.13.1.dist-info/METADATA +++ b/libs/alembic-1.14.0.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: alembic -Version: 1.13.1 +Version: 1.14.0 Summary: A database migration tool for SQLAlchemy. Home-page: https://alembic.sqlalchemy.org Author: Mike Bayer diff --git a/libs/alembic-1.13.1.dist-info/RECORD b/libs/alembic-1.14.0.dist-info/RECORD similarity index 55% rename from libs/alembic-1.13.1.dist-info/RECORD rename to libs/alembic-1.14.0.dist-info/RECORD index f4dee8948..f7cc605d0 100644 --- a/libs/alembic-1.13.1.dist-info/RECORD +++ b/libs/alembic-1.14.0.dist-info/RECORD @@ -1,66 +1,66 @@ ../../bin/alembic,sha256=xqPGhIsDow0IG3BUa3a_VtCtKJgqxLpVJuFe1PQcGoA,236 -alembic-1.13.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -alembic-1.13.1.dist-info/LICENSE,sha256=soUmiob0QW6vTQWyrjiAwVb3xZqPk1pAK8BW6vszrwg,1058 -alembic-1.13.1.dist-info/METADATA,sha256=W1F2NBRkhqW55HiGmEIpdmiRt2skU5wwJd21UHFbSdQ,7390 -alembic-1.13.1.dist-info/RECORD,, -alembic-1.13.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -alembic-1.13.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 -alembic-1.13.1.dist-info/entry_points.txt,sha256=aykM30soxwGN0pB7etLc1q0cHJbL9dy46RnK9VX4LLw,48 -alembic-1.13.1.dist-info/top_level.txt,sha256=FwKWd5VsPFC8iQjpu1u9Cn-JnK3-V1RhUCmWqz1cl-s,8 -alembic/__init__.py,sha256=PMiQT_1tHyC_Od3GDBArBk7r14v8F62_xkzliPq9tLU,63 +alembic-1.14.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +alembic-1.14.0.dist-info/LICENSE,sha256=zhnnuit3ylhLgqZ5KFbhOOswsxHIlrB2wJpAXuRfvuk,1059 +alembic-1.14.0.dist-info/METADATA,sha256=5hNrxl9umF2WKbNL-MxyMUEZem8-OxRa49Qz9w7jqzo,7390 +alembic-1.14.0.dist-info/RECORD,, +alembic-1.14.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +alembic-1.14.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91 +alembic-1.14.0.dist-info/entry_points.txt,sha256=aykM30soxwGN0pB7etLc1q0cHJbL9dy46RnK9VX4LLw,48 +alembic-1.14.0.dist-info/top_level.txt,sha256=FwKWd5VsPFC8iQjpu1u9Cn-JnK3-V1RhUCmWqz1cl-s,8 +alembic/__init__.py,sha256=qw_qYmTjOKiGcs--x0c6kjZo70tQTR5m8_lqF98Qr_0,63 alembic/__main__.py,sha256=373m7-TBh72JqrSMYviGrxCHZo-cnweM8AGF8A22PmY,78 alembic/autogenerate/__init__.py,sha256=ntmUTXhjLm4_zmqIwyVaECdpPDn6_u1yM9vYk6-553E,543 -alembic/autogenerate/api.py,sha256=Oc7MRtDhkSICsQ82fYP9bBMYaAjzzW2X_izM3AQU-OY,22171 -alembic/autogenerate/compare.py,sha256=3QLK2yCDW37bXbAIXcHGz4YOFlOW8bSfLHJ8bmzgG1M,44938 -alembic/autogenerate/render.py,sha256=uSbCpkh72mo00xGZ8CJa3teM_gqulCoNtxH0Ey8Ny1k,34939 +alembic/autogenerate/api.py,sha256=Bh-37G0PSFeT9WSfEQ-3TZoainXGLL2nsl4okv_xYc0,22173 +alembic/autogenerate/compare.py,sha256=cdUBH6qsedaJsnToSOu4MfcJaI4bjUJ4VWqtBlqsSr8,44944 +alembic/autogenerate/render.py,sha256=YB3C90rq7XDhjTia9GAnK6yfnVVzCROziZrbArmG9SE,35481 alembic/autogenerate/rewriter.py,sha256=uZWRkTYJoncoEJ5WY1QBRiozjyChqZDJPy4LtcRibjM,7846 -alembic/command.py,sha256=jWFNS-wPWA-Klfm0GsPfWh_8sPj4n7rKROJ0zrwhoR0,21712 -alembic/config.py,sha256=I12lm4V-AXSt-7nvub-Vtx5Zfa68pYP5xSrFQQd45rQ,22256 +alembic/command.py,sha256=2tkKrIoEgPfXrGgvMRGrUXH4l-7z466DOxd7Q2XOfL8,22169 +alembic/config.py,sha256=BZ7mwFRk2gq8GFNxxy9qvMUFx43YbDbQTC99OnjqiKY,22216 alembic/context.py,sha256=hK1AJOQXJ29Bhn276GYcosxeG7pC5aZRT5E8c4bMJ4Q,195 alembic/context.pyi,sha256=hUHbSnbSeEEMVkk0gDSXOq4_9edSjYzsjmmf-mL9Iao,31737 alembic/ddl/__init__.py,sha256=Df8fy4Vn_abP8B7q3x8gyFwEwnLw6hs2Ljt_bV3EZWE,152 -alembic/ddl/_autogen.py,sha256=0no9ywWP8gjvO57Ozc2naab4qNusVNn2fiJekjc275g,9179 -alembic/ddl/base.py,sha256=Jd7oPoAOGjOMcdMUIzSKnTjd8NKnTd7IjBXXyVpDCkU,9955 -alembic/ddl/impl.py,sha256=vkhkXFpLPJBG9jW2kv_sR5CC5czNd1ERLjLtfLuOFP0,28778 +alembic/ddl/_autogen.py,sha256=Blv2RrHNyF4cE6znCQXNXG5T9aO-YmiwD4Fz-qfoaWA,9275 +alembic/ddl/base.py,sha256=gazpvtk_6XURcsa0libwcaIquL5HwJDP1ZWKJ6P7x0I,9788 +alembic/ddl/impl.py,sha256=7-oxMb7KeycaK96x-kXw4mR6NSE1tmN0UEZIZrPcuhY,30195 alembic/ddl/mssql.py,sha256=ydvgBSaftKYjaBaMyqius66Ta4CICQSj79Og3Ed2atY,14219 -alembic/ddl/mysql.py,sha256=am221U_UK3wX33tNcXNiOObZV-Pa4CXuv7vN-epF9IU,16788 -alembic/ddl/oracle.py,sha256=TmoCq_FlbfyWAAk3e_q6mMQU0YmlfIcgKHpRfNMmgr0,6211 -alembic/ddl/postgresql.py,sha256=dcWLdDSqivzizVCce_H6RnOVAayPXDFfns-NC4-UaA8,29842 +alembic/ddl/mysql.py,sha256=kXOGYmpnL_9WL3ijXNsG4aAwy3m1HWJOoLZSePzmJF0,17316 +alembic/ddl/oracle.py,sha256=669YlkcZihlXFbnXhH2krdrvDry8q5pcUGfoqkg_R6Y,6243 +alembic/ddl/postgresql.py,sha256=GNCnx-N8UsCIstfW49J8ivYcKgRB8KFNPRgNtORC_AM,29883 alembic/ddl/sqlite.py,sha256=wLXhb8bJWRspKQTb-iVfepR4LXYgOuEbUWKX5qwDhIQ,7570 alembic/environment.py,sha256=MM5lPayGT04H3aeng1H7GQ8HEAs3VGX5yy6mDLCPLT4,43 alembic/migration.py,sha256=MV6Fju6rZtn2fTREKzXrCZM6aIBGII4OMZFix0X-GLs,41 alembic/op.py,sha256=flHtcsVqOD-ZgZKK2pv-CJ5Cwh-KJ7puMUNXzishxLw,167 -alembic/op.pyi,sha256=8R6SJr1dQharU0blmMJJj23XFO_hk9ZmAQBJBQOeXRU,49816 +alembic/op.pyi,sha256=QZ1ERetxIrpZNTyg48Btn5OJhhpMId-_MLMP36RauOw,50168 alembic/operations/__init__.py,sha256=e0KQSZAgLpTWvyvreB7DWg7RJV_MWSOPVDgCqsd2FzY,318 -alembic/operations/base.py,sha256=LCx4NH5NA2NLWQFaZTqE_p2KgLtqJ76oVcp1Grj-zFM,74004 +alembic/operations/base.py,sha256=JRaOtPqyqfaPjzGHxuP9VMcO1KsJNmbbLOvwG82qxGA,74474 alembic/operations/batch.py,sha256=YqtD4hJ3_RkFxvI7zbmBwxcLEyLHYyWQpsz4l5L85yI,26943 -alembic/operations/ops.py,sha256=2vtYFhYFDEVq158HwORfGTsobDM7c-t0lewuR7JKw7g,94353 -alembic/operations/schemaobj.py,sha256=vjoD57QvjbzzA-jyPIXulbOmb5_bGPtxoq58KsKI4Y0,9424 -alembic/operations/toimpl.py,sha256=SoNY2_gZX2baXTD-pNjpCWnON8D2QBSYQBIjo13-WKA,7115 +alembic/operations/ops.py,sha256=guIpLQzlqgkdP2LGDW8vWg_DXeAouEldiVZDgRas7YI,94953 +alembic/operations/schemaobj.py,sha256=Wp-bBe4a8lXPTvIHJttBY0ejtpVR5Jvtb2kI-U2PztQ,9468 +alembic/operations/toimpl.py,sha256=Fx-UKcq6S8pVtsEwPFjTKtEcAVKjfptn-BfpE1k3_ck,7517 alembic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 alembic/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -alembic/runtime/environment.py,sha256=9wSJaePNAXBXvirif_85ql7dSq4bXM1E6pSb2k-6uGI,41508 -alembic/runtime/migration.py,sha256=Yfv2fa11wiQ0WgoZaFldlWxCPq4dVDOCEOxST_-1VB0,50066 +alembic/runtime/environment.py,sha256=SkYB_am1h3FSG8IsExAQxGP_7WwzOVigqjlO747Aokc,41497 +alembic/runtime/migration.py,sha256=9GZ_bYZ6yMF7DUD1hgZdmB0YqvcdcNBBfxFaXKHeQoM,49857 alembic/script/__init__.py,sha256=lSj06O391Iy5avWAiq8SPs6N8RBgxkSPjP8wpXcNDGg,100 -alembic/script/base.py,sha256=4gkppn2FKCYDoBgzGkTslcwdyxSabmHvGq0uGKulwbI,37586 -alembic/script/revision.py,sha256=sfnXQw2UwiXs0E6gEPHBKWuSsB5KyuxZPTrFn__hIEk,62060 +alembic/script/base.py,sha256=XLNpdsLnBBSz4ZKMFUArFUdtL1HcjtuUDHNbA-5VlZA,37809 +alembic/script/revision.py,sha256=NTu-eu5Y78u4NoVXpT0alpD2oL40SGATA2sEMEf1el4,62306 alembic/script/write_hooks.py,sha256=NGB6NGgfdf7HK6XNNpSKqUCfzxazj-NRUePgFx7MJSM,5036 alembic/templates/async/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58 -alembic/templates/async/alembic.ini.mako,sha256=uuhJETLWQuiYcs_jAOXHEjshEJ7VslEc1q4RRj0HWbE,3525 +alembic/templates/async/alembic.ini.mako,sha256=lw_6ie1tMbYGpbvE7MnzJvx101RbSTh9uu4t9cvDpug,3638 alembic/templates/async/env.py,sha256=zbOCf3Y7w2lg92hxSwmG1MM_7y56i_oRH4AKp0pQBYo,2389 alembic/templates/async/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635 alembic/templates/generic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38 -alembic/templates/generic/alembic.ini.mako,sha256=sT7F852yN3c8X1-GKFlhuWExXxw9hY1eb1ZZ9flFSzc,3634 +alembic/templates/generic/alembic.ini.mako,sha256=YcwTOEoiZr663Gkt6twCjmaqZao0n6xjRl0B5prK79s,3746 alembic/templates/generic/env.py,sha256=TLRWOVW3Xpt_Tpf8JFzlnoPn_qoUu8UV77Y4o9XD6yI,2103 alembic/templates/generic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635 alembic/templates/multidb/README,sha256=dWLDhnBgphA4Nzb7sNlMfCS3_06YqVbHhz-9O5JNqyI,606 -alembic/templates/multidb/alembic.ini.mako,sha256=mPh8JFJfWiGs6tMtL8_HAQ-Dz1QOoJgE5Vm76nIMqgU,3728 +alembic/templates/multidb/alembic.ini.mako,sha256=AW1OGb-QezxBY5mynSWW7b1lGKnh9sVPImfGgfXf2EM,3840 alembic/templates/multidb/env.py,sha256=6zNjnW8mXGUk7erTsAvrfhvqoczJ-gagjVq1Ypg2YIQ,4230 alembic/templates/multidb/script.py.mako,sha256=N06nMtNSwHkgl0EBXDyMt8njp9tlOesR583gfq21nbY,1090 alembic/testing/__init__.py,sha256=kOxOh5nwmui9d-_CCq9WA4Udwy7ITjm453w74CTLZDo,1159 -alembic/testing/assertions.py,sha256=1CbJk8c8-WO9eJ0XJ0jJvMsNRLUrXV41NOeIJUAlOBk,5015 -alembic/testing/env.py,sha256=zJacVb_z6uLs2U1TtkmnFH9P3_F-3IfYbVv4UEPOvfo,10754 -alembic/testing/fixtures.py,sha256=NyP4wE_dFN9ZzSGiBagRu1cdzkka03nwJYJYHYrrkSY,9112 +alembic/testing/assertions.py,sha256=ScUb1sVopIl70BirfHUJDvwswC70Q93CiIWwkiZbhHg,5207 +alembic/testing/env.py,sha256=giHWVLhHkfNWrPEfrAqhpMOLL6FgWoBCVAzBVrVbSSA,10766 +alembic/testing/fixtures.py,sha256=nBntOynOmVCFc7IYiN3DIQ3TBNTfiGCvL_1-FyCry8o,9462 alembic/testing/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 alembic/testing/plugin/bootstrap.py,sha256=9C6wtjGrIVztZ928w27hsQE0KcjDLIUtUN3dvZKsMVk,50 alembic/testing/requirements.py,sha256=dKeAO1l5TwBqXarJN-IPORlCqCJv-41Dj6oXoEikxHQ,5133 @@ -68,11 +68,11 @@ alembic/testing/schemacompare.py,sha256=N5UqSNCOJetIKC4vKhpYzQEpj08XkdgIoqBmEPQ3 alembic/testing/suite/__init__.py,sha256=MvE7-hwbaVN1q3NM-ztGxORU9dnIelUCINKqNxewn7Y,288 alembic/testing/suite/_autogen_fixtures.py,sha256=cDq1pmzHe15S6dZPGNC6sqFaCQ3hLT_oPV2IDigUGQ0,9880 alembic/testing/suite/test_autogen_comments.py,sha256=aEGqKUDw4kHjnDk298aoGcQvXJWmZXcIX_2FxH4cJK8,6283 -alembic/testing/suite/test_autogen_computed.py,sha256=qJeBpc8urnwTFvbwWrSTIbHVkRUuCXP-dKaNbUK2U2U,6077 +alembic/testing/suite/test_autogen_computed.py,sha256=CXAeF-5Wr2cmW8PB7ztHG_4ZQsn1gSWrHWfxi72grNU,6147 alembic/testing/suite/test_autogen_diffs.py,sha256=T4SR1n_kmcOKYhR4W1-dA0e5sddJ69DSVL2HW96kAkE,8394 alembic/testing/suite/test_autogen_fks.py,sha256=AqFmb26Buex167HYa9dZWOk8x-JlB1OK3bwcvvjDFaU,32927 alembic/testing/suite/test_autogen_identity.py,sha256=kcuqngG7qXAKPJDX4U8sRzPKHEJECHuZ0DtuaS6tVkk,5824 -alembic/testing/suite/test_environment.py,sha256=w9F0xnLEbALeR8k6_-Tz6JHvy91IqiTSypNasVzXfZQ,11877 +alembic/testing/suite/test_environment.py,sha256=OwD-kpESdLoc4byBrGrXbZHvqtPbzhFCG4W9hJOJXPQ,11877 alembic/testing/suite/test_op.py,sha256=2XQCdm_NmnPxHGuGj7hmxMzIhKxXNotUsKdACXzE1mM,1343 alembic/testing/util.py,sha256=CQrcQDA8fs_7ME85z5ydb-Bt70soIIID-qNY1vbR2dg,3350 alembic/testing/warnings.py,sha256=RxA7x_8GseANgw07Us8JN_1iGbANxaw6_VitX2ZGQH4,1078 @@ -80,7 +80,7 @@ alembic/util/__init__.py,sha256=KSZ7UT2YzH6CietgUtljVoE3QnGjoFKOi7RL5sgUxrk,1688 alembic/util/compat.py,sha256=RjHdQa1NomU3Zlvgfvza0OMiSRQSLRL3xVl3OdUy2UE,2594 alembic/util/editor.py,sha256=JIz6_BdgV8_oKtnheR6DZoB7qnrHrlRgWjx09AsTsUw,2546 alembic/util/exc.py,sha256=KQTru4zcgAmN4IxLMwLFS56XToUewaXB7oOLcPNjPwg,98 -alembic/util/langhelpers.py,sha256=KYyOjFjJ26evPmrwhdTvLQNXN0bK7AIy5sRdKD91Fvg,10038 -alembic/util/messaging.py,sha256=BM5OCZ6qmLftFRw5yPSxj539_QmfVwNYoU8qYsDqoJY,3132 +alembic/util/langhelpers.py,sha256=LpOcovnhMnP45kTt8zNJ4BHpyQrlF40OL6yDXjqKtsE,10026 +alembic/util/messaging.py,sha256=BxAHiJsYHBPb2m8zv4yaueSRAlVuYXWkRCeN02JXhqw,3250 alembic/util/pyfiles.py,sha256=zltVdcwEJJCPS2gHsQvkHkQakuF6wXiZ6zfwHbGNT0g,3489 -alembic/util/sqla_compat.py,sha256=toD1S63PgZ6iEteP9bwIf5E7DIUdQPo0UQ_Fn18qWnI,19536 +alembic/util/sqla_compat.py,sha256=XMfZaLdbVbJoniNUyI3RUUXu4gCWljjVBbJ7db6vCgc,19526 diff --git a/libs/SQLAlchemy-2.0.27.dist-info/REQUESTED b/libs/alembic-1.14.0.dist-info/REQUESTED similarity index 100% rename from libs/SQLAlchemy-2.0.27.dist-info/REQUESTED rename to libs/alembic-1.14.0.dist-info/REQUESTED diff --git a/libs/alembic-1.14.0.dist-info/WHEEL b/libs/alembic-1.14.0.dist-info/WHEEL new file mode 100644 index 000000000..9b78c4451 --- /dev/null +++ b/libs/alembic-1.14.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (75.3.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/libs/alembic-1.13.1.dist-info/entry_points.txt b/libs/alembic-1.14.0.dist-info/entry_points.txt similarity index 100% rename from libs/alembic-1.13.1.dist-info/entry_points.txt rename to libs/alembic-1.14.0.dist-info/entry_points.txt diff --git a/libs/alembic-1.13.1.dist-info/top_level.txt b/libs/alembic-1.14.0.dist-info/top_level.txt similarity index 100% rename from libs/alembic-1.13.1.dist-info/top_level.txt rename to libs/alembic-1.14.0.dist-info/top_level.txt diff --git a/libs/alembic/__init__.py b/libs/alembic/__init__.py index c153c8aaf..637b2d4e1 100644 --- a/libs/alembic/__init__.py +++ b/libs/alembic/__init__.py @@ -1,4 +1,4 @@ from . import context from . import op -__version__ = "1.13.1" +__version__ = "1.14.0" diff --git a/libs/alembic/autogenerate/api.py b/libs/alembic/autogenerate/api.py index aa8f32f65..4c0391628 100644 --- a/libs/alembic/autogenerate/api.py +++ b/libs/alembic/autogenerate/api.py @@ -596,9 +596,9 @@ class RevisionContext: migration_script = self.generated_revisions[-1] if not getattr(migration_script, "_needs_render", False): migration_script.upgrade_ops_list[-1].upgrade_token = upgrade_token - migration_script.downgrade_ops_list[ - -1 - ].downgrade_token = downgrade_token + migration_script.downgrade_ops_list[-1].downgrade_token = ( + downgrade_token + ) migration_script._needs_render = True else: migration_script._upgrade_ops.append( diff --git a/libs/alembic/autogenerate/compare.py b/libs/alembic/autogenerate/compare.py index fcef531a5..0d9851964 100644 --- a/libs/alembic/autogenerate/compare.py +++ b/libs/alembic/autogenerate/compare.py @@ -983,7 +983,7 @@ def _normalize_computed_default(sqltext: str) -> str: """ - return re.sub(r"[ \(\)'\"`\[\]]", "", sqltext).lower() + return re.sub(r"[ \(\)'\"`\[\]\t\r\n]", "", sqltext).lower() def _compare_computed_default( diff --git a/libs/alembic/autogenerate/render.py b/libs/alembic/autogenerate/render.py index 317a6dbed..38bdbfca2 100644 --- a/libs/alembic/autogenerate/render.py +++ b/libs/alembic/autogenerate/render.py @@ -187,9 +187,11 @@ def _render_create_table_comment( prefix=_alembic_autogenerate_prefix(autogen_context), tname=op.table_name, comment="%r" % op.comment if op.comment is not None else None, - existing="%r" % op.existing_comment - if op.existing_comment is not None - else None, + existing=( + "%r" % op.existing_comment + if op.existing_comment is not None + else None + ), schema="'%s'" % op.schema if op.schema is not None else None, indent=" ", ) @@ -216,9 +218,11 @@ def _render_drop_table_comment( return templ.format( prefix=_alembic_autogenerate_prefix(autogen_context), tname=op.table_name, - existing="%r" % op.existing_comment - if op.existing_comment is not None - else None, + existing=( + "%r" % op.existing_comment + if op.existing_comment is not None + else None + ), schema="'%s'" % op.schema if op.schema is not None else None, indent=" ", ) @@ -275,6 +279,9 @@ def _add_table(autogen_context: AutogenContext, op: ops.CreateTableOp) -> str: prefixes = ", ".join("'%s'" % p for p in table._prefixes) text += ",\nprefixes=[%s]" % prefixes + if op.if_not_exists is not None: + text += ",\nif_not_exists=%r" % bool(op.if_not_exists) + text += "\n)" return text @@ -287,6 +294,10 @@ def _drop_table(autogen_context: AutogenContext, op: ops.DropTableOp) -> str: } if op.schema: text += ", schema=%r" % _ident(op.schema) + + if op.if_exists is not None: + text += ", if_exists=%r" % bool(op.if_exists) + text += ")" return text @@ -320,6 +331,8 @@ def _add_index(autogen_context: AutogenContext, op: ops.CreateIndexOp) -> str: assert index.table is not None opts = _render_dialect_kwargs_items(autogen_context, index) + if op.if_not_exists is not None: + opts.append("if_not_exists=%r" % bool(op.if_not_exists)) text = tmpl % { "prefix": _alembic_autogenerate_prefix(autogen_context), "name": _render_gen_name(autogen_context, index.name), @@ -328,9 +341,11 @@ def _add_index(autogen_context: AutogenContext, op: ops.CreateIndexOp) -> str: _get_index_rendered_expressions(index, autogen_context) ), "unique": index.unique or False, - "schema": (", schema=%r" % _ident(index.table.schema)) - if index.table.schema - else "", + "schema": ( + (", schema=%r" % _ident(index.table.schema)) + if index.table.schema + else "" + ), "kwargs": ", " + ", ".join(opts) if opts else "", } return text @@ -350,6 +365,8 @@ def _drop_index(autogen_context: AutogenContext, op: ops.DropIndexOp) -> str: "table_name=%(table_name)r%(schema)s%(kwargs)s)" ) opts = _render_dialect_kwargs_items(autogen_context, index) + if op.if_exists is not None: + opts.append("if_exists=%r" % bool(op.if_exists)) text = tmpl % { "prefix": _alembic_autogenerate_prefix(autogen_context), "name": _render_gen_name(autogen_context, op.index_name), @@ -592,9 +609,11 @@ def _get_index_rendered_expressions( idx: Index, autogen_context: AutogenContext ) -> List[str]: return [ - repr(_ident(getattr(exp, "name", None))) - if isinstance(exp, sa_schema.Column) - else _render_potential_expr(exp, autogen_context, is_index=True) + ( + repr(_ident(getattr(exp, "name", None))) + if isinstance(exp, sa_schema.Column) + else _render_potential_expr(exp, autogen_context, is_index=True) + ) for exp in idx.expressions ] @@ -1075,9 +1094,11 @@ def _render_check_constraint( ) return "%(prefix)sCheckConstraint(%(sqltext)s%(opts)s)" % { "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), - "opts": ", " + (", ".join("%s=%s" % (k, v) for k, v in opts)) - if opts - else "", + "opts": ( + ", " + (", ".join("%s=%s" % (k, v) for k, v in opts)) + if opts + else "" + ), "sqltext": _render_potential_expr( constraint.sqltext, autogen_context, wrap_in_text=False ), diff --git a/libs/alembic/command.py b/libs/alembic/command.py index 37aa6e67e..89c12354a 100644 --- a/libs/alembic/command.py +++ b/libs/alembic/command.py @@ -49,7 +49,7 @@ def init( :param config: a :class:`.Config` object. - :param directory: string path of the target directory + :param directory: string path of the target directory. :param template: string name of the migration environment template to use. @@ -174,7 +174,7 @@ def revision( will be applied to the structure generated by the revision process where it can be altered programmatically. Note that unlike all the other parameters, this option is only available via programmatic - use of :func:`.command.revision` + use of :func:`.command.revision`. """ @@ -315,9 +315,11 @@ def merge( :param config: a :class:`.Config` instance - :param message: string message to apply to the revision + :param revisions: The revisions to merge. - :param branch_label: string label name to apply to the new revision + :param message: string message to apply to the revision. + + :param branch_label: string label name to apply to the new revision. :param rev_id: hardcoded revision identifier instead of generating a new one. @@ -370,9 +372,10 @@ def upgrade( :param config: a :class:`.Config` instance. - :param revision: string revision target or range for --sql mode + :param revision: string revision target or range for --sql mode. May be + ``"heads"`` to target the most recent revision(s). - :param sql: if True, use ``--sql`` mode + :param sql: if True, use ``--sql`` mode. :param tag: an arbitrary "tag" that can be intercepted by custom ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument` @@ -413,9 +416,10 @@ def downgrade( :param config: a :class:`.Config` instance. - :param revision: string revision target or range for --sql mode + :param revision: string revision target or range for --sql mode. May + be ``"base"`` to target the first revision. - :param sql: if True, use ``--sql`` mode + :param sql: if True, use ``--sql`` mode. :param tag: an arbitrary "tag" that can be intercepted by custom ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument` @@ -449,12 +453,13 @@ def downgrade( script.run_env() -def show(config, rev): +def show(config: Config, rev: str) -> None: """Show the revision(s) denoted by the given symbol. :param config: a :class:`.Config` instance. - :param revision: string revision target + :param rev: string revision target. May be ``"current"`` to show the + revision(s) currently applied in the database. """ @@ -484,7 +489,7 @@ def history( :param config: a :class:`.Config` instance. - :param rev_range: string revision range + :param rev_range: string revision range. :param verbose: output in verbose mode. @@ -543,7 +548,9 @@ def history( _display_history(config, script, base, head) -def heads(config, verbose=False, resolve_dependencies=False): +def heads( + config: Config, verbose: bool = False, resolve_dependencies: bool = False +) -> None: """Show current available heads in the script directory. :param config: a :class:`.Config` instance. @@ -568,7 +575,7 @@ def heads(config, verbose=False, resolve_dependencies=False): ) -def branches(config, verbose=False): +def branches(config: Config, verbose: bool = False) -> None: """Show current branch points. :param config: a :class:`.Config` instance. @@ -638,7 +645,9 @@ def stamp( :param config: a :class:`.Config` instance. :param revision: target revision or list of revisions. May be a list - to indicate stamping of multiple branch heads. + to indicate stamping of multiple branch heads; may be ``"base"`` + to remove all revisions from the table or ``"heads"`` to stamp the + most recent revision(s). .. note:: this parameter is called "revisions" in the command line interface. @@ -728,7 +737,7 @@ def ensure_version(config: Config, sql: bool = False) -> None: :param config: a :class:`.Config` instance. - :param sql: use ``--sql`` mode + :param sql: use ``--sql`` mode. .. versionadded:: 1.7.6 diff --git a/libs/alembic/config.py b/libs/alembic/config.py index 4b2263fdd..2c52e7cd1 100644 --- a/libs/alembic/config.py +++ b/libs/alembic/config.py @@ -221,8 +221,7 @@ class Config: @overload def get_section( self, name: str, default: None = ... - ) -> Optional[Dict[str, str]]: - ... + ) -> Optional[Dict[str, str]]: ... # "default" here could also be a TypeVar # _MT = TypeVar("_MT", bound=Mapping[str, str]), @@ -230,14 +229,12 @@ class Config: @overload def get_section( self, name: str, default: Dict[str, str] - ) -> Dict[str, str]: - ... + ) -> Dict[str, str]: ... @overload def get_section( self, name: str, default: Mapping[str, str] - ) -> Union[Dict[str, str], Mapping[str, str]]: - ... + ) -> Union[Dict[str, str], Mapping[str, str]]: ... def get_section( self, name: str, default: Optional[Mapping[str, str]] = None @@ -313,14 +310,12 @@ class Config: return default @overload - def get_main_option(self, name: str, default: str) -> str: - ... + def get_main_option(self, name: str, default: str) -> str: ... @overload def get_main_option( self, name: str, default: Optional[str] = None - ) -> Optional[str]: - ... + ) -> Optional[str]: ... def get_main_option( self, name: str, default: Optional[str] = None diff --git a/libs/alembic/ddl/_autogen.py b/libs/alembic/ddl/_autogen.py index e22153c49..74715b18a 100644 --- a/libs/alembic/ddl/_autogen.py +++ b/libs/alembic/ddl/_autogen.py @@ -287,18 +287,22 @@ class _fk_constraint_sig(_constraint_sig[ForeignKeyConstraint]): self.target_table, tuple(self.target_columns), ) + ( - (None if onupdate.lower() == "no action" else onupdate.lower()) - if onupdate - else None, - (None if ondelete.lower() == "no action" else ondelete.lower()) - if ondelete - else None, + ( + (None if onupdate.lower() == "no action" else onupdate.lower()) + if onupdate + else None + ), + ( + (None if ondelete.lower() == "no action" else ondelete.lower()) + if ondelete + else None + ), # convert initially + deferrable into one three-state value - "initially_deferrable" - if initially and initially.lower() == "deferred" - else "deferrable" - if deferrable - else "not deferrable", + ( + "initially_deferrable" + if initially and initially.lower() == "deferred" + else "deferrable" if deferrable else "not deferrable" + ), ) @util.memoized_property diff --git a/libs/alembic/ddl/base.py b/libs/alembic/ddl/base.py index 7a85a5c19..6fbe95245 100644 --- a/libs/alembic/ddl/base.py +++ b/libs/alembic/ddl/base.py @@ -40,7 +40,6 @@ _ServerDefault = Union["TextClause", "FetchedValue", "Function[Any]", str] class AlterTable(DDLElement): - """Represent an ALTER TABLE statement. Only the string name and optional schema name of the table @@ -176,7 +175,7 @@ class ColumnComment(AlterColumn): self.comment = comment -@compiles(RenameTable) # type: ignore[misc] +@compiles(RenameTable) def visit_rename_table( element: RenameTable, compiler: DDLCompiler, **kw ) -> str: @@ -186,7 +185,7 @@ def visit_rename_table( ) -@compiles(AddColumn) # type: ignore[misc] +@compiles(AddColumn) def visit_add_column(element: AddColumn, compiler: DDLCompiler, **kw) -> str: return "%s %s" % ( alter_table(compiler, element.table_name, element.schema), @@ -194,7 +193,7 @@ def visit_add_column(element: AddColumn, compiler: DDLCompiler, **kw) -> str: ) -@compiles(DropColumn) # type: ignore[misc] +@compiles(DropColumn) def visit_drop_column(element: DropColumn, compiler: DDLCompiler, **kw) -> str: return "%s %s" % ( alter_table(compiler, element.table_name, element.schema), @@ -202,7 +201,7 @@ def visit_drop_column(element: DropColumn, compiler: DDLCompiler, **kw) -> str: ) -@compiles(ColumnNullable) # type: ignore[misc] +@compiles(ColumnNullable) def visit_column_nullable( element: ColumnNullable, compiler: DDLCompiler, **kw ) -> str: @@ -213,7 +212,7 @@ def visit_column_nullable( ) -@compiles(ColumnType) # type: ignore[misc] +@compiles(ColumnType) def visit_column_type(element: ColumnType, compiler: DDLCompiler, **kw) -> str: return "%s %s %s" % ( alter_table(compiler, element.table_name, element.schema), @@ -222,7 +221,7 @@ def visit_column_type(element: ColumnType, compiler: DDLCompiler, **kw) -> str: ) -@compiles(ColumnName) # type: ignore[misc] +@compiles(ColumnName) def visit_column_name(element: ColumnName, compiler: DDLCompiler, **kw) -> str: return "%s RENAME %s TO %s" % ( alter_table(compiler, element.table_name, element.schema), @@ -231,20 +230,22 @@ def visit_column_name(element: ColumnName, compiler: DDLCompiler, **kw) -> str: ) -@compiles(ColumnDefault) # type: ignore[misc] +@compiles(ColumnDefault) def visit_column_default( element: ColumnDefault, compiler: DDLCompiler, **kw ) -> str: return "%s %s %s" % ( alter_table(compiler, element.table_name, element.schema), alter_column(compiler, element.column_name), - "SET DEFAULT %s" % format_server_default(compiler, element.default) - if element.default is not None - else "DROP DEFAULT", + ( + "SET DEFAULT %s" % format_server_default(compiler, element.default) + if element.default is not None + else "DROP DEFAULT" + ), ) -@compiles(ComputedColumnDefault) # type: ignore[misc] +@compiles(ComputedColumnDefault) def visit_computed_column( element: ComputedColumnDefault, compiler: DDLCompiler, **kw ): @@ -254,7 +255,7 @@ def visit_computed_column( ) -@compiles(IdentityColumnDefault) # type: ignore[misc] +@compiles(IdentityColumnDefault) def visit_identity_column( element: IdentityColumnDefault, compiler: DDLCompiler, **kw ): diff --git a/libs/alembic/ddl/impl.py b/libs/alembic/ddl/impl.py index 2e4f1ae94..2609a62de 100644 --- a/libs/alembic/ddl/impl.py +++ b/libs/alembic/ddl/impl.py @@ -21,7 +21,12 @@ from typing import TYPE_CHECKING from typing import Union from sqlalchemy import cast +from sqlalchemy import Column +from sqlalchemy import MetaData +from sqlalchemy import PrimaryKeyConstraint from sqlalchemy import schema +from sqlalchemy import String +from sqlalchemy import Table from sqlalchemy import text from . import _autogen @@ -43,11 +48,9 @@ if TYPE_CHECKING: from sqlalchemy.sql import Executable from sqlalchemy.sql.elements import ColumnElement from sqlalchemy.sql.elements import quoted_name - from sqlalchemy.sql.schema import Column from sqlalchemy.sql.schema import Constraint from sqlalchemy.sql.schema import ForeignKeyConstraint from sqlalchemy.sql.schema import Index - from sqlalchemy.sql.schema import Table from sqlalchemy.sql.schema import UniqueConstraint from sqlalchemy.sql.selectable import TableClause from sqlalchemy.sql.type_api import TypeEngine @@ -77,7 +80,6 @@ _impls: Dict[str, Type[DefaultImpl]] = {} class DefaultImpl(metaclass=ImplMeta): - """Provide the entrypoint for major migration operations, including database-specific behavioral variances. @@ -137,6 +139,40 @@ class DefaultImpl(metaclass=ImplMeta): self.output_buffer.write(text + "\n\n") self.output_buffer.flush() + def version_table_impl( + self, + *, + version_table: str, + version_table_schema: Optional[str], + version_table_pk: bool, + **kw: Any, + ) -> Table: + """Generate a :class:`.Table` object which will be used as the + structure for the Alembic version table. + + Third party dialects may override this hook to provide an alternate + structure for this :class:`.Table`; requirements are only that it + be named based on the ``version_table`` parameter and contains + at least a single string-holding column named ``version_num``. + + .. versionadded:: 1.14 + + """ + vt = Table( + version_table, + MetaData(), + Column("version_num", String(32), nullable=False), + schema=version_table_schema, + ) + if version_table_pk: + vt.append_constraint( + PrimaryKeyConstraint( + "version_num", name=f"{version_table}_pkc" + ) + ) + + return vt + def requires_recreate_in_batch( self, batch_op: BatchOperationsImpl ) -> bool: @@ -168,16 +204,15 @@ class DefaultImpl(metaclass=ImplMeta): def _exec( self, construct: Union[Executable, str], - execution_options: Optional[dict[str, Any]] = None, - multiparams: Sequence[dict] = (), - params: Dict[str, Any] = util.immutabledict(), + execution_options: Optional[Mapping[str, Any]] = None, + multiparams: Optional[Sequence[Mapping[str, Any]]] = None, + params: Mapping[str, Any] = util.immutabledict(), ) -> Optional[CursorResult]: if isinstance(construct, str): construct = text(construct) if self.as_sql: - if multiparams or params: - # TODO: coverage - raise Exception("Execution arguments not allowed with as_sql") + if multiparams is not None or params: + raise TypeError("SQL parameters not allowed with as_sql") compile_kw: dict[str, Any] if self.literal_binds and not isinstance( @@ -200,11 +235,16 @@ class DefaultImpl(metaclass=ImplMeta): assert conn is not None if execution_options: conn = conn.execution_options(**execution_options) - if params: - assert isinstance(multiparams, tuple) - multiparams += (params,) - return conn.execute(construct, multiparams) + if params and multiparams is not None: + raise TypeError( + "Can't send params and multiparams at the same time" + ) + + if multiparams: + return conn.execute(construct, multiparams) + else: + return conn.execute(construct, params) def execute( self, @@ -359,11 +399,11 @@ class DefaultImpl(metaclass=ImplMeta): base.RenameTable(old_table_name, new_table_name, schema=schema) ) - def create_table(self, table: Table) -> None: + def create_table(self, table: Table, **kw: Any) -> None: table.dispatch.before_create( table, self.connection, checkfirst=False, _ddl_runner=self ) - self._exec(schema.CreateTable(table)) + self._exec(schema.CreateTable(table, **kw)) table.dispatch.after_create( table, self.connection, checkfirst=False, _ddl_runner=self ) @@ -382,11 +422,11 @@ class DefaultImpl(metaclass=ImplMeta): if comment and with_comment: self.create_column_comment(column) - def drop_table(self, table: Table) -> None: + def drop_table(self, table: Table, **kw: Any) -> None: table.dispatch.before_drop( table, self.connection, checkfirst=False, _ddl_runner=self ) - self._exec(schema.DropTable(table)) + self._exec(schema.DropTable(table, **kw)) table.dispatch.after_drop( table, self.connection, checkfirst=False, _ddl_runner=self ) @@ -421,13 +461,15 @@ class DefaultImpl(metaclass=ImplMeta): self._exec( sqla_compat._insert_inline(table).values( **{ - k: sqla_compat._literal_bindparam( - k, v, type_=table.c[k].type + k: ( + sqla_compat._literal_bindparam( + k, v, type_=table.c[k].type + ) + if not isinstance( + v, sqla_compat._literal_bindparam + ) + else v ) - if not isinstance( - v, sqla_compat._literal_bindparam - ) - else v for k, v in row.items() } ) diff --git a/libs/alembic/ddl/mysql.py b/libs/alembic/ddl/mysql.py index f312173e9..3482f672d 100644 --- a/libs/alembic/ddl/mysql.py +++ b/libs/alembic/ddl/mysql.py @@ -94,21 +94,29 @@ class MySQLImpl(DefaultImpl): column_name, schema=schema, newname=name if name is not None else column_name, - nullable=nullable - if nullable is not None - else existing_nullable - if existing_nullable is not None - else True, + nullable=( + nullable + if nullable is not None + else ( + existing_nullable + if existing_nullable is not None + else True + ) + ), type_=type_ if type_ is not None else existing_type, - default=server_default - if server_default is not False - else existing_server_default, - autoincrement=autoincrement - if autoincrement is not None - else existing_autoincrement, - comment=comment - if comment is not False - else existing_comment, + default=( + server_default + if server_default is not False + else existing_server_default + ), + autoincrement=( + autoincrement + if autoincrement is not None + else existing_autoincrement + ), + comment=( + comment if comment is not False else existing_comment + ), ) ) elif ( @@ -123,21 +131,29 @@ class MySQLImpl(DefaultImpl): column_name, schema=schema, newname=name if name is not None else column_name, - nullable=nullable - if nullable is not None - else existing_nullable - if existing_nullable is not None - else True, + nullable=( + nullable + if nullable is not None + else ( + existing_nullable + if existing_nullable is not None + else True + ) + ), type_=type_ if type_ is not None else existing_type, - default=server_default - if server_default is not False - else existing_server_default, - autoincrement=autoincrement - if autoincrement is not None - else existing_autoincrement, - comment=comment - if comment is not False - else existing_comment, + default=( + server_default + if server_default is not False + else existing_server_default + ), + autoincrement=( + autoincrement + if autoincrement is not None + else existing_autoincrement + ), + comment=( + comment if comment is not False else existing_comment + ), ) ) elif server_default is not False: @@ -368,9 +384,11 @@ def _mysql_alter_default( return "%s ALTER COLUMN %s %s" % ( alter_table(compiler, element.table_name, element.schema), format_column_name(compiler, element.column_name), - "SET DEFAULT %s" % format_server_default(compiler, element.default) - if element.default is not None - else "DROP DEFAULT", + ( + "SET DEFAULT %s" % format_server_default(compiler, element.default) + if element.default is not None + else "DROP DEFAULT" + ), ) diff --git a/libs/alembic/ddl/oracle.py b/libs/alembic/ddl/oracle.py index 540117407..eac99124f 100644 --- a/libs/alembic/ddl/oracle.py +++ b/libs/alembic/ddl/oracle.py @@ -141,9 +141,11 @@ def visit_column_default( return "%s %s %s" % ( alter_table(compiler, element.table_name, element.schema), alter_column(compiler, element.column_name), - "DEFAULT %s" % format_server_default(compiler, element.default) - if element.default is not None - else "DEFAULT NULL", + ( + "DEFAULT %s" % format_server_default(compiler, element.default) + if element.default is not None + else "DEFAULT NULL" + ), ) diff --git a/libs/alembic/ddl/postgresql.py b/libs/alembic/ddl/postgresql.py index 6507fcbdd..de64a4e05 100644 --- a/libs/alembic/ddl/postgresql.py +++ b/libs/alembic/ddl/postgresql.py @@ -218,7 +218,8 @@ class PostgresqlImpl(DefaultImpl): "join pg_class t on t.oid=d.refobjid " "join pg_attribute a on a.attrelid=t.oid and " "a.attnum=d.refobjsubid " - "where c.relkind='S' and c.relname=:seqname" + "where c.relkind='S' and " + "c.oid=cast(:seqname as regclass)" ), seqname=seq_match.group(1), ).first() diff --git a/libs/alembic/op.pyi b/libs/alembic/op.pyi index 83deac1eb..920444696 100644 --- a/libs/alembic/op.pyi +++ b/libs/alembic/op.pyi @@ -747,7 +747,12 @@ def create_primary_key( """ -def create_table(table_name: str, *columns: SchemaItem, **kw: Any) -> Table: +def create_table( + table_name: str, + *columns: SchemaItem, + if_not_exists: Optional[bool] = None, + **kw: Any, +) -> Table: r"""Issue a "create table" instruction using the current migration context. @@ -818,6 +823,10 @@ def create_table(table_name: str, *columns: SchemaItem, **kw: Any) -> Table: quoting of the schema outside of the default behavior, use the SQLAlchemy construct :class:`~sqlalchemy.sql.elements.quoted_name`. + :param if_not_exists: If True, adds IF NOT EXISTS operator when + creating the new table. + + .. versionadded:: 1.13.3 :param \**kw: Other keyword arguments are passed to the underlying :class:`sqlalchemy.schema.Table` object created for the command. @@ -998,7 +1007,11 @@ def drop_index( """ def drop_table( - table_name: str, *, schema: Optional[str] = None, **kw: Any + table_name: str, + *, + schema: Optional[str] = None, + if_exists: Optional[bool] = None, + **kw: Any, ) -> None: r"""Issue a "drop table" instruction using the current migration context. @@ -1013,6 +1026,10 @@ def drop_table( quoting of the schema outside of the default behavior, use the SQLAlchemy construct :class:`~sqlalchemy.sql.elements.quoted_name`. + :param if_exists: If True, adds IF EXISTS operator when + dropping the table. + + .. versionadded:: 1.13.3 :param \**kw: Other keyword arguments are passed to the underlying :class:`sqlalchemy.schema.Table` object created for the command. diff --git a/libs/alembic/operations/base.py b/libs/alembic/operations/base.py index bafe441a6..9b52fa6f2 100644 --- a/libs/alembic/operations/base.py +++ b/libs/alembic/operations/base.py @@ -406,8 +406,7 @@ class AbstractOperations(util.ModuleClsProxy): return self.migration_context @overload - def invoke(self, operation: CreateTableOp) -> Table: - ... + def invoke(self, operation: CreateTableOp) -> Table: ... @overload def invoke( @@ -427,12 +426,10 @@ class AbstractOperations(util.ModuleClsProxy): DropTableOp, ExecuteSQLOp, ], - ) -> None: - ... + ) -> None: ... @overload - def invoke(self, operation: MigrateOperation) -> Any: - ... + def invoke(self, operation: MigrateOperation) -> Any: ... def invoke(self, operation: MigrateOperation) -> Any: """Given a :class:`.MigrateOperation`, invoke it in terms of @@ -1178,7 +1175,11 @@ class Operations(AbstractOperations): ... def create_table( - self, table_name: str, *columns: SchemaItem, **kw: Any + self, + table_name: str, + *columns: SchemaItem, + if_not_exists: Optional[bool] = None, + **kw: Any, ) -> Table: r"""Issue a "create table" instruction using the current migration context. @@ -1250,6 +1251,10 @@ class Operations(AbstractOperations): quoting of the schema outside of the default behavior, use the SQLAlchemy construct :class:`~sqlalchemy.sql.elements.quoted_name`. + :param if_not_exists: If True, adds IF NOT EXISTS operator when + creating the new table. + + .. versionadded:: 1.13.3 :param \**kw: Other keyword arguments are passed to the underlying :class:`sqlalchemy.schema.Table` object created for the command. @@ -1441,7 +1446,12 @@ class Operations(AbstractOperations): ... def drop_table( - self, table_name: str, *, schema: Optional[str] = None, **kw: Any + self, + table_name: str, + *, + schema: Optional[str] = None, + if_exists: Optional[bool] = None, + **kw: Any, ) -> None: r"""Issue a "drop table" instruction using the current migration context. @@ -1456,6 +1466,10 @@ class Operations(AbstractOperations): quoting of the schema outside of the default behavior, use the SQLAlchemy construct :class:`~sqlalchemy.sql.elements.quoted_name`. + :param if_exists: If True, adds IF EXISTS operator when + dropping the table. + + .. versionadded:: 1.13.3 :param \**kw: Other keyword arguments are passed to the underlying :class:`sqlalchemy.schema.Table` object created for the command. @@ -1724,7 +1738,7 @@ class BatchOperations(AbstractOperations): def create_foreign_key( self, - constraint_name: str, + constraint_name: Optional[str], referent_table: str, local_cols: List[str], remote_cols: List[str], @@ -1774,7 +1788,7 @@ class BatchOperations(AbstractOperations): ... def create_primary_key( - self, constraint_name: str, columns: List[str] + self, constraint_name: Optional[str], columns: List[str] ) -> None: """Issue a "create primary key" instruction using the current batch migration context. diff --git a/libs/alembic/operations/ops.py b/libs/alembic/operations/ops.py index 7b65191cf..60b856a8f 100644 --- a/libs/alembic/operations/ops.py +++ b/libs/alembic/operations/ops.py @@ -349,7 +349,7 @@ class CreatePrimaryKeyOp(AddConstraintOp): def batch_create_primary_key( cls, operations: BatchOperations, - constraint_name: str, + constraint_name: Optional[str], columns: List[str], ) -> None: """Issue a "create primary key" instruction using the @@ -681,7 +681,7 @@ class CreateForeignKeyOp(AddConstraintOp): def batch_create_foreign_key( cls, operations: BatchOperations, - constraint_name: str, + constraint_name: Optional[str], referent_table: str, local_cols: List[str], remote_cols: List[str], @@ -1159,6 +1159,7 @@ class CreateTableOp(MigrateOperation): columns: Sequence[SchemaItem], *, schema: Optional[str] = None, + if_not_exists: Optional[bool] = None, _namespace_metadata: Optional[MetaData] = None, _constraints_included: bool = False, **kw: Any, @@ -1166,6 +1167,7 @@ class CreateTableOp(MigrateOperation): self.table_name = table_name self.columns = columns self.schema = schema + self.if_not_exists = if_not_exists self.info = kw.pop("info", {}) self.comment = kw.pop("comment", None) self.prefixes = kw.pop("prefixes", None) @@ -1228,6 +1230,7 @@ class CreateTableOp(MigrateOperation): operations: Operations, table_name: str, *columns: SchemaItem, + if_not_exists: Optional[bool] = None, **kw: Any, ) -> Table: r"""Issue a "create table" instruction using the current migration @@ -1300,6 +1303,10 @@ class CreateTableOp(MigrateOperation): quoting of the schema outside of the default behavior, use the SQLAlchemy construct :class:`~sqlalchemy.sql.elements.quoted_name`. + :param if_not_exists: If True, adds IF NOT EXISTS operator when + creating the new table. + + .. versionadded:: 1.13.3 :param \**kw: Other keyword arguments are passed to the underlying :class:`sqlalchemy.schema.Table` object created for the command. @@ -1307,7 +1314,7 @@ class CreateTableOp(MigrateOperation): to the parameters given. """ - op = cls(table_name, columns, **kw) + op = cls(table_name, columns, if_not_exists=if_not_exists, **kw) return operations.invoke(op) @@ -1320,11 +1327,13 @@ class DropTableOp(MigrateOperation): table_name: str, *, schema: Optional[str] = None, + if_exists: Optional[bool] = None, table_kw: Optional[MutableMapping[Any, Any]] = None, _reverse: Optional[CreateTableOp] = None, ) -> None: self.table_name = table_name self.schema = schema + self.if_exists = if_exists self.table_kw = table_kw or {} self.comment = self.table_kw.pop("comment", None) self.info = self.table_kw.pop("info", None) @@ -1371,9 +1380,9 @@ class DropTableOp(MigrateOperation): info=self.info.copy() if self.info else {}, prefixes=list(self.prefixes) if self.prefixes else [], schema=self.schema, - _constraints_included=self._reverse._constraints_included - if self._reverse - else False, + _constraints_included=( + self._reverse._constraints_included if self._reverse else False + ), **self.table_kw, ) return t @@ -1385,6 +1394,7 @@ class DropTableOp(MigrateOperation): table_name: str, *, schema: Optional[str] = None, + if_exists: Optional[bool] = None, **kw: Any, ) -> None: r"""Issue a "drop table" instruction using the current @@ -1400,11 +1410,15 @@ class DropTableOp(MigrateOperation): quoting of the schema outside of the default behavior, use the SQLAlchemy construct :class:`~sqlalchemy.sql.elements.quoted_name`. + :param if_exists: If True, adds IF EXISTS operator when + dropping the table. + + .. versionadded:: 1.13.3 :param \**kw: Other keyword arguments are passed to the underlying :class:`sqlalchemy.schema.Table` object created for the command. """ - op = cls(table_name, schema=schema, table_kw=kw) + op = cls(table_name, schema=schema, if_exists=if_exists, table_kw=kw) operations.invoke(op) diff --git a/libs/alembic/operations/schemaobj.py b/libs/alembic/operations/schemaobj.py index 32b26e9b9..59c1002f1 100644 --- a/libs/alembic/operations/schemaobj.py +++ b/libs/alembic/operations/schemaobj.py @@ -223,10 +223,12 @@ class SchemaObjects: t = sa_schema.Table(name, m, *cols, **kw) constraints = [ - sqla_compat._copy(elem, target_table=t) - if getattr(elem, "parent", None) is not t - and getattr(elem, "parent", None) is not None - else elem + ( + sqla_compat._copy(elem, target_table=t) + if getattr(elem, "parent", None) is not t + and getattr(elem, "parent", None) is not None + else elem + ) for elem in columns if isinstance(elem, (Constraint, Index)) ] diff --git a/libs/alembic/operations/toimpl.py b/libs/alembic/operations/toimpl.py index 4759f7fd2..4b960049c 100644 --- a/libs/alembic/operations/toimpl.py +++ b/libs/alembic/operations/toimpl.py @@ -79,8 +79,14 @@ def alter_column( @Operations.implementation_for(ops.DropTableOp) def drop_table(operations: "Operations", operation: "ops.DropTableOp") -> None: + kw = {} + if operation.if_exists is not None: + if not sqla_14: + raise NotImplementedError("SQLAlchemy 1.4+ required") + + kw["if_exists"] = operation.if_exists operations.impl.drop_table( - operation.to_table(operations.migration_context) + operation.to_table(operations.migration_context), **kw ) @@ -127,8 +133,14 @@ def drop_index(operations: "Operations", operation: "ops.DropIndexOp") -> None: def create_table( operations: "Operations", operation: "ops.CreateTableOp" ) -> "Table": + kw = {} + if operation.if_not_exists is not None: + if not sqla_14: + raise NotImplementedError("SQLAlchemy 1.4+ required") + + kw["if_not_exists"] = operation.if_not_exists table = operation.to_table(operations.migration_context) - operations.impl.create_table(table) + operations.impl.create_table(table, **kw) return table diff --git a/libs/alembic/runtime/environment.py b/libs/alembic/runtime/environment.py index d64b2adc2..a30972ec9 100644 --- a/libs/alembic/runtime/environment.py +++ b/libs/alembic/runtime/environment.py @@ -108,7 +108,6 @@ CompareType = Callable[ class EnvironmentContext(util.ModuleClsProxy): - """A configurational facade made available in an ``env.py`` script. The :class:`.EnvironmentContext` acts as a *facade* to the more @@ -342,18 +341,17 @@ class EnvironmentContext(util.ModuleClsProxy): return self.context_opts.get("tag", None) # type: ignore[no-any-return] # noqa: E501 @overload - def get_x_argument(self, as_dictionary: Literal[False]) -> List[str]: - ... + def get_x_argument(self, as_dictionary: Literal[False]) -> List[str]: ... @overload - def get_x_argument(self, as_dictionary: Literal[True]) -> Dict[str, str]: - ... + def get_x_argument( + self, as_dictionary: Literal[True] + ) -> Dict[str, str]: ... @overload def get_x_argument( self, as_dictionary: bool = ... - ) -> Union[List[str], Dict[str, str]]: - ... + ) -> Union[List[str], Dict[str, str]]: ... def get_x_argument( self, as_dictionary: bool = False diff --git a/libs/alembic/runtime/migration.py b/libs/alembic/runtime/migration.py index 95c69bc69..28f01c3b3 100644 --- a/libs/alembic/runtime/migration.py +++ b/libs/alembic/runtime/migration.py @@ -24,10 +24,6 @@ from typing import Union from sqlalchemy import Column from sqlalchemy import literal_column -from sqlalchemy import MetaData -from sqlalchemy import PrimaryKeyConstraint -from sqlalchemy import String -from sqlalchemy import Table from sqlalchemy.engine import Engine from sqlalchemy.engine import url as sqla_url from sqlalchemy.engine.strategies import MockEngineStrategy @@ -36,6 +32,7 @@ from .. import ddl from .. import util from ..util import sqla_compat from ..util.compat import EncodedIO +from ..util.sqla_compat import _select if TYPE_CHECKING: from sqlalchemy.engine import Dialect @@ -86,7 +83,6 @@ class _ProxyTransaction: class MigrationContext: - """Represent the database state made available to a migration script. @@ -191,18 +187,6 @@ class MigrationContext: self.version_table_schema = version_table_schema = opts.get( "version_table_schema", None ) - self._version = Table( - version_table, - MetaData(), - Column("version_num", String(32), nullable=False), - schema=version_table_schema, - ) - if opts.get("version_table_pk", True): - self._version.append_constraint( - PrimaryKeyConstraint( - "version_num", name="%s_pkc" % version_table - ) - ) self._start_from_rev: Optional[str] = opts.get("starting_rev") self.impl = ddl.DefaultImpl.get_by_dialect(dialect)( @@ -213,14 +197,23 @@ class MigrationContext: self.output_buffer, opts, ) + + self._version = self.impl.version_table_impl( + version_table=version_table, + version_table_schema=version_table_schema, + version_table_pk=opts.get("version_table_pk", True), + ) + log.info("Context impl %s.", self.impl.__class__.__name__) if self.as_sql: log.info("Generating static SQL") log.info( "Will assume %s DDL.", - "transactional" - if self.impl.transactional_ddl - else "non-transactional", + ( + "transactional" + if self.impl.transactional_ddl + else "non-transactional" + ), ) @classmethod @@ -345,9 +338,9 @@ class MigrationContext: # except that it will not know it's in "autocommit" and will # emit deprecation warnings when an autocommit action takes # place. - self.connection = ( - self.impl.connection - ) = base_connection.execution_options(isolation_level="AUTOCOMMIT") + self.connection = self.impl.connection = ( + base_connection.execution_options(isolation_level="AUTOCOMMIT") + ) # sqlalchemy future mode will "autobegin" in any case, so take # control of that "transaction" here @@ -539,7 +532,10 @@ class MigrationContext: return () assert self.connection is not None return tuple( - row[0] for row in self.connection.execute(self._version.select()) + row[0] + for row in self.connection.execute( + _select(self._version.c.version_num) + ) ) def _ensure_version_table(self, purge: bool = False) -> None: @@ -1006,8 +1002,7 @@ class MigrationStep: if TYPE_CHECKING: @property - def doc(self) -> Optional[str]: - ... + def doc(self) -> Optional[str]: ... @property def name(self) -> str: diff --git a/libs/alembic/script/base.py b/libs/alembic/script/base.py index 5945ca591..30df6ddb2 100644 --- a/libs/alembic/script/base.py +++ b/libs/alembic/script/base.py @@ -56,7 +56,6 @@ _split_on_space_comma_colon = re.compile(r", *|(?: +)|\:") class ScriptDirectory: - """Provides operations upon an Alembic script directory. This object is useful to get information as to current revisions, @@ -188,6 +187,7 @@ class ScriptDirectory: split_on_path = { None: None, "space": " ", + "newline": "\n", "os": os.pathsep, ":": ":", ";": ";", @@ -201,7 +201,8 @@ class ScriptDirectory: raise ValueError( "'%s' is not a valid value for " "version_path_separator; " - "expected 'space', 'os', ':', ';'" % version_path_separator + "expected 'space', 'newline', 'os', ':', ';'" + % version_path_separator ) from ke else: if split_char is None: @@ -211,7 +212,9 @@ class ScriptDirectory: ) else: version_locations = [ - x for x in version_locations_str.split(split_char) if x + x.strip() + for x in version_locations_str.split(split_char) + if x ] else: version_locations = None @@ -610,7 +613,7 @@ class ScriptDirectory: if self.timezone is not None: if ZoneInfo is None: raise util.CommandError( - "Python >= 3.9 is required for timezone support or" + "Python >= 3.9 is required for timezone support or " "the 'backports.zoneinfo' package must be installed." ) # First, assume correct capitalization @@ -732,9 +735,11 @@ class ScriptDirectory: if depends_on: with self._catch_revision_errors(): resolved_depends_on = [ - dep - if dep in rev.branch_labels # maintain branch labels - else rev.revision # resolve partial revision identifiers + ( + dep + if dep in rev.branch_labels # maintain branch labels + else rev.revision + ) # resolve partial revision identifiers for rev, dep in [ (not_none(self.revision_map.get_revision(dep)), dep) for dep in util.to_list(depends_on) @@ -808,7 +813,6 @@ class ScriptDirectory: class Script(revision.Revision): - """Represent a single revision file in a ``versions/`` directory. The :class:`.Script` instance is returned by methods @@ -930,9 +934,11 @@ class Script(revision.Revision): if head_indicators or tree_indicators: text += "%s%s%s" % ( " (head)" if self._is_real_head else "", - " (effective head)" - if self.is_head and not self._is_real_head - else "", + ( + " (effective head)" + if self.is_head and not self._is_real_head + else "" + ), " (current)" if self._db_current_indicator else "", ) if tree_indicators: diff --git a/libs/alembic/script/revision.py b/libs/alembic/script/revision.py index 77a802cdc..c3108e985 100644 --- a/libs/alembic/script/revision.py +++ b/libs/alembic/script/revision.py @@ -56,8 +56,7 @@ class _CollectRevisionsProtocol(Protocol): inclusive: bool, implicit_base: bool, assert_relative_length: bool, - ) -> Tuple[Set[Revision], Tuple[Optional[_RevisionOrBase], ...]]: - ... + ) -> Tuple[Set[Revision], Tuple[Optional[_RevisionOrBase], ...]]: ... class RevisionError(Exception): @@ -720,9 +719,11 @@ class RevisionMap: resolved_target = target resolved_test_against_revs = [ - self._revision_for_ident(test_against_rev) - if not isinstance(test_against_rev, Revision) - else test_against_rev + ( + self._revision_for_ident(test_against_rev) + if not isinstance(test_against_rev, Revision) + else test_against_rev + ) for test_against_rev in util.to_tuple( test_against_revs, default=() ) @@ -1016,9 +1017,9 @@ class RevisionMap: # each time but it was getting complicated current_heads[current_candidate_idx] = heads_to_add[0] current_heads.extend(heads_to_add[1:]) - ancestors_by_idx[ - current_candidate_idx - ] = get_ancestors(heads_to_add[0]) + ancestors_by_idx[current_candidate_idx] = ( + get_ancestors(heads_to_add[0]) + ) ancestors_by_idx.extend( get_ancestors(head) for head in heads_to_add[1:] ) @@ -1183,9 +1184,13 @@ class RevisionMap: branch_label = symbol # Walk down the tree to find downgrade target. rev = self._walk( - start=self.get_revision(symbol) - if branch_label is None - else self.get_revision("%s@%s" % (branch_label, symbol)), + start=( + self.get_revision(symbol) + if branch_label is None + else self.get_revision( + "%s@%s" % (branch_label, symbol) + ) + ), steps=rel_int, no_overwalk=assert_relative_length, ) @@ -1303,9 +1308,13 @@ class RevisionMap: ) return ( self._walk( - start=self.get_revision(symbol) - if branch_label is None - else self.get_revision("%s@%s" % (branch_label, symbol)), + start=( + self.get_revision(symbol) + if branch_label is None + else self.get_revision( + "%s@%s" % (branch_label, symbol) + ) + ), steps=relative, no_overwalk=assert_relative_length, ), @@ -1694,15 +1703,13 @@ class Revision: @overload -def tuple_rev_as_scalar(rev: None) -> None: - ... +def tuple_rev_as_scalar(rev: None) -> None: ... @overload def tuple_rev_as_scalar( rev: Union[Tuple[_T, ...], List[_T]] -) -> Union[_T, Tuple[_T, ...], List[_T]]: - ... +) -> Union[_T, Tuple[_T, ...], List[_T]]: ... def tuple_rev_as_scalar( diff --git a/libs/alembic/templates/async/alembic.ini.mako b/libs/alembic/templates/async/alembic.ini.mako index 0e5f43fde..7eee91320 100644 --- a/libs/alembic/templates/async/alembic.ini.mako +++ b/libs/alembic/templates/async/alembic.ini.mako @@ -1,7 +1,8 @@ # A generic, single database configuration. [alembic] -# path to migration scripts +# path to migration scripts. +# Use forward slashes (/) also on windows to provide an os agnostic path script_location = ${script_location} # template used to generate migration file names; The default value is %%(rev)s_%%(slug)s @@ -20,8 +21,7 @@ prepend_sys_path = . # leave blank for localtime # timezone = -# max length of characters to apply to the -# "slug" field +# max length of characters to apply to the "slug" field # truncate_slug_length = 40 # set to 'true' to run the environment during @@ -47,6 +47,7 @@ prepend_sys_path = . # version_path_separator = : # version_path_separator = ; # version_path_separator = space +# version_path_separator = newline version_path_separator = os # Use os.pathsep. Default configuration used for new projects. # set to 'true' to search source files recursively @@ -89,12 +90,12 @@ keys = console keys = generic [logger_root] -level = WARN +level = WARNING handlers = console qualname = [logger_sqlalchemy] -level = WARN +level = WARNING handlers = qualname = sqlalchemy.engine diff --git a/libs/alembic/templates/generic/alembic.ini.mako b/libs/alembic/templates/generic/alembic.ini.mako index 29245dd3f..f1f76cae8 100644 --- a/libs/alembic/templates/generic/alembic.ini.mako +++ b/libs/alembic/templates/generic/alembic.ini.mako @@ -2,6 +2,7 @@ [alembic] # path to migration scripts +# Use forward slashes (/) also on windows to provide an os agnostic path script_location = ${script_location} # template used to generate migration file names; The default value is %%(rev)s_%%(slug)s @@ -22,8 +23,7 @@ prepend_sys_path = . # leave blank for localtime # timezone = -# max length of characters to apply to the -# "slug" field +# max length of characters to apply to the "slug" field # truncate_slug_length = 40 # set to 'true' to run the environment during @@ -49,6 +49,7 @@ prepend_sys_path = . # version_path_separator = : # version_path_separator = ; # version_path_separator = space +# version_path_separator = newline version_path_separator = os # Use os.pathsep. Default configuration used for new projects. # set to 'true' to search source files recursively @@ -91,12 +92,12 @@ keys = console keys = generic [logger_root] -level = WARN +level = WARNING handlers = console qualname = [logger_sqlalchemy] -level = WARN +level = WARNING handlers = qualname = sqlalchemy.engine diff --git a/libs/alembic/templates/multidb/alembic.ini.mako b/libs/alembic/templates/multidb/alembic.ini.mako index c7fbe4822..bf383ea1d 100644 --- a/libs/alembic/templates/multidb/alembic.ini.mako +++ b/libs/alembic/templates/multidb/alembic.ini.mako @@ -2,6 +2,7 @@ [alembic] # path to migration scripts +# Use forward slashes (/) also on windows to provide an os agnostic path script_location = ${script_location} # template used to generate migration file names; The default value is %%(rev)s_%%(slug)s @@ -22,8 +23,7 @@ prepend_sys_path = . # leave blank for localtime # timezone = -# max length of characters to apply to the -# "slug" field +# max length of characters to apply to the "slug" field # truncate_slug_length = 40 # set to 'true' to run the environment during @@ -49,6 +49,7 @@ prepend_sys_path = . # version_path_separator = : # version_path_separator = ; # version_path_separator = space +# version_path_separator = newline version_path_separator = os # Use os.pathsep. Default configuration used for new projects. # set to 'true' to search source files recursively @@ -96,12 +97,12 @@ keys = console keys = generic [logger_root] -level = WARN +level = WARNING handlers = console qualname = [logger_sqlalchemy] -level = WARN +level = WARNING handlers = qualname = sqlalchemy.engine diff --git a/libs/alembic/testing/assertions.py b/libs/alembic/testing/assertions.py index ec9593b71..e071697cd 100644 --- a/libs/alembic/testing/assertions.py +++ b/libs/alembic/testing/assertions.py @@ -74,7 +74,9 @@ class _ErrorContainer: @contextlib.contextmanager -def _expect_raises(except_cls, msg=None, check_context=False): +def _expect_raises( + except_cls, msg=None, check_context=False, text_exact=False +): ec = _ErrorContainer() if check_context: are_we_already_in_a_traceback = sys.exc_info()[0] @@ -85,7 +87,10 @@ def _expect_raises(except_cls, msg=None, check_context=False): ec.error = err success = True if msg is not None: - assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}" + if text_exact: + assert str(err) == msg, f"{msg} != {err}" + else: + assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}" if check_context and not are_we_already_in_a_traceback: _assert_proper_exception_context(err) print(str(err).encode("utf-8")) @@ -98,8 +103,12 @@ def expect_raises(except_cls, check_context=True): return _expect_raises(except_cls, check_context=check_context) -def expect_raises_message(except_cls, msg, check_context=True): - return _expect_raises(except_cls, msg=msg, check_context=check_context) +def expect_raises_message( + except_cls, msg, check_context=True, text_exact=False +): + return _expect_raises( + except_cls, msg=msg, check_context=check_context, text_exact=text_exact + ) def eq_ignore_whitespace(a, b, msg=None): diff --git a/libs/alembic/testing/env.py b/libs/alembic/testing/env.py index 5df7ef822..c37b4d303 100644 --- a/libs/alembic/testing/env.py +++ b/libs/alembic/testing/env.py @@ -118,7 +118,7 @@ keys = root,sqlalchemy keys = console [logger_root] -level = WARN +level = WARNING handlers = console qualname = @@ -171,7 +171,7 @@ keys = root keys = console [logger_root] -level = WARN +level = WARNING handlers = console qualname = @@ -216,7 +216,7 @@ keys = root keys = console [logger_root] -level = WARN +level = WARNING handlers = console qualname = @@ -497,7 +497,7 @@ keys = root keys = console [logger_root] -level = WARN +level = WARNING handlers = console qualname = diff --git a/libs/alembic/testing/fixtures.py b/libs/alembic/testing/fixtures.py index 4b83a745f..3b5ce596e 100644 --- a/libs/alembic/testing/fixtures.py +++ b/libs/alembic/testing/fixtures.py @@ -49,6 +49,12 @@ class TestBase(SQLAlchemyTestBase): connection, opts=dict(transaction_per_migration=True) ) + @testing.fixture + def as_sql_migration_context(self, connection): + return MigrationContext.configure( + connection, opts=dict(transaction_per_migration=True, as_sql=True) + ) + @testing.fixture def connection(self): with config.db.connect() as conn: @@ -268,9 +274,11 @@ class AlterColRoundTripFixture: "x", column.name, existing_type=column.type, - existing_server_default=column.server_default - if column.server_default is not None - else False, + existing_server_default=( + column.server_default + if column.server_default is not None + else False + ), existing_nullable=True if column.nullable else False, # existing_comment=column.comment, nullable=to_.get("nullable", None), @@ -298,9 +306,13 @@ class AlterColRoundTripFixture: new_col["type"], new_col.get("default", None), compare.get("type", old_col["type"]), - compare["server_default"].text - if "server_default" in compare - else column.server_default.arg.text - if column.server_default is not None - else None, + ( + compare["server_default"].text + if "server_default" in compare + else ( + column.server_default.arg.text + if column.server_default is not None + else None + ) + ), ) diff --git a/libs/alembic/testing/suite/test_autogen_computed.py b/libs/alembic/testing/suite/test_autogen_computed.py index 01a89a1fe..04a3caf07 100644 --- a/libs/alembic/testing/suite/test_autogen_computed.py +++ b/libs/alembic/testing/suite/test_autogen_computed.py @@ -124,6 +124,7 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase): lambda: (None, None), lambda: (sa.Computed("5"), sa.Computed("5")), lambda: (sa.Computed("bar*5"), sa.Computed("bar*5")), + lambda: (sa.Computed("bar*5"), sa.Computed("bar * \r\n\t5")), ( lambda: (sa.Computed("bar*5"), None), config.requirements.computed_doesnt_reflect_as_server_default, diff --git a/libs/alembic/testing/suite/test_environment.py b/libs/alembic/testing/suite/test_environment.py index 8c86859ae..df2d9afbd 100644 --- a/libs/alembic/testing/suite/test_environment.py +++ b/libs/alembic/testing/suite/test_environment.py @@ -24,9 +24,9 @@ class MigrationTransactionTest(TestBase): self.context = MigrationContext.configure( dialect=conn.dialect, opts=opts ) - self.context.output_buffer = ( - self.context.impl.output_buffer - ) = io.StringIO() + self.context.output_buffer = self.context.impl.output_buffer = ( + io.StringIO() + ) else: self.context = MigrationContext.configure( connection=conn, opts=opts diff --git a/libs/alembic/util/langhelpers.py b/libs/alembic/util/langhelpers.py index 4a5bf09a9..80d88cbce 100644 --- a/libs/alembic/util/langhelpers.py +++ b/libs/alembic/util/langhelpers.py @@ -234,20 +234,17 @@ def rev_id() -> str: @overload -def to_tuple(x: Any, default: Tuple[Any, ...]) -> Tuple[Any, ...]: - ... +def to_tuple(x: Any, default: Tuple[Any, ...]) -> Tuple[Any, ...]: ... @overload -def to_tuple(x: None, default: Optional[_T] = ...) -> _T: - ... +def to_tuple(x: None, default: Optional[_T] = ...) -> _T: ... @overload def to_tuple( x: Any, default: Optional[Tuple[Any, ...]] = None -) -> Tuple[Any, ...]: - ... +) -> Tuple[Any, ...]: ... def to_tuple( diff --git a/libs/alembic/util/messaging.py b/libs/alembic/util/messaging.py index 5f14d5975..6618fa7fa 100644 --- a/libs/alembic/util/messaging.py +++ b/libs/alembic/util/messaging.py @@ -95,11 +95,17 @@ def msg( write_outstream(sys.stdout, "\n") else: # left indent output lines - lines = textwrap.wrap(msg, TERMWIDTH) + indent = " " + lines = textwrap.wrap( + msg, + TERMWIDTH, + initial_indent=indent, + subsequent_indent=indent, + ) if len(lines) > 1: for line in lines[0:-1]: - write_outstream(sys.stdout, " ", line, "\n") - write_outstream(sys.stdout, " ", lines[-1], ("\n" if newline else "")) + write_outstream(sys.stdout, line, "\n") + write_outstream(sys.stdout, lines[-1], ("\n" if newline else "")) if flush: sys.stdout.flush() diff --git a/libs/alembic/util/sqla_compat.py b/libs/alembic/util/sqla_compat.py index 8489c19fa..d4ed0fdd5 100644 --- a/libs/alembic/util/sqla_compat.py +++ b/libs/alembic/util/sqla_compat.py @@ -59,8 +59,7 @@ _CE = TypeVar("_CE", bound=Union["ColumnElement[Any]", "SchemaItem"]) class _CompilerProtocol(Protocol): - def __call__(self, element: Any, compiler: Any, **kw: Any) -> str: - ... + def __call__(self, element: Any, compiler: Any, **kw: Any) -> str: ... def _safe_int(value: str) -> Union[int, str]: @@ -95,8 +94,7 @@ if TYPE_CHECKING: def compiles( element: Type[ClauseElement], *dialects: str - ) -> Callable[[_CompilerProtocol], _CompilerProtocol]: - ... + ) -> Callable[[_CompilerProtocol], _CompilerProtocol]: ... else: from sqlalchemy.ext.compiler import compiles @@ -529,7 +527,7 @@ class _textual_index_element(sql.ColumnElement): self.fake_column = schema.Column(self.text.text, sqltypes.NULLTYPE) table.append_column(self.fake_column) - def get_children(self): + def get_children(self, **kw): return [self.fake_column] diff --git a/libs/alembic-1.13.1.dist-info/INSTALLER b/libs/aniso8601-10.0.0.dist-info/INSTALLER similarity index 100% rename from libs/alembic-1.13.1.dist-info/INSTALLER rename to libs/aniso8601-10.0.0.dist-info/INSTALLER diff --git a/libs/aniso8601-9.0.1.dist-info/LICENSE b/libs/aniso8601-10.0.0.dist-info/LICENSE similarity index 97% rename from libs/aniso8601-9.0.1.dist-info/LICENSE rename to libs/aniso8601-10.0.0.dist-info/LICENSE index 40b077445..a065b6e50 100644 --- a/libs/aniso8601-9.0.1.dist-info/LICENSE +++ b/libs/aniso8601-10.0.0.dist-info/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2021, Brandon Nielsen +Copyright (c) 2025, Brandon Nielsen All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/libs/aniso8601-9.0.1.dist-info/METADATA b/libs/aniso8601-10.0.0.dist-info/METADATA similarity index 98% rename from libs/aniso8601-9.0.1.dist-info/METADATA rename to libs/aniso8601-10.0.0.dist-info/METADATA index a926a412b..01ae66972 100644 --- a/libs/aniso8601-9.0.1.dist-info/METADATA +++ b/libs/aniso8601-10.0.0.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: aniso8601 -Version: 9.0.1 +Version: 10.0.0 Summary: A library for parsing ISO 8601 strings. Home-page: https://bitbucket.org/nielsenb/aniso8601 Author: Brandon Nielsen @@ -17,12 +17,11 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Software Development :: Libraries :: Python Modules Description-Content-Type: text/x-rst License-File: LICENSE diff --git a/libs/aniso8601-10.0.0.dist-info/RECORD b/libs/aniso8601-10.0.0.dist-info/RECORD new file mode 100644 index 000000000..0133ce0c2 --- /dev/null +++ b/libs/aniso8601-10.0.0.dist-info/RECORD @@ -0,0 +1,34 @@ +aniso8601-10.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +aniso8601-10.0.0.dist-info/LICENSE,sha256=w8yguadP0pZovZm13PAnTVO-kE3md4kW3IUnCPQHsPA,1501 +aniso8601-10.0.0.dist-info/METADATA,sha256=X3OCmIqObDsY5xQ0FnwtcbDWZ6ryJ70ADDbImMVzdck,23371 +aniso8601-10.0.0.dist-info/RECORD,, +aniso8601-10.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +aniso8601-10.0.0.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110 +aniso8601-10.0.0.dist-info/top_level.txt,sha256=MVQomyeED8nGIH7PUQdMzxgLppIB48oYHtcmL17ETB0,10 +aniso8601/__init__.py,sha256=LwoL2Wj0kdYdHS3YqvGPH6SJ1HQWpsN9jKsAMHlAdwE,705 +aniso8601/builders/__init__.py,sha256=jXJ75D-QRhB8huW2GyShjh_I4Z83ua4Qgzn1DQiX-1M,17975 +aniso8601/builders/python.py,sha256=U0Tvqt4vPVcH9epfkbz_o4550yr_4_Q8SvoUdj9JAvs,22072 +aniso8601/builders/tests/__init__.py,sha256=qjC0jrTWf2UUlZtXE3AKcMFSLC2kQPOvAI36t5gc8q0,209 +aniso8601/builders/tests/test_init.py,sha256=pyES5pMJUWy16KK4MLsfzRmPRcQvj6_vxcM8yzeZxOc,29997 +aniso8601/builders/tests/test_python.py,sha256=dhkaGiE0ToMPBhUmhOAeM32aC2SDu6Rj6d4YniV2M7A,62032 +aniso8601/compat.py,sha256=CvNkC-tCr3hzv1i9VOzgiPaS2EUxCfxtfo8SkJ2Juyc,571 +aniso8601/date.py,sha256=D3Kffr6Ln_z0fNTP5KAQa0R0T00VdmZgIS_O-pVmxnI,4496 +aniso8601/decimalfraction.py,sha256=NBUies6Gp1NrVkSU_9MwJNu28OhUIeWXNpkTRcClGYA,333 +aniso8601/duration.py,sha256=XEMm8t3Vipw3YsCgXf17XA10dHmUCQuJo4-PX4z8U7I,9550 +aniso8601/exceptions.py,sha256=uCQIrrIpCJV-n3WDUuhB3wMdgmHuu1UqOXrE9ct3xPY,1313 +aniso8601/interval.py,sha256=ruz49D2BoyoyYggM2oLrz0HSB8CIPxdl4LZCvwq3kCg,10752 +aniso8601/resolution.py,sha256=RJGfir0k6IiR3L1ZCrPvjhsQliVT_ZOcaeKqJqH6JHM,684 +aniso8601/tests/__init__.py,sha256=qjC0jrTWf2UUlZtXE3AKcMFSLC2kQPOvAI36t5gc8q0,209 +aniso8601/tests/compat.py,sha256=J4Ocl6zpo7WmA_pItOc2KUH8xZU156L9fTbCBBFX9xY,346 +aniso8601/tests/test_compat.py,sha256=55qZ_Uu7XRQo8hXNDUjy-IB3WaTqATnVtMlAJP4TGr4,763 +aniso8601/tests/test_date.py,sha256=bJy2ve-iFmWlBCWDidfK2lB-7OBMjeATfK3SBFSet4U,9266 +aniso8601/tests/test_decimalfraction.py,sha256=bvPPSuWnS2XfD10wBUjg5nFFbI1kfBshR2Wkmfggu6I,578 +aniso8601/tests/test_duration.py,sha256=QRLpd_bdgEzHjcLkLMFMWnGF4bN_YxPDdtwACtBekc4,44952 +aniso8601/tests/test_init.py,sha256=1GF0Yms8adNM3Ax13w2ncSz6toHhK3pRkPYoNaRcPVk,1689 +aniso8601/tests/test_interval.py,sha256=GjeU8HrIT-klpselgsgMcF1KfuV7sDKLlyVU5S4XMCQ,60457 +aniso8601/tests/test_time.py,sha256=SS0jXkEl5bYFSe1qFPpjZ0GNXycgBMH16Uc885ujR7I,19147 +aniso8601/tests/test_timezone.py,sha256=EJk2cTsHddhe2Pqtzl250gKF8XoXynEAngNctk23b48,4649 +aniso8601/tests/test_utcoffset.py,sha256=wQ7ivBqax2KP340tlC0DBxM7DTK9SNy_Zq_13FqeaKM,1926 +aniso8601/time.py,sha256=CZRisJz6u7fBfMthZvNcUuVFSL_GCYi9WEjXsbrnDF8,5687 +aniso8601/timezone.py,sha256=xpukG_AuvyMNGs57y4bf40eHRcpe3b1fKC8x-H8Epo8,2124 +aniso8601/utcoffset.py,sha256=dm7-eFl6WQFPpDamcTVl46aEjmGObpWJdSZJ-QzblfU,2421 diff --git a/libs/alembic-1.13.1.dist-info/REQUESTED b/libs/aniso8601-10.0.0.dist-info/REQUESTED similarity index 100% rename from libs/alembic-1.13.1.dist-info/REQUESTED rename to libs/aniso8601-10.0.0.dist-info/REQUESTED diff --git a/libs/aniso8601-9.0.1.dist-info/WHEEL b/libs/aniso8601-10.0.0.dist-info/WHEEL similarity index 100% rename from libs/aniso8601-9.0.1.dist-info/WHEEL rename to libs/aniso8601-10.0.0.dist-info/WHEEL diff --git a/libs/aniso8601-9.0.1.dist-info/top_level.txt b/libs/aniso8601-10.0.0.dist-info/top_level.txt similarity index 100% rename from libs/aniso8601-9.0.1.dist-info/top_level.txt rename to libs/aniso8601-10.0.0.dist-info/top_level.txt diff --git a/libs/aniso8601-9.0.1.dist-info/RECORD b/libs/aniso8601-9.0.1.dist-info/RECORD deleted file mode 100644 index 7a3fac144..000000000 --- a/libs/aniso8601-9.0.1.dist-info/RECORD +++ /dev/null @@ -1,34 +0,0 @@ -aniso8601-9.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -aniso8601-9.0.1.dist-info/LICENSE,sha256=Z_-MGC_A4Nc1cViNi8B5tOSmJKknTE4mqSPeIxDTvSk,1501 -aniso8601-9.0.1.dist-info/METADATA,sha256=2Esk-53vD4ruSRkC_RMTnKscxUh9nWSEj9MeS6lTlDU,23416 -aniso8601-9.0.1.dist-info/RECORD,, -aniso8601-9.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -aniso8601-9.0.1.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110 -aniso8601-9.0.1.dist-info/top_level.txt,sha256=MVQomyeED8nGIH7PUQdMzxgLppIB48oYHtcmL17ETB0,10 -aniso8601/__init__.py,sha256=tHN7Nq-3I79PLzKkBuWun_UKgolnDrn7ISO8s1HlMdo,704 -aniso8601/builders/__init__.py,sha256=sJanTP5Lo0lRxpLa5VKVBS9u6ZP8R1VRgozx5uSUMUU,17958 -aniso8601/builders/python.py,sha256=I0RhPY2syncaMwYRVJxM6ct-O_5MHnNFY3dcF6wvy0Y,22122 -aniso8601/builders/tests/__init__.py,sha256=XWM00Wzg9EZkSKyy3IW18Z8TiXfCbJS-XJNFVuylvuU,209 -aniso8601/builders/tests/test_init.py,sha256=wnDhjyb5iBt9l_zTXT96uqXus-igSqn5Kn_rqX_NSHA,29997 -aniso8601/builders/tests/test_python.py,sha256=pNr3lwfBKVSUQKc5BPmwCiCTpP_063WpOM-canDz4J8,61593 -aniso8601/compat.py,sha256=2exJsHW2DAxt_D2_mGj5mv0HCSMFeAAkPyFAM-ZFrA0,571 -aniso8601/date.py,sha256=IDn_kqeZshllwr4pICUNZhjbqSVVlYTyHmBOgp2MlNE,4475 -aniso8601/decimalfraction.py,sha256=EtwqSZJTtsQlu05m2guolhii5N1yN4dVv0v1zCZhiyk,333 -aniso8601/duration.py,sha256=6AAl9A-WM2Io898peIz9xbwOvxcLc6WYGUdkYuQlTU8,9583 -aniso8601/exceptions.py,sha256=-zrdcKocZhzhl71HhgVKXWF481XDWO3UhinbcycCzPU,1313 -aniso8601/interval.py,sha256=7e5wICHdF2gTeFluPxBrzaA4-_5b78QzXC62DSnNzlM,10763 -aniso8601/resolution.py,sha256=ee7GxL865D0dJL70TsXScz4Kzo_dwMORNvfuyCXdsgI,684 -aniso8601/tests/__init__.py,sha256=XWM00Wzg9EZkSKyy3IW18Z8TiXfCbJS-XJNFVuylvuU,209 -aniso8601/tests/compat.py,sha256=9HJqKvl0PIFBjePUgT-1eMGkA9tlESX0wNDkPvV7GOk,346 -aniso8601/tests/test_compat.py,sha256=2oFOFLKTfOJIMbLjkeVhrkxSDMjE0wM-NB86SJ6st5g,763 -aniso8601/tests/test_date.py,sha256=3AWmIHTS2sxm9_ZUYcI2w9ALJOYnHkkYEwlD1VW90iQ,8960 -aniso8601/tests/test_decimalfraction.py,sha256=T4R_SY24DW30YuQkyofxvAmngTuXtsmwd77pF25QAlc,578 -aniso8601/tests/test_duration.py,sha256=ZqUxodLrDBZ1GZWutFXjktAFHYS1hidxLclIGZP7aSA,44952 -aniso8601/tests/test_init.py,sha256=GazCeGTv-OFocCx9Cck04b-c1cWiiRnqhGwoGgm4Y1Q,1689 -aniso8601/tests/test_interval.py,sha256=lTg-E1vW1xmgwiWfHHwJDJ25AogSR-1p-0L4O2gQKQw,60457 -aniso8601/tests/test_time.py,sha256=HLutGVdg2_HHU51U2eEEZ9UNwljrQBPU_PtX8JrdVV0,19147 -aniso8601/tests/test_timezone.py,sha256=Shw7-fcUJZAbH7diCx37iXZ4VZEH45lqIgMJvoQQhtQ,4649 -aniso8601/tests/test_utcoffset.py,sha256=fRNuiz3WPMrHtrdMGK3HOuZRYd68hR-VNldbwVG-cDA,1926 -aniso8601/time.py,sha256=9IRsCERfEl_SnBBUIOR8E43XFD7Y2EqhowjiCcfinb0,5688 -aniso8601/timezone.py,sha256=5_LRd_pYd08i2hmXsn_1tTUxKOI4caSvxci-VByHCWU,2134 -aniso8601/utcoffset.py,sha256=8Gh8WNk_q9ELLEFZLMPbMESH-yqcoNFjul7VcpHq_1Q,2423 diff --git a/libs/aniso8601/__init__.py b/libs/aniso8601/__init__.py index 033d30b9d..c85d218b3 100644 --- a/libs/aniso8601/__init__.py +++ b/libs/aniso8601/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -23,4 +23,4 @@ from aniso8601.time import ( parse_time, ) -__version__ = "9.0.1" +__version__ = "10.0.0" diff --git a/libs/aniso8601/builders/__init__.py b/libs/aniso8601/builders/__init__.py index 834c72a6b..280a00e66 100644 --- a/libs/aniso8601/builders/__init__.py +++ b/libs/aniso8601/builders/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -137,7 +137,7 @@ class BaseTimeBuilder(object): 0, 24, HoursOutOfBoundsError, - "Hour must be between 0..24 with " "24 representing midnight.", + "Hour must be between 0..24 with 24 representing midnight.", range_check, ) TIME_MM_LIMIT = Limit( @@ -153,7 +153,7 @@ class BaseTimeBuilder(object): 0, 60, SecondsOutOfBoundsError, - "Second must be between 0..60 with " "60 representing a leap second.", + "Second must be between 0..60 with 60 representing a leap second.", range_check, ) TZ_HH_LIMIT = Limit( @@ -453,7 +453,7 @@ class BaseTimeBuilder(object): @classmethod def _build_object(cls, parsetuple): # Given a TupleBuilder tuple, build the correct object - if type(parsetuple) is DateTuple: + if isinstance(parsetuple, DateTuple): return cls.build_date( YYYY=parsetuple.YYYY, MM=parsetuple.MM, @@ -463,15 +463,15 @@ class BaseTimeBuilder(object): DDD=parsetuple.DDD, ) - if type(parsetuple) is TimeTuple: + if isinstance(parsetuple, TimeTuple): return cls.build_time( hh=parsetuple.hh, mm=parsetuple.mm, ss=parsetuple.ss, tz=parsetuple.tz ) - if type(parsetuple) is DatetimeTuple: + if isinstance(parsetuple, DatetimeTuple): return cls.build_datetime(parsetuple.date, parsetuple.time) - if type(parsetuple) is DurationTuple: + if isinstance(parsetuple, DurationTuple): return cls.build_duration( PnY=parsetuple.PnY, PnM=parsetuple.PnM, @@ -482,12 +482,12 @@ class BaseTimeBuilder(object): TnS=parsetuple.TnS, ) - if type(parsetuple) is IntervalTuple: + if isinstance(parsetuple, IntervalTuple): return cls.build_interval( start=parsetuple.start, end=parsetuple.end, duration=parsetuple.duration ) - if type(parsetuple) is RepeatingIntervalTuple: + if isinstance(parsetuple, RepeatingIntervalTuple): return cls.build_repeating_interval( R=parsetuple.R, Rnn=parsetuple.Rnn, interval=parsetuple.interval ) @@ -502,10 +502,10 @@ class BaseTimeBuilder(object): @classmethod def _is_interval_end_concise(cls, endtuple): - if type(endtuple) is TimeTuple: + if isinstance(endtuple, TimeTuple): return True - if type(endtuple) is DatetimeTuple: + if isinstance(endtuple, DatetimeTuple): enddatetuple = endtuple.date else: enddatetuple = endtuple @@ -523,16 +523,16 @@ class BaseTimeBuilder(object): endtimetuple = None enddatetuple = None - if type(starttuple) is DateTuple: + if isinstance(starttuple, DateTuple): startdatetuple = starttuple else: # Start is a datetime starttimetuple = starttuple.time startdatetuple = starttuple.date - if type(conciseendtuple) is DateTuple: + if isinstance(conciseendtuple, DateTuple): enddatetuple = conciseendtuple - elif type(conciseendtuple) is DatetimeTuple: + elif isinstance(conciseendtuple, DatetimeTuple): enddatetuple = conciseendtuple.date endtimetuple = conciseendtuple.time else: @@ -559,6 +559,9 @@ class BaseTimeBuilder(object): DDD=enddatetuple.DDD, ) + if endtimetuple is None: + return newenddatetuple + if (starttimetuple is not None and starttimetuple.tz is not None) and ( endtimetuple is not None and endtimetuple.tz != starttimetuple.tz ): @@ -570,9 +573,6 @@ class BaseTimeBuilder(object): tz=starttimetuple.tz, ) - if enddatetuple is not None and endtimetuple is None: - return newenddatetuple - if enddatetuple is not None and endtimetuple is not None: return TupleBuilder.build_datetime(newenddatetuple, endtimetuple) diff --git a/libs/aniso8601/builders/python.py b/libs/aniso8601/builders/python.py index 8956740e7..b60382e1b 100644 --- a/libs/aniso8601/builders/python.py +++ b/libs/aniso8601/builders/python.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -12,10 +12,8 @@ from functools import partial from aniso8601.builders import ( BaseTimeBuilder, - DatetimeTuple, DateTuple, Limit, - TimeTuple, TupleBuilder, cast, range_check, @@ -23,9 +21,6 @@ from aniso8601.builders import ( from aniso8601.exceptions import ( DayOutOfBoundsError, HoursOutOfBoundsError, - ISOFormatError, - LeapSecondError, - MidnightBoundsError, MinutesOutOfBoundsError, MonthOutOfBoundsError, SecondsOutOfBoundsError, @@ -85,7 +80,7 @@ def fractional_range_check(conversion, valuestr, limit): value = cast(valuestr, castfunc, thrownmessage=limit.casterrorstring) - if type(value) is FractionalComponent: + if isinstance(value, FractionalComponent): tocheck = float(valuestr) else: tocheck = int(valuestr) @@ -128,7 +123,7 @@ class PythonTimeBuilder(BaseTimeBuilder): 0, 24, HoursOutOfBoundsError, - "Hour must be between 0..24 with " "24 representing midnight.", + "Hour must be between 0..24 with 24 representing midnight.", partial(fractional_range_check, MICROSECONDS_PER_HOUR), ) TIME_MM_LIMIT = Limit( @@ -144,7 +139,7 @@ class PythonTimeBuilder(BaseTimeBuilder): 0, 60, SecondsOutOfBoundsError, - "Second must be between 0..60 with " "60 representing a leap second.", + "Second must be between 0..60 with 60 representing a leap second.", partial(fractional_range_check, MICROSECONDS_PER_SECOND), ) DURATION_PNY_LIMIT = Limit( @@ -248,19 +243,19 @@ class PythonTimeBuilder(BaseTimeBuilder): hh, mm, ss, tz = cls.range_check_time(hh, mm, ss, tz) - if type(hh) is FractionalComponent: + if isinstance(hh, FractionalComponent): hours = hh.principal microseconds = hh.microsecondremainder elif hh is not None: hours = hh - if type(mm) is FractionalComponent: + if isinstance(mm, FractionalComponent): minutes = mm.principal microseconds = mm.microsecondremainder elif mm is not None: minutes = mm - if type(ss) is FractionalComponent: + if isinstance(ss, FractionalComponent): seconds = ss.principal microseconds = ss.microsecondremainder elif ss is not None: @@ -349,7 +344,7 @@ class PythonTimeBuilder(BaseTimeBuilder): endobject = cls._build_object(end) # Range check - if type(end) is DateTuple and datetimerequired is True: + if isinstance(end, DateTuple) and datetimerequired is True: # is a date, and requires datetime resolution return ( endobject, @@ -362,7 +357,7 @@ class PythonTimeBuilder(BaseTimeBuilder): startobject = cls._build_object(start) # Range check - if type(start) is DateTuple and datetimerequired is True: + if isinstance(start, DateTuple) and datetimerequired is True: # is a date, and requires datetime resolution return ( startobject, @@ -448,7 +443,7 @@ class PythonTimeBuilder(BaseTimeBuilder): ) if PnY is not None: - if type(PnY) is FractionalComponent: + if isinstance(PnY, FractionalComponent): years = PnY.principal microseconds = PnY.microsecondremainder else: @@ -458,7 +453,7 @@ class PythonTimeBuilder(BaseTimeBuilder): raise YearOutOfBoundsError("Duration exceeds maximum timedelta size.") if PnM is not None: - if type(PnM) is FractionalComponent: + if isinstance(PnM, FractionalComponent): months = PnM.principal microseconds = PnM.microsecondremainder else: @@ -468,7 +463,7 @@ class PythonTimeBuilder(BaseTimeBuilder): raise MonthOutOfBoundsError("Duration exceeds maximum timedelta size.") if PnW is not None: - if type(PnW) is FractionalComponent: + if isinstance(PnW, FractionalComponent): weeks = PnW.principal microseconds = PnW.microsecondremainder else: @@ -478,7 +473,7 @@ class PythonTimeBuilder(BaseTimeBuilder): raise WeekOutOfBoundsError("Duration exceeds maximum timedelta size.") if PnD is not None: - if type(PnD) is FractionalComponent: + if isinstance(PnD, FractionalComponent): days = PnD.principal microseconds = PnD.microsecondremainder else: @@ -488,7 +483,7 @@ class PythonTimeBuilder(BaseTimeBuilder): raise DayOutOfBoundsError("Duration exceeds maximum timedelta size.") if TnH is not None: - if type(TnH) is FractionalComponent: + if isinstance(TnH, FractionalComponent): hours = TnH.principal microseconds = TnH.microsecondremainder else: @@ -498,7 +493,7 @@ class PythonTimeBuilder(BaseTimeBuilder): raise HoursOutOfBoundsError("Duration exceeds maximum timedelta size.") if TnM is not None: - if type(TnM) is FractionalComponent: + if isinstance(TnM, FractionalComponent): minutes = TnM.principal microseconds = TnM.microsecondremainder else: @@ -510,7 +505,7 @@ class PythonTimeBuilder(BaseTimeBuilder): ) if TnS is not None: - if type(TnS) is FractionalComponent: + if isinstance(TnS, FractionalComponent): seconds = TnS.principal microseconds = TnS.microsecondremainder else: @@ -586,7 +581,7 @@ class PythonTimeBuilder(BaseTimeBuilder): endobject = cls._build_object(end) # Range check - if type(end) is DateTuple: + if isinstance(end, DateTuple): enddatetime = cls.build_datetime(end, TupleBuilder.build_time()) if enddatetime - datetime.datetime.min < durationobject: diff --git a/libs/aniso8601/builders/tests/__init__.py b/libs/aniso8601/builders/tests/__init__.py index 1a94e017a..5cfededc9 100644 --- a/libs/aniso8601/builders/tests/__init__.py +++ b/libs/aniso8601/builders/tests/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/builders/tests/test_init.py b/libs/aniso8601/builders/tests/test_init.py index 7c9f092c7..0a6ed1aa5 100644 --- a/libs/aniso8601/builders/tests/test_init.py +++ b/libs/aniso8601/builders/tests/test_init.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/builders/tests/test_python.py b/libs/aniso8601/builders/tests/test_python.py index 11111a163..ccbed27d1 100644 --- a/libs/aniso8601/builders/tests/test_python.py +++ b/libs/aniso8601/builders/tests/test_python.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -52,7 +52,9 @@ class TestPythonTimeBuilder_UtiltyFunctions(unittest.TestCase): None, ) - self.assertEqual(year_range_check("1", yearlimit), 1000) + self.assertEqual(year_range_check("19", yearlimit), 1900) + self.assertEqual(year_range_check("1234", yearlimit), 1234) + self.assertEqual(year_range_check("1985", yearlimit), 1985) def test_fractional_range_check(self): limit = Limit( @@ -117,7 +119,7 @@ class TestPythonTimeBuilder(unittest.TestCase): ), ( { - "YYYY": "1900", + "YYYY": "19", "MM": None, "DD": None, "Www": None, @@ -126,6 +128,17 @@ class TestPythonTimeBuilder(unittest.TestCase): }, datetime.date(1900, 1, 1), ), + ( + { + "YYYY": "10", + "MM": None, + "DD": None, + "Www": None, + "D": None, + "DDD": None, + }, + datetime.date(1000, 1, 1), + ), ( { "YYYY": "1981", diff --git a/libs/aniso8601/compat.py b/libs/aniso8601/compat.py index 25af5794a..00cd3f9bb 100644 --- a/libs/aniso8601/compat.py +++ b/libs/aniso8601/compat.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/date.py b/libs/aniso8601/date.py index ea0cf9c59..42128483c 100644 --- a/libs/aniso8601/date.py +++ b/libs/aniso8601/date.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -60,7 +60,8 @@ def parse_date(isodatestr, builder=PythonTimeBuilder): # Given a string in any ISO 8601 date format, return a datetime.date # object that corresponds to the given date. Valid string formats are: # - # Y[YYY] + # YY + # YYYY # YYYY-MM-DD # YYYYMMDD # YYYY-MM @@ -75,11 +76,12 @@ def parse_date(isodatestr, builder=PythonTimeBuilder): if isodatestr.startswith("+") or isodatestr.startswith("-"): raise NotImplementedError( - "ISO 8601 extended year representation " "not supported." + "ISO 8601 extended year representation not supported." ) if len(isodatestr) == 0 or isodatestr.count("-") > 2: raise ISOFormatError('"{0}" is not a valid ISO 8601 date.'.format(isodatestr)) + yearstr = None monthstr = None daystr = None @@ -87,8 +89,9 @@ def parse_date(isodatestr, builder=PythonTimeBuilder): weekdaystr = None ordinaldaystr = None - if len(isodatestr) <= 4: - # Y[YYY] + if len(isodatestr) in (2, 4): + # YY + # YYYY yearstr = isodatestr elif "W" in isodatestr: if len(isodatestr) == 10: diff --git a/libs/aniso8601/decimalfraction.py b/libs/aniso8601/decimalfraction.py index 3086ee794..204d8a3fa 100644 --- a/libs/aniso8601/decimalfraction.py +++ b/libs/aniso8601/decimalfraction.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/duration.py b/libs/aniso8601/duration.py index cdc0f8f7f..8509dcefc 100644 --- a/libs/aniso8601/duration.py +++ b/libs/aniso8601/duration.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -85,14 +85,14 @@ def _parse_duration_prescribed(isodurationstr): # Make sure the end character is valid # https://bitbucket.org/nielsenb/aniso8601/issues/9/durations-with-trailing-garbage-are-parsed if isodurationstr[-1] not in ["Y", "M", "D", "H", "S", "W"]: - raise ISOFormatError("ISO 8601 duration must end with a valid " "character.") + raise ISOFormatError("ISO 8601 duration must end with a valid character.") # Make sure only the lowest order element has decimal precision durationstr = normalize(isodurationstr) if durationstr.count(".") > 1: raise ISOFormatError( - "ISO 8601 allows only lowest order element to " "have a decimal fraction." + "ISO 8601 allows only lowest order element to have a decimal fraction." ) seperatoridx = durationstr.find(".") @@ -104,7 +104,7 @@ def _parse_duration_prescribed(isodurationstr): # then one, the string is invalid if remaining.isdigit() is False: raise ISOFormatError( - "ISO 8601 duration must end with " "a single valid character." + "ISO 8601 duration must end with a single valid character." ) # Do not allow W in combination with other designators @@ -169,7 +169,7 @@ def _parse_duration_prescribed_notime(isodurationstr): for componentstr in [yearstr, monthstr, daystr, weekstr]: if componentstr is not None: if "." in componentstr: - intstr, fractionalstr = componentstr.split(".", 1) + intstr = componentstr.split(".", 1)[0] if intstr.isdigit() is False: raise ISOFormatError( @@ -227,7 +227,7 @@ def _parse_duration_prescribed_time(isodurationstr): for componentstr in [hourstr, minutestr, secondstr]: if componentstr is not None: if "." in componentstr: - intstr, fractionalstr = componentstr.split(".", 1) + intstr = componentstr.split(".", 1)[0] if intstr.isdigit() is False: raise ISOFormatError( diff --git a/libs/aniso8601/exceptions.py b/libs/aniso8601/exceptions.py index c14b44421..0e94dc6bd 100644 --- a/libs/aniso8601/exceptions.py +++ b/libs/aniso8601/exceptions.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/interval.py b/libs/aniso8601/interval.py index cd0184c6b..ee9bd5f3e 100644 --- a/libs/aniso8601/interval.py +++ b/libs/aniso8601/interval.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -62,7 +62,7 @@ def _get_interval_resolution(intervaltuple): def _get_interval_component_resolution(componenttuple): - if type(componenttuple) is DateTuple: + if isinstance(componenttuple, DateTuple): if componenttuple.DDD is not None: # YYYY-DDD # YYYYDDD @@ -89,7 +89,8 @@ def _get_interval_component_resolution(componenttuple): # Y[YYY] return IntervalResolution.Year - elif type(componenttuple) is DatetimeTuple: + + if isinstance(componenttuple, DatetimeTuple): # Datetime if componenttuple.time.ss is not None: return IntervalResolution.Seconds @@ -193,7 +194,7 @@ def parse_repeating_interval( raise ISOFormatError("Repeating interval string is empty.") if isointervalstr[0] != "R": - raise ISOFormatError("ISO 8601 repeating interval must start " "with an R.") + raise ISOFormatError("ISO 8601 repeating interval must start with an R.") if intervaldelimiter not in isointervalstr: raise ISOFormatError( @@ -249,7 +250,8 @@ def _parse_interval( endtuple = parse_date(secondpart, builder=TupleBuilder) return builder.build_interval(end=endtuple, duration=duration) - elif secondpart[0] == "P": + + if secondpart[0] == "P": # / # We need to figure out if is a date, or a datetime duration = parse_duration(secondpart, builder=TupleBuilder) @@ -288,7 +290,7 @@ def _parse_interval_end(endstr, starttuple, datetimedelimiter): concise = False - if type(starttuple) is DateTuple: + if isinstance(starttuple, DateTuple): startdatetuple = starttuple else: # Start is a datetime @@ -304,9 +306,9 @@ def _parse_interval_end(endstr, starttuple, datetimedelimiter): if timestr is not None: endtimetuple = parse_time(timestr, builder=TupleBuilder) - # End is just a time - if datestr is None: - return endtimetuple + # End is just a time + if datestr is None: + return endtimetuple # Handle backwards concise representation if datestr.count("-") == 1: @@ -326,7 +328,7 @@ def _parse_interval_end(endstr, starttuple, datetimedelimiter): # Separators required because concise elements may be missing digits if monthstr is not None: concisedatestr += "-" + monthstr - elif startdatetuple.MM is not None: + else: concisedatestr += "-" + startdatetuple.MM concisedatestr += "-" + daystr diff --git a/libs/aniso8601/resolution.py b/libs/aniso8601/resolution.py index eca2d4e7e..e7c617bac 100644 --- a/libs/aniso8601/resolution.py +++ b/libs/aniso8601/resolution.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/__init__.py b/libs/aniso8601/tests/__init__.py index 1a94e017a..5cfededc9 100644 --- a/libs/aniso8601/tests/__init__.py +++ b/libs/aniso8601/tests/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/compat.py b/libs/aniso8601/tests/compat.py index 6c5266589..f693bf97f 100644 --- a/libs/aniso8601/tests/compat.py +++ b/libs/aniso8601/tests/compat.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_compat.py b/libs/aniso8601/tests/test_compat.py index 2f7988331..927af1244 100644 --- a/libs/aniso8601/tests/test_compat.py +++ b/libs/aniso8601/tests/test_compat.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_date.py b/libs/aniso8601/tests/test_date.py index 54e3076eb..d4c5b518e 100644 --- a/libs/aniso8601/tests/test_date.py +++ b/libs/aniso8601/tests/test_date.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -122,6 +122,17 @@ class TestDateParserFunctions(unittest.TestCase): "DDD": None, }, ), + ( + "10", + { + "YYYY": "10", + "MM": None, + "DD": None, + "Www": None, + "D": None, + "DDD": None, + }, + ), ( "1981-04-05", { @@ -265,7 +276,8 @@ class TestDateParserFunctions(unittest.TestCase): def test_parse_date_badstr(self): testtuples = ( - "W53", + "1", + "123" "W53", "2004-W", "2014-01-230", "2014-012-23", diff --git a/libs/aniso8601/tests/test_decimalfraction.py b/libs/aniso8601/tests/test_decimalfraction.py index dc52f2406..feb757407 100644 --- a/libs/aniso8601/tests/test_decimalfraction.py +++ b/libs/aniso8601/tests/test_decimalfraction.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_duration.py b/libs/aniso8601/tests/test_duration.py index 0d7d40a4d..e6338d78a 100644 --- a/libs/aniso8601/tests/test_duration.py +++ b/libs/aniso8601/tests/test_duration.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_init.py b/libs/aniso8601/tests/test_init.py index d5604c6b9..b4dd61249 100644 --- a/libs/aniso8601/tests/test_init.py +++ b/libs/aniso8601/tests/test_init.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_interval.py b/libs/aniso8601/tests/test_interval.py index f01d15112..91e7cae5c 100644 --- a/libs/aniso8601/tests/test_interval.py +++ b/libs/aniso8601/tests/test_interval.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_time.py b/libs/aniso8601/tests/test_time.py index dcee5e03f..df7a8100b 100644 --- a/libs/aniso8601/tests/test_time.py +++ b/libs/aniso8601/tests/test_time.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_timezone.py b/libs/aniso8601/tests/test_timezone.py index 5df9671f1..c761869c6 100644 --- a/libs/aniso8601/tests/test_timezone.py +++ b/libs/aniso8601/tests/test_timezone.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/tests/test_utcoffset.py b/libs/aniso8601/tests/test_utcoffset.py index 11fa4f7d9..9b05c6fae 100644 --- a/libs/aniso8601/tests/test_utcoffset.py +++ b/libs/aniso8601/tests/test_utcoffset.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms diff --git a/libs/aniso8601/time.py b/libs/aniso8601/time.py index 31fab048e..1d782ca36 100644 --- a/libs/aniso8601/time.py +++ b/libs/aniso8601/time.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2021, Brandon Nielsen +# Copyright (c) 2025, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms @@ -54,7 +54,7 @@ def get_time_resolution(isotimestr): def get_datetime_resolution(isodatetimestr, delimiter="T"): # T