From 07bec2689ecbd869ec6563c66c3ccb8a3374771c Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 17 Jul 2026 22:16:07 +0200 Subject: [PATCH] refactor: move to pydantic 2 Signed-off-by: Sefa Eyeoglu --- meta/model/__init__.py | 113 ++++++++++-------- meta/model/fabric.py | 26 ++-- meta/model/forge.py | 106 ++++++++--------- meta/model/index.py | 10 +- meta/model/java.py | 74 ++++++------ meta/model/liteloader.py | 22 ++-- meta/model/mojang.py | 81 +++++++------ meta/model/neoforge.py | 94 +++++++-------- nix/pkgs/blockgame-meta.nix | 4 +- poetry.lock | 228 ++++++++++++++++++++++++++++-------- pyproject.toml | 4 +- 11 files changed, 453 insertions(+), 309 deletions(-) diff --git a/meta/model/__init__.py b/meta/model/__init__.py index 203b367e..3ee38fe0 100644 --- a/meta/model/__init__.py +++ b/meta/model/__init__.py @@ -4,7 +4,7 @@ from typing import Optional, List, Dict, Any, Iterator import pydantic -from pydantic import Field, validator # type: ignore +from pydantic import field_validator, ConfigDict, Field # type: ignore from ..common import ( LAUNCHER_MAVEN, @@ -103,6 +103,8 @@ def __hash__(self): return hash(str(self)) @classmethod + # TODO[pydantic]: We couldn't refactor `__get_validators__`, please create the `__get_pydantic_core_schema__` manually. + # Check https://docs.pydantic.dev/latest/migration/#defining-custom-types for more information. def __get_validators__(cls): yield cls.validate @@ -189,14 +191,17 @@ def merge(self, other: "MetaBase"): def __hash__(self): # type: ignore return hash(self.json()) - class Config: - allow_population_by_field_name = True - - json_encoders = {datetime: serialize_datetime, GradleSpecifier: str} + # TODO[pydantic]: The following keys were removed: `json_encoders`. + # Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-config for more information. + model_config = ConfigDict( + populate_by_name=True, + json_encoders={datetime: serialize_datetime, GradleSpecifier: str}, + ) class Versioned(MetaBase): - @validator("format_version") + @field_validator("format_version") + @classmethod def format_version_must_be_supported(cls, v: int): assert v <= META_FORMAT_VERSION return v @@ -205,13 +210,14 @@ def format_version_must_be_supported(cls, v: int): class MojangArtifactBase(MetaBase): - sha1: Optional[str] - size: Optional[int] + sha1: Optional[str] = None + size: Optional[int] = None url: str class MojangAssets(MojangArtifactBase): - @validator("url") + @field_validator("url") + @classmethod def validate_url(cls, v: str): return replace_old_launchermeta_url(v) @@ -220,7 +226,7 @@ def validate_url(cls, v: str): class MojangArtifact(MojangArtifactBase): - path: Optional[str] + path: Optional[str] = None class MojangLibraryExtractRules(MetaBase): @@ -242,12 +248,13 @@ class MojangLibraryExtractRules(MetaBase): class MojangLibraryDownloads(MetaBase): - artifact: Optional[MojangArtifact] - classifiers: Optional[Dict[Any, MojangArtifact]] + artifact: Optional[MojangArtifact] = None + classifiers: Optional[Dict[Any, MojangArtifact]] = None class OSRule(MetaBase): - @validator("name") + @field_validator("name") + @classmethod def name_must_be_os(cls, v: str): assert v in [ "osx", @@ -262,17 +269,18 @@ def name_must_be_os(cls, v: str): return v name: str - version: Optional[str] + version: Optional[str] = None class MojangRule(MetaBase): - @validator("action") + @field_validator("action") + @classmethod def action_must_be_allow_disallow(cls, v: str): assert v in ["allow", "disallow"] return v action: str - os: Optional[OSRule] + os: Optional[OSRule] = None class MojangRules(MetaBase): @@ -290,7 +298,8 @@ class MojangLoggingArtifact(MojangArtifactBase): class MojangLogging(MetaBase): - @validator("type") + @field_validator("type") + @classmethod def validate_type(cls, v): assert v in ["log4j2-xml"] return v @@ -301,59 +310,61 @@ def validate_type(cls, v): class Library(MetaBase): - extract: Optional[MojangLibraryExtractRules] - name: Optional[GradleSpecifier] - downloads: Optional[MojangLibraryDownloads] - natives: Optional[Dict[str, str]] - rules: Optional[MojangRules] - url: Optional[str] + extract: Optional[MojangLibraryExtractRules] = None + name: Optional[GradleSpecifier] = None + downloads: Optional[MojangLibraryDownloads] = None + natives: Optional[Dict[str, str]] = None + rules: Optional[MojangRules] = None + url: Optional[str] = None mmcHint: Optional[str] = Field(None, alias="MMC-hint") class JavaAgent(Library): - argument: Optional[str] + argument: Optional[str] = None class Dependency(MetaBase): uid: str - equals: Optional[str] - suggests: Optional[str] + equals: Optional[str] = None + suggests: Optional[str] = None class MetaVersion(Versioned): name: str version: str uid: str - type: Optional[str] - order: Optional[int] - volatile: Optional[bool] - requires: Optional[List[Dependency]] - conflicts: Optional[List[Dependency]] - libraries: Optional[List[Library]] - asset_index: Optional[MojangAssets] = Field(alias="assetIndex") - maven_files: Optional[List[Library]] = Field(alias="mavenFiles") - main_jar: Optional[Library] = Field(alias="mainJar") - jar_mods: Optional[List[Library]] = Field(alias="jarMods") - main_class: Optional[str] = Field(alias="mainClass") - applet_class: Optional[str] = Field(alias="appletClass") - minecraft_arguments: Optional[str] = Field(alias="minecraftArguments") - release_time: Optional[datetime] = Field(alias="releaseTime") - compatible_java_majors: Optional[List[int]] = Field(alias="compatibleJavaMajors") - compatible_java_name: Optional[str] = Field(alias="compatibleJavaName") - java_agents: Optional[List[JavaAgent]] = Field(alias="+agents") - additional_traits: Optional[List[str]] = Field(alias="+traits") - additional_tweakers: Optional[List[str]] = Field(alias="+tweakers") - additional_jvm_args: Optional[List[str]] = Field(alias="+jvmArgs") - logging: Optional[MojangLogging] + type: Optional[str] = None + order: Optional[int] = None + volatile: Optional[bool] = None + requires: Optional[List[Dependency]] = None + conflicts: Optional[List[Dependency]] = None + libraries: Optional[List[Library]] = None + asset_index: Optional[MojangAssets] = Field(None, alias="assetIndex") + maven_files: Optional[List[Library]] = Field(None, alias="mavenFiles") + main_jar: Optional[Library] = Field(None, alias="mainJar") + jar_mods: Optional[List[Library]] = Field(None, alias="jarMods") + main_class: Optional[str] = Field(None, alias="mainClass") + applet_class: Optional[str] = Field(None, alias="appletClass") + minecraft_arguments: Optional[str] = Field(None, alias="minecraftArguments") + release_time: Optional[datetime] = Field(None, alias="releaseTime") + compatible_java_majors: Optional[List[int]] = Field( + None, alias="compatibleJavaMajors" + ) + compatible_java_name: Optional[str] = Field(None, alias="compatibleJavaName") + java_agents: Optional[List[JavaAgent]] = Field(None, alias="+agents") + additional_traits: Optional[List[str]] = Field(None, alias="+traits") + additional_tweakers: Optional[List[str]] = Field(None, alias="+tweakers") + additional_jvm_args: Optional[List[str]] = Field(None, alias="+jvmArgs") + logging: Optional[MojangLogging] = None class MetaPackage(Versioned): name: str uid: str - recommended: Optional[List[str]] - authors: Optional[List[str]] - description: Optional[str] - project_url: Optional[str] = Field(alias="projectUrl") + recommended: Optional[List[str]] = None + authors: Optional[List[str]] = None + description: Optional[str] = None + project_url: Optional[str] = Field(None, alias="projectUrl") def make_launcher_library( diff --git a/meta/model/fabric.py b/meta/model/fabric.py index 5cb0e9ca..ac340915 100644 --- a/meta/model/fabric.py +++ b/meta/model/fabric.py @@ -7,9 +7,9 @@ class FabricInstallerArguments(MetaBase): - client: Optional[List[str]] - common: Optional[List[str]] - server: Optional[List[str]] + client: Optional[List[str]] = None + common: Optional[List[str]] = None + server: Optional[List[str]] = None class FabricInstallerLaunchwrapper(MetaBase): @@ -17,24 +17,24 @@ class FabricInstallerLaunchwrapper(MetaBase): class FabricInstallerLibraries(MetaBase): - client: Optional[List[Library]] - common: Optional[List[Library]] - server: Optional[List[Library]] + client: Optional[List[Library]] = None + common: Optional[List[Library]] = None + server: Optional[List[Library]] = None class FabricMainClasses(MetaBase): - client: Optional[str] - common: Optional[str] - server: Optional[str] + client: Optional[str] = None + common: Optional[str] = None + server: Optional[str] = None class FabricInstallerDataV1(MetaBase): version: int libraries: FabricInstallerLibraries - main_class: Optional[Union[str, FabricMainClasses]] = Field(alias="mainClass") - arguments: Optional[FabricInstallerArguments] - launchwrapper: Optional[FabricInstallerLaunchwrapper] + main_class: Optional[Union[str, FabricMainClasses]] = Field(None, alias="mainClass") + arguments: Optional[FabricInstallerArguments] = None + launchwrapper: Optional[FabricInstallerLaunchwrapper] = None class FabricJarInfo(MetaBase): - release_time: Optional[datetime] = Field(alias="releaseTime") + release_time: Optional[datetime] = Field(None, alias="releaseTime") diff --git a/meta/model/forge.py b/meta/model/forge.py index a59b87aa..dc321997 100644 --- a/meta/model/forge.py +++ b/meta/model/forge.py @@ -27,15 +27,15 @@ class ForgeEntry(MetaBase): mc_version: str = Field(alias="mcversion") version: str build: int - branch: Optional[str] - latest: Optional[bool] - recommended: Optional[bool] - files: Optional[Dict[str, ForgeFile]] + branch: Optional[str] = None + latest: Optional[bool] = None + recommended: Optional[bool] = None + files: Optional[Dict[str, ForgeFile]] = None class ForgeMCVersionInfo(MetaBase): - latest: Optional[str] - recommended: Optional[str] + latest: Optional[str] = None + recommended: Optional[str] = None versions: List[str] = Field([]) @@ -88,21 +88,21 @@ class ForgeInstallerProfileInstallSection(MetaBase): minecraft: str logo: str mirror_list: str = Field(alias="mirrorList") - mod_list: Optional[str] = Field(alias="modList") + mod_list: Optional[str] = Field(None, alias="modList") class ForgeLibrary(Library): - url: Optional[str] - server_req: Optional[bool] = Field(alias="serverreq") - client_req: Optional[bool] = Field(alias="clientreq") - checksums: Optional[List[str]] - comment: Optional[str] + url: Optional[str] = None + server_req: Optional[bool] = Field(None, alias="serverreq") + client_req: Optional[bool] = Field(None, alias="clientreq") + checksums: Optional[List[str]] = None + comment: Optional[str] = None class ForgeVersionFile(MojangVersion): - libraries: Optional[List[ForgeLibrary]] # overrides Mojang libraries + libraries: Optional[List[ForgeLibrary]] = None # overrides Mojang libraries inherits_from: Optional[str] = Field("inheritsFrom") - jar: Optional[str] + jar: Optional[str] = None class ForgeOptional(MetaBase): @@ -122,28 +122,28 @@ class ForgeOptional(MetaBase): ] """ - name: Optional[str] - client: Optional[bool] - server: Optional[bool] - default: Optional[bool] - inject: Optional[bool] - desc: Optional[str] - url: Optional[str] - artifact: Optional[GradleSpecifier] - maven: Optional[str] + name: Optional[str] = None + client: Optional[bool] = None + server: Optional[bool] = None + default: Optional[bool] = None + inject: Optional[bool] = None + desc: Optional[str] = None + url: Optional[str] = None + artifact: Optional[GradleSpecifier] = None + maven: Optional[str] = None class ForgeInstallerProfile(MetaBase): install: ForgeInstallerProfileInstallSection version_info: ForgeVersionFile = Field(alias="versionInfo") - optionals: Optional[List[ForgeOptional]] + optionals: Optional[List[ForgeOptional]] = None class ForgeLegacyInfo(MetaBase): - release_time: Optional[datetime] = Field(alias="releaseTime") - size: Optional[int] - sha256: Optional[str] - sha1: Optional[str] + release_time: Optional[datetime] = Field(None, alias="releaseTime") + size: Optional[int] = None + sha256: Optional[str] = None + sha1: Optional[str] = None class ForgeLegacyInfoList(MetaBase): @@ -151,40 +151,40 @@ class ForgeLegacyInfoList(MetaBase): class DataSpec(MetaBase): - client: Optional[str] - server: Optional[str] + client: Optional[str] = None + server: Optional[str] = None class ProcessorSpec(MetaBase): - jar: Optional[str] - classpath: Optional[List[str]] - args: Optional[List[str]] - outputs: Optional[Dict[str, str]] - sides: Optional[List[str]] + jar: Optional[str] = None + classpath: Optional[List[str]] = None + args: Optional[List[str]] = None + outputs: Optional[Dict[str, str]] = None + sides: Optional[List[str]] = None class ForgeInstallerProfileV2(MetaBase): - _comment: Optional[List[str]] - spec: Optional[int] - profile: Optional[str] - version: Optional[str] - icon: Optional[str] - json_data: Optional[str] = Field(alias="json") - path: Optional[GradleSpecifier] - logo: Optional[str] - minecraft: Optional[str] - welcome: Optional[str] - data: Optional[Dict[str, DataSpec]] - processors: Optional[List[ProcessorSpec]] - libraries: Optional[List[Library]] - mirror_list: Optional[str] = Field(alias="mirrorList") - server_jar_path: Optional[str] = Field(alias="serverJarPath") + _comment: Optional[List[str]] = None + spec: Optional[int] = None + profile: Optional[str] = None + version: Optional[str] = None + icon: Optional[str] = None + json_data: Optional[str] = Field(None, alias="json") + path: Optional[GradleSpecifier] = None + logo: Optional[str] = None + minecraft: Optional[str] = None + welcome: Optional[str] = None + data: Optional[Dict[str, DataSpec]] = None + processors: Optional[List[ProcessorSpec]] = None + libraries: Optional[List[Library]] = None + mirror_list: Optional[str] = Field(None, alias="mirrorList") + server_jar_path: Optional[str] = Field(None, alias="serverJarPath") class InstallerInfo(MetaBase): - sha1hash: Optional[str] - sha256hash: Optional[str] - size: Optional[int] + sha1hash: Optional[str] = None + sha256hash: Optional[str] = None + size: Optional[int] = None # A post-processed entry constructed from the reconstructed Forge version index diff --git a/meta/model/index.py b/meta/model/index.py index c6d82e1a..f11eb01a 100644 --- a/meta/model/index.py +++ b/meta/model/index.py @@ -8,12 +8,12 @@ class MetaVersionIndexEntry(MetaBase): version: str - type: Optional[str] + type: Optional[str] = None release_time: datetime = Field(alias="releaseTime") - requires: Optional[List[Dependency]] - conflicts: Optional[List[Dependency]] - recommended: Optional[bool] - volatile: Optional[bool] + requires: Optional[List[Dependency]] = None + conflicts: Optional[List[Dependency]] = None + recommended: Optional[bool] = None + volatile: Optional[bool] = None sha256: str @classmethod diff --git a/meta/model/java.py b/meta/model/java.py index c3efde92..623e778a 100644 --- a/meta/model/java.py +++ b/meta/model/java.py @@ -86,7 +86,7 @@ class JavaRuntimeMeta(MetaBase): vendor: str url: str release_time: datetime = Field(alias="releaseTime") - checksum: Optional[JavaChecksumMeta] + checksum: Optional[JavaChecksumMeta] = None download_type: JavaRuntimeDownloadType = Field(alias="downloadType") package_type: JavaPackageType = Field(alias="packageType") version: JavaVersionMeta @@ -269,23 +269,23 @@ def openj9APIFeatureReleasesUrl( class AdoptxAvailableReleases(MetaBase): available_releases: list[int] available_lts_releases: list[int] - most_recent_lts: Optional[int] - most_recent_feature_release: Optional[int] - most_recent_feature_version: Optional[int] - tip_version: Optional[int] + most_recent_lts: Optional[int] = None + most_recent_feature_release: Optional[int] = None + most_recent_feature_version: Optional[int] = None + tip_version: Optional[int] = None class AdoptxFile(MetaBase): name: str link: str - size: Optional[int] + size: Optional[int] = None class AdoptxPackage(AdoptxFile): - checksum: Optional[str] - checksum_link: Optional[str] - signature_link: Optional[str] - metadata_link: Optional[str] + checksum: Optional[str] = None + checksum_link: Optional[str] = None + signature_link: Optional[str] = None + metadata_link: Optional[str] = None # we intentionally omit download_count @@ -293,28 +293,28 @@ class AdoptxBinary(MetaBase): os: str architecture: AdoptxArchitecture image_type: AdoptxImageType - c_lib: Optional[AdoptxCLib] + c_lib: Optional[AdoptxCLib] = None jvm_impl: AdoptxJvmImpl - package: Optional[AdoptxPackage] - installer: Optional[AdoptxPackage] + package: Optional[AdoptxPackage] = None + installer: Optional[AdoptxPackage] = None heap_size: AdoptxHeapSize updated_at: datetime - scm_ref: Optional[str] + scm_ref: Optional[str] = None project: AdoptxProject # we intentionally omit download_count class AdoptxVersion(MetaBase): - major: Optional[int] - minor: Optional[int] - security: Optional[int] - patch: Optional[int] - pre: Optional[str] - adopt_build_number: Optional[int] + major: Optional[int] = None + minor: Optional[int] = None + security: Optional[int] = None + patch: Optional[int] = None + pre: Optional[str] = None + adopt_build_number: Optional[int] = None semver: str openjdk_version: str - build: Optional[int] - optional: Optional[str] + build: Optional[int] = None + optional: Optional[str] = None class AdoptxRelease(MetaBase): @@ -327,8 +327,8 @@ class AdoptxRelease(MetaBase): release_type: str vendor: AdoptxVendor version_data: AdoptxVersion - source: Optional[AdoptxFile] - release_notes: Optional[AdoptxFile] + source: Optional[AdoptxFile] = None + release_notes: Optional[AdoptxFile] = None # we intentionally omit download_count @@ -520,30 +520,30 @@ class ZuluSignatureDetail(MetaBase): class ZuluPackageDetail(MetaBase): package_uuid: str - name: Optional[str] - md5_hash: Optional[str] - sha256_hash: Optional[str] + name: Optional[str] = None + md5_hash: Optional[str] = None + sha256_hash: Optional[str] = None build_date: datetime last_modified: datetime download_url: str product: AzulProduct availability_type: AzulAvailabilityType java_version: list[int] - openjdk_build_number: Optional[int] + openjdk_build_number: Optional[int] = None java_package_type: AzulJavaPackageType javafx_bundled: bool release_type: AzulReleaseType os: AzulOs - lib_c_type: Optional[AzulLibCType] - cpu_gen: Optional[list[AzulCPUGen]] + lib_c_type: Optional[AzulLibCType] = None + cpu_gen: Optional[list[AzulCPUGen]] = None arch: AzulArch hw_bitness: AzulHwBitness abi: AzulAbi archive_type: AzulArchiveType release_status: AzulReleaseStatus support_term: AzulSupportTerm - certifications: Optional[list[AzulCertifications]] - latest: Optional[bool] + certifications: Optional[list[AzulCertifications]] = None + latest: Optional[bool] = None size: int distro_version: list[int] signatures: list[ZuluSignatureDetail] @@ -551,14 +551,14 @@ class ZuluPackageDetail(MetaBase): class ZuluPackage(MetaBase): package_uuid: str - name: Optional[str] + name: Optional[str] = None java_version: list[int] - openjdk_build_number: Optional[int] - latest: Optional[bool] + openjdk_build_number: Optional[int] = None + latest: Optional[bool] = None download_url: str - product: Optional[AzulProduct] + product: Optional[AzulProduct] = None distro_version: list[int] - availability_type: Optional[AzulAvailabilityType] + availability_type: Optional[AzulAvailabilityType] = None class ZuluPackageList(MetaBase): diff --git a/meta/model/liteloader.py b/meta/model/liteloader.py index 64cdaadd..bed69bcd 100644 --- a/meta/model/liteloader.py +++ b/meta/model/liteloader.py @@ -7,9 +7,9 @@ class LiteloaderDev(MetaBase): - fgVersion: Optional[str] - mappings: Optional[str] - mcp: Optional[str] + fgVersion: Optional[str] = None + mappings: Optional[str] = None + mcp: Optional[str] = None class LiteloaderRepo(MetaBase): @@ -56,17 +56,17 @@ class LiteloaderArtefact(MetaBase): stream: str file: str version: str - build: Optional[str] + build: Optional[str] = None md5: str timestamp: str - srcJar: Optional[str] - mcpJar: Optional[str] - lastSuccessfulBuild: Optional[int] # only for snapshots + srcJar: Optional[str] = None + mcpJar: Optional[str] = None + lastSuccessfulBuild: Optional[int] = None # only for snapshots class LiteloaderArtefacts(MetaBase): liteloader: Dict[str, LiteloaderArtefact] = Field(alias="com.mumfrey:liteloader") - libraries: Optional[List[Library]] + libraries: Optional[List[Library]] = None class LiteloaderEntry(MetaBase): @@ -83,10 +83,10 @@ class LiteloaderEntry(MetaBase): } """ - dev: Optional[LiteloaderDev] + dev: Optional[LiteloaderDev] = None repo: LiteloaderRepo - artefacts: Optional[LiteloaderArtefacts] - snapshots: Optional[LiteloaderArtefacts] + artefacts: Optional[LiteloaderArtefacts] = None + snapshots: Optional[LiteloaderArtefacts] = None class LiteloaderMeta(MetaBase): diff --git a/meta/model/mojang.py b/meta/model/mojang.py index 97ef1429..663e0f3b 100644 --- a/meta/model/mojang.py +++ b/meta/model/mojang.py @@ -2,7 +2,7 @@ from typing import Optional, List, Dict, Any, Iterator from .enum import StrEnum -from pydantic import validator, Field +from pydantic import field_validator, Field from . import ( MetaBase, @@ -54,13 +54,13 @@ class MojangLatestVersion(MetaBase): class MojangIndexEntry(MetaBase): - id: Optional[str] - release_time: Optional[datetime] = Field(alias="releaseTime") - time: Optional[datetime] - type: Optional[str] - url: Optional[str] - sha1: Optional[str] - compliance_level: Optional[int] = Field(alias="complianceLevel") + id: Optional[str] = None + release_time: Optional[datetime] = Field(None, alias="releaseTime") + time: Optional[datetime] = None + type: Optional[str] = None + url: Optional[str] = None + sha1: Optional[str] = None + compliance_level: Optional[int] = Field(None, alias="complianceLevel") class MojangIndex(MetaBase): @@ -78,7 +78,7 @@ def __init__(self, index: MojangIndex): class ExperimentEntry(MetaBase): id: str url: str - wiki: Optional[str] + wiki: Optional[str] = None class ExperimentIndex(MetaBase): @@ -96,7 +96,7 @@ def __init__(self, index: ExperimentIndex): class OldSnapshotEntry(MetaBase): id: str url: str - wiki: Optional[str] + wiki: Optional[str] = None jar: str sha1: str size: int @@ -115,11 +115,11 @@ def __init__(self, index: OldSnapshotIndex): class LegacyOverrideEntry(MetaBase): - main_class: Optional[str] = Field(alias="mainClass") - applet_class: Optional[str] = Field(alias="appletClass") - release_time: Optional[datetime] = Field(alias="releaseTime") - additional_traits: Optional[List[str]] = Field(alias="+traits") - additional_jvm_args: Optional[List[str]] = Field(alias="+jvmArgs") + main_class: Optional[str] = Field(None, alias="mainClass") + applet_class: Optional[str] = Field(None, alias="appletClass") + release_time: Optional[datetime] = Field(None, alias="releaseTime") + additional_traits: Optional[List[str]] = Field(None, alias="+traits") + additional_jvm_args: Optional[List[str]] = Field(None, alias="+jvmArgs") def apply_onto_meta_version(self, meta_version: MetaVersion, legacy: bool = True): # simply hard override classes @@ -151,8 +151,8 @@ class LegacyOverrideIndex(MetaBase): class LibraryPatch(MetaBase): match: List[GradleSpecifier] - override: Optional[Library] - additionalLibraries: Optional[List[Library]] + override: Optional[Library] = None + additionalLibraries: Optional[List[Library]] = None patchAdditionalLibraries: bool = Field(False) def applies(self, target: Library) -> bool: @@ -180,8 +180,8 @@ def __getitem__(self, item) -> str: class MojangArguments(MetaBase): - game: Optional[List[Any]] # mixture of strings and objects - jvm: Optional[List[Any]] + game: Optional[List[Any]] = None # mixture of strings and objects + jvm: Optional[List[Any]] = None class MojangJavaComponent(StrEnum): @@ -254,40 +254,45 @@ def __getitem__(self, item) -> MojangJavaIndexEntry: class MojangVersion(MetaBase): - @validator("minimum_launcher_version") + @field_validator("minimum_launcher_version") + @classmethod def validate_minimum_launcher_version(cls, v): assert v <= SUPPORTED_LAUNCHER_VERSION return v - @validator("compliance_level") + @field_validator("compliance_level") + @classmethod def validate_compliance_level(cls, v): assert v <= SUPPORTED_COMPLIANCE_LEVEL return v - @validator("release_time", "time", pre=True) + @field_validator("release_time", "time", mode="before") + @classmethod def validate_datetime(cls, v: str): if v.endswith(BROKEN_TZ_SUFFIX): return v.replace(BROKEN_TZ_SUFFIX, "+00:00") return v id: str # TODO: optional? - arguments: Optional[MojangArguments] - asset_index: Optional[MojangAssets] = Field(alias="assetIndex") - assets: Optional[str] - downloads: Optional[Dict[str, MojangArtifactBase]] # TODO improve this? - libraries: Optional[List[Library]] # TODO: optional? - main_class: Optional[str] = Field(alias="mainClass") - applet_class: Optional[str] = Field(alias="appletClass") - processArguments: Optional[str] - minecraft_arguments: Optional[str] = Field(alias="minecraftArguments") - minimum_launcher_version: Optional[int] = Field(alias="minimumLauncherVersion") - release_time: Optional[datetime] = Field(alias="releaseTime") - time: Optional[datetime] - type: Optional[str] + arguments: Optional[MojangArguments] = None + asset_index: Optional[MojangAssets] = Field(None, alias="assetIndex") + assets: Optional[str] = None + downloads: Optional[Dict[str, MojangArtifactBase]] = None # TODO improve this? + libraries: Optional[List[Library]] = None # TODO: optional? + main_class: Optional[str] = Field(None, alias="mainClass") + applet_class: Optional[str] = Field(None, alias="appletClass") + processArguments: Optional[str] = None + minecraft_arguments: Optional[str] = Field(None, alias="minecraftArguments") + minimum_launcher_version: Optional[int] = Field( + None, alias="minimumLauncherVersion" + ) + release_time: Optional[datetime] = Field(None, alias="releaseTime") + time: Optional[datetime] = None + type: Optional[str] = None inherits_from: Optional[str] = Field("inheritsFrom") - logging: Optional[Dict[str, MojangLogging]] # TODO improve this? - compliance_level: Optional[int] = Field(alias="complianceLevel") - javaVersion: Optional[JavaVersion] + logging: Optional[Dict[str, MojangLogging]] = None # TODO improve this? + compliance_level: Optional[int] = Field(None, alias="complianceLevel") + javaVersion: Optional[JavaVersion] = None def to_meta_version(self, name: str, uid: str, version: str) -> MetaVersion: main_jar = None diff --git a/meta/model/neoforge.py b/meta/model/neoforge.py index ccdb325a..f9a936d6 100644 --- a/meta/model/neoforge.py +++ b/meta/model/neoforge.py @@ -32,14 +32,14 @@ class NeoForgeEntry(MetaBase): artifact: str long_version: str = Field(alias="longversion") version: str - latest: Optional[bool] - recommended: Optional[bool] - files: Optional[Dict[str, NeoForgeFile]] + latest: Optional[bool] = None + recommended: Optional[bool] = None + files: Optional[Dict[str, NeoForgeFile]] = None class NeoForgeMCVersionInfo(MetaBase): - latest: Optional[str] - recommended: Optional[str] + latest: Optional[str] = None + recommended: Optional[str] = None versions: List[str] = Field([]) @@ -91,21 +91,21 @@ class NeoForgeInstallerProfileInstallSection(MetaBase): minecraft: str logo: str mirror_list: str = Field(alias="mirrorList") - mod_list: Optional[str] = Field(alias="modList") + mod_list: Optional[str] = Field(None, alias="modList") class NeoForgeLibrary(Library): - url: Optional[str] - server_req: Optional[bool] = Field(alias="serverreq") - client_req: Optional[bool] = Field(alias="clientreq") - checksums: Optional[List[str]] - comment: Optional[str] + url: Optional[str] = None + server_req: Optional[bool] = Field(None, alias="serverreq") + client_req: Optional[bool] = Field(None, alias="clientreq") + checksums: Optional[List[str]] = None + comment: Optional[str] = None class NeoForgeVersionFile(MojangVersion): - libraries: Optional[List[NeoForgeLibrary]] # overrides Mojang libraries + libraries: Optional[List[NeoForgeLibrary]] = None # overrides Mojang libraries inherits_from: Optional[str] = Field("inheritsFrom") - jar: Optional[str] + jar: Optional[str] = None class NeoForgeOptional(MetaBase): @@ -125,52 +125,52 @@ class NeoForgeOptional(MetaBase): ] """ - name: Optional[str] - client: Optional[bool] - server: Optional[bool] - default: Optional[bool] - inject: Optional[bool] - desc: Optional[str] - url: Optional[str] - artifact: Optional[GradleSpecifier] - maven: Optional[str] + name: Optional[str] = None + client: Optional[bool] = None + server: Optional[bool] = None + default: Optional[bool] = None + inject: Optional[bool] = None + desc: Optional[str] = None + url: Optional[str] = None + artifact: Optional[GradleSpecifier] = None + maven: Optional[str] = None class DataSpec(MetaBase): - client: Optional[str] - server: Optional[str] + client: Optional[str] = None + server: Optional[str] = None class ProcessorSpec(MetaBase): - jar: Optional[str] - classpath: Optional[List[str]] - args: Optional[List[str]] - outputs: Optional[Dict[str, str]] - sides: Optional[List[str]] + jar: Optional[str] = None + classpath: Optional[List[str]] = None + args: Optional[List[str]] = None + outputs: Optional[Dict[str, str]] = None + sides: Optional[List[str]] = None class NeoForgeInstallerProfileV2(MetaBase): - _comment: Optional[List[str]] - spec: Optional[int] - profile: Optional[str] - version: Optional[str] - icon: Optional[str] - json_data: Optional[str] = Field(alias="json") - path: Optional[GradleSpecifier] - logo: Optional[str] - minecraft: Optional[str] - welcome: Optional[str] - data: Optional[Dict[str, DataSpec]] - processors: Optional[List[ProcessorSpec]] - libraries: Optional[List[Library]] - mirror_list: Optional[str] = Field(alias="mirrorList") - server_jar_path: Optional[str] = Field(alias="serverJarPath") + _comment: Optional[List[str]] = None + spec: Optional[int] = None + profile: Optional[str] = None + version: Optional[str] = None + icon: Optional[str] = None + json_data: Optional[str] = Field(None, alias="json") + path: Optional[GradleSpecifier] = None + logo: Optional[str] = None + minecraft: Optional[str] = None + welcome: Optional[str] = None + data: Optional[Dict[str, DataSpec]] = None + processors: Optional[List[ProcessorSpec]] = None + libraries: Optional[List[Library]] = None + mirror_list: Optional[str] = Field(None, alias="mirrorList") + server_jar_path: Optional[str] = Field(None, alias="serverJarPath") class InstallerInfo(MetaBase): - sha1hash: Optional[str] - sha256hash: Optional[str] - size: Optional[int] + sha1hash: Optional[str] = None + sha256hash: Optional[str] = None + size: Optional[int] = None # A post-processed entry constructed from the reconstructed NeoForge version index diff --git a/nix/pkgs/blockgame-meta.nix b/nix/pkgs/blockgame-meta.nix index 8409c37c..cb9af2fa 100644 --- a/nix/pkgs/blockgame-meta.nix +++ b/nix/pkgs/blockgame-meta.nix @@ -9,7 +9,7 @@ git, openssh, packaging, - pydantic_1, + pydantic, python, rsync, }: @@ -45,7 +45,7 @@ buildPythonApplication { requests filelock packaging - pydantic_1 + pydantic ]; postInstall = '' diff --git a/poetry.lock b/poetry.lock index 0fd522ca..9318f9b3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,17 @@ # This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + [[package]] name = "cachecontrol" version = "0.14.2" @@ -242,57 +254,158 @@ files = [ [[package]] name = "pydantic" -version = "1.10.26" -description = "Data validation and settings management using python type hints" +version = "2.13.4" +description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic-1.10.26-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7ae36fa0ecef8d39884120f212e16c06bb096a38f523421278e2f39c1784546"}, - {file = "pydantic-1.10.26-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d95a76cf503f0f72ed7812a91de948440b2bf564269975738a4751e4fadeb572"}, - {file = "pydantic-1.10.26-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a943ce8e00ad708ed06a1d9df5b4fd28f5635a003b82a4908ece6f24c0b18464"}, - {file = "pydantic-1.10.26-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:465ad8edb29b15c10b779b16431fe8e77c380098badf6db367b7a1d3e572cf53"}, - {file = "pydantic-1.10.26-cp310-cp310-win_amd64.whl", hash = "sha256:80e6be6272839c8a7641d26ad569ab77772809dd78f91d0068dc0fc97f071945"}, - {file = "pydantic-1.10.26-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:116233e53889bcc536f617e38c1b8337d7fa9c280f0fd7a4045947515a785637"}, - {file = "pydantic-1.10.26-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c3cfdd361addb6eb64ccd26ac356ad6514cee06a61ab26b27e16b5ed53108f77"}, - {file = "pydantic-1.10.26-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e4451951a9a93bf9a90576f3e25240b47ee49ab5236adccb8eff6ac943adf0f"}, - {file = "pydantic-1.10.26-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9858ed44c6bea5f29ffe95308db9e62060791c877766c67dd5f55d072c8612b5"}, - {file = "pydantic-1.10.26-cp311-cp311-win_amd64.whl", hash = "sha256:ac1089f723e2106ebde434377d31239e00870a7563245072968e5af5cc4d33df"}, - {file = "pydantic-1.10.26-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:468d5b9cacfcaadc76ed0a4645354ab6f263ec01a63fb6d05630ea1df6ae453f"}, - {file = "pydantic-1.10.26-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2c1b0b914be31671000ca25cf7ea17fcaaa68cfeadf6924529c5c5aa24b7ab1f"}, - {file = "pydantic-1.10.26-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15b13b9f8ba8867095769e1156e0d7fbafa1f65b898dd40fd1c02e34430973cb"}, - {file = "pydantic-1.10.26-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad7025ca324ae263d4313998e25078dcaec5f9ed0392c06dedb57e053cc8086b"}, - {file = "pydantic-1.10.26-cp312-cp312-win_amd64.whl", hash = "sha256:4482b299874dabb88a6c3759e3d85c6557c407c3b586891f7d808d8a38b66b9c"}, - {file = "pydantic-1.10.26-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ae7913bb40a96c87e3d3f6fe4e918ef53bf181583de4e71824360a9b11aef1c"}, - {file = "pydantic-1.10.26-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8154c13f58d4de5d3a856bb6c909c7370f41fb876a5952a503af6b975265f4ba"}, - {file = "pydantic-1.10.26-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f8af0507bf6118b054a9765fb2e402f18a8b70c964f420d95b525eb711122d62"}, - {file = "pydantic-1.10.26-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dcb5a7318fb43189fde6af6f21ac7149c4bcbcfffc54bc87b5becddc46084847"}, - {file = "pydantic-1.10.26-cp313-cp313-win_amd64.whl", hash = "sha256:71cde228bc0600cf8619f0ee62db050d1880dcc477eba0e90b23011b4ee0f314"}, - {file = "pydantic-1.10.26-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6b40730cc81d53d515dc0b8bb5c9b43fadb9bed46de4a3c03bd95e8571616dba"}, - {file = "pydantic-1.10.26-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c3bbb9c0eecdf599e4db9b372fa9cc55be12e80a0d9c6d307950a39050cb0e37"}, - {file = "pydantic-1.10.26-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc2e3fe7bc4993626ef6b6fa855defafa1d6f8996aa1caef2deb83c5ac4d043a"}, - {file = "pydantic-1.10.26-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:36d9e46b588aaeb1dcd2409fa4c467fe0b331f3cc9f227b03a7a00643704e962"}, - {file = "pydantic-1.10.26-cp314-cp314-win_amd64.whl", hash = "sha256:81ce3c8616d12a7be31b4aadfd3434f78f6b44b75adbfaec2fe1ad4f7f999b8c"}, - {file = "pydantic-1.10.26-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc5c91a3b3106caf07ac6735ec6efad8ba37b860b9eb569923386debe65039ad"}, - {file = "pydantic-1.10.26-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dde599e0388e04778480d57f49355c9cc7916de818bf674de5d5429f2feebfb6"}, - {file = "pydantic-1.10.26-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8be08b5cfe88e58198722861c7aab737c978423c3a27300911767931e5311d0d"}, - {file = "pydantic-1.10.26-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0141f4bafe5eda539d98c9755128a9ea933654c6ca4306b5059fc87a01a38573"}, - {file = "pydantic-1.10.26-cp38-cp38-win_amd64.whl", hash = "sha256:eb664305ffca8a9766a8629303bb596607d77eae35bb5f32ff9245984881b638"}, - {file = "pydantic-1.10.26-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:502b9d30d18a2dfaf81b7302f6ba0e5853474b1c96212449eb4db912cb604b7d"}, - {file = "pydantic-1.10.26-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d8f6087bf697dec3bf7ffcd7fe8362674f16519f3151789f33cbe8f1d19fc15"}, - {file = "pydantic-1.10.26-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dd40a99c358419910c85e6f5d22f9c56684c25b5e7abc40879b3b4a52f34ae90"}, - {file = "pydantic-1.10.26-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ce3293b86ca9f4125df02ff0a70be91bc7946522467cbd98e7f1493f340616ba"}, - {file = "pydantic-1.10.26-cp39-cp39-win_amd64.whl", hash = "sha256:1a4e3062b71ab1d5df339ba12c48f9ed5817c5de6cb92a961dd5c64bb32e7b96"}, - {file = "pydantic-1.10.26-py3-none-any.whl", hash = "sha256:c43ad70dc3ce7787543d563792426a16fd7895e14be4b194b5665e36459dd917"}, - {file = "pydantic-1.10.26.tar.gz", hash = "sha256:8c6aa39b494c5af092e690127c283d84f363ac36017106a9e66cb33a22ac412e"}, + {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, + {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, ] [package.dependencies] -typing-extensions = ">=4.2.0" +annotated-types = ">=0.6.0" +pydantic-core = "2.46.4" +typing-extensions = ">=4.14.1" +typing-inspection = ">=0.4.2" [package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, + {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"}, + {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"}, + {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"}, + {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"}, + {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"}, + {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"}, + {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"}, + {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"}, + {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"}, + {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"}, + {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"}, + {file = "pydantic_core-2.46.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae"}, + {file = "pydantic_core-2.46.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6"}, + {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9"}, + {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29"}, + {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9"}, + {file = "pydantic_core-2.46.4-cp39-cp39-win32.whl", hash = "sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1"}, + {file = "pydantic_core-2.46.4-cp39-cp39-win_amd64.whl", hash = "sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"}, + {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"}, +] + +[package.dependencies] +typing-extensions = ">=4.14.1" [[package]] name = "requests" @@ -318,16 +431,31 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "typing-extensions" -version = "4.11.0" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.16.0" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}, + {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, ] +[package.dependencies] +typing-extensions = ">=4.12.0" + [[package]] name = "urllib3" version = "2.2.1" @@ -348,5 +476,5 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.1" -python-versions = "^3.8" -content-hash = "707a234344389f97a9c7deae6da3adee7d3c49d9eced95a09664712e69a778c6" +python-versions = "^3.10" +content-hash = "20c111031d009f2804c85573bdc44cf7edcace1ec713c025ed4874bb7adc4a5f" diff --git a/pyproject.toml b/pyproject.toml index 55e670a6..0c04ef4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,12 +27,12 @@ updateJava = "meta.run.update_java:main" index = "meta.run.index:main" [tool.poetry.dependencies] -python = "^3.8" +python = "^3.10" cachecontrol = "^0.14.0" requests = "^2.31.0" filelock = "^3.13.1" packaging = "^26.0" -pydantic = "^1.10.13" +pydantic = "^2.13.4" [build-system] requires = ["poetry-core>=1.0.0"]