2020-01-19 02:22:33 +01:00
|
|
|
from enum import Enum
|
|
|
|
|
|
|
|
class MinetestCheckError(Exception):
|
|
|
|
def __init__(self, value):
|
|
|
|
self.value = value
|
|
|
|
def __str__(self):
|
|
|
|
return repr("Error validating package: " + self.value)
|
|
|
|
|
|
|
|
class ContentType(Enum):
|
|
|
|
UNKNOWN = "unknown"
|
|
|
|
MOD = "mod"
|
|
|
|
MODPACK = "modpack"
|
|
|
|
GAME = "game"
|
|
|
|
TXP = "texture pack"
|
|
|
|
|
|
|
|
def isModLike(self):
|
|
|
|
return self == ContentType.MOD or self == ContentType.MODPACK
|
|
|
|
|
|
|
|
def validate_same(self, other):
|
|
|
|
"""
|
|
|
|
Whether or not `other` is an acceptable type for this
|
|
|
|
"""
|
2020-12-04 03:23:04 +01:00
|
|
|
assert other
|
2020-01-19 02:22:33 +01:00
|
|
|
|
|
|
|
if self == ContentType.MOD:
|
|
|
|
if not other.isModLike():
|
2020-08-18 14:34:04 +02:00
|
|
|
raise MinetestCheckError("Expected a mod or modpack, found " + other.value)
|
2020-01-19 02:22:33 +01:00
|
|
|
|
|
|
|
elif self == ContentType.TXP:
|
|
|
|
if other != ContentType.UNKNOWN and other != ContentType.TXP:
|
|
|
|
raise MinetestCheckError("expected a " + self.value + ", found a " + other.value)
|
|
|
|
|
|
|
|
elif other != self:
|
2020-08-18 14:34:04 +02:00
|
|
|
raise MinetestCheckError("Expected a " + self.value + ", found a " + other.value)
|
2020-01-19 02:22:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
from .tree import PackageTreeNode, get_base_dir
|
|
|
|
|
|
|
|
def build_tree(path, expected_type=None, author=None, repo=None, name=None):
|
|
|
|
path = get_base_dir(path)
|
|
|
|
|
|
|
|
root = PackageTreeNode(path, "/", author=author, repo=repo, name=name)
|
2020-12-04 03:23:04 +01:00
|
|
|
assert root
|
2020-01-19 02:22:33 +01:00
|
|
|
|
|
|
|
if expected_type:
|
|
|
|
expected_type.validate_same(root.type)
|
|
|
|
|
|
|
|
return root
|