digitalkin 0.3.0rc0__py3-none-any.whl → 0.3.0rc1__py3-none-any.whl

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 (45) hide show
  1. digitalkin/__version__.py +1 -1
  2. digitalkin/core/__init__.py +1 -0
  3. digitalkin/core/job_manager/__init__.py +1 -0
  4. digitalkin/{modules → core}/job_manager/base_job_manager.py +5 -3
  5. digitalkin/{modules → core}/job_manager/single_job_manager.py +9 -10
  6. digitalkin/{modules → core}/job_manager/taskiq_broker.py +2 -3
  7. digitalkin/{modules → core}/job_manager/taskiq_job_manager.py +5 -6
  8. digitalkin/core/task_manager/__init__.py +1 -0
  9. digitalkin/{modules/job_manager → core/task_manager}/surrealdb_repository.py +0 -1
  10. digitalkin/{modules/job_manager → core/task_manager}/task_manager.py +98 -48
  11. digitalkin/{modules/job_manager → core/task_manager}/task_session.py +60 -17
  12. digitalkin/grpc_servers/__init__.py +1 -19
  13. digitalkin/grpc_servers/_base_server.py +2 -2
  14. digitalkin/grpc_servers/module_server.py +2 -2
  15. digitalkin/grpc_servers/module_servicer.py +3 -3
  16. digitalkin/grpc_servers/registry_server.py +1 -1
  17. digitalkin/grpc_servers/utils/__init__.py +1 -0
  18. digitalkin/grpc_servers/utils/exceptions.py +0 -8
  19. digitalkin/grpc_servers/utils/grpc_client_wrapper.py +1 -1
  20. digitalkin/mixins/chat_history_mixin.py +2 -0
  21. digitalkin/mixins/file_history_mixin.py +14 -20
  22. digitalkin/mixins/filesystem_mixin.py +1 -2
  23. digitalkin/mixins/logger_mixin.py +4 -12
  24. digitalkin/models/core/__init__.py +1 -0
  25. digitalkin/{modules/job_manager → models/core}/job_manager_models.py +3 -3
  26. digitalkin/models/{module → core}/task_monitor.py +7 -5
  27. digitalkin/models/grpc_servers/__init__.py +1 -0
  28. digitalkin/models/module/module_context.py +33 -1
  29. digitalkin/models/services/cost.py +1 -0
  30. digitalkin/modules/_base_module.py +16 -80
  31. digitalkin/services/cost/grpc_cost.py +1 -1
  32. digitalkin/services/filesystem/grpc_filesystem.py +1 -1
  33. digitalkin/services/setup/grpc_setup.py +1 -1
  34. digitalkin/services/storage/grpc_storage.py +1 -1
  35. digitalkin/utils/arg_parser.py +1 -1
  36. digitalkin/utils/development_mode_action.py +2 -2
  37. digitalkin/utils/package_discover.py +1 -2
  38. {digitalkin-0.3.0rc0.dist-info → digitalkin-0.3.0rc1.dist-info}/METADATA +1 -1
  39. {digitalkin-0.3.0rc0.dist-info → digitalkin-0.3.0rc1.dist-info}/RECORD +44 -39
  40. digitalkin/grpc_servers/utils/factory.py +0 -180
  41. /digitalkin/{grpc_servers/utils → models/grpc_servers}/models.py +0 -0
  42. /digitalkin/{grpc_servers/utils → models/grpc_servers}/types.py +0 -0
  43. {digitalkin-0.3.0rc0.dist-info → digitalkin-0.3.0rc1.dist-info}/WHEEL +0 -0
  44. {digitalkin-0.3.0rc0.dist-info → digitalkin-0.3.0rc1.dist-info}/licenses/LICENSE +0 -0
  45. {digitalkin-0.3.0rc0.dist-info → digitalkin-0.3.0rc1.dist-info}/top_level.txt +0 -0
@@ -50,13 +50,7 @@ class BaseModule( # noqa: PLR0904
50
50
  services_config_params: ClassVar[dict[str, dict[str, Any | None] | None]]
51
51
  services_config: ServicesConfig
52
52
 
53
- # runtime params
54
- job_id: str
55
- mission_id: str
56
- setup_id: str
57
- setup_version_id: str
58
-
59
- def _init_strategies(self) -> dict[str, Any]:
53
+ def _init_strategies(self, mission_id: str, setup_id: str, setup_version_id: str) -> dict[str, Any]:
60
54
  """Initialize the services configuration.
61
55
 
62
56
  Returns:
@@ -73,9 +67,9 @@ class BaseModule( # noqa: PLR0904
73
67
  return {
74
68
  service_name: self.services_config.init_strategy(
75
69
  service_name,
76
- self.mission_id,
77
- self.setup_id,
78
- self.setup_version_id,
70
+ mission_id,
71
+ setup_id,
72
+ setup_version_id,
79
73
  )
80
74
  for service_name in self.services_config.valid_strategy_names()
81
75
  }
@@ -88,23 +82,19 @@ class BaseModule( # noqa: PLR0904
88
82
  setup_version_id: str,
89
83
  ) -> None:
90
84
  """Initialize the module."""
91
- self.job_id: str = job_id
92
- self.mission_id: str = mission_id
93
- # Setup reference needed for the overall Kin scope as the filesystem context
94
- self.setup_id: str = setup_id
95
- # SetupVersion reference needed for the precise Kin scope as the cost
96
- self.setup_version_id: str = setup_version_id
97
85
  self._status = ModuleStatus.CREATED
98
86
 
99
87
  # Initialize minimum context
100
88
  self.context = ModuleContext(
101
89
  # Initialize services configuration
102
- **self._init_strategies(),
90
+ **self._init_strategies(mission_id, setup_id, setup_version_id),
103
91
  session={
92
+ "setup_id": setup_id,
104
93
  "mission_id": mission_id,
105
94
  "setup_version_id": setup_version_id,
106
95
  "job_id": job_id,
107
96
  },
97
+ callbacks={"logger": logger},
108
98
  )
109
99
 
110
100
  @property
@@ -335,7 +325,6 @@ class BaseModule( # noqa: PLR0904
335
325
  Args:
336
326
  input_data (InputModelT): The input data to be processed by the module.
337
327
  setup_data (SetupModelT): The setup or configuration data required for the module.
338
- callback (Callable[[OutputModelT], Coroutine[Any, Any, None]]): callback to be invoked to stream any result.
339
328
 
340
329
  Raises:
341
330
  ValueError: If no handler for the protocol is found.
@@ -368,51 +357,15 @@ class BaseModule( # noqa: PLR0904
368
357
  asyncio.CancelledError: If the module is cancelled
369
358
  """
370
359
  try:
371
- logger.info(
372
- "Starting module %s",
373
- self.name,
374
- extra={
375
- "mission_id": self.mission_id,
376
- "setup_id": self.setup_id,
377
- "setup_version_id": self.setup_version_id,
378
- "job_id": self.job_id,
379
- },
380
- )
360
+ logger.info("Starting module %s", self.name, extra=self.context.session.current_ids())
381
361
  await self.run(input_data, setup_data)
382
- logger.info(
383
- "Module %s finished",
384
- self.name,
385
- extra={
386
- "mission_id": self.mission_id,
387
- "setup_id": self.setup_id,
388
- "setup_version_id": self.setup_version_id,
389
- "job_id": self.job_id,
390
- },
391
- )
362
+ logger.info("Module %s finished", self.name, extra=self.context.session.current_ids())
392
363
  except asyncio.CancelledError:
393
364
  self._status = ModuleStatus.CANCELLED
394
- logger.error(
395
- "Module %s cancelled",
396
- self.name,
397
- extra={
398
- "mission_id": self.mission_id,
399
- "setup_id": self.setup_id,
400
- "setup_version_id": self.setup_version_id,
401
- "job_id": self.job_id,
402
- },
403
- )
365
+ logger.error("Module %s cancelled", self.name, extra=self.context.session.current_ids())
404
366
  except Exception:
405
367
  self._status = ModuleStatus.FAILED
406
- logger.exception(
407
- "Error inside module %s",
408
- self.name,
409
- extra={
410
- "mission_id": self.mission_id,
411
- "setup_id": self.setup_id,
412
- "setup_version_id": self.setup_version_id,
413
- "job_id": self.job_id,
414
- },
415
- )
368
+ logger.exception("Error inside module %s", self.name, extra=self.context.session.current_ids())
416
369
  else:
417
370
  self._status = ModuleStatus.STOPPING
418
371
 
@@ -425,9 +378,8 @@ class BaseModule( # noqa: PLR0904
425
378
  ) -> None:
426
379
  """Start the module."""
427
380
  try:
428
- self.context.callbacks.logger = logger
429
381
  self.context.callbacks.send_message = callback
430
- logger.info(f"Inititalize module {self.job_id}")
382
+ logger.info(f"Inititalize module {self.context.session.job_id}")
431
383
  await self.initialize(self.context, setup_data)
432
384
  except Exception as e:
433
385
  self._status = ModuleStatus.FAILED
@@ -448,7 +400,7 @@ class BaseModule( # noqa: PLR0904
448
400
  try:
449
401
  logger.debug("Init the discovered input handlers.")
450
402
  self.triggers_discoverer.init_handlers(self.context)
451
- logger.debug(f"Run lifecycle {self.job_id}")
403
+ logger.debug(f"Run lifecycle {self.context.session.job_id}")
452
404
  await self._run_lifecycle(input_data, setup_data)
453
405
  except Exception:
454
406
  self._status = ModuleStatus.FAILED
@@ -458,7 +410,7 @@ class BaseModule( # noqa: PLR0904
458
410
 
459
411
  async def stop(self) -> None:
460
412
  """Stop the module."""
461
- logger.info("Stopping module %s | job_id=%s", self.name, self.job_id)
413
+ logger.info("Stopping module %s | job_id=%s", self.name, self.context.session.job_id)
462
414
  try:
463
415
  self._status = ModuleStatus.STOPPING
464
416
  logger.debug("Module %s stopped", self.name)
@@ -477,15 +429,7 @@ class BaseModule( # noqa: PLR0904
477
429
  ) -> None:
478
430
  """Start the module."""
479
431
  try:
480
- logger.info(
481
- "Run Config Setup lifecycle",
482
- extra={
483
- "mission_id": self.mission_id,
484
- "setup_id": self.setup_id,
485
- "setup_version_id": self.setup_version_id,
486
- "job_id": self.job_id,
487
- },
488
- )
432
+ logger.info("Run Config Setup lifecycle", extra=self.context.session.current_ids())
489
433
  self._status = ModuleStatus.RUNNING
490
434
  self.context.callbacks.set_config_setup = callback
491
435
  content = await self.run_config_setup(self.context, config_setup_data)
@@ -497,12 +441,4 @@ class BaseModule( # noqa: PLR0904
497
441
  except Exception:
498
442
  logger.error("Error during module lifecyle")
499
443
  self._status = ModuleStatus.FAILED
500
- logger.exception(
501
- "Error during module lifecyle",
502
- extra={
503
- "mission_id": self.mission_id,
504
- "setup_id": self.setup_id,
505
- "setup_version_id": self.setup_version_id,
506
- "job_id": self.job_id,
507
- },
508
- )
444
+ logger.exception("Error during module lifecyle", extra=self.context.session.current_ids())
@@ -9,8 +9,8 @@ from google.protobuf import json_format
9
9
 
10
10
  from digitalkin.grpc_servers.utils.exceptions import ServerError
11
11
  from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
12
- from digitalkin.grpc_servers.utils.models import ClientConfig
13
12
  from digitalkin.logger import logger
13
+ from digitalkin.models.grpc_servers.models import ClientConfig
14
14
  from digitalkin.services.cost.cost_strategy import (
15
15
  CostConfig,
16
16
  CostData,
@@ -10,8 +10,8 @@ from google.protobuf.json_format import MessageToDict
10
10
 
11
11
  from digitalkin.grpc_servers.utils.exceptions import ServerError
12
12
  from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
13
- from digitalkin.grpc_servers.utils.models import ClientConfig
14
13
  from digitalkin.logger import logger
14
+ from digitalkin.models.grpc_servers.models import ClientConfig
15
15
  from digitalkin.services.filesystem.filesystem_strategy import (
16
16
  FileFilter,
17
17
  FilesystemRecord,
@@ -15,8 +15,8 @@ from pydantic import ValidationError
15
15
 
16
16
  from digitalkin.grpc_servers.utils.exceptions import ServerError
17
17
  from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
18
- from digitalkin.grpc_servers.utils.models import ClientConfig
19
18
  from digitalkin.logger import logger
19
+ from digitalkin.models.grpc_servers.models import ClientConfig
20
20
  from digitalkin.services.setup.setup_strategy import SetupData, SetupServiceError, SetupStrategy, SetupVersionData
21
21
 
22
22
 
@@ -6,8 +6,8 @@ from google.protobuf.struct_pb2 import Struct
6
6
  from pydantic import BaseModel
7
7
 
8
8
  from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
9
- from digitalkin.grpc_servers.utils.models import ClientConfig
10
9
  from digitalkin.logger import logger
10
+ from digitalkin.models.grpc_servers.models import ClientConfig
11
11
  from digitalkin.services.storage.storage_strategy import (
12
12
  DataType,
13
13
  StorageRecord,
@@ -55,7 +55,7 @@ class ArgParser:
55
55
  """
56
56
 
57
57
  class HelpAction(_HelpAction):
58
- """."""
58
+ """Custom HelpAction to display subparsers helps too."""
59
59
 
60
60
  def __call__(
61
61
  self,
@@ -13,7 +13,7 @@ logger.setLevel(logging.INFO)
13
13
 
14
14
 
15
15
  class DevelopmentModeMappingAction(Action):
16
- """."""
16
+ """ArgParse Action to map an environment variable to a ServicesMode enum."""
17
17
 
18
18
  def __init__(
19
19
  self,
@@ -22,7 +22,7 @@ class DevelopmentModeMappingAction(Action):
22
22
  default: str | None = None,
23
23
  **kwargs: dict[str, Any],
24
24
  ) -> None:
25
- """."""
25
+ """Initialize the DevelopmentModeMappingAction."""
26
26
  default = ServicesMode(os.environ.get(env_var, default))
27
27
 
28
28
  if required and default:
@@ -1,4 +1,4 @@
1
- """."""
1
+ """Secure module discovery and import utility for trigger handlers."""
2
2
 
3
3
  import importlib
4
4
  import importlib.util
@@ -276,7 +276,6 @@ class ModuleDiscoverer:
276
276
  Args:
277
277
  packages: List of package names to scan.
278
278
  file_pattern: Glob pattern for matching modules.
279
- safe_mode: If True, blocks modules with forbidden names.
280
279
  max_file_size: Limit for module file sizes in bytes.
281
280
  """
282
281
  self.packages = packages
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.3.0rc0
3
+ Version: 0.3.0rc1
4
4
  Summary: SDK to build kin used in DigitalKin
5
5
  Author-email: "DigitalKin.ai" <contact@digitalkin.ai>
6
6
  License: Attribution-NonCommercial-ShareAlike 4.0 International
@@ -7,51 +7,56 @@ base_server/mock/__init__.py,sha256=YZFT-F1l_TpvJYuIPX-7kTeE1CfOjhx9YmNRXVoi-jQ,
7
7
  base_server/mock/mock_pb2.py,sha256=sETakcS3PAAm4E-hTCV1jIVaQTPEAIoVVHupB8Z_k7Y,1843
8
8
  base_server/mock/mock_pb2_grpc.py,sha256=BbOT70H6q3laKgkHfOx1QdfmCS_HxCY4wCOX84YAdG4,3180
9
9
  digitalkin/__init__.py,sha256=7LLBAba0th-3SGqcpqFO-lopWdUkVLKzLZiMtB-mW3M,162
10
- digitalkin/__version__.py,sha256=55TYewS29nMe6l0Eb8NmybBJQFv1sBUGs3u4DD7HAh0,194
10
+ digitalkin/__version__.py,sha256=R-V9kMfZiYqI-Y5MJxvvyFY9miiXM4kkiJl2gmUyr1E,194
11
11
  digitalkin/logger.py,sha256=8ze_tjt2G6mDTuQcsf7-UTXWP3UHZ7LZVSs_iqF4rX4,4685
12
12
  digitalkin/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- digitalkin/grpc_servers/__init__.py,sha256=0cJBlwipSmFdXkyH3T0i6OJ1WpAtNsZgYX7JaSnkbtg,804
14
- digitalkin/grpc_servers/_base_server.py,sha256=32yrMCFAFE7FmdDL1WbuUlDuxRkaUJ_P7Dc-3_b40qs,18678
15
- digitalkin/grpc_servers/module_server.py,sha256=bi1XreL5zaPxbaDfsFN7-qtEbo0sKFNeyyLJjWdYMck,10212
16
- digitalkin/grpc_servers/module_servicer.py,sha256=Df2mQYrGngGYHC6fPV3Othc5hCR2g8IuLxJx9IhzDAc,19345
17
- digitalkin/grpc_servers/registry_server.py,sha256=StY18DKYoPKQIU1SIzgito6D4_QA1aMVddZ8O2WGlHY,2223
13
+ digitalkin/core/__init__.py,sha256=FJRcJ-B1Viyn-38L8XpOpZ8KOnf1I7PCDOAmKXLQhqc,71
14
+ digitalkin/core/job_manager/__init__.py,sha256=gGtgQpE6vbBHxAj1SYMbcpj45Q6x8IcsqnyQPfyZZ-8,25
15
+ digitalkin/core/job_manager/base_job_manager.py,sha256=tkm-nT_SuctG4cSzMbvo25zwS8WSaMf-dF8MWnXnO6I,6441
16
+ digitalkin/core/job_manager/single_job_manager.py,sha256=7wswR1hJ-yM6nLPi-7ibyvdMlG3I4pKKdW8TVsGFGWw,11078
17
+ digitalkin/core/job_manager/taskiq_broker.py,sha256=qnN45i688z81WnEbpeoaiT9R60udnLmvCCW-XLm10y8,7461
18
+ digitalkin/core/job_manager/taskiq_job_manager.py,sha256=UsqBsSYm88ibgRabSVPzK-9o2iXtGPsRlUO58M_PqVA,10147
19
+ digitalkin/core/task_manager/__init__.py,sha256=k9i-qIoee_1yXogyQolaVFDUQBIZU3ENbYKtjrCNmTQ,31
20
+ digitalkin/core/task_manager/surrealdb_repository.py,sha256=bmKaUoLTGfF-26zG_lX8mD-0dL3eTNr-BerUkSH7T2k,7739
21
+ digitalkin/core/task_manager/task_manager.py,sha256=7wzilf2C4PvGXJVzc2sE_ZL9YrVoQ44E8kRcioP1OOw,16378
22
+ digitalkin/core/task_manager/task_session.py,sha256=tjXm0gZOYxrnyzr07x6DtB6vZRl2U7BDBNEitSJwxLs,10525
23
+ digitalkin/grpc_servers/__init__.py,sha256=ZIRMJ1Lcas8yQ106GCup6hn2UBOsx1sNk8ap0lpEDnY,72
24
+ digitalkin/grpc_servers/_base_server.py,sha256=ZVeCDwI7w7fFbPTXPkeJb_SOuLfd2T7za3T4oCu2UWY,18680
25
+ digitalkin/grpc_servers/module_server.py,sha256=kXvPOfJ9LT9oRd5oPj-ZpYB9EYY_4RDlRpcyGzWkilc,10213
26
+ digitalkin/grpc_servers/module_servicer.py,sha256=Rr1Cq2zMaiu9oRAdjgmIlfLa_QDFzWPDamzzhE-mgzU,19365
27
+ digitalkin/grpc_servers/registry_server.py,sha256=7jNzGiacr6XOm4EdHN7tHhaA_J0q70y38Xxbnlt8WxQ,2224
18
28
  digitalkin/grpc_servers/registry_servicer.py,sha256=dqsKGHZ0LnaIvGt4ipaAuigd37sbJBndT4MAT029GsY,16471
19
- digitalkin/grpc_servers/utils/exceptions.py,sha256=SyOgvjggaUECYmSiqy8KJLHwHVt5IClSTxslHM-IZzI,931
20
- digitalkin/grpc_servers/utils/factory.py,sha256=jm6rFjiqmtSv7BIHNAOxsG9xXtSvWpx9TfzSQiX97MQ,5899
21
- digitalkin/grpc_servers/utils/grpc_client_wrapper.py,sha256=Vtt05KdePSFHq8FZUJ-bJo8l_d5vu7gdOv5UBtsgScg,2752
22
- digitalkin/grpc_servers/utils/models.py,sha256=ZQ1Gk4zmLRX_ueuwFOwXgtyG9OEPSzFa_91I_CXZmZ0,8957
23
- digitalkin/grpc_servers/utils/types.py,sha256=rQ78s4nAet2jy-NIDj_PUWriT0kuGHr_w6ELjmjgBao,539
29
+ digitalkin/grpc_servers/utils/__init__.py,sha256=ZnAIb_F8z4NhtPypqkdmzgRSzolKnJTk3oZx5GfWH5Y,38
30
+ digitalkin/grpc_servers/utils/exceptions.py,sha256=LtaDtlqXCeT6iqApogs4pbtezotOVeg4fhnFzGBvFsY,692
31
+ digitalkin/grpc_servers/utils/grpc_client_wrapper.py,sha256=a4xeulweovugI-IUVBrSZ-CswZHrBdeh9r-yzP8dl1w,2753
24
32
  digitalkin/mixins/__init__.py,sha256=d6ljaoyJZJT9XxOrXZG5FVNvbLURb3_CZrkp4GPZWYM,590
25
33
  digitalkin/mixins/base_mixin.py,sha256=uLkg6MbDtVc9DysjdfNIGKahxQLnnjuL3DYpuyNLbk8,486
26
34
  digitalkin/mixins/callback_mixin.py,sha256=90nHm9-pbKT14GAy3CB3fsBtpYu5IH0woOQdNLM2e_Y,836
27
- digitalkin/mixins/chat_history_mixin.py,sha256=zkjvL6TOJzVTYro_BmBLO0S5eHsReI1tbqTbbMkcGWA,4106
35
+ digitalkin/mixins/chat_history_mixin.py,sha256=SqCmnh6Ybed3TQoQbvUjbzwKs_evvfW_lr4j_Uncg0A,4231
28
36
  digitalkin/mixins/cost_mixin.py,sha256=nFqhLsRHdXAt3GOH6qI8sqX9KW3leTPW3gaclensBVw,2274
29
- digitalkin/mixins/file_history_mixin.py,sha256=4rDpm-TVcD9ihZGPuqr73y1_4FnUzBlWUSoje-pQIIU,3759
30
- digitalkin/mixins/filesystem_mixin.py,sha256=myCUmocdumG7XSN1acnn4hw1e1QbkngbnBtQtrVZQHU,1604
31
- digitalkin/mixins/logger_mixin.py,sha256=FdVIlPXOQ7eo8DUlMmsygO9L8bis-Jhj_zw83RiE6wo,2150
37
+ digitalkin/mixins/file_history_mixin.py,sha256=5MgxglccVe11M7YnoeuXbJYXNEwVZdiGd5Fl8sytcTM,3504
38
+ digitalkin/mixins/filesystem_mixin.py,sha256=Q1sEY_dKZVi2Sa21fypwpsz9h7uQ7ggVqzpuVgheF_o,1510
39
+ digitalkin/mixins/logger_mixin.py,sha256=l-SK3qACIzRfyHgj7KhzvW3ZhmVa-W1JB9tmppgpqg4,1842
32
40
  digitalkin/mixins/storage_mixin.py,sha256=ptZ4a2bydIa48q0V9e395vWHTu7yw4A6rI4jwKY6gwI,2392
33
41
  digitalkin/models/__init__.py,sha256=hDHtUfswaNh8wo4NZaBItg9JqC0uNSRqXArNWSrGynY,163
42
+ digitalkin/models/core/__init__.py,sha256=jOMDmPX0uSfGA9zUi0u_kOvYJ46VdIssoIhVYvNSeew,19
43
+ digitalkin/models/core/job_manager_models.py,sha256=RCrW20HCTQ7l2D1JtNgEKefZpMzoN-uAXK8bPorIqqA,1120
44
+ digitalkin/models/core/task_monitor.py,sha256=JBMzqaKLrsxb0QZYM1BlvCxxkbqD_YKgsWob7bsmBeE,1626
45
+ digitalkin/models/grpc_servers/__init__.py,sha256=0tA71nPSXgRrh9DoLvx-TSwZXdYIRUEItoadpTL1cTo,42
46
+ digitalkin/models/grpc_servers/models.py,sha256=ZQ1Gk4zmLRX_ueuwFOwXgtyG9OEPSzFa_91I_CXZmZ0,8957
47
+ digitalkin/models/grpc_servers/types.py,sha256=rQ78s4nAet2jy-NIDj_PUWriT0kuGHr_w6ELjmjgBao,539
34
48
  digitalkin/models/module/__init__.py,sha256=nFPHp0JcAZq9ISkcSu1y2zeNyXH3V4j10oMjHzMBYBU,599
35
49
  digitalkin/models/module/module.py,sha256=k0W8vfJJFth8XdDzkHm32SyTuSf3h2qF0hSrxAfGF1s,956
36
- digitalkin/models/module/module_context.py,sha256=nhZ_Pw9lWcq5B2PPy-Rf3N0S7MXz9Ehh5Nb-4tEOmmM,3764
50
+ digitalkin/models/module/module_context.py,sha256=0sKIvLYt0KHR4oF0MUQ4RQZDBrPjmOSaIHNMcl7vUmI,4649
37
51
  digitalkin/models/module/module_types.py,sha256=kkOst1OWeQVzLdf0P8JBlZqf2LLWj14-bQHyYvwUN8Y,3562
38
- digitalkin/models/module/task_monitor.py,sha256=sEzpfmTg1cXC1ieD72YL3zwkSE6D5CIHWRi2CgK3GeQ,1288
39
52
  digitalkin/models/services/__init__.py,sha256=jhfVw6egq0OcHmos_fypH9XFehbHTBw09wluVFVFEyw,226
40
- digitalkin/models/services/cost.py,sha256=QTEuFD6xz62nob0z4ksE-INJWcZ-iFiuNW5mvXhpFes,1599
53
+ digitalkin/models/services/cost.py,sha256=9PXvd5RrIk9vCrRjcUGQ9ZyAokEbwLg4s0RfnE-aLP4,1616
41
54
  digitalkin/models/services/storage.py,sha256=wp7F-AvTsU46ujGPcguqM5kUKRZx4399D4EGAAJt2zs,1143
42
55
  digitalkin/modules/__init__.py,sha256=VwVbKok81NGyPIBZgEj_SR-59G8tTlSb4eBJI9W6Vx4,281
43
- digitalkin/modules/_base_module.py,sha256=y_Pw2twqlAcsJlUUa-8QKdITSrZv6KpiwVw2X7mNads,18392
56
+ digitalkin/modules/_base_module.py,sha256=UDLPbsVqlRdvT1weJ_Skzgv7R16TOyfSWeddg5ZqxzI,16513
44
57
  digitalkin/modules/archetype_module.py,sha256=lOe3yYufwfylZR_VGy1w-zqdqVaMI_JANfKkbH9eODE,471
45
58
  digitalkin/modules/tool_module.py,sha256=rLJfdYMWddiUgPLBDGG_UcHnRCHEeaqX6Fdp4DOUaCs,472
46
59
  digitalkin/modules/trigger_handler.py,sha256=qPNMi-8NHqscOxciHeaXtpwjXApT3YzjMF23zQAjaZY,1770
47
- digitalkin/modules/job_manager/base_job_manager.py,sha256=iDv9caispLmM7mqPgG_g7oaACMvNW7i7MTzBeSlmNp0,6355
48
- digitalkin/modules/job_manager/job_manager_models.py,sha256=onHy-DfInLZQveniMIWIKwTKSQjojz500JvHB54x93c,1129
49
- digitalkin/modules/job_manager/single_job_manager.py,sha256=rJ6ppgXQkLu2X4NF2oicWf3rutYN4Qtfey3EM7ONfKM,11155
50
- digitalkin/modules/job_manager/surrealdb_repository.py,sha256=qGDDEEV80vKVUe4r2yvTqTNfKrQoiZjeFok01rn_eaE,7798
51
- digitalkin/modules/job_manager/task_manager.py,sha256=Z_luiGdHg6jnNSslf9Dl8m9w6PIBtgrOHZXfyikBVwY,14336
52
- digitalkin/modules/job_manager/task_session.py,sha256=KpBoOH2ND7UQauRok7pGsNfybH-rQDIwvdtg07ZFz40,9573
53
- digitalkin/modules/job_manager/taskiq_broker.py,sha256=4q3U03SNlb1ypup0VOa73KHLKJ9peuZUPCR5eFLMNAk,7498
54
- digitalkin/modules/job_manager/taskiq_job_manager.py,sha256=NHSGsqqKCWQQqx0FqM3c4tf011vFlqX1npHkcv0kEOU,10249
55
60
  digitalkin/services/__init__.py,sha256=LqGk_5DJy8Bzz62ajIq9jCeYNKQUIgtSCpafZk15FLc,910
56
61
  digitalkin/services/base_strategy.py,sha256=yA9KUJGRKuuaxA6l3GcMv8zKfWoIsW03UxJT80Yea2I,766
57
62
  digitalkin/services/services_config.py,sha256=JnyzZcG7OYBelwgn-wdVgY2n3yFTEkwLPHRZB8Tjw10,7468
@@ -62,11 +67,11 @@ digitalkin/services/agent/default_agent.py,sha256=4N_E_eQxJGOx1KVUUg5jNOje-3ncMx
62
67
  digitalkin/services/cost/__init__.py,sha256=sD_a5LrnLluASOC5m5vgIqjaco-MzZJd6XhillIBHr0,400
63
68
  digitalkin/services/cost/cost_strategy.py,sha256=MpPX33P_S5b2by6F4zT-rcyeRuh2V4NYPZe05VpDOGQ,2649
64
69
  digitalkin/services/cost/default_cost.py,sha256=XE7kNFde8NmbulU9m1lc3mi-vHFkbaJf0XHUc0D4UHE,3945
65
- digitalkin/services/cost/grpc_cost.py,sha256=cGtb0atPXSEEOrNIWee-o3ScfNRSAFXJGDu0vcWT6zg,6295
70
+ digitalkin/services/cost/grpc_cost.py,sha256=wX6lrIAl92ErVe_4xjBg2z7y9Aoziv8aLVA_J3PKEHE,6296
66
71
  digitalkin/services/filesystem/__init__.py,sha256=BhwMl_BUvM0d65fmglkp0SVwn3RfYiUOKJgIMnOCaGM,381
67
72
  digitalkin/services/filesystem/default_filesystem.py,sha256=WQbU-Bsi9r-28VqhKbrplce3otzjSKS-5iqKEpGWdQU,15117
68
73
  digitalkin/services/filesystem/filesystem_strategy.py,sha256=zibVLvX_IBQ-kgh-KYzHdszDeiHFPEAZszu_k99x1GQ,9487
69
- digitalkin/services/filesystem/grpc_filesystem.py,sha256=ilxTFjelmf8_bVSs3xLlsyWFHVlSJf27c4j8H7R1Rkw,12987
74
+ digitalkin/services/filesystem/grpc_filesystem.py,sha256=-gSA8Bmuea73DbBEG8x5b6-E0bQuT5WrK6xdSbOlH5M,12988
70
75
  digitalkin/services/identity/__init__.py,sha256=InkeyLgFYYwItx8mePA8HpfacOMWZwwuc0G4pWtKq9s,270
71
76
  digitalkin/services/identity/default_identity.py,sha256=Y2auZHrGSZTIN5D8HyjLvLcNbYFM1CNUE23x7p5VIGw,386
72
77
  digitalkin/services/identity/identity_strategy.py,sha256=skappBbds1_qa0Gr24FGrNX1N0_OYhYT1Lh7dUaAirE,429
@@ -75,28 +80,28 @@ digitalkin/services/registry/default_registry.py,sha256=VnWkF6nHpFxUKuUbZLPqzXqd
75
80
  digitalkin/services/registry/registry_strategy.py,sha256=uBXgZIv25jeXbeVO8vWvlNPxxNYu7_KiCw2PoE6AWr8,423
76
81
  digitalkin/services/setup/__init__.py,sha256=t6xcvEWqTbcRZstBFK9cESEqaZKvpW14VtYygxIqfYQ,65
77
82
  digitalkin/services/setup/default_setup.py,sha256=9VM3KwsuQcFQQ08RoOHWOE_-9BsRW0YGRtDWYTbQGdA,8246
78
- digitalkin/services/setup/grpc_setup.py,sha256=qjdED3HYZtpgeYYpiIwBWwPgB1NtoAuKmB5unNNRnVQ,12480
83
+ digitalkin/services/setup/grpc_setup.py,sha256=PSfZhzPxln6fxAvFo1dL8CJBBSERPezdKp9zmkU425g,12481
79
84
  digitalkin/services/setup/setup_strategy.py,sha256=ZnJ_HwWCkHCPrqKekSD5L9y3p8wMwfjQ8sj2hLZq6go,4004
80
85
  digitalkin/services/snapshot/__init__.py,sha256=Uzlnzo0CYlSpVsdiI37hW7xQk8hu3YA1fOI6O6MSzB0,270
81
86
  digitalkin/services/snapshot/default_snapshot.py,sha256=Mb8QwWRsHh9I_tN0ln_ZiFa1QCZxOVWmuVLemQOTWpc,1058
82
87
  digitalkin/services/snapshot/snapshot_strategy.py,sha256=B1TU3V_k9A-OdqBkdyc41-ihnrW5Btcwd1KyQdHT46A,898
83
88
  digitalkin/services/storage/__init__.py,sha256=T-ocYLLphudkQgzvG47jBOm5GQsRFRIGA88y7Ur4akg,341
84
89
  digitalkin/services/storage/default_storage.py,sha256=D8e-UYUkb2GvDEHMWcN3EkcIKXWA8DrsaQsXVjoXAYQ,7975
85
- digitalkin/services/storage/grpc_storage.py,sha256=7RPeqkjG4JdW1lhjGpKx1qF5fp_LE-sST7fp5oT6uD0,7204
90
+ digitalkin/services/storage/grpc_storage.py,sha256=ONilhj0-ySLqPUqWI-UfxRsSgu89zbyohcOXt5EcSdU,7205
86
91
  digitalkin/services/storage/storage_strategy.py,sha256=sERF5tIJnzpb1iNqTXic9xRkGaXMifo6kb709ubB-Yo,8848
87
92
  digitalkin/utils/__init__.py,sha256=sJnY-ZUgsjMfojAjONC1VN14mhgIDnzyOlGkw21rRnM,28
88
- digitalkin/utils/arg_parser.py,sha256=nvjI1pKDY1HfS0oGcMQPtdTQcggXLtpxXMbnMxNEKRU,3109
89
- digitalkin/utils/development_mode_action.py,sha256=TqRuAF_A7bDD4twRB4PnZcRoNeaiAnEdxM5kvy4aoaA,1511
93
+ digitalkin/utils/arg_parser.py,sha256=wzscRlE1Qp1gGl-lAJlkkwnbU1O2oezj6BwK_BZFBIk,3158
94
+ digitalkin/utils/development_mode_action.py,sha256=2hznh0ajW_4ZTysfoc0Y49161f_PQPATRgNk8NAn1_o,1623
90
95
  digitalkin/utils/llm_ready_schema.py,sha256=JjMug_lrQllqFoanaC091VgOqwAd-_YzcpqFlS7p778,2375
91
- digitalkin/utils/package_discover.py,sha256=3e9-6Vf3yAAv2VkHHVK4QVqHJBxQqg3d8uuDTsXph24,13471
92
- digitalkin-0.3.0rc0.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
96
+ digitalkin/utils/package_discover.py,sha256=sa6Zp5Kape1Zr4iYiNrnZxiHDnqM06ODk6yfWHom53w,13465
97
+ digitalkin-0.3.0rc1.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
93
98
  modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
99
  modules/cpu_intensive_module.py,sha256=ejB9XPnFfA0uCuFUQbM3fy5UYfqqAlF36rv_P5Ri8ho,8363
95
100
  modules/minimal_llm_module.py,sha256=Ijld__ZnhzfLwpXD1XVkLZ7jyKZKyOFZczOpiPttJZc,11216
96
101
  modules/text_transform_module.py,sha256=bwPSnEUthZQyfLwcTLo52iAxItAoknkLh8Y3m5aywaY,7251
97
102
  services/filesystem_module.py,sha256=71Mcja8jCQqiqFHPdsIXplFIHTvgkxRhp0TRXuCfgkk,7430
98
103
  services/storage_module.py,sha256=ybTMqmvGaTrR8PqJ4FU0cwxaDjT36TskVrGoetTGmno,6955
99
- digitalkin-0.3.0rc0.dist-info/METADATA,sha256=HgycxD0XwLP9_iK2tgnjvEcR9zZlGvFYu7xamA-M9lI,30651
100
- digitalkin-0.3.0rc0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
101
- digitalkin-0.3.0rc0.dist-info/top_level.txt,sha256=gcjqlyrZuLjIyxrOIavCQM_olpr6ND5kPKkZd2j0xGo,40
102
- digitalkin-0.3.0rc0.dist-info/RECORD,,
104
+ digitalkin-0.3.0rc1.dist-info/METADATA,sha256=dpzbrevBvxDMjGm2fHdKxEI5V3y2WVzV-mpIwpqGA8g,30651
105
+ digitalkin-0.3.0rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
106
+ digitalkin-0.3.0rc1.dist-info/top_level.txt,sha256=gcjqlyrZuLjIyxrOIavCQM_olpr6ND5kPKkZd2j0xGo,40
107
+ digitalkin-0.3.0rc1.dist-info/RECORD,,
@@ -1,180 +0,0 @@
1
- """Factory functions for creating gRPC servers."""
2
-
3
- from pathlib import Path
4
- from typing import Any
5
-
6
- from digitalkin.grpc_servers.module_server import ModuleServer
7
- from digitalkin.grpc_servers.registry_server import RegistryServer
8
- from digitalkin.grpc_servers.utils.models import (
9
- ModuleServerConfig,
10
- RegistryServerConfig,
11
- SecurityMode,
12
- ServerCredentials,
13
- ServerMode,
14
- )
15
- from digitalkin.modules._base_module import BaseModule
16
-
17
-
18
- def create_module_server(
19
- module: type[BaseModule],
20
- host: str = "0.0.0.0", # noqa: S104
21
- port: int = 50051,
22
- max_workers: int = 10,
23
- mode: str = "sync",
24
- security: str = "insecure",
25
- registry_address: str | None = None,
26
- server_key_path: str | None = None,
27
- server_cert_path: str | None = None,
28
- root_cert_path: str | None = None,
29
- server_options: list[tuple[str, Any]] | None = None,
30
- ) -> ModuleServer:
31
- """Create a new module server.
32
-
33
- Args:
34
- module: The module to serve.
35
- host: The host address to bind to.
36
- port: The port to listen on.
37
- max_workers: Maximum number of workers for the thread pool (sync mode only).
38
- mode: Server mode ("sync" or "async").
39
- security: Security mode ("secure" or "insecure").
40
- registry_address: Optional address of a registry server for auto-registration.
41
- server_key_path: Path to server private key (required for secure mode).
42
- server_cert_path: Path to server certificate (required for secure mode).
43
- root_cert_path: Optional path to root certificate.
44
- server_options: Additional server options.
45
-
46
- Returns:
47
- A configured ModuleServer instance.
48
-
49
- Raises:
50
- ValueError: If secure mode is requested but credentials are missing.
51
- """
52
- # Create configuration with credentials if needed
53
- config = _create_server_config(
54
- ModuleServerConfig,
55
- host=host,
56
- port=port,
57
- max_workers=max_workers,
58
- mode=mode,
59
- security=security,
60
- server_key_path=server_key_path,
61
- server_cert_path=server_cert_path,
62
- root_cert_path=root_cert_path,
63
- server_options=server_options,
64
- registry_address=registry_address,
65
- )
66
-
67
- # Create and return the server
68
- return ModuleServer(module, config)
69
-
70
-
71
- def create_registry_server(
72
- host: str = "0.0.0.0", # noqa: S104
73
- port: int = 50052,
74
- max_workers: int = 10,
75
- mode: str = "sync",
76
- security: str = "insecure",
77
- database_url: str | None = None,
78
- server_key_path: str | None = None,
79
- server_cert_path: str | None = None,
80
- root_cert_path: str | None = None,
81
- server_options: list[tuple[str, Any]] | None = None,
82
- ) -> RegistryServer:
83
- """Create a new registry server.
84
-
85
- Args:
86
- host: The host address to bind to.
87
- port: The port to listen on.
88
- max_workers: Maximum number of workers for the thread pool (sync mode only).
89
- mode: Server mode ("sync" or "async").
90
- security: Security mode ("secure" or "insecure").
91
- database_url: Optional database URL for registry data storage.
92
- server_key_path: Path to server private key (required for secure mode).
93
- server_cert_path: Path to server certificate (required for secure mode).
94
- root_cert_path: Optional path to root certificate.
95
- server_options: Additional server options.
96
-
97
- Returns:
98
- A configured RegistryServer instance.
99
-
100
- Raises:
101
- ValueError: If secure mode is requested but credentials are missing.
102
- """
103
- # Create configuration with credentials if needed
104
- config = _create_server_config(
105
- RegistryServerConfig,
106
- host=host,
107
- port=port,
108
- max_workers=max_workers,
109
- mode=mode,
110
- security=security,
111
- server_key_path=server_key_path,
112
- server_cert_path=server_cert_path,
113
- root_cert_path=root_cert_path,
114
- server_options=server_options,
115
- database_url=database_url,
116
- )
117
-
118
- # Create and return the server
119
- return RegistryServer(config)
120
-
121
-
122
- def _create_server_config(
123
- config_class: Any,
124
- host: str,
125
- port: int,
126
- max_workers: int,
127
- mode: str,
128
- security: str,
129
- server_key_path: str | None,
130
- server_cert_path: str | None,
131
- root_cert_path: str | None,
132
- server_options: list[tuple[str, Any]] | None,
133
- **kwargs,
134
- ) -> ModuleServerConfig | RegistryServerConfig:
135
- """Create a server configuration with appropriate settings.
136
-
137
- Args:
138
- config_class: The configuration class to instantiate.
139
- host: The host address.
140
- port: The port number.
141
- max_workers: Maximum number of workers.
142
- mode: Server mode.
143
- security: Security mode.
144
- server_key_path: Path to server key.
145
- server_cert_path: Path to server certificate.
146
- root_cert_path: Path to root certificate.
147
- server_options: Additional server options.
148
- **kwargs: Additional configuration parameters.
149
-
150
- Returns:
151
- A server configuration instance.
152
-
153
- Raises:
154
- ValueError: If secure mode is requested but credentials are missing.
155
- """
156
- # Create basic config
157
- config_params = {
158
- "host": host,
159
- "port": port,
160
- "max_workers": max_workers,
161
- "mode": ServerMode(mode),
162
- "security": SecurityMode(security),
163
- "server_options": server_options or [],
164
- **kwargs,
165
- }
166
-
167
- # Add credentials if secure mode
168
- if security == "secure":
169
- if not server_key_path or not server_cert_path:
170
- raise ValueError(
171
- "Server key and certificate paths are required for secure mode"
172
- )
173
-
174
- config_params["credentials"] = ServerCredentials(
175
- server_key_path=Path(server_key_path),
176
- server_cert_path=Path(server_cert_path),
177
- root_cert_path=Path(root_cert_path) if root_cert_path else None,
178
- )
179
-
180
- return config_class(**config_params)