summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgenerateFabric.py4
-rwxr-xr-xgenerateLiteloader.py6
-rwxr-xr-xgenerateMojang.py3
-rw-r--r--meta/model/__init__.py9
-rw-r--r--meta/model/mojang.py2
-rw-r--r--meta/model/types.py80
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")