fred-oss 0.44.0__tar.gz → 0.45.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 (93) hide show
  1. {fred_oss-0.44.0/src/main/fred_oss.egg-info → fred_oss-0.45.0}/PKG-INFO +1 -1
  2. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/impl.py +35 -3
  3. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/result.py +0 -1
  4. fred_oss-0.45.0/src/main/fred/version +1 -0
  5. {fred_oss-0.44.0 → fred_oss-0.45.0/src/main/fred_oss.egg-info}/PKG-INFO +1 -1
  6. fred_oss-0.44.0/src/main/fred/version +0 -1
  7. {fred_oss-0.44.0 → fred_oss-0.45.0}/MANIFEST.in +0 -0
  8. {fred_oss-0.44.0 → fred_oss-0.45.0}/NOTICE.txt +0 -0
  9. {fred_oss-0.44.0 → fred_oss-0.45.0}/README.md +0 -0
  10. {fred_oss-0.44.0 → fred_oss-0.45.0}/requirements.txt +0 -0
  11. {fred_oss-0.44.0 → fred_oss-0.45.0}/setup.cfg +0 -0
  12. {fred_oss-0.44.0 → fred_oss-0.45.0}/setup.py +0 -0
  13. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/cli/__init__.py +0 -0
  14. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/cli/__main__.py +0 -0
  15. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/cli/interface.py +0 -0
  16. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/cli/main.py +0 -0
  17. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/__init__.py +0 -0
  18. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/comp/__init__.py +0 -0
  19. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/comp/_keyval.py +0 -0
  20. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/comp/_pubsub.py +0 -0
  21. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/comp/_queue.py +0 -0
  22. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/comp/catalog.py +0 -0
  23. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/comp/interface.py +0 -0
  24. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/service/__init__.py +0 -0
  25. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/service/_redis.py +0 -0
  26. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/service/_stdlib.py +0 -0
  27. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/service/catalog.py +0 -0
  28. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/service/interface.py +0 -0
  29. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/dao/service/utils.py +0 -0
  30. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/__init__.py +0 -0
  31. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/callback/__init__.py +0 -0
  32. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/callback/_function.py +0 -0
  33. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/callback/catalog.py +0 -0
  34. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/callback/interface.py +0 -0
  35. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/settings.py +0 -0
  36. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/future/utils.py +0 -0
  37. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/__init__.py +0 -0
  38. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/cli_ext.py +0 -0
  39. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/runtime.py +0 -0
  40. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/runtimes/__init__.py +0 -0
  41. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/runtimes/scanner.py +0 -0
  42. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/runtimes/sync.py +0 -0
  43. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/wrappers/__init__.py +0 -0
  44. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/databricks/wrappers/dbutils.py +0 -0
  45. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/runpod/__init__.py +0 -0
  46. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/runpod/cli_ext.py +0 -0
  47. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/integrations/runpod/helper.py +0 -0
  48. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/maturity.py +0 -0
  49. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/monad/__init__.py +0 -0
  50. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/monad/_either.py +0 -0
  51. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/monad/catalog.py +0 -0
  52. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/monad/interface.py +0 -0
  53. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/settings.py +0 -0
  54. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/utils/__init__.py +0 -0
  55. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/utils/dateops.py +0 -0
  56. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/utils/runtime.py +0 -0
  57. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/version.py +0 -0
  58. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/__init__.py +0 -0
  59. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/interface.py +0 -0
  60. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/__init__.py +0 -0
  61. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/backend.py +0 -0
  62. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/client.py +0 -0
  63. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/handler.py +0 -0
  64. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/__init__.py +0 -0
  65. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/_handler.py +0 -0
  66. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/_item.py +0 -0
  67. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/_request.py +0 -0
  68. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/_runner_spec.py +0 -0
  69. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/catalog.py +0 -0
  70. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/model/interface.py +0 -0
  71. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/plugins/__init__.py +0 -0
  72. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/plugins/_local.py +0 -0
  73. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/plugins/_runpod.py +0 -0
  74. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/plugins/catalog.py +0 -0
  75. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/plugins/interface.py +0 -0
  76. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/__init__.py +0 -0
  77. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/auth.py +0 -0
  78. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/cli_ext.py +0 -0
  79. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/routers/__init__.py +0 -0
  80. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/routers/_runner.py +0 -0
  81. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/routers/catalog.py +0 -0
  82. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/routers/interface.py +0 -0
  83. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/server.py +0 -0
  84. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/rest/settings.py +0 -0
  85. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/settings.py +0 -0
  86. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/signal.py +0 -0
  87. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/status.py +0 -0
  88. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred/worker/runner/utils.py +0 -0
  89. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred_oss.egg-info/SOURCES.txt +0 -0
  90. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred_oss.egg-info/dependency_links.txt +0 -0
  91. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred_oss.egg-info/entry_points.txt +0 -0
  92. {fred_oss-0.44.0 → fred_oss-0.45.0}/src/main/fred_oss.egg-info/requires.txt +0 -0
  93. {fred_oss-0.44.0 → fred_oss-0.45.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.44.0
3
+ Version: 0.45.0
4
4
  Summary: FREDOSS
5
5
  Home-page: https://fred.fahera.mx
6
6
  Author: Fahera Research, Education, and Development
@@ -1,3 +1,4 @@
1
+ import time
1
2
  from threading import Thread
2
3
  from typing import (
3
4
  Callable,
@@ -204,8 +205,22 @@ class Future(MonadInterface[A]):
204
205
  return self.wait(timeout=timeout).resolve()
205
206
 
206
207
  @classmethod
207
- def from_value(cls, val: A) -> 'Future[A]':
208
- return Future(function=lambda: val)
208
+ def from_value(cls, val: A, **kwargs) -> 'Future[A]':
209
+ """
210
+ Creates a Future that is immediately resolved with the given value.
211
+
212
+ Args:
213
+ val (A): The value to resolve the Future with.
214
+ **kwargs: Additional keyword arguments forwarded to the Future constructor.
215
+ These may include parameters such as:
216
+ - parent_id (Optional[str]): The parent future's ID.
217
+ - expiration (Optional[float]): Expiration time for the future.
218
+ - callback (Optional[CallbackInterface]): Callback to invoke on completion.
219
+ For a full list of accepted parameters, see the Future class documentation.
220
+ Returns:
221
+ Future[A]: A Future instance resolved with the provided value.
222
+ """
223
+ return Future(function=lambda: val, **kwargs)
209
224
 
210
225
  def flat_map(self, function: Callable[[A], 'Future[B]'], timeout: Optional[float] = None) -> 'Future[B]':
211
226
  """Chains the current future with another future-producing function.
@@ -305,6 +320,8 @@ class Future(MonadInterface[A]):
305
320
  future_id: str,
306
321
  on_start: Optional[CallbackInterface] = None,
307
322
  on_complete: Optional[CallbackInterface] = None,
323
+ retry_delay: float = 0.2,
324
+ retry: int = 3,
308
325
  ) -> 'Future[A]':
309
326
  """Subscribes to updates for an existing future using a publish-subscribe mechanism.
310
327
  This method allows for receiving real-time updates about the future's state
@@ -318,9 +335,13 @@ class Future(MonadInterface[A]):
318
335
  Returns:
319
336
  Future[A]: A Future instance that will execute the subscription logic.
320
337
  """
338
+ # TODO: Consider adding a timeout parameter to avoid waiting indefinitely...
339
+ # TODO: There's a known issue where if the future completes before we subscribe,
340
+ # we might miss the completion message.
321
341
  # Define a closure that will handle incoming messages from the pub-sub channel
322
342
  def closure():
323
343
  for payload in FutureResult._get_bcast_channel(future_id=future_id).subscribe():
344
+ logger.info(f"Received pubsub message for future '{future_id}': {payload}")
324
345
  if payload.get("type") != "message":
325
346
  continue
326
347
  message = payload.get("data")
@@ -352,11 +373,22 @@ class Future(MonadInterface[A]):
352
373
  case instance:
353
374
  # The future-result can be None if the future_id does not exist
354
375
  if not instance:
355
- raise ValueError(f"Future with ID '{future_id}' does not exist.")
376
+ if retry <= 0:
377
+ raise ValueError(f"Future with ID '{future_id}' does not exist.")
378
+ logger.error(f"Future with ID '{future_id}' does not exist; attempting to retry ({retry} retries left).")
379
+ time.sleep(retry_delay)
380
+ return cls.subscribe(
381
+ future_id=future_id,
382
+ on_start=on_start,
383
+ on_complete=on_complete,
384
+ retry_delay=retry_delay,
385
+ retry=max(0, retry - 1),
386
+ )
356
387
  # If the future exists, but is not configured for broadcast, raise an error...
357
388
  if not instance.broadcast:
358
389
  raise ValueError("Future is not configured for broadcast; cannot subscribe.")
359
390
  # If the future exists and is configured for broadcast, subscribe to updates...
391
+ logger.info(f"Subscribing to future '{future_id}' via broadcast channel.")
360
392
  return cls(
361
393
  function=closure,
362
394
  **shared_params
@@ -107,7 +107,6 @@ class FutureResult(Generic[A], FutureBackend.infer_backend()):
107
107
  self.bcast_channel.publish(item=item or self.stringify())
108
108
  return True
109
109
  return False
110
-
111
110
 
112
111
  @classmethod
113
112
  def _get_status_key(cls, future_id: str) -> FredKeyVal:
@@ -0,0 +1 @@
1
+ 0.45.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fred-oss
3
- Version: 0.44.0
3
+ Version: 0.45.0
4
4
  Summary: FREDOSS
5
5
  Home-page: https://fred.fahera.mx
6
6
  Author: Fahera Research, Education, and Development
@@ -1 +0,0 @@
1
- 0.44.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes