hungerlib 3.0.dev6__tar.gz → 3.0.dev8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {hungerlib-3.0.dev6/src/hungerlib.egg-info → hungerlib-3.0.dev8}/PKG-INFO +1 -1
  2. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/pyproject.toml +1 -1
  3. hungerlib-3.0.dev8/src/hungerlib/datamap.py +71 -0
  4. hungerlib-3.0.dev8/src/hungerlib/maps/__init__.py +6 -0
  5. hungerlib-3.0.dev8/src/hungerlib/maps/ascii.py +30 -0
  6. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8/src/hungerlib.egg-info}/PKG-INFO +1 -1
  7. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib.egg-info/SOURCES.txt +2 -0
  8. hungerlib-3.0.dev6/src/hungerlib/datamap.py +0 -60
  9. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/LICENSE +0 -0
  10. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/README.md +0 -0
  11. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/setup.cfg +0 -0
  12. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/__init__.py +0 -0
  13. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/__init__.py +0 -0
  14. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/colormap.py +0 -0
  15. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/configloader.py +0 -0
  16. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/mchelpers.py +0 -0
  17. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/scheduler.py +0 -0
  18. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/snapshot.py +0 -0
  19. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/addons/utils.py +0 -0
  20. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/__init__.py +0 -0
  21. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/backups.py +0 -0
  22. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/command.py +0 -0
  23. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/databases.py +0 -0
  24. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/filemanager.py +0 -0
  25. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/schedule.py +0 -0
  26. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/api/startup.py +0 -0
  27. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/messagerouter.py +0 -0
  28. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/panel.py +0 -0
  29. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/servers/__init__.py +0 -0
  30. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/servers/generic.py +0 -0
  31. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib/servers/minecraft.py +0 -0
  32. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib.egg-info/dependency_links.txt +0 -0
  33. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib.egg-info/requires.txt +0 -0
  34. {hungerlib-3.0.dev6 → hungerlib-3.0.dev8}/src/hungerlib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hungerlib
3
- Version: 3.0.dev6
3
+ Version: 3.0.dev8
4
4
  Summary: Powerful automation library for Pterodactyl.
5
5
  Author: iFamished
6
6
  License: MIT
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "hungerlib"
10
- version = "3.0.dev6"
10
+ version = "3.0.dev8"
11
11
  description = "Powerful automation library for Pterodactyl."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.9"
@@ -0,0 +1,71 @@
1
+ import re
2
+ from dataclasses import dataclass, fields, is_dataclass
3
+
4
+ # default maps
5
+ _default_maps = []
6
+
7
+ def set_default_maps(*maps):
8
+ global _default_maps
9
+ _default_maps = list(maps)
10
+
11
+ def get_default_maps():
12
+ return _default_maps
13
+
14
+
15
+ # syntax patterns
16
+ class Syntax:
17
+ braces = r"\{([^{}]+)\}"
18
+ dollars = r"\$\{([^{}]+)\}"
19
+ angles = r"<([^<>]+)>"
20
+ percents = r"%([^%]+)%"
21
+
22
+
23
+ # base datamap
24
+ @dataclass(frozen=True)
25
+ class DataMap:
26
+ __syntax__: str = Syntax.braces
27
+
28
+ def as_map(self):
29
+ return {
30
+ f.name: getattr(self, f.name)
31
+ for f in fields(self)
32
+ if f.init and f.name != "__syntax__"
33
+ }
34
+
35
+ @classmethod
36
+ def get_syntax(cls):
37
+ return getattr(cls, "__syntax__", Syntax.braces)
38
+
39
+
40
+ # decorator
41
+ def datamap(_cls=None, *, syntax=Syntax.braces):
42
+ def wrap(cls):
43
+ cls.__syntax__ = syntax
44
+ return dataclass(frozen=True)(cls)
45
+ return wrap if _cls is None else wrap(_cls)
46
+
47
+
48
+ # core templating
49
+ def mapit(text: str, *maps, **runtime):
50
+ maps = (*get_default_maps(), *maps)
51
+ for m in maps:
52
+ if isinstance(m, type) and is_dataclass(m):
53
+ m = m()
54
+ if is_dataclass(m):
55
+ pattern = m.get_syntax()
56
+ d = m.as_map()
57
+ elif hasattr(m, "as_dict"):
58
+ pattern = Syntax.angles
59
+ d = m.as_dict()
60
+ elif isinstance(m, dict):
61
+ pattern = runtime.get("syntax")
62
+ if not pattern:
63
+ continue
64
+ d = m
65
+ else:
66
+ continue
67
+ def repl(match):
68
+ k = match.group(1)
69
+ return str(d.get(k, match.group(0)))
70
+ text = re.sub(pattern, repl, text)
71
+ return text
@@ -0,0 +1,6 @@
1
+ from .ascii import ColorMap, ASCII_COLOR_MAP
2
+
3
+ __all__ = [
4
+ 'ColorMap',
5
+ 'ASCII_COLOR_MAP',
6
+ ]
@@ -0,0 +1,30 @@
1
+ from hungerlib import datamap, Syntax, mapit, set_default_maps
2
+
3
+ # ascii colormap
4
+ @datamap(syntax=Syntax.angles)
5
+ class ColorMap:
6
+ black: str = "\033[30m"
7
+ dark_blue: str = "\033[34m"
8
+ dark_green: str = "\033[32m"
9
+ dark_aqua: str = "\033[36m"
10
+ dark_red: str = "\033[31m"
11
+ dark_purple: str = "\033[35m"
12
+ gold: str = "\033[33m"
13
+ gray: str = "\033[37m"
14
+ dark_gray: str = "\033[90m"
15
+ blue: str = "\033[94m"
16
+ green: str = "\033[92m"
17
+ aqua: str = "\033[96m"
18
+ red: str = "\033[91m"
19
+ light_purple: str = "\033[95m"
20
+ yellow: str = "\033[93m"
21
+ white: str = "\033[97m"
22
+ reset: str = "\033[0m"
23
+ bold: str = "\033[1m"
24
+ italic: str = "\033[3m"
25
+
26
+ def as_dict(self):
27
+ return {f"<{k}>": getattr(self, k) for k in self.__dataclass_fields__}
28
+
29
+
30
+ ASCII_COLOR_MAP = ColorMap()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hungerlib
3
- Version: 3.0.dev6
3
+ Version: 3.0.dev8
4
4
  Summary: Powerful automation library for Pterodactyl.
5
5
  Author: iFamished
6
6
  License: MIT
@@ -24,6 +24,8 @@ src/hungerlib/api/databases.py
24
24
  src/hungerlib/api/filemanager.py
25
25
  src/hungerlib/api/schedule.py
26
26
  src/hungerlib/api/startup.py
27
+ src/hungerlib/maps/__init__.py
28
+ src/hungerlib/maps/ascii.py
27
29
  src/hungerlib/servers/__init__.py
28
30
  src/hungerlib/servers/generic.py
29
31
  src/hungerlib/servers/minecraft.py
@@ -1,60 +0,0 @@
1
- import re
2
- from dataclasses import dataclass, fields, is_dataclass
3
-
4
-
5
- class Syntax:
6
- BRACES = r"\{([^{}]+)\}" # {key}
7
- DOLLARS = r"\$\{([^{}]+)\}" # ${key}
8
- ANGLES = r"<([^<>]+)>" # <key>
9
- PERCENTS = r"%([^%]+)%" # %key%
10
-
11
-
12
- @dataclass
13
- class DataMap:
14
- __syntax__: str = Syntax.BRACES
15
-
16
- def as_map(self) -> dict:
17
- return {
18
- f.name: getattr(self, f.name)
19
- for f in fields(self)
20
- if f.init and f.name != "__syntax__"
21
- }
22
-
23
- @classmethod
24
- def syntax(cls) -> str:
25
- return getattr(cls, "__syntax__", Syntax.BRACES)
26
-
27
-
28
- def mapit(text: str, *maps, **runtime) -> str:
29
- for m in maps:
30
- # auto-instantiate dataclass classes
31
- if isinstance(m, type) and is_dataclass(m):
32
- m = m()
33
-
34
- # dataclass instance to dict
35
- if is_dataclass(m):
36
- pattern = m.syntax()
37
- dmap = m.as_map()
38
-
39
- # colormap-like objects to dict
40
- elif hasattr(m, "as_dict"):
41
- pattern = Syntax.ANGLES
42
- dmap = m.as_dict()
43
-
44
- # raw dict
45
- elif isinstance(m, dict):
46
- pattern = runtime.get("syntax", None)
47
- if not pattern:
48
- continue
49
- dmap = m
50
-
51
- else:
52
- continue
53
-
54
- # apply this map's syntax only
55
- def repl(match):
56
- key = match.group(1)
57
- return str(dmap.get(key, match.group(0)))
58
- text = re.sub(pattern, repl, text)
59
-
60
- return text
File without changes
File without changes
File without changes