Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 62 additions & 51 deletions meta/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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)

Expand All @@ -220,7 +226,7 @@ def validate_url(cls, v: str):


class MojangArtifact(MojangArtifactBase):
path: Optional[str]
path: Optional[str] = None


class MojangLibraryExtractRules(MetaBase):
Expand All @@ -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",
Expand All @@ -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):
Expand All @@ -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
Expand All @@ -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(
Expand Down
26 changes: 13 additions & 13 deletions meta/model/fabric.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,34 @@


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):
tweakers: FabricInstallerArguments


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")
Loading