diff options
| -rwxr-xr-x | generateFabric.py | 4 | ||||
| -rwxr-xr-x | generateLiteloader.py | 6 | ||||
| -rwxr-xr-x | generateMojang.py | 3 | ||||
| -rw-r--r-- | meta/model/__init__.py | 9 | ||||
| -rw-r--r-- | meta/model/mojang.py | 2 | ||||
| -rw-r--r-- | meta/model/types.py | 80 |
6 files changed, 70 insertions, 34 deletions
diff --git a/generateFabric.py b/generateFabric.py index 2de6724e5e..cfdcdf4e61 100755 --- a/generateFabric.py +++ b/generateFabric.py @@ -38,7 +38,7 @@ def process_loader_version(entry) -> MetaVersion: v.libraries = [] v.libraries.extend(installer_info.libraries.common) v.libraries.extend(installer_info.libraries.client) - loader_lib = Library(name=GradleSpecifier(entry["maven"]), url="https://maven.fabricmc.net") + loader_lib = Library(name=GradleSpecifier.from_string(entry["maven"]), url="https://maven.fabricmc.net") v.libraries.append(loader_lib) return v @@ -53,7 +53,7 @@ def process_intermediary_version(entry) -> MetaVersion: v.type = "release" v.libraries = [] v.volatile = True - intermediary_lib = Library(name=GradleSpecifier(entry["maven"]), url="https://maven.fabricmc.net") + intermediary_lib = Library(name=GradleSpecifier.from_string(entry["maven"]), url="https://maven.fabricmc.net") v.libraries.append(intermediary_lib) return v diff --git a/generateLiteloader.py b/generateLiteloader.py index 1af84a2232..17882d582b 100755 --- a/generateLiteloader.py +++ b/generateLiteloader.py @@ -41,13 +41,13 @@ def process_artefacts(mc_version: str, artefacts: Dict[str, LiteloaderArtefact], # hack to make broken liteloader versions work for lib in v.libraries: - if lib.name == GradleSpecifier("org.ow2.asm:asm-all:5.0.3"): + if lib.name == GradleSpecifier("org.ow2.asm", "asm-all", "5.0.3"): lib.url = "https://repo.maven.apache.org/maven2/" - if lib.name == GradleSpecifier("org.ow2.asm:asm-all:5.2"): + if lib.name == GradleSpecifier("org.ow2.asm", "asm-all", "5.2"): lib.url = "http://repo.liteloader.com/" liteloader_lib = Library( - name=GradleSpecifier("com.mumfrey:liteloader:%s" % v.version), + name=GradleSpecifier("com.mumfrey", "liteloader", v.version), url="http://dl.liteloader.com/versions/" ) if is_snapshot: diff --git a/generateMojang.py b/generateMojang.py index c26428c126..8e573efa41 100755 --- a/generateMojang.py +++ b/generateMojang.py @@ -267,8 +267,7 @@ def main(): if lib.name.artifact not in LOG4J_HASHES[version_override]: raise Exception("ERROR: unhandled log4j artifact %s!" % lib.name.artifact) - replacement_name = GradleSpecifier( - "org.apache.logging.log4j:%s:%s" % (lib.name.artifact, version_override)) + replacement_name = GradleSpecifier("org.apache.logging.log4j", lib.name.artifact, version_override) artifact = MojangArtifact( url=maven_override % (replacement_name.path()), sha1=LOG4J_HASHES[version_override][lib.name.artifact]["sha1"], diff --git a/meta/model/__init__.py b/meta/model/__init__.py index ed4e4c4b0c..3cc6a3b96e 100644 --- a/meta/model/__init__.py +++ b/meta/model/__init__.py @@ -33,7 +33,8 @@ class MetaBase(pydantic.BaseModel): allow_population_by_field_name = True json_encoders = { - datetime: serialize_datetime + datetime: serialize_datetime, + GradleSpecifier: str } @@ -114,12 +115,6 @@ class MojangRules(MetaBase): class MojangLibrary(MetaBase): - @validator("name") - def validate_name(cls, v): - if v is not GradleSpecifier: - return GradleSpecifier(v) - return v - extract: Optional[MojangLibraryExtractRules] name: GradleSpecifier downloads: Optional[MojangLibraryDownloads] diff --git a/meta/model/mojang.py b/meta/model/mojang.py index 0b8415d4ee..0df4cbcfc0 100644 --- a/meta/model/mojang.py +++ b/meta/model/mojang.py @@ -170,7 +170,7 @@ class MojangVersion(MetaBase): client_download = self.downloads['client'] artifact = MojangArtifact(url=client_download.url, sha1=client_download.sha1, size=client_download.size) downloads = MojangLibraryDownloads(artifact=artifact) - main_jar = Library(name=GradleSpecifier("com.mojang:minecraft:%s:client" % self.id), downloads=downloads) + main_jar = Library(name=GradleSpecifier("com.mojang", "minecraft", self.id, "client"), downloads=downloads) if not self.compliance_level: # both == 0 and is None pass diff --git a/meta/model/types.py b/meta/model/types.py index d631565718..2fd5435e1e 100644 --- a/meta/model/types.py +++ b/meta/model/types.py @@ -1,4 +1,7 @@ -class GradleSpecifier(str): +from typing import Optional + + +class GradleSpecifier: """ A gradle specifier - a maven coordinate. Like one of these: "org.lwjgl.lwjgl:lwjgl:2.9.0" @@ -6,24 +9,24 @@ class GradleSpecifier(str): "net.minecraft:launchwrapper:1.5" """ - def __init__(self, name: str): - ext_split = name.split('@') - - components = ext_split[0].split(':') - self.group = components[0] - self.artifact = components[1] - self.version = components[2] - - self.extension = 'jar' - if len(ext_split) == 2: - self.extension = ext_split[1] + def __init__(self, group: str, artifact: str, version: str, classifier: Optional[str] = None, + extension: Optional[str] = None): + if extension is None: + extension = "jar" + self.group = group + self.artifact = artifact + self.version = version + self.classifier = classifier + self.extension = extension - self.classifier = None - if len(components) == 4: - self.classifier = components[3] - - def __new__(cls, name: str): - return super(GradleSpecifier, cls).__new__(cls, name) + def __str__(self): + ext = '' + if self.extension != 'jar': + ext = "@%s" % self.extension + if self.classifier: + return "%s:%s:%s:%s%s" % (self.group, self.artifact, self.version, self.classifier, ext) + else: + return "%s:%s:%s%s" % (self.group, self.artifact, self.version, ext) def filename(self): if self.classifier: @@ -44,4 +47,43 @@ class GradleSpecifier(str): return self.group in ("org.lwjgl", "org.lwjgl.lwjgl", "net.java.jinput", "net.java.jutils") def is_log4j(self): - return self.group == "org.apache.logging.log4j"
\ No newline at end of file + return self.group == "org.apache.logging.log4j" + + def __eq__(self, other): + return str(self) == str(other) + + def __lt__(self, other): + return str(self) < str(other) + + def __gt__(self, other): + return str(self) > str(other) + + @classmethod + def __get_validators__(cls): + yield cls.validate + + @classmethod + def from_string(cls, v: str): + ext_split = v.split('@') + + components = ext_split[0].split(':') + group = components[0] + artifact = components[1] + version = components[2] + + extension = None + if len(ext_split) == 2: + extension = ext_split[1] + + classifier = None + if len(components) == 4: + classifier = components[3] + return cls(group, artifact, version, classifier, extension) + + @classmethod + def validate(cls, v): + if isinstance(v, cls): + return v + if isinstance(v, str): + return cls.from_string(v) + raise TypeError("Invalid type") |
