fred-oss 0.8.0__tar.gz → 0.9.0__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 (41) hide show
  1. {fred_oss-0.8.0/src/main/fred_oss.egg-info → fred_oss-0.9.0}/PKG-INFO +1 -1
  2. fred_oss-0.9.0/src/main/fred/version +1 -0
  3. fred_oss-0.9.0/src/main/fred/worker/runner/client.py +101 -0
  4. {fred_oss-0.8.0 → fred_oss-0.9.0/src/main/fred_oss.egg-info}/PKG-INFO +1 -1
  5. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred_oss.egg-info/SOURCES.txt +1 -0
  6. fred_oss-0.8.0/src/main/fred/version +0 -1
  7. {fred_oss-0.8.0 → fred_oss-0.9.0}/MANIFEST.in +0 -0
  8. {fred_oss-0.8.0 → fred_oss-0.9.0}/NOTICE.txt +0 -0
  9. {fred_oss-0.8.0 → fred_oss-0.9.0}/README.md +0 -0
  10. {fred_oss-0.8.0 → fred_oss-0.9.0}/requirements.txt +0 -0
  11. {fred_oss-0.8.0 → fred_oss-0.9.0}/setup.cfg +0 -0
  12. {fred_oss-0.8.0 → fred_oss-0.9.0}/setup.py +0 -0
  13. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/cli/__init__.py +0 -0
  14. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/cli/__main__.py +0 -0
  15. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/cli/interface.py +0 -0
  16. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/cli/main.py +0 -0
  17. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/__init__.py +0 -0
  18. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/cli_ext.py +0 -0
  19. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/runtime.py +0 -0
  20. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/runtimes/__init__.py +0 -0
  21. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/runtimes/scanner.py +0 -0
  22. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/runtimes/sync.py +0 -0
  23. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/wrappers/__init__.py +0 -0
  24. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/databricks/wrappers/dbutils.py +0 -0
  25. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/runpod/__init__.py +0 -0
  26. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/runpod/cli_ext.py +0 -0
  27. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/integrations/runpod/helper.py +0 -0
  28. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/maturity.py +0 -0
  29. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/settings.py +0 -0
  30. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/utils/__init__.py +0 -0
  31. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/utils/dateops.py +0 -0
  32. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/utils/runtime.py +0 -0
  33. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/version.py +0 -0
  34. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/worker/__init__.py +0 -0
  35. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/worker/interface.py +0 -0
  36. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/worker/runner/__init__.py +0 -0
  37. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred/worker/runner/handler.py +0 -0
  38. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred_oss.egg-info/dependency_links.txt +0 -0
  39. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred_oss.egg-info/entry_points.txt +0 -0
  40. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred_oss.egg-info/requires.txt +0 -0
  41. {fred_oss-0.8.0 → fred_oss-0.9.0}/src/main/fred_oss.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fred-oss
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: FREDOSS
5
5
  Home-page: https://fred.fahera.mx
6
6
  Author: Fahera Research, Education, and Development
@@ -0,0 +1 @@
1
+ 0.9.0
@@ -0,0 +1,101 @@
1
+ import uuid
2
+ import json
3
+ from dataclasses import dataclass
4
+
5
+ from fred.settings import (
6
+ get_environ_variable,
7
+ logger_manager,
8
+ )
9
+
10
+ from redis import Redis
11
+
12
+ logger = logger_manager.get_logger(name=__name__)
13
+
14
+
15
+ @dataclass(frozen=True, slots=True)
16
+ class RunnerClient:
17
+ instance: Redis
18
+ req_queue: str
19
+ res_queue: str
20
+
21
+ @classmethod
22
+ def auto(cls, **kwargs) -> "RunnerClient":
23
+ redis_configs = {
24
+ "host": kwargs.get("host") or get_environ_variable(name="REDIS_HOST", default="localhost"),
25
+ "port": int(kwargs.get("port") or get_environ_variable(name="REDIS_PORT", default=6379)),
26
+ "db": int(kwargs.get("db") or get_environ_variable(name="REDIS_DB", default=0)),
27
+ }
28
+ redis_instance = Redis(**redis_configs)
29
+ req_queue = kwargs.get("request_queue") or get_environ_variable(name="FRD_RUNNER_REQUEST_QUEUE", default=None) or (
30
+ logger.warning("Redis request queue not specified; defaulting to 'req:demo'.") or "req:demo"
31
+ )
32
+ res_queue = kwargs.get("response_queue") or get_environ_variable(name="FRD_RUNNER_RESPONSE_QUEUE", default=None) or (
33
+ logger.warning("Redis response queue not specified; defaulting to inferring pattern.") or f"res:{req_queue.split(':')[-1]}"
34
+ )
35
+ logger.info(f"Connecting to Redis, using request queue '{req_queue}' and response queue '{res_queue}'.")
36
+ return cls(
37
+ instance=redis_instance,
38
+ req_queue=req_queue,
39
+ res_queue=res_queue,
40
+ )
41
+
42
+ @property
43
+ def PING(self):
44
+ return self.signal("PING")
45
+
46
+ @property
47
+ def STOP(self):
48
+ return self.signal("STOP")
49
+
50
+ def signal(self, signal: str):
51
+ # TODO: Validate signals via enum
52
+ self.instance.lpush(self.req_queue, signal)
53
+
54
+ def send(self, item: dict, uuid_hash: bool = False) -> str:
55
+ item_id = item.get("item_id")
56
+ item_str = json.dumps(item)
57
+ if not item_id:
58
+ logger.warning("Item does not have 'item_id'; assigning a UUID based on the hash.")
59
+ item["item_id"] = item_id = str(uuid.uuid5(uuid.NAMESPACE_DNS, item_str)) \
60
+ if uuid_hash else str(uuid.uuid4())
61
+ item_str = json.dumps(item)
62
+ self.instance.lpush(self.req_queue, item_str)
63
+ self.instance.set(f"item_status:{item_id}", "IN_QUEUE")
64
+ return item_id
65
+
66
+ def fetch_status(self, item_id: str) -> str | None:
67
+ status_raw = self.instance.get(f"item_status:{item_id}")
68
+ if not status_raw:
69
+ logger.info(f"No status found for item_id '{item_id}'.")
70
+ return None
71
+ return status_raw.decode("utf-8")
72
+
73
+ def fetch_result(self, item_id: str, blocking: bool = False) -> dict | None:
74
+ match self.fetch_status(item_id=item_id):
75
+ case None:
76
+ logger.info(f"No status found for item_id '{item_id}'.")
77
+ return None
78
+ case "IN_QUEUE" | "PROCESSING":
79
+ if blocking:
80
+ logger.info(f"Blocking until item '{item_id}' is completed.")
81
+ while (status := self.fetch_status(item_id=item_id)) in ("IN_QUEUE", "PROCESSING"):
82
+ continue
83
+ else:
84
+ logger.info(f"Item '{item_id}' is still in progress (current status: '{self.fetch_status(item_id=item_id)}').")
85
+ return None
86
+ case "FAILED":
87
+ logger.error(f"Item '{item_id}' processing failed.")
88
+ return None
89
+ case "COMPLETED":
90
+ result_raw = self.instance.get(f"item_output:{item_id}")
91
+ if result_raw:
92
+ try:
93
+ return json.loads(result_raw)
94
+ except json.JSONDecodeError as e:
95
+ logger.error(f"Error decoding JSON result for item_id '{item_id}': {e}")
96
+ return None
97
+ else:
98
+ logger.error(f"No result found for item_id '{item_id}'.")
99
+ return None
100
+ case status:
101
+ logger.warning(f"Item '{item_id}' has unrecognized status '{status}'. Proceeding to fetch result.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fred-oss
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: FREDOSS
5
5
  Home-page: https://fred.fahera.mx
6
6
  Author: Fahera Research, Education, and Development
@@ -28,6 +28,7 @@ src/main/fred/utils/runtime.py
28
28
  src/main/fred/worker/__init__.py
29
29
  src/main/fred/worker/interface.py
30
30
  src/main/fred/worker/runner/__init__.py
31
+ src/main/fred/worker/runner/client.py
31
32
  src/main/fred/worker/runner/handler.py
32
33
  src/main/fred_oss.egg-info/PKG-INFO
33
34
  src/main/fred_oss.egg-info/SOURCES.txt
@@ -1 +0,0 @@
1
- 0.8.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes