digitalkin 0.2.21__tar.gz → 0.2.23__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 (95) hide show
  1. {digitalkin-0.2.21 → digitalkin-0.2.23}/PKG-INFO +1 -1
  2. {digitalkin-0.2.21 → digitalkin-0.2.23}/pyproject.toml +1 -3
  3. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/module_server.py +6 -8
  5. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/module_servicer.py +14 -5
  6. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +4 -4
  7. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/utils/models.py +15 -1
  8. digitalkin-0.2.23/src/digitalkin/logger.py +108 -0
  9. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/filesystem/grpc_filesystem.py +6 -1
  10. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin.egg-info/PKG-INFO +1 -1
  11. digitalkin-0.2.21/src/digitalkin/logger.py +0 -61
  12. {digitalkin-0.2.21 → digitalkin-0.2.23}/LICENSE +0 -0
  13. {digitalkin-0.2.21 → digitalkin-0.2.23}/README.md +0 -0
  14. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/__init__.py +0 -0
  15. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/mock/__init__.py +0 -0
  16. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/mock/mock_pb2.py +0 -0
  17. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  18. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/server_async_insecure.py +0 -0
  19. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/server_async_secure.py +0 -0
  20. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/server_sync_insecure.py +0 -0
  21. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/base_server/server_sync_secure.py +0 -0
  22. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/modules/__init__.py +0 -0
  23. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/modules/cpu_intensive_module.py +0 -0
  24. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/modules/minimal_llm_module.py +0 -0
  25. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/modules/text_transform_module.py +0 -0
  26. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/services/filesystem_module.py +0 -0
  27. {digitalkin-0.2.21 → digitalkin-0.2.23}/examples/services/storage_module.py +0 -0
  28. {digitalkin-0.2.21 → digitalkin-0.2.23}/setup.cfg +0 -0
  29. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/__init__.py +0 -0
  30. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/__init__.py +0 -0
  31. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  32. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/registry_server.py +0 -0
  33. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/registry_servicer.py +0 -0
  34. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  35. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/utils/factory.py +0 -0
  36. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/grpc_servers/utils/types.py +0 -0
  37. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/__init__.py +0 -0
  38. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/module/__init__.py +0 -0
  39. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/module/module.py +0 -0
  40. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/module/module_context.py +0 -0
  41. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/module/module_types.py +0 -0
  42. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/services/__init__.py +0 -0
  43. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/services/cost.py +0 -0
  44. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/models/services/storage.py +0 -0
  45. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/__init__.py +0 -0
  46. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/_base_module.py +0 -0
  47. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/archetype_module.py +0 -0
  48. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/job_manager/base_job_manager.py +0 -0
  49. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/job_manager/job_manager_models.py +0 -0
  50. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/job_manager/single_job_manager.py +0 -0
  51. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/job_manager/taskiq_broker.py +0 -0
  52. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/job_manager/taskiq_job_manager.py +0 -0
  53. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/tool_module.py +0 -0
  54. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/modules/trigger_handler.py +0 -0
  55. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/py.typed +0 -0
  56. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/__init__.py +0 -0
  57. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/agent/__init__.py +0 -0
  58. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  59. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/agent/default_agent.py +0 -0
  60. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/base_strategy.py +0 -0
  61. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/cost/__init__.py +0 -0
  62. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  63. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/cost/default_cost.py +0 -0
  64. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  65. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/filesystem/__init__.py +0 -0
  66. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  67. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  68. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/identity/__init__.py +0 -0
  69. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/identity/default_identity.py +0 -0
  70. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  71. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/registry/__init__.py +0 -0
  72. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/registry/default_registry.py +0 -0
  73. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  74. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/services_config.py +0 -0
  75. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/services_models.py +0 -0
  76. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/setup/__init__.py +0 -0
  77. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/setup/default_setup.py +0 -0
  78. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  79. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  80. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/snapshot/__init__.py +0 -0
  81. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  82. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  83. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/storage/__init__.py +0 -0
  84. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/storage/default_storage.py +0 -0
  85. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  86. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  87. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/utils/__init__.py +0 -0
  88. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/utils/arg_parser.py +0 -0
  89. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/utils/development_mode_action.py +0 -0
  90. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  91. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin/utils/package_discover.py +0 -0
  92. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  93. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  94. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin.egg-info/requires.txt +0 -0
  95. {digitalkin-0.2.21 → digitalkin-0.2.23}/src/digitalkin.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.2.21
3
+ Version: 0.2.23
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
@@ -12,7 +12,7 @@
12
12
 
13
13
  keywords = [ "digitalkin", "kin", "agent", "gprc", "sdk" ]
14
14
  # Version of the package automatically updated by bump2version (that is why it is separated)
15
- version = "0.2.21"
15
+ version = "0.2.23"
16
16
 
17
17
  classifiers = [
18
18
  "Development Status :: 3 - Alpha",
@@ -115,8 +115,6 @@
115
115
  "tool_module.py",
116
116
  "trigger_module.py",
117
117
  "generate_certificates.py",
118
- # "test_*.py",
119
- # "tests/*",
120
118
  "examples/*",
121
119
  ]
122
120
  preview = true
@@ -5,4 +5,4 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("digitalkin")
7
7
  except PackageNotFoundError:
8
- __version__ = "0.2.21"
8
+ __version__ = "0.2.23"
@@ -79,10 +79,10 @@ class ModuleServer(BaseServer):
79
79
 
80
80
  def start(self) -> None:
81
81
  """Start the module server and register with the registry if configured."""
82
- logger.info(self.server_config)
82
+ logger.info("Starting module server",extra={"server_config": self.server_config})
83
83
  super().start()
84
84
 
85
- logger.info(self.server_config)
85
+ logger.debug("Starting module server",extra={"server_config": self.server_config})
86
86
  # If a registry address is provided, register the module
87
87
  if self.server_config.registry_address:
88
88
  try:
@@ -91,17 +91,15 @@ class ModuleServer(BaseServer):
91
91
  logger.exception("Failed to register with registry")
92
92
 
93
93
  if self.module_servicer is not None:
94
- logger.info(
95
- "Setup post init started with config: %s", self.client_config
94
+ logger.debug(
95
+ "Setup post init started",extra={"client_config": self.client_config}
96
96
  )
97
97
  self.module_servicer.setup.__post_init__(self.client_config)
98
98
 
99
99
  async def start_async(self) -> None:
100
100
  """Start the module server and register with the registry if configured."""
101
- logger.info(self.server_config)
101
+ logger.info("Starting module server",extra={"server_config": self.server_config})
102
102
  await super().start_async()
103
-
104
- logger.info(self.server_config)
105
103
  # If a registry address is provided, register the module
106
104
  if self.server_config.registry_address:
107
105
  try:
@@ -111,7 +109,7 @@ class ModuleServer(BaseServer):
111
109
 
112
110
  if self.module_servicer is not None:
113
111
  logger.info(
114
- "Setup post init started with config: %s", self.client_config
112
+ "Setup post init started",extra={"client_config": self.client_config}
115
113
  )
116
114
  await self.module_servicer.job_manager._start()
117
115
  self.module_servicer.setup.__post_init__(self.client_config)
@@ -99,9 +99,14 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
99
99
  Raises:
100
100
  ServicerError: if the setup data is not returned or job creation fails.
101
101
  """
102
- logger.info("ConfigSetupVersion called for module: '%s'", self.module_class.__name__)
103
102
  logger.info(
104
- "Context : %s, setup_version: %s, mission_id: %s", context, request.setup_version, request.mission_id
103
+ "ConfigSetupVersion called for module: '%s'",
104
+ self.module_class.__name__,
105
+ extra={
106
+ "module_class": self.module_class,
107
+ "setup_version": request.setup_version,
108
+ "mission_id": request.mission_id,
109
+ },
105
110
  )
106
111
  # Process the module input
107
112
  # TODO: Secret should be used here as well
@@ -134,7 +139,8 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
134
139
  return lifecycle_pb2.ConfigSetupModuleResponse(success=False)
135
140
 
136
141
  updated_setup_data = await self.job_manager.generate_config_setup_module_response(job_id)
137
- logger.warning(f"Updated setup data: {updated_setup_data=}")
142
+ logger.info("Setup updated")
143
+ logger.debug(f"Updated setup data: {updated_setup_data=}")
138
144
  setup_version.content = json_format.ParseDict(
139
145
  updated_setup_data,
140
146
  struct_pb2.Struct(),
@@ -159,8 +165,11 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
159
165
  Raises:
160
166
  ServicerError: the necessary query didn't work.
161
167
  """
162
- logger.info("StartModule called for module: '%s'", self.module_class.__name__)
163
- logger.info("Context : %s, setup_id: %s, mission_id: %s", context, request.setup_id, request.mission_id)
168
+ logger.info(
169
+ "StartModule called for module: '%s'",
170
+ self.module_class.__name__,
171
+ extra={"module_class": self.module_class, "setup_id": request.setup_id, "mission_id": request.mission_id},
172
+ )
164
173
  # Process the module input
165
174
  # TODO: Check failure of input data format
166
175
  input_data = self.module_class.create_input_model(dict(request.input.items()))
@@ -43,9 +43,9 @@ class GrpcClientWrapper:
43
43
  private_key=private_key,
44
44
  )
45
45
 
46
- return grpc.secure_channel(config.address, channel_credentials)
46
+ return grpc.secure_channel(config.address, channel_credentials, options=config.channel_options)
47
47
  # Insecure channel
48
- return grpc.insecure_channel(config.address)
48
+ return grpc.insecure_channel(config.address, options=config.channel_options)
49
49
 
50
50
  def exec_grpc_query(self, query_endpoint: str, request: Any) -> Any: # noqa: ANN401
51
51
  """Execute a gRPC query with from the query's rpc endpoint name.
@@ -65,8 +65,8 @@ class GrpcClientWrapper:
65
65
  logger.debug("send request to %s", query_endpoint)
66
66
  response = getattr(self.stub, query_endpoint)(request)
67
67
  logger.debug("receive response from request to registry: %s", response)
68
- except grpc.RpcError:
69
- logger.exception("RPC error during registration:")
68
+ except grpc.RpcError as e:
69
+ logger.exception("RPC error during %s: %s", query_endpoint, e.details())
70
70
  raise ServerError
71
71
  else:
72
72
  return response
@@ -169,9 +169,17 @@ class ClientConfig(ChannelConfig):
169
169
  mode: Client operation mode (sync/async)
170
170
  security: Security mode (secure/insecure)
171
171
  credentials: Client credentials for secure mode
172
+ channel_options: Additional channel options
172
173
  """
173
174
 
174
175
  credentials: ClientCredentials | None = Field(None, description="Client credentials for secure mode")
176
+ channel_options: list[tuple[str, Any]] = Field(
177
+ default_factory=lambda: [
178
+ ("grpc.max_receive_message_length", 50 * 1024 * 1024), # 50MB
179
+ ("grpc.max_send_message_length", 50 * 1024 * 1024), # 50MB
180
+ ],
181
+ description="Additional channel options",
182
+ )
175
183
 
176
184
  @field_validator("credentials")
177
185
  @classmethod
@@ -213,7 +221,13 @@ class ServerConfig(ChannelConfig):
213
221
 
214
222
  max_workers: int = Field(10, description="Maximum number of workers for sync mode")
215
223
  credentials: ServerCredentials | None = Field(None, description="Server credentials for secure mode")
216
- server_options: list[tuple[str, Any]] = Field(default_factory=list, description="Additional server options")
224
+ server_options: list[tuple[str, Any]] = Field(
225
+ default_factory=lambda: [
226
+ ("grpc.max_receive_message_length", 50 * 1024 * 1024), # 50MB
227
+ ("grpc.max_send_message_length", 50 * 1024 * 1024), # 50MB
228
+ ],
229
+ description="Additional server options",
230
+ )
217
231
  enable_reflection: bool = Field(default=True, description="Enable reflection for the server")
218
232
  enable_health_check: bool = Field(default=True, description="Enable health check service")
219
233
 
@@ -0,0 +1,108 @@
1
+ """This module sets up a logger."""
2
+
3
+ import json
4
+ import logging
5
+ import os
6
+ import sys
7
+ from datetime import datetime, timezone
8
+ from typing import Any, ClassVar
9
+
10
+
11
+ class ColorJSONFormatter(logging.Formatter):
12
+ """Color JSON formatter for development (pretty-printed with colors)."""
13
+
14
+ grey = "\x1b[38;20m"
15
+ green = "\x1b[32;20m"
16
+ blue = "\x1b[34;20m"
17
+ yellow = "\x1b[33;20m"
18
+ red = "\x1b[31;20m"
19
+ bold_red = "\x1b[31;1m"
20
+ reset = "\x1b[0m"
21
+
22
+ COLORS: ClassVar[dict[int, str]] = {
23
+ logging.DEBUG: grey,
24
+ logging.INFO: green,
25
+ logging.WARNING: yellow,
26
+ logging.ERROR: red,
27
+ logging.CRITICAL: bold_red,
28
+ }
29
+
30
+ def format(self, record: logging.LogRecord) -> str:
31
+ """Format the log record as colored JSON for development.
32
+
33
+ Args:
34
+ record: The log record to format.
35
+
36
+ Returns:
37
+ str: The colored JSON formatted log record.
38
+ """
39
+ log_obj: dict[str, Any] = {
40
+ "timestamp": datetime.fromtimestamp(record.created, tz=timezone.utc).isoformat(),
41
+ "level": record.levelname.lower(),
42
+ "logger": record.name,
43
+ "message": record.getMessage(),
44
+ "location": f"{record.filename}:{record.lineno}",
45
+ "function": record.funcName,
46
+ }
47
+
48
+ # Add exception info if present
49
+ if record.exc_info:
50
+ log_obj["exception"] = self.formatException(record.exc_info)
51
+
52
+ # Add any extra fields
53
+ skip_attrs = {
54
+ "name",
55
+ "msg",
56
+ "args",
57
+ "created",
58
+ "filename",
59
+ "funcName",
60
+ "levelname",
61
+ "levelno",
62
+ "lineno",
63
+ "module",
64
+ "msecs",
65
+ "message",
66
+ "pathname",
67
+ "process",
68
+ "processName",
69
+ "relativeCreated",
70
+ "thread",
71
+ "threadName",
72
+ "exc_info",
73
+ "exc_text",
74
+ "stack_info",
75
+ }
76
+
77
+ extras = {key: value for key, value in record.__dict__.items() if key not in skip_attrs}
78
+
79
+ if extras:
80
+ log_obj["extra"] = extras
81
+
82
+ # Pretty print with color
83
+ color = self.COLORS.get(record.levelno, self.grey)
84
+ json_str = json.dumps(log_obj, indent=2, default=str)
85
+ if os.getenv("RAILWAY_SERVICE_NAME"):
86
+ json_str.replace("\\n", "\n")
87
+ return f"{color}{json_str}{self.reset}"
88
+
89
+
90
+ logging.basicConfig(
91
+ level=logging.DEBUG,
92
+ stream=sys.stdout,
93
+ datefmt="%Y-%m-%d %H:%M:%S",
94
+ )
95
+
96
+ logging.getLogger("grpc").setLevel(logging.DEBUG)
97
+ logging.getLogger("asyncio").setLevel(logging.DEBUG)
98
+
99
+
100
+ logger = logging.getLogger("digitalkin")
101
+
102
+ if not logger.handlers:
103
+ ch = logging.StreamHandler()
104
+ ch.setLevel(logging.INFO)
105
+ ch.setFormatter(ColorJSONFormatter())
106
+
107
+ logger.addHandler(ch)
108
+ logger.propagate = False
@@ -327,9 +327,14 @@ class GrpcFilesystem(FilesystemStrategy, GrpcClientWrapper):
327
327
  Returns:
328
328
  tuple[list[FilesystemRecord], int]: List of files and total count
329
329
  """
330
+ match filters.context:
331
+ case "setup":
332
+ context_id = self.setup_id
333
+ case "mission":
334
+ context_id = self.mission_id
330
335
  with GrpcFilesystem._handle_grpc_errors("GetFiles"):
331
336
  request = filesystem_pb2.GetFilesRequest(
332
- context=filters.context,
337
+ context=context_id,
333
338
  filters=self._filter_to_proto(filters),
334
339
  include_content=include_content,
335
340
  list_size=list_size,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.2.21
3
+ Version: 0.2.23
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
@@ -1,61 +0,0 @@
1
- """This module sets up a logger."""
2
-
3
- import logging
4
- import sys
5
- from typing import ClassVar
6
-
7
-
8
- class ColorFormatter(logging.Formatter):
9
- """Color formatter for logging."""
10
-
11
- grey = "\x1b[38;20m"
12
- green = "\x1b[32;20m"
13
- blue = "\x1b[34;20m"
14
- yellow = "\x1b[33;20m"
15
- red = "\x1b[31;20m"
16
- bold_red = "\x1b[31;1m"
17
- reset = "\x1b[0m"
18
- format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)" # type: ignore
19
-
20
- FORMATS: ClassVar[dict[int, str]] = {
21
- logging.DEBUG: grey + format + reset + "\n", # type: ignore
22
- logging.INFO: green + format + reset + "\n", # type: ignore
23
- logging.WARNING: yellow + format + reset + "\n", # type: ignore
24
- logging.ERROR: red + format + reset + "\n", # type: ignore
25
- logging.CRITICAL: bold_red + format + reset + "\n", # type: ignore
26
- }
27
-
28
- def format(self, record: logging.LogRecord) -> str: # type: ignore
29
- """Format the log record.
30
-
31
- Args:
32
- record: The log record to format.
33
-
34
- Returns:
35
- str: The formatted log record.
36
- """
37
- log_fmt = self.FORMATS.get(record.levelno)
38
- formatter = logging.Formatter(log_fmt)
39
- return formatter.format(record)
40
-
41
-
42
- logging.basicConfig(
43
- level=logging.DEBUG,
44
- stream=sys.stdout,
45
- datefmt="%Y-%m-%d %H:%M:%S",
46
- )
47
-
48
- logging.getLogger("grpc").setLevel(logging.DEBUG)
49
- logging.getLogger("asyncio").setLevel(logging.DEBUG)
50
-
51
-
52
- logger = logging.getLogger("digitalkin")
53
-
54
- if not logger.handlers:
55
- ch = logging.StreamHandler()
56
- ch.setLevel(logging.INFO)
57
-
58
- ch.setFormatter(ColorFormatter())
59
-
60
- logger.addHandler(ch)
61
- logger.propagate = False
File without changes
File without changes
File without changes