diff options
| author | Sefa Eyeoglu <contact@scrumplex.net> | 2022-04-05 14:02:24 +0200 |
|---|---|---|
| committer | Sefa Eyeoglu <contact@scrumplex.net> | 2022-04-05 14:38:59 +0200 |
| commit | 7ab37c8658c4c8614a85e5ff729aa4ef3592801f (patch) | |
| tree | 80f93c0c43b17c59fff2eb50904c764d334214b5 /meta | |
| parent | fec82dbb90e86852928f04a64d286be1158e848e (diff) | |
| download | Project-Tick-7ab37c8658c4c8614a85e5ff729aa4ef3592801f.tar.gz Project-Tick-7ab37c8658c4c8614a85e5ff729aa4ef3592801f.zip | |
refactor: make GradleSpecifier its own class
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/model/__init__.py | 9 | ||||
| -rw-r--r-- | meta/model/mojang.py | 2 | ||||
| -rw-r--r-- | meta/model/types.py | 80 |
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") |
