summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
authorSefa Eyeoglu <contact@scrumplex.net>2022-04-05 14:02:24 +0200
committerSefa Eyeoglu <contact@scrumplex.net>2022-04-05 14:38:59 +0200
commit7ab37c8658c4c8614a85e5ff729aa4ef3592801f (patch)
tree80f93c0c43b17c59fff2eb50904c764d334214b5 /meta
parentfec82dbb90e86852928f04a64d286be1158e848e (diff)
downloadProject-Tick-7ab37c8658c4c8614a85e5ff729aa4ef3592801f.tar.gz
Project-Tick-7ab37c8658c4c8614a85e5ff729aa4ef3592801f.zip
refactor: make GradleSpecifier its own class
Diffstat (limited to 'meta')
-rw-r--r--meta/model/__init__.py9
-rw-r--r--meta/model/mojang.py2
-rw-r--r--meta/model/types.py80
3 files changed, 64 insertions, 27 deletions
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")