hungerlib 1.2.2b0__tar.gz → 1.3.1.dev0__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 (23) hide show
  1. {hungerlib-1.2.2b0/src/hungerlib.egg-info → hungerlib-1.3.1.dev0}/PKG-INFO +1 -1
  2. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/pyproject.toml +1 -1
  3. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/__init__.py +14 -12
  4. hungerlib-1.3.1.dev0/src/hungerlib/addons/_generic.py +102 -0
  5. hungerlib-1.3.1.dev0/src/hungerlib/addons/minecraft.py +25 -0
  6. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0/src/hungerlib.egg-info}/PKG-INFO +1 -1
  7. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib.egg-info/SOURCES.txt +3 -2
  8. hungerlib-1.2.2b0/src/hungerlib/utils.py +0 -72
  9. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/LICENSE +0 -0
  10. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/README.md +0 -0
  11. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/setup.cfg +0 -0
  12. {hungerlib-1.2.2b0/src/hungerlib → hungerlib-1.3.1.dev0/src/hungerlib/addons}/colormap.py +0 -0
  13. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/config.py +0 -0
  14. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/logger.py +0 -0
  15. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/mchelpers.py +0 -0
  16. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/panel.py +0 -0
  17. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/scheduler.py +0 -0
  18. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/servers/_generic.py +0 -0
  19. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib/servers/minecraft.py +0 -0
  20. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib.egg-info/dependency_links.txt +0 -0
  21. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib.egg-info/requires.txt +0 -0
  22. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/hungerlib.egg-info/top_level.txt +0 -0
  23. {hungerlib-1.2.2b0 → hungerlib-1.3.1.dev0}/src/tests/test_imports.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hungerlib
3
- Version: 1.2.2b0
3
+ Version: 1.3.1.dev0
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 = "1.2.2-beta"
10
+ version = "1.3.1-dev"
11
11
  description = "Powerful automation library for Pterodactyl."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"
@@ -10,14 +10,17 @@ except PackageNotFoundError:
10
10
  # api map
11
11
  # name > (module_path, attribute_name or None)
12
12
  _EXPORTS = {
13
- # modules"
14
- "colormap": ("colormap", None),
13
+ # modules
15
14
  "config": ("config", None),
16
15
  "logger": ("logger", None),
17
16
  "mchelpers": ("mchelpers", None),
18
17
  "panel": ("panel", None),
19
18
  "scheduler": ("scheduler", None),
20
- "utils": ("utils", None),
19
+
20
+ # addon modules
21
+ "genericAddons": ('addons._generic', None),
22
+ 'minecraftAddons': ('addons.minecraft', None),
23
+ "colormap": ("addons.colormap", None),
21
24
 
22
25
  # classes / functions
23
26
  "Panel": ("panel", "Panel"),
@@ -32,15 +35,14 @@ _EXPORTS = {
32
35
  "secsUntil": ("scheduler", "secsUntil"),
33
36
  "minsUntil": ("scheduler", "minsUntil"),
34
37
 
35
- # color maps
36
- "MC_COLOR_MAP": ("colormap", "MC_COLOR_MAP"),
37
- "ASCI_COLOR_MAP": ("colormap", "ASCI_COLOR_MAP"),
38
-
39
- # utils
40
- "checkLag": ("utils", "checkLag"),
41
- "validateAll": ("utils", 'validateAll'),
42
- "waitForOnline": ("utils", 'waitForOnline'),
43
- "waitForOffline": ("utils", 'waitForOffline')
38
+ # addons
39
+ "runCountdownEvents": ('addons._generic', 'runCountdownEvents'),
40
+ 'validateAll': ('addons._generic', 'validateAll'),
41
+ "waitForOnline": ("addons._generic", 'waitForOnline'),
42
+ "waitForOffline": ("addons._generic", 'waitForOffline'),
43
+ 'checkLag': ('addons.minecraft', 'checkLag'),
44
+ "MC_COLOR_MAP": ("addons.colormap", "MC_COLOR_MAP"),
45
+ "ASCI_COLOR_MAP": ("addons.colormap", "ASCI_COLOR_MAP")
44
46
 
45
47
  }
46
48
 
@@ -0,0 +1,102 @@
1
+ import time
2
+ from datetime import datetime
3
+
4
+ # Special use case helper functions that operate on server objects
5
+ def runCountdownEvents(
6
+ target_time,
7
+ minute_callbacks=None,
8
+ second_callbacks=None,
9
+ tick_interval=1
10
+ ):
11
+ """
12
+ A simple, readable countdown engine.
13
+
14
+ - Counts down until `target_time`
15
+ - When the countdown hits a configured minute mark, it runs that callback
16
+ - When the countdown hits a configured second mark, it runs that callback
17
+
18
+ Parameters:
19
+ target_time (datetime):
20
+ The time we are counting down to.
21
+
22
+ minute_callbacks (dict[int, callable]):
23
+ Example: {5: func, 1: func}
24
+
25
+ second_callbacks (dict[int, callable]):
26
+ Example: {10: func, 5: func, 1: func}
27
+
28
+ tick_interval (int):
29
+ How often to check the countdown (in seconds).
30
+ """
31
+
32
+ # Default to empty dicts if none provided
33
+ minute_callbacks = minute_callbacks or {}
34
+ second_callbacks = second_callbacks or {}
35
+
36
+ # Track which events we've already fired
37
+ fired_minutes = set()
38
+ fired_seconds = set()
39
+
40
+ while True:
41
+ now = datetime.now()
42
+ seconds_left = int((target_time - now).total_seconds())
43
+ minutes_left = seconds_left // 60
44
+
45
+ # Countdown finished
46
+ if seconds_left <= 0:
47
+ return
48
+
49
+ # Fire minute-based events
50
+ if minutes_left in minute_callbacks and minutes_left not in fired_minutes:
51
+ fired_minutes.add(minutes_left)
52
+ minute_callbacks[minutes_left]()
53
+
54
+ # Fire second-based events
55
+ if seconds_left in second_callbacks and seconds_left not in fired_seconds:
56
+ fired_seconds.add(seconds_left)
57
+ second_callbacks[seconds_left]()
58
+
59
+ time.sleep(tick_interval)
60
+
61
+
62
+ def validateAll(panel, server):
63
+ """
64
+ Validate panel connectivity, API access, and server running state.
65
+ """
66
+ return (
67
+ panel.ping() is True and
68
+ panel.validateAPI() is True and
69
+ server.getStatus() == "running"
70
+ )
71
+
72
+
73
+ # ============================================================
74
+ # SERVER STATE HELPERS
75
+ # ============================================================
76
+
77
+ def waitForOnline(server, timeout=60, interval=2):
78
+ """
79
+ Wait until the server reports status 'running'.
80
+ Returns True if online before timeout.
81
+ """
82
+ elapsed = 0
83
+ while elapsed < timeout:
84
+ if server.isOnline():
85
+ return True
86
+ time.sleep(interval)
87
+ elapsed += interval
88
+ return False
89
+
90
+
91
+ def waitForOffline(server, timeout=60, interval=2):
92
+ """
93
+ Wait until the server reports status 'offline'.
94
+ Returns True if offline before timeout.
95
+ """
96
+ elapsed = 0
97
+ while elapsed < timeout:
98
+ if server.isOffline():
99
+ return True
100
+ time.sleep(interval)
101
+ elapsed += interval
102
+ return False
@@ -0,0 +1,25 @@
1
+ def checkLag(server, ram, cpu, nwi, nwo, tps):
2
+ """
3
+ Pure lag check.
4
+ Returns a tuple: (lag_detected: bool, reasons: list[str])
5
+ """
6
+ reasons = []
7
+
8
+ currentRAM = server.getRAM(gb=True)
9
+ currentCPU = server.getCPU()
10
+ currentNWI = server.getNetworkIn(gb=True)
11
+ currentNWO = server.getNetworkOut(gb=True)
12
+ currentTPS = server.getTPS() if hasattr(server, "getTPS") else None
13
+
14
+ if currentRAM is not None and currentRAM >= ram:
15
+ reasons.append(f"RAM: {currentRAM}GB")
16
+ if currentCPU is not None and currentCPU >= cpu:
17
+ reasons.append(f"CPU: {currentCPU}%")
18
+ if currentNWI is not None and currentNWI >= nwi:
19
+ reasons.append(f"Network Inbound: {currentNWI}GB")
20
+ if currentNWO is not None and currentNWO >= nwo:
21
+ reasons.append(f"Network Outbound: {currentNWO}GB")
22
+ if currentTPS is not None and currentTPS <= tps:
23
+ reasons.append(f"TPS: {currentTPS}")
24
+
25
+ return (len(reasons) > 0, reasons)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hungerlib
3
- Version: 1.2.2b0
3
+ Version: 1.3.1.dev0
4
4
  Summary: Powerful automation library for Pterodactyl.
5
5
  Author: iFamished
6
6
  License: MIT
@@ -2,18 +2,19 @@ LICENSE
2
2
  README.md
3
3
  pyproject.toml
4
4
  src/hungerlib/__init__.py
5
- src/hungerlib/colormap.py
6
5
  src/hungerlib/config.py
7
6
  src/hungerlib/logger.py
8
7
  src/hungerlib/mchelpers.py
9
8
  src/hungerlib/panel.py
10
9
  src/hungerlib/scheduler.py
11
- src/hungerlib/utils.py
12
10
  src/hungerlib.egg-info/PKG-INFO
13
11
  src/hungerlib.egg-info/SOURCES.txt
14
12
  src/hungerlib.egg-info/dependency_links.txt
15
13
  src/hungerlib.egg-info/requires.txt
16
14
  src/hungerlib.egg-info/top_level.txt
15
+ src/hungerlib/addons/_generic.py
16
+ src/hungerlib/addons/colormap.py
17
+ src/hungerlib/addons/minecraft.py
17
18
  src/hungerlib/servers/_generic.py
18
19
  src/hungerlib/servers/minecraft.py
19
20
  src/tests/test_imports.py
@@ -1,72 +0,0 @@
1
- import time
2
-
3
- # Special use case helper functions that operate on server objects
4
-
5
- def checkLag(server, ram, cpu, nwi, nwo, tps):
6
- """
7
- Pure lag check.
8
- Returns a tuple: (lag_detected: bool, reasons: list[str])
9
- """
10
- reasons = []
11
-
12
- currentRAM = server.getRAM(gb=True)
13
- currentCPU = server.getCPU()
14
- currentNWI = server.getNetworkIn(gb=True)
15
- currentNWO = server.getNetworkOut(gb=True)
16
- currentTPS = server.getTPS() if hasattr(server, "getTPS") else None
17
-
18
- if currentRAM is not None and currentRAM >= ram:
19
- reasons.append(f"RAM: {currentRAM}GB")
20
- if currentCPU is not None and currentCPU >= cpu:
21
- reasons.append(f"CPU: {currentCPU}%")
22
- if currentNWI is not None and currentNWI >= nwi:
23
- reasons.append(f"Network Inbound: {currentNWI}GB")
24
- if currentNWO is not None and currentNWO >= nwo:
25
- reasons.append(f"Network Outbound: {currentNWO}GB")
26
- if currentTPS is not None and currentTPS <= tps:
27
- reasons.append(f"TPS: {currentTPS}")
28
-
29
- return (len(reasons) > 0, reasons)
30
-
31
-
32
- def validateAll(panel, server):
33
- """
34
- Validate panel connectivity, API access, and server running state.
35
- """
36
- return (
37
- panel.ping() is True and
38
- panel.validateAPI() is True and
39
- server.getStatus() == "running"
40
- )
41
-
42
-
43
- # ============================================================
44
- # SERVER STATE HELPERS
45
- # ============================================================
46
-
47
- def waitForOnline(server, timeout=60, interval=2):
48
- """
49
- Wait until the server reports status 'running'.
50
- Returns True if online before timeout.
51
- """
52
- elapsed = 0
53
- while elapsed < timeout:
54
- if server.isOnline():
55
- return True
56
- time.sleep(interval)
57
- elapsed += interval
58
- return False
59
-
60
-
61
- def waitForOffline(server, timeout=60, interval=2):
62
- """
63
- Wait until the server reports status 'offline'.
64
- Returns True if offline before timeout.
65
- """
66
- elapsed = 0
67
- while elapsed < timeout:
68
- if server.isOffline():
69
- return True
70
- time.sleep(interval)
71
- elapsed += interval
72
- return False
File without changes
File without changes
File without changes