digitalkin 0.2.14__py3-none-any.whl → 0.2.16__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.
- digitalkin/__version__.py +1 -1
- digitalkin/services/filesystem/default_filesystem.py +337 -130
- digitalkin/services/filesystem/filesystem_strategy.py +202 -34
- digitalkin/services/filesystem/grpc_filesystem.py +235 -118
- digitalkin/services/setup/grpc_setup.py +1 -0
- {digitalkin-0.2.14.dist-info → digitalkin-0.2.16.dist-info}/METADATA +1 -1
- {digitalkin-0.2.14.dist-info → digitalkin-0.2.16.dist-info}/RECORD +14 -13
- {digitalkin-0.2.14.dist-info → digitalkin-0.2.16.dist-info}/top_level.txt +1 -0
- modules/cpu_intensive_module.py +0 -1
- modules/text_transform_module.py +0 -1
- services/filesystem_module.py +198 -0
- {modules → services}/storage_module.py +20 -7
- {digitalkin-0.2.14.dist-info → digitalkin-0.2.16.dist-info}/WHEEL +0 -0
- {digitalkin-0.2.14.dist-info → digitalkin-0.2.16.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""gRPC filesystem implementation."""
|
|
2
2
|
|
|
3
3
|
from collections.abc import Generator
|
|
4
4
|
from contextlib import contextmanager
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any, Literal
|
|
6
6
|
|
|
7
|
-
from digitalkin_proto.digitalkin.filesystem.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
)
|
|
11
|
-
from digitalkin_proto.digitalkin.filesystem.v2.filesystem_pb2 import (
|
|
12
|
-
FileType as FileTypeProto,
|
|
13
|
-
)
|
|
7
|
+
from digitalkin_proto.digitalkin.filesystem.v1 import filesystem_pb2, filesystem_service_pb2_grpc
|
|
8
|
+
from google.protobuf import struct_pb2
|
|
9
|
+
from google.protobuf.json_format import MessageToDict
|
|
14
10
|
|
|
15
11
|
from digitalkin.grpc_servers.utils.exceptions import ServerError
|
|
16
12
|
from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
|
|
17
13
|
from digitalkin.grpc_servers.utils.models import ClientConfig
|
|
18
14
|
from digitalkin.logger import logger
|
|
19
15
|
from digitalkin.services.filesystem.filesystem_strategy import (
|
|
20
|
-
|
|
16
|
+
FileFilter,
|
|
17
|
+
FilesystemRecord,
|
|
21
18
|
FilesystemServiceError,
|
|
22
19
|
FilesystemStrategy,
|
|
23
|
-
|
|
20
|
+
UploadFileData,
|
|
24
21
|
)
|
|
25
22
|
|
|
26
23
|
|
|
@@ -54,161 +51,281 @@ class GrpcFilesystem(FilesystemStrategy, GrpcClientWrapper):
|
|
|
54
51
|
logger.exception(msg)
|
|
55
52
|
raise FilesystemServiceError(msg) from e
|
|
56
53
|
|
|
54
|
+
@staticmethod
|
|
55
|
+
def _file_type_to_enum(file_type: str) -> filesystem_pb2.FileType:
|
|
56
|
+
"""Convert a file type string to a FileType enum.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
file_type: The file type string to convert
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
filesystem_pb2.FileType: The converted file type enum
|
|
63
|
+
"""
|
|
64
|
+
if not file_type.upper().startswith("FILE_TYPE_"):
|
|
65
|
+
file_type = f"FILE_TYPE_{file_type.upper()}"
|
|
66
|
+
try:
|
|
67
|
+
return getattr(filesystem_pb2.FileType, file_type.upper())
|
|
68
|
+
except AttributeError:
|
|
69
|
+
return filesystem_pb2.FileType.FILE_TYPE_UNSPECIFIED
|
|
70
|
+
|
|
71
|
+
@staticmethod
|
|
72
|
+
def _file_status_to_enum(file_status: str) -> filesystem_pb2.FileStatus:
|
|
73
|
+
"""Convert a file status string to a FileStatus enum.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
file_status: The file status string to convert
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
filesystem_pb2.FileStatus: The converted file status enum
|
|
80
|
+
"""
|
|
81
|
+
if not file_status.upper().startswith("FILE_STATUS_"):
|
|
82
|
+
file_status = f"FILE_STATUS_{file_status.upper()}"
|
|
83
|
+
try:
|
|
84
|
+
return getattr(filesystem_pb2.FileStatus, file_status.upper())
|
|
85
|
+
except AttributeError:
|
|
86
|
+
return filesystem_pb2.FileStatus.FILE_STATUS_UNSPECIFIED
|
|
87
|
+
|
|
88
|
+
def _filter_to_proto(self, filters: FileFilter) -> filesystem_pb2.FileFilter:
|
|
89
|
+
"""Convert a FileFilter to a FileFilter proto message.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
filters: The FileFilter to convert
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
filesystem_pb2.FileFilter: The converted FileFilter proto message
|
|
96
|
+
"""
|
|
97
|
+
return filesystem_pb2.FileFilter(
|
|
98
|
+
context=self.mission_id,
|
|
99
|
+
**filters.model_dump(exclude={"file_types", "status"}),
|
|
100
|
+
file_types=[self._file_type_to_enum(file_type) for file_type in filters.file_types]
|
|
101
|
+
if filters.file_types
|
|
102
|
+
else None,
|
|
103
|
+
status=self._file_status_to_enum(filters.status) if filters.status else None,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
def _file_proto_to_data(self, file: filesystem_pb2.File) -> FilesystemRecord:
|
|
107
|
+
"""Convert a File proto message to FilesystemRecord.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
file: The File proto message to convert
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
FilesystemRecord: The converted data
|
|
114
|
+
"""
|
|
115
|
+
return FilesystemRecord(
|
|
116
|
+
id=file.file_id,
|
|
117
|
+
context=self.mission_id,
|
|
118
|
+
name=file.name,
|
|
119
|
+
file_type=filesystem_pb2.FileType.Name(file.file_type),
|
|
120
|
+
content_type=file.content_type,
|
|
121
|
+
size_bytes=file.size_bytes,
|
|
122
|
+
checksum=file.checksum,
|
|
123
|
+
metadata=MessageToDict(file.metadata),
|
|
124
|
+
storage_url=file.storage_url,
|
|
125
|
+
status=filesystem_pb2.FileStatus.Name(file.status),
|
|
126
|
+
content=file.content,
|
|
127
|
+
)
|
|
128
|
+
|
|
57
129
|
def __init__(
|
|
58
130
|
self,
|
|
59
131
|
mission_id: str,
|
|
60
132
|
setup_version_id: str,
|
|
61
|
-
config: dict[str, str],
|
|
62
133
|
client_config: ClientConfig,
|
|
63
|
-
|
|
134
|
+
config: dict[str, Any] | None = None,
|
|
64
135
|
) -> None:
|
|
65
|
-
"""Initialize the
|
|
136
|
+
"""Initialize the gRPC filesystem strategy.
|
|
66
137
|
|
|
67
138
|
Args:
|
|
68
139
|
mission_id: The ID of the mission this strategy is associated with
|
|
69
140
|
setup_version_id: The ID of the setup version this strategy is associated with
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
kwargs: other optional arguments to pass to the parent class constructor
|
|
141
|
+
client_config: Configuration for the gRPC client connection
|
|
142
|
+
config: Configuration for the filesystem strategy
|
|
73
143
|
"""
|
|
74
144
|
super().__init__(mission_id, setup_version_id, config)
|
|
145
|
+
self.service_name = "FilesystemService"
|
|
75
146
|
channel = self._init_channel(client_config)
|
|
76
147
|
self.stub = filesystem_service_pb2_grpc.FilesystemServiceStub(channel)
|
|
77
|
-
logger.
|
|
148
|
+
logger.debug("Channel client 'Filesystem' initialized succesfully")
|
|
78
149
|
|
|
79
|
-
def
|
|
80
|
-
|
|
150
|
+
def upload_files(
|
|
151
|
+
self,
|
|
152
|
+
files: list[UploadFileData],
|
|
153
|
+
) -> tuple[list[FilesystemRecord], int, int]:
|
|
154
|
+
"""Upload multiple files to the filesystem.
|
|
81
155
|
|
|
82
156
|
Args:
|
|
83
|
-
|
|
84
|
-
name: The name of the file to be created
|
|
85
|
-
file_type: The type of data being uploaded
|
|
157
|
+
files: List of tuples containing (content, name, file_type, content_type, metadata, replace_if_exists)
|
|
86
158
|
|
|
87
159
|
Returns:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Raises:
|
|
91
|
-
ValueError: If the file already exists
|
|
160
|
+
tuple[list[FilesystemRecord], int, int]: List of uploaded files, total uploaded count, total failed count
|
|
92
161
|
"""
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
162
|
+
logger.debug("Uploading %d files", len(files))
|
|
163
|
+
with GrpcFilesystem._handle_grpc_errors("UploadFiles"):
|
|
164
|
+
upload_files: list[filesystem_pb2.UploadFileData] = []
|
|
165
|
+
for file in files:
|
|
166
|
+
metadata_struct: struct_pb2.Struct | None = None
|
|
167
|
+
if file.metadata:
|
|
168
|
+
metadata_struct = struct_pb2.Struct()
|
|
169
|
+
metadata_struct.update(file.metadata)
|
|
170
|
+
upload_files.append(
|
|
171
|
+
filesystem_pb2.UploadFileData(
|
|
172
|
+
context=self.mission_id,
|
|
173
|
+
name=file.name,
|
|
174
|
+
file_type=self._file_type_to_enum(file.file_type),
|
|
175
|
+
content_type=file.content_type or "application/octet-stream",
|
|
176
|
+
content=file.content,
|
|
177
|
+
metadata=metadata_struct,
|
|
178
|
+
status=filesystem_pb2.FileStatus.FILE_STATUS_UPLOADING,
|
|
179
|
+
replace_if_exists=file.replace_if_exists,
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
request = filesystem_pb2.UploadFilesRequest(files=upload_files)
|
|
183
|
+
response: filesystem_pb2.UploadFilesResponse = self.exec_grpc_query("UploadFiles", request)
|
|
184
|
+
results = [self._file_proto_to_data(result.file) for result in response.results if result.HasField("file")]
|
|
185
|
+
logger.debug("Uploaded files: %s", results)
|
|
186
|
+
return results, response.total_uploaded, response.total_failed
|
|
107
187
|
|
|
108
|
-
def
|
|
109
|
-
|
|
188
|
+
def get_file(
|
|
189
|
+
self,
|
|
190
|
+
file_id: str,
|
|
191
|
+
*,
|
|
192
|
+
include_content: bool = False,
|
|
193
|
+
) -> FilesystemRecord:
|
|
194
|
+
"""Get a file from the filesystem.
|
|
110
195
|
|
|
111
196
|
Args:
|
|
112
|
-
|
|
197
|
+
file_id: The ID of the file to be retrieved
|
|
198
|
+
include_content: Whether to include file content in response
|
|
113
199
|
|
|
114
200
|
Returns:
|
|
115
|
-
|
|
201
|
+
FilesystemRecord: Metadata about the retrieved file
|
|
202
|
+
|
|
203
|
+
Raises:
|
|
204
|
+
FilesystemServiceError: If there is an error retrieving the file
|
|
116
205
|
"""
|
|
117
|
-
with GrpcFilesystem._handle_grpc_errors("
|
|
118
|
-
request = filesystem_pb2.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
name=response.file.name,
|
|
123
|
-
file_type=FileType[FileTypeProto.Name(response.file.file_type)],
|
|
124
|
-
url=response.file.url,
|
|
206
|
+
with GrpcFilesystem._handle_grpc_errors("GetFile"):
|
|
207
|
+
request = filesystem_pb2.GetFileRequest(
|
|
208
|
+
context=self.mission_id,
|
|
209
|
+
file_id=file_id,
|
|
210
|
+
include_content=include_content,
|
|
125
211
|
)
|
|
126
212
|
|
|
127
|
-
|
|
128
|
-
|
|
213
|
+
response: filesystem_pb2.GetFileResponse = self.exec_grpc_query("GetFile", request)
|
|
214
|
+
|
|
215
|
+
return self._file_proto_to_data(response.file)
|
|
216
|
+
|
|
217
|
+
def update_file(
|
|
218
|
+
self,
|
|
219
|
+
file_id: str,
|
|
220
|
+
content: bytes | None = None,
|
|
221
|
+
file_type: Literal[
|
|
222
|
+
"UNSPECIFIED",
|
|
223
|
+
"DOCUMENT",
|
|
224
|
+
"IMAGE",
|
|
225
|
+
"VIDEO",
|
|
226
|
+
"AUDIO",
|
|
227
|
+
"ARCHIVE",
|
|
228
|
+
"CODE",
|
|
229
|
+
"OTHER",
|
|
230
|
+
]
|
|
231
|
+
| None = None,
|
|
232
|
+
content_type: str | None = None,
|
|
233
|
+
metadata: dict[str, Any] | None = None,
|
|
234
|
+
new_name: str | None = None,
|
|
235
|
+
status: str | None = None,
|
|
236
|
+
) -> FilesystemRecord:
|
|
237
|
+
"""Update a file in the filesystem.
|
|
129
238
|
|
|
130
239
|
Args:
|
|
131
|
-
|
|
132
|
-
content:
|
|
133
|
-
file_type:
|
|
240
|
+
file_id: The id of the file to be updated
|
|
241
|
+
content: Optional new content of the file
|
|
242
|
+
file_type: Optional new type of data
|
|
243
|
+
content_type: Optional new MIME type
|
|
244
|
+
metadata: Optional new metadata (will merge with existing)
|
|
245
|
+
new_name: Optional new name for the file
|
|
246
|
+
status: Optional new status for the file
|
|
134
247
|
|
|
135
248
|
Returns:
|
|
136
|
-
|
|
249
|
+
FilesystemRecord: Metadata about the updated file
|
|
250
|
+
|
|
251
|
+
Raises:
|
|
252
|
+
FilesystemServiceError: If there is an error during update
|
|
137
253
|
"""
|
|
138
254
|
with GrpcFilesystem._handle_grpc_errors("UpdateFile"):
|
|
139
255
|
request = filesystem_pb2.UpdateFileRequest(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
file_type=file_type.name,
|
|
256
|
+
context=self.mission_id,
|
|
257
|
+
file_id=file_id,
|
|
143
258
|
content=content,
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
name=response.file.name,
|
|
149
|
-
file_type=FileType[FileTypeProto.Name(response.file.file_type)],
|
|
150
|
-
url=response.file.url,
|
|
259
|
+
file_type=self._file_type_to_enum(file_type) if file_type else None,
|
|
260
|
+
content_type=content_type,
|
|
261
|
+
new_name=new_name,
|
|
262
|
+
status=self._file_status_to_enum(status) if status else None,
|
|
151
263
|
)
|
|
152
264
|
|
|
153
|
-
|
|
154
|
-
|
|
265
|
+
if metadata:
|
|
266
|
+
request.metadata.update(metadata)
|
|
155
267
|
|
|
156
|
-
|
|
157
|
-
|
|
268
|
+
response: filesystem_pb2.UpdateFileResponse = self.exec_grpc_query("UpdateFile", request)
|
|
269
|
+
return self._file_proto_to_data(response.result.file)
|
|
158
270
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
271
|
+
def delete_files(
|
|
272
|
+
self,
|
|
273
|
+
filters: FileFilter,
|
|
274
|
+
*,
|
|
275
|
+
permanent: bool = False,
|
|
276
|
+
force: bool = False,
|
|
277
|
+
) -> tuple[dict[str, bool], int, int]:
|
|
278
|
+
"""Delete multiple files from the filesystem.
|
|
166
279
|
|
|
167
|
-
|
|
168
|
-
|
|
280
|
+
Args:
|
|
281
|
+
filters: Filter criteria for the files
|
|
282
|
+
permanent: Whether to permanently delete the files
|
|
283
|
+
force: Whether to force delete even if files are in use
|
|
169
284
|
|
|
170
285
|
Returns:
|
|
171
|
-
|
|
286
|
+
tuple[dict[str, bool], int, int]: Results per file, total deleted count, total failed count
|
|
172
287
|
"""
|
|
173
|
-
with GrpcFilesystem._handle_grpc_errors("
|
|
174
|
-
request = filesystem_pb2.
|
|
175
|
-
|
|
176
|
-
|
|
288
|
+
with GrpcFilesystem._handle_grpc_errors("DeleteFiles"):
|
|
289
|
+
request = filesystem_pb2.DeleteFilesRequest(
|
|
290
|
+
context=self.mission_id,
|
|
291
|
+
filters=self._filter_to_proto(filters),
|
|
292
|
+
permanent=permanent,
|
|
293
|
+
force=force,
|
|
177
294
|
)
|
|
178
|
-
return [
|
|
179
|
-
FilesystemData(
|
|
180
|
-
kin_context=file.kin_context,
|
|
181
|
-
name=file.name,
|
|
182
|
-
file_type=FileType[FileTypeProto.Name(file.file_type)],
|
|
183
|
-
url=file.url,
|
|
184
|
-
)
|
|
185
|
-
for file in response.files
|
|
186
|
-
]
|
|
187
295
|
|
|
188
|
-
|
|
189
|
-
|
|
296
|
+
response: filesystem_pb2.DeleteFilesResponse = self.exec_grpc_query("DeleteFiles", request)
|
|
297
|
+
return dict(response.results), response.total_deleted, response.total_failed
|
|
298
|
+
|
|
299
|
+
def get_files(
|
|
300
|
+
self,
|
|
301
|
+
filters: FileFilter,
|
|
302
|
+
*,
|
|
303
|
+
list_size: int = 100,
|
|
304
|
+
offset: int = 0,
|
|
305
|
+
order: str | None = None,
|
|
306
|
+
include_content: bool = False,
|
|
307
|
+
) -> tuple[list[FilesystemRecord], int]:
|
|
308
|
+
"""Get multiple files from the filesystem.
|
|
190
309
|
|
|
191
310
|
Args:
|
|
192
|
-
|
|
311
|
+
filters: Filter criteria for the files
|
|
312
|
+
list_size: Number of files to return per page
|
|
313
|
+
offset: Offset to start from
|
|
314
|
+
order: Field to order results by
|
|
315
|
+
include_content: Whether to include file content in response
|
|
193
316
|
|
|
194
317
|
Returns:
|
|
195
|
-
list[
|
|
318
|
+
tuple[list[FilesystemRecord], int]: List of files and total count
|
|
196
319
|
"""
|
|
197
|
-
with GrpcFilesystem._handle_grpc_errors("
|
|
198
|
-
request = filesystem_pb2.
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
)
|
|
210
|
-
elif which_field == "error":
|
|
211
|
-
# Handle error case
|
|
212
|
-
result[name] = None
|
|
213
|
-
logger.warning("Error retrieving file '%s': %s", name, file_result.error)
|
|
214
|
-
return result
|
|
320
|
+
with GrpcFilesystem._handle_grpc_errors("GetFiles"):
|
|
321
|
+
request = filesystem_pb2.GetFilesRequest(
|
|
322
|
+
context=self.mission_id,
|
|
323
|
+
filters=self._filter_to_proto(filters),
|
|
324
|
+
include_content=include_content,
|
|
325
|
+
list_size=list_size,
|
|
326
|
+
offset=offset,
|
|
327
|
+
order=order,
|
|
328
|
+
)
|
|
329
|
+
response: filesystem_pb2.GetFilesResponse = self.exec_grpc_query("GetFiles", request)
|
|
330
|
+
|
|
331
|
+
return [self._file_proto_to_data(file) for file in response.files], response.total_count
|
|
@@ -139,6 +139,7 @@ class GrpcSetup(SetupStrategy, GrpcClientWrapper):
|
|
|
139
139
|
current_setup_version = setup_pb2.SetupVersion(**valid_data.current_setup_version.model_dump())
|
|
140
140
|
|
|
141
141
|
request = setup_pb2.UpdateSetupRequest(
|
|
142
|
+
setup_id=valid_data.id,
|
|
142
143
|
name=valid_data.name,
|
|
143
144
|
owner_id=valid_data.owner_id or "",
|
|
144
145
|
current_setup_version=current_setup_version,
|
|
@@ -7,7 +7,7 @@ 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=
|
|
10
|
+
digitalkin/__version__.py,sha256=M-XK8XT3lEHqZRrh1JSvDJX8Ri-RXYjKzp3zOM-qaDA,191
|
|
11
11
|
digitalkin/logger.py,sha256=cFbIAZHOFx3nddOssRNYLXyqUPzR4CgDR_c-5wmB-og,1685
|
|
12
12
|
digitalkin/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
digitalkin/grpc_servers/__init__.py,sha256=0cJBlwipSmFdXkyH3T0i6OJ1WpAtNsZgYX7JaSnkbtg,804
|
|
@@ -50,9 +50,9 @@ digitalkin/services/cost/cost_strategy.py,sha256=VhHeqi9WnE1yoDBBVp5qmqwIt5tTZHU
|
|
|
50
50
|
digitalkin/services/cost/default_cost.py,sha256=mEd0VL_tMcGU41q0f9MFeBYeKZBenv0mIHuwgXlQ7uQ,3869
|
|
51
51
|
digitalkin/services/cost/grpc_cost.py,sha256=p_5mG72N7e4bxwBOD9DNokvLtinBILiqCfllmkqpmhw,6253
|
|
52
52
|
digitalkin/services/filesystem/__init__.py,sha256=BhwMl_BUvM0d65fmglkp0SVwn3RfYiUOKJgIMnOCaGM,381
|
|
53
|
-
digitalkin/services/filesystem/default_filesystem.py,sha256=
|
|
54
|
-
digitalkin/services/filesystem/filesystem_strategy.py,sha256
|
|
55
|
-
digitalkin/services/filesystem/grpc_filesystem.py,sha256=
|
|
53
|
+
digitalkin/services/filesystem/default_filesystem.py,sha256=kyNoxnzIAQ-hrBgushwV6GUqtcpno77wUI3qaP7Ge1c,14981
|
|
54
|
+
digitalkin/services/filesystem/filesystem_strategy.py,sha256=-0oad7P0wqL47DJY30snlnGh7RrruFTZT-G9iFmbAk4,9047
|
|
55
|
+
digitalkin/services/filesystem/grpc_filesystem.py,sha256=0U9n4CjTkzscwvFLKYdA0StyHRuV9lCjGbwr7OFrRxI,12453
|
|
56
56
|
digitalkin/services/identity/__init__.py,sha256=InkeyLgFYYwItx8mePA8HpfacOMWZwwuc0G4pWtKq9s,270
|
|
57
57
|
digitalkin/services/identity/default_identity.py,sha256=Y2auZHrGSZTIN5D8HyjLvLcNbYFM1CNUE23x7p5VIGw,386
|
|
58
58
|
digitalkin/services/identity/identity_strategy.py,sha256=skappBbds1_qa0Gr24FGrNX1N0_OYhYT1Lh7dUaAirE,429
|
|
@@ -61,7 +61,7 @@ digitalkin/services/registry/default_registry.py,sha256=VnWkF6nHpFxUKuUbZLPqzXqd
|
|
|
61
61
|
digitalkin/services/registry/registry_strategy.py,sha256=uBXgZIv25jeXbeVO8vWvlNPxxNYu7_KiCw2PoE6AWr8,423
|
|
62
62
|
digitalkin/services/setup/__init__.py,sha256=t6xcvEWqTbcRZstBFK9cESEqaZKvpW14VtYygxIqfYQ,65
|
|
63
63
|
digitalkin/services/setup/default_setup.py,sha256=9VM3KwsuQcFQQ08RoOHWOE_-9BsRW0YGRtDWYTbQGdA,8246
|
|
64
|
-
digitalkin/services/setup/grpc_setup.py,sha256=
|
|
64
|
+
digitalkin/services/setup/grpc_setup.py,sha256=qjdED3HYZtpgeYYpiIwBWwPgB1NtoAuKmB5unNNRnVQ,12480
|
|
65
65
|
digitalkin/services/setup/setup_strategy.py,sha256=ZnJ_HwWCkHCPrqKekSD5L9y3p8wMwfjQ8sj2hLZq6go,4004
|
|
66
66
|
digitalkin/services/snapshot/__init__.py,sha256=Uzlnzo0CYlSpVsdiI37hW7xQk8hu3YA1fOI6O6MSzB0,270
|
|
67
67
|
digitalkin/services/snapshot/default_snapshot.py,sha256=Mb8QwWRsHh9I_tN0ln_ZiFa1QCZxOVWmuVLemQOTWpc,1058
|
|
@@ -74,13 +74,14 @@ digitalkin/utils/__init__.py,sha256=sJnY-ZUgsjMfojAjONC1VN14mhgIDnzyOlGkw21rRnM,
|
|
|
74
74
|
digitalkin/utils/arg_parser.py,sha256=nvjI1pKDY1HfS0oGcMQPtdTQcggXLtpxXMbnMxNEKRU,3109
|
|
75
75
|
digitalkin/utils/development_mode_action.py,sha256=TqRuAF_A7bDD4twRB4PnZcRoNeaiAnEdxM5kvy4aoaA,1511
|
|
76
76
|
digitalkin/utils/llm_ready_schema.py,sha256=JjMug_lrQllqFoanaC091VgOqwAd-_YzcpqFlS7p778,2375
|
|
77
|
-
digitalkin-0.2.
|
|
77
|
+
digitalkin-0.2.16.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
|
|
78
78
|
modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
-
modules/cpu_intensive_module.py,sha256=
|
|
79
|
+
modules/cpu_intensive_module.py,sha256=ejB9XPnFfA0uCuFUQbM3fy5UYfqqAlF36rv_P5Ri8ho,8363
|
|
80
80
|
modules/minimal_llm_module.py,sha256=Ijld__ZnhzfLwpXD1XVkLZ7jyKZKyOFZczOpiPttJZc,11216
|
|
81
|
-
modules/
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
digitalkin-0.2.
|
|
85
|
-
digitalkin-0.2.
|
|
86
|
-
digitalkin-0.2.
|
|
81
|
+
modules/text_transform_module.py,sha256=bwPSnEUthZQyfLwcTLo52iAxItAoknkLh8Y3m5aywaY,7251
|
|
82
|
+
services/filesystem_module.py,sha256=71Mcja8jCQqiqFHPdsIXplFIHTvgkxRhp0TRXuCfgkk,7430
|
|
83
|
+
services/storage_module.py,sha256=ybTMqmvGaTrR8PqJ4FU0cwxaDjT36TskVrGoetTGmno,6955
|
|
84
|
+
digitalkin-0.2.16.dist-info/METADATA,sha256=6KBLCX9EMfGWt8ZpkbRDrs9CFD5FtKoAmPa_zwX4fNU,30580
|
|
85
|
+
digitalkin-0.2.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
86
|
+
digitalkin-0.2.16.dist-info/top_level.txt,sha256=gcjqlyrZuLjIyxrOIavCQM_olpr6ND5kPKkZd2j0xGo,40
|
|
87
|
+
digitalkin-0.2.16.dist-info/RECORD,,
|
modules/cpu_intensive_module.py
CHANGED