aboutsummaryrefslogtreecommitdiff
path: root/app/tasks/minetestcheck/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/tasks/minetestcheck/__init__.py')
-rw-r--r--app/tasks/minetestcheck/__init__.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/app/tasks/minetestcheck/__init__.py b/app/tasks/minetestcheck/__init__.py
new file mode 100644
index 0000000..dbc57ad
--- /dev/null
+++ b/app/tasks/minetestcheck/__init__.py
@@ -0,0 +1,48 @@
+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
+ """
+ assert(other)
+
+ if self == ContentType.MOD:
+ if not other.isModLike():
+ raise MinetestCheckError("expected a mod or modpack, found " + other.value)
+
+ 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:
+ raise MinetestCheckError("expected a " + self.value + ", found a " + other.value)
+
+
+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)
+ assert(root)
+
+ if expected_type:
+ expected_type.validate_same(root.type)
+
+ return root