isolate 0.14.3__py3-none-any.whl → 0.16.0__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.

Potentially problematic release.


This version of isolate might be problematic. Click here for more details.

@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.14.3'
16
- __version_tuple__ = version_tuple = (0, 14, 3)
15
+ __version__ = version = '0.16.0'
16
+ __version_tuple__ = version_tuple = (0, 16, 0)
@@ -115,6 +115,7 @@ class IsolateServerConnection(EnvironmentConnection):
115
115
  was_it_raised=False,
116
116
  ),
117
117
  environments=self.definitions,
118
+ stream_logs=True, # Default to streaming logs
118
119
  )
119
120
 
120
121
  return_value = []
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING, Callable, Iterator
11
11
  from platformdirs import user_cache_dir
12
12
 
13
13
  from isolate.backends.common import lock_build_path
14
- from isolate.logs import Log
14
+ from isolate.logs import Log, LogLevel, LogSource
15
15
 
16
16
  if TYPE_CHECKING:
17
17
  from isolate.backends import BaseEnvironment
@@ -28,7 +28,37 @@ class IsolateSettings:
28
28
  strict_cache: bool = _STRICT_CACHE
29
29
 
30
30
  def log(self, log: Log) -> None:
31
- self.log_hook(log)
31
+ self.log_hook(self._infer_log_level(log))
32
+
33
+ def _infer_log_level(self, log: Log) -> Log:
34
+ """Infer the log level if it's correctly set."""
35
+ if log.level not in (LogLevel.STDOUT, LogLevel.STDERR):
36
+ # We should only infer the log level for stdout/stderr logs.
37
+ return log
38
+
39
+ if log.source in (LogSource.BUILDER, LogSource.BRIDGE):
40
+ return replace(log, level=LogLevel.TRACE)
41
+
42
+ line = log.message.lower()
43
+
44
+ if "[error]" in line:
45
+ return replace(log, level=LogLevel.ERROR)
46
+ if "[warning]" in line:
47
+ return replace(log, level=LogLevel.WARNING)
48
+ if "[warn]" in line:
49
+ return replace(log, level=LogLevel.WARNING)
50
+ if "[info]" in line:
51
+ return replace(log, level=LogLevel.INFO)
52
+ if "[debug]" in line:
53
+ return replace(log, level=LogLevel.DEBUG)
54
+ if "[trace]" in line:
55
+ return replace(log, level=LogLevel.TRACE)
56
+
57
+ if log.level == LogLevel.STDERR:
58
+ return replace(log, level=LogLevel.ERROR)
59
+
60
+ # Default to INFO level
61
+ return replace(log, level=LogLevel.INFO)
32
62
 
33
63
  def _get_temp_base(self) -> Path:
34
64
  """Return the base path for creating temporary files/directories.
@@ -173,7 +173,9 @@ class PythonExecutionBase(Generic[ConnectionType]):
173
173
  """Return the command to run the agent process with."""
174
174
  raise NotImplementedError
175
175
 
176
- def handle_agent_log(self, line: str, level: LogLevel, source: LogSource) -> None:
176
+ def handle_agent_log(
177
+ self, line: str, *, level: LogLevel, source: LogSource
178
+ ) -> None:
177
179
  """Handle a log line emitted by the agent process. The level will be either
178
180
  STDOUT or STDERR."""
179
181
  raise NotImplementedError
@@ -147,5 +147,7 @@ class LocalPythonGRPC(PythonExecutionBase[str], GRPCExecutionBase):
147
147
  str(log_fd),
148
148
  ]
149
149
 
150
- def handle_agent_log(self, line: str, level: LogLevel, source: LogSource) -> None:
150
+ def handle_agent_log(
151
+ self, line: str, *, level: LogLevel, source: LogSource
152
+ ) -> None:
151
153
  self.log(line, level=level, source=source)
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: agent.proto
4
- # Protobuf Python Version: 5.26.1
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -20,8 +20,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61gent.proto
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent_pb2', _globals)
23
- if not _descriptor._USE_C_DESCRIPTORS:
24
- DESCRIPTOR._loaded_options = None
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ DESCRIPTOR._options = None
25
25
  _globals['_FUNCTIONCALL']._serialized_start=29
26
26
  _globals['_FUNCTIONCALL']._serialized_end=139
27
27
  _globals['_AGENT']._serialized_start=141
@@ -1,35 +1,10 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
- import warnings
5
4
 
6
5
  from isolate.connections.grpc.definitions import agent_pb2 as agent__pb2
7
6
  from isolate.connections.grpc.definitions import common_pb2 as common__pb2
8
7
 
9
- GRPC_GENERATED_VERSION = '1.64.0'
10
- GRPC_VERSION = grpc.__version__
11
- EXPECTED_ERROR_RELEASE = '1.65.0'
12
- SCHEDULED_RELEASE_DATE = 'June 25, 2024'
13
- _version_not_supported = False
14
-
15
- try:
16
- from grpc._utilities import first_version_is_lower
17
- _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
18
- except ImportError:
19
- _version_not_supported = True
20
-
21
- if _version_not_supported:
22
- warnings.warn(
23
- f'The grpc package installed is at version {GRPC_VERSION},'
24
- + f' but the generated code in agent_pb2_grpc.py depends on'
25
- + f' grpcio>={GRPC_GENERATED_VERSION}.'
26
- + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
27
- + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
28
- + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},'
29
- + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.',
30
- RuntimeWarning
31
- )
32
-
33
8
 
34
9
  class AgentStub(object):
35
10
  """Missing associated documentation comment in .proto file."""
@@ -44,7 +19,7 @@ class AgentStub(object):
44
19
  '/Agent/Run',
45
20
  request_serializer=agent__pb2.FunctionCall.SerializeToString,
46
21
  response_deserializer=common__pb2.PartialRunResult.FromString,
47
- _registered_method=True)
22
+ )
48
23
 
49
24
 
50
25
  class AgentServicer(object):
@@ -69,7 +44,6 @@ def add_AgentServicer_to_server(servicer, server):
69
44
  generic_handler = grpc.method_handlers_generic_handler(
70
45
  'Agent', rpc_method_handlers)
71
46
  server.add_generic_rpc_handlers((generic_handler,))
72
- server.add_registered_method_handlers('Agent', rpc_method_handlers)
73
47
 
74
48
 
75
49
  # This class is part of an EXPERIMENTAL API.
@@ -87,18 +61,8 @@ class Agent(object):
87
61
  wait_for_ready=None,
88
62
  timeout=None,
89
63
  metadata=None):
90
- return grpc.experimental.unary_stream(
91
- request,
92
- target,
93
- '/Agent/Run',
64
+ return grpc.experimental.unary_stream(request, target, '/Agent/Run',
94
65
  agent__pb2.FunctionCall.SerializeToString,
95
66
  common__pb2.PartialRunResult.FromString,
96
- options,
97
- channel_credentials,
98
- insecure,
99
- call_credentials,
100
- compression,
101
- wait_for_ready,
102
- timeout,
103
- metadata,
104
- _registered_method=True)
67
+ options, channel_credentials,
68
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: common.proto
4
- # Protobuf Python Version: 5.26.1
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -20,8 +20,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.prot
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals)
23
- if not _descriptor._USE_C_DESCRIPTORS:
24
- DESCRIPTOR._loaded_options = None
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ DESCRIPTOR._options = None
25
25
  _globals['_LOGSOURCE']._serialized_start=426
26
26
  _globals['_LOGSOURCE']._serialized_end=472
27
27
  _globals['_LOGLEVEL']._serialized_start=474
@@ -1,29 +1,4 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
- import warnings
5
4
 
6
-
7
- GRPC_GENERATED_VERSION = '1.64.0'
8
- GRPC_VERSION = grpc.__version__
9
- EXPECTED_ERROR_RELEASE = '1.65.0'
10
- SCHEDULED_RELEASE_DATE = 'June 25, 2024'
11
- _version_not_supported = False
12
-
13
- try:
14
- from grpc._utilities import first_version_is_lower
15
- _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
16
- except ImportError:
17
- _version_not_supported = True
18
-
19
- if _version_not_supported:
20
- warnings.warn(
21
- f'The grpc package installed is at version {GRPC_VERSION},'
22
- + f' but the generated code in common_pb2_grpc.py depends on'
23
- + f' grpcio>={GRPC_GENERATED_VERSION}.'
24
- + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
25
- + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
26
- + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},'
27
- + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.',
28
- RuntimeWarning
29
- )
@@ -219,5 +219,7 @@ class PythonIPC(PythonExecutionBase[AgentListener], IsolatedProcessConnection):
219
219
  str(log_fd),
220
220
  ]
221
221
 
222
- def handle_agent_log(self, line: str, level: LogLevel, source: LogSource) -> None:
222
+ def handle_agent_log(
223
+ self, line: str, *, level: LogLevel, source: LogSource
224
+ ) -> None:
223
225
  self.log(line, level=level, source=source)
isolate/logger.py CHANGED
@@ -51,6 +51,3 @@ class IsolateLogger:
51
51
  print("Failed to parse ISOLATE_LOG_LABELS")
52
52
 
53
53
  return cls.with_env_expanded(labels=_labels)
54
-
55
-
56
- ENV_LOGGER = IsolateLogger.from_env()
@@ -25,6 +25,7 @@ message BoundFunction {
25
25
  repeated EnvironmentDefinition environments = 1;
26
26
  SerializedObject function = 2;
27
27
  optional SerializedObject setup_func = 3;
28
+ bool stream_logs = 4;
28
29
  }
29
30
 
30
31
  message EnvironmentDefinition {
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: server.proto
4
- # Protobuf Python Version: 5.26.1
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -16,41 +16,41 @@ from isolate.connections.grpc.definitions import common_pb2 as common__pb2
16
16
  from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cserver.proto\x1a\x0c\x63ommon.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x9d\x01\n\rBoundFunction\x12,\n\x0c\x65nvironments\x18\x01 \x03(\x0b\x32\x16.EnvironmentDefinition\x12#\n\x08\x66unction\x18\x02 \x01(\x0b\x32\x11.SerializedObject\x12*\n\nsetup_func\x18\x03 \x01(\x0b\x32\x11.SerializedObjectH\x00\x88\x01\x01\x42\r\n\x0b_setup_func\"d\n\x15\x45nvironmentDefinition\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12.\n\rconfiguration\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x66orce\x18\x03 \x01(\x08\"R\n\rSubmitRequest\x12 \n\x08\x66unction\x18\x01 \x01(\x0b\x32\x0e.BoundFunction\x12\x1f\n\x08metadata\x18\x02 \x01(\x0b\x32\r.TaskMetadata\"{\n\x0cTaskMetadata\x12\x36\n\rlogger_labels\x18\x01 \x03(\x0b\x32\x1f.TaskMetadata.LoggerLabelsEntry\x1a\x33\n\x11LoggerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"!\n\x0eSubmitResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"F\n\x12SetMetadataRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x1f\n\x08metadata\x18\x02 \x01(\x0b\x32\r.TaskMetadata\"\x15\n\x13SetMetadataResponse\"\r\n\x0bListRequest\"\x1b\n\x08TaskInfo\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"(\n\x0cListResponse\x12\x18\n\x05tasks\x18\x01 \x03(\x0b\x32\t.TaskInfo\" \n\rCancelRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"\x10\n\x0e\x43\x61ncelResponse2\xf4\x01\n\x07Isolate\x12,\n\x03Run\x12\x0e.BoundFunction\x1a\x11.PartialRunResult\"\x00\x30\x01\x12+\n\x06Submit\x12\x0e.SubmitRequest\x1a\x0f.SubmitResponse\"\x00\x12:\n\x0bSetMetadata\x12\x13.SetMetadataRequest\x1a\x14.SetMetadataResponse\"\x00\x12%\n\x04List\x12\x0c.ListRequest\x1a\r.ListResponse\"\x00\x12+\n\x06\x43\x61ncel\x12\x0e.CancelRequest\x1a\x0f.CancelResponse\"\x00\x62\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cserver.proto\x1a\x0c\x63ommon.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xb2\x01\n\rBoundFunction\x12,\n\x0c\x65nvironments\x18\x01 \x03(\x0b\x32\x16.EnvironmentDefinition\x12#\n\x08\x66unction\x18\x02 \x01(\x0b\x32\x11.SerializedObject\x12*\n\nsetup_func\x18\x03 \x01(\x0b\x32\x11.SerializedObjectH\x00\x88\x01\x01\x12\x13\n\x0bstream_logs\x18\x04 \x01(\x08\x42\r\n\x0b_setup_func\"d\n\x15\x45nvironmentDefinition\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12.\n\rconfiguration\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x66orce\x18\x03 \x01(\x08\"R\n\rSubmitRequest\x12 \n\x08\x66unction\x18\x01 \x01(\x0b\x32\x0e.BoundFunction\x12\x1f\n\x08metadata\x18\x02 \x01(\x0b\x32\r.TaskMetadata\"{\n\x0cTaskMetadata\x12\x36\n\rlogger_labels\x18\x01 \x03(\x0b\x32\x1f.TaskMetadata.LoggerLabelsEntry\x1a\x33\n\x11LoggerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"!\n\x0eSubmitResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"F\n\x12SetMetadataRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x1f\n\x08metadata\x18\x02 \x01(\x0b\x32\r.TaskMetadata\"\x15\n\x13SetMetadataResponse\"\r\n\x0bListRequest\"\x1b\n\x08TaskInfo\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"(\n\x0cListResponse\x12\x18\n\x05tasks\x18\x01 \x03(\x0b\x32\t.TaskInfo\" \n\rCancelRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"\x10\n\x0e\x43\x61ncelResponse2\xf4\x01\n\x07Isolate\x12,\n\x03Run\x12\x0e.BoundFunction\x1a\x11.PartialRunResult\"\x00\x30\x01\x12+\n\x06Submit\x12\x0e.SubmitRequest\x1a\x0f.SubmitResponse\"\x00\x12:\n\x0bSetMetadata\x12\x13.SetMetadataRequest\x1a\x14.SetMetadataResponse\"\x00\x12%\n\x04List\x12\x0c.ListRequest\x1a\r.ListResponse\"\x00\x12+\n\x06\x43\x61ncel\x12\x0e.CancelRequest\x1a\x0f.CancelResponse\"\x00\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
23
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'server_pb2', _globals)
24
- if not _descriptor._USE_C_DESCRIPTORS:
25
- DESCRIPTOR._loaded_options = None
26
- _globals['_TASKMETADATA_LOGGERLABELSENTRY']._loaded_options = None
24
+ if _descriptor._USE_C_DESCRIPTORS == False:
25
+ DESCRIPTOR._options = None
26
+ _globals['_TASKMETADATA_LOGGERLABELSENTRY']._options = None
27
27
  _globals['_TASKMETADATA_LOGGERLABELSENTRY']._serialized_options = b'8\001'
28
28
  _globals['_BOUNDFUNCTION']._serialized_start=61
29
- _globals['_BOUNDFUNCTION']._serialized_end=218
30
- _globals['_ENVIRONMENTDEFINITION']._serialized_start=220
31
- _globals['_ENVIRONMENTDEFINITION']._serialized_end=320
32
- _globals['_SUBMITREQUEST']._serialized_start=322
33
- _globals['_SUBMITREQUEST']._serialized_end=404
34
- _globals['_TASKMETADATA']._serialized_start=406
35
- _globals['_TASKMETADATA']._serialized_end=529
36
- _globals['_TASKMETADATA_LOGGERLABELSENTRY']._serialized_start=478
37
- _globals['_TASKMETADATA_LOGGERLABELSENTRY']._serialized_end=529
38
- _globals['_SUBMITRESPONSE']._serialized_start=531
39
- _globals['_SUBMITRESPONSE']._serialized_end=564
40
- _globals['_SETMETADATAREQUEST']._serialized_start=566
41
- _globals['_SETMETADATAREQUEST']._serialized_end=636
42
- _globals['_SETMETADATARESPONSE']._serialized_start=638
43
- _globals['_SETMETADATARESPONSE']._serialized_end=659
44
- _globals['_LISTREQUEST']._serialized_start=661
45
- _globals['_LISTREQUEST']._serialized_end=674
46
- _globals['_TASKINFO']._serialized_start=676
47
- _globals['_TASKINFO']._serialized_end=703
48
- _globals['_LISTRESPONSE']._serialized_start=705
49
- _globals['_LISTRESPONSE']._serialized_end=745
50
- _globals['_CANCELREQUEST']._serialized_start=747
51
- _globals['_CANCELREQUEST']._serialized_end=779
52
- _globals['_CANCELRESPONSE']._serialized_start=781
53
- _globals['_CANCELRESPONSE']._serialized_end=797
54
- _globals['_ISOLATE']._serialized_start=800
55
- _globals['_ISOLATE']._serialized_end=1044
29
+ _globals['_BOUNDFUNCTION']._serialized_end=239
30
+ _globals['_ENVIRONMENTDEFINITION']._serialized_start=241
31
+ _globals['_ENVIRONMENTDEFINITION']._serialized_end=341
32
+ _globals['_SUBMITREQUEST']._serialized_start=343
33
+ _globals['_SUBMITREQUEST']._serialized_end=425
34
+ _globals['_TASKMETADATA']._serialized_start=427
35
+ _globals['_TASKMETADATA']._serialized_end=550
36
+ _globals['_TASKMETADATA_LOGGERLABELSENTRY']._serialized_start=499
37
+ _globals['_TASKMETADATA_LOGGERLABELSENTRY']._serialized_end=550
38
+ _globals['_SUBMITRESPONSE']._serialized_start=552
39
+ _globals['_SUBMITRESPONSE']._serialized_end=585
40
+ _globals['_SETMETADATAREQUEST']._serialized_start=587
41
+ _globals['_SETMETADATAREQUEST']._serialized_end=657
42
+ _globals['_SETMETADATARESPONSE']._serialized_start=659
43
+ _globals['_SETMETADATARESPONSE']._serialized_end=680
44
+ _globals['_LISTREQUEST']._serialized_start=682
45
+ _globals['_LISTREQUEST']._serialized_end=695
46
+ _globals['_TASKINFO']._serialized_start=697
47
+ _globals['_TASKINFO']._serialized_end=724
48
+ _globals['_LISTRESPONSE']._serialized_start=726
49
+ _globals['_LISTRESPONSE']._serialized_end=766
50
+ _globals['_CANCELREQUEST']._serialized_start=768
51
+ _globals['_CANCELREQUEST']._serialized_end=800
52
+ _globals['_CANCELRESPONSE']._serialized_start=802
53
+ _globals['_CANCELRESPONSE']._serialized_end=818
54
+ _globals['_ISOLATE']._serialized_start=821
55
+ _globals['_ISOLATE']._serialized_end=1065
56
56
  # @@protoc_insertion_point(module_scope)
@@ -25,21 +25,24 @@ class BoundFunction(google.protobuf.message.Message):
25
25
  ENVIRONMENTS_FIELD_NUMBER: builtins.int
26
26
  FUNCTION_FIELD_NUMBER: builtins.int
27
27
  SETUP_FUNC_FIELD_NUMBER: builtins.int
28
+ STREAM_LOGS_FIELD_NUMBER: builtins.int
28
29
  @property
29
30
  def environments(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___EnvironmentDefinition]: ...
30
31
  @property
31
32
  def function(self) -> common_pb2.SerializedObject: ...
32
33
  @property
33
34
  def setup_func(self) -> common_pb2.SerializedObject: ...
35
+ stream_logs: builtins.bool
34
36
  def __init__(
35
37
  self,
36
38
  *,
37
39
  environments: collections.abc.Iterable[global___EnvironmentDefinition] | None = ...,
38
40
  function: common_pb2.SerializedObject | None = ...,
39
41
  setup_func: common_pb2.SerializedObject | None = ...,
42
+ stream_logs: builtins.bool = ...,
40
43
  ) -> None: ...
41
44
  def HasField(self, field_name: typing_extensions.Literal["_setup_func", b"_setup_func", "function", b"function", "setup_func", b"setup_func"]) -> builtins.bool: ...
42
- def ClearField(self, field_name: typing_extensions.Literal["_setup_func", b"_setup_func", "environments", b"environments", "function", b"function", "setup_func", b"setup_func"]) -> None: ...
45
+ def ClearField(self, field_name: typing_extensions.Literal["_setup_func", b"_setup_func", "environments", b"environments", "function", b"function", "setup_func", b"setup_func", "stream_logs", b"stream_logs"]) -> None: ...
43
46
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_setup_func", b"_setup_func"]) -> typing_extensions.Literal["setup_func"] | None: ...
44
47
 
45
48
  global___BoundFunction = BoundFunction
@@ -1,35 +1,10 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
- import warnings
5
4
 
6
5
  from isolate.connections.grpc.definitions import common_pb2 as common__pb2
7
6
  from isolate.server.definitions import server_pb2 as server__pb2
8
7
 
9
- GRPC_GENERATED_VERSION = '1.64.0'
10
- GRPC_VERSION = grpc.__version__
11
- EXPECTED_ERROR_RELEASE = '1.65.0'
12
- SCHEDULED_RELEASE_DATE = 'June 25, 2024'
13
- _version_not_supported = False
14
-
15
- try:
16
- from grpc._utilities import first_version_is_lower
17
- _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
18
- except ImportError:
19
- _version_not_supported = True
20
-
21
- if _version_not_supported:
22
- warnings.warn(
23
- f'The grpc package installed is at version {GRPC_VERSION},'
24
- + f' but the generated code in server_pb2_grpc.py depends on'
25
- + f' grpcio>={GRPC_GENERATED_VERSION}.'
26
- + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
27
- + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
28
- + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},'
29
- + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.',
30
- RuntimeWarning
31
- )
32
-
33
8
 
34
9
  class IsolateStub(object):
35
10
  """Missing associated documentation comment in .proto file."""
@@ -44,27 +19,27 @@ class IsolateStub(object):
44
19
  '/Isolate/Run',
45
20
  request_serializer=server__pb2.BoundFunction.SerializeToString,
46
21
  response_deserializer=common__pb2.PartialRunResult.FromString,
47
- _registered_method=True)
22
+ )
48
23
  self.Submit = channel.unary_unary(
49
24
  '/Isolate/Submit',
50
25
  request_serializer=server__pb2.SubmitRequest.SerializeToString,
51
26
  response_deserializer=server__pb2.SubmitResponse.FromString,
52
- _registered_method=True)
27
+ )
53
28
  self.SetMetadata = channel.unary_unary(
54
29
  '/Isolate/SetMetadata',
55
30
  request_serializer=server__pb2.SetMetadataRequest.SerializeToString,
56
31
  response_deserializer=server__pb2.SetMetadataResponse.FromString,
57
- _registered_method=True)
32
+ )
58
33
  self.List = channel.unary_unary(
59
34
  '/Isolate/List',
60
35
  request_serializer=server__pb2.ListRequest.SerializeToString,
61
36
  response_deserializer=server__pb2.ListResponse.FromString,
62
- _registered_method=True)
37
+ )
63
38
  self.Cancel = channel.unary_unary(
64
39
  '/Isolate/Cancel',
65
40
  request_serializer=server__pb2.CancelRequest.SerializeToString,
66
41
  response_deserializer=server__pb2.CancelResponse.FromString,
67
- _registered_method=True)
42
+ )
68
43
 
69
44
 
70
45
  class IsolateServicer(object):
@@ -138,7 +113,6 @@ def add_IsolateServicer_to_server(servicer, server):
138
113
  generic_handler = grpc.method_handlers_generic_handler(
139
114
  'Isolate', rpc_method_handlers)
140
115
  server.add_generic_rpc_handlers((generic_handler,))
141
- server.add_registered_method_handlers('Isolate', rpc_method_handlers)
142
116
 
143
117
 
144
118
  # This class is part of an EXPERIMENTAL API.
@@ -156,21 +130,11 @@ class Isolate(object):
156
130
  wait_for_ready=None,
157
131
  timeout=None,
158
132
  metadata=None):
159
- return grpc.experimental.unary_stream(
160
- request,
161
- target,
162
- '/Isolate/Run',
133
+ return grpc.experimental.unary_stream(request, target, '/Isolate/Run',
163
134
  server__pb2.BoundFunction.SerializeToString,
164
135
  common__pb2.PartialRunResult.FromString,
165
- options,
166
- channel_credentials,
167
- insecure,
168
- call_credentials,
169
- compression,
170
- wait_for_ready,
171
- timeout,
172
- metadata,
173
- _registered_method=True)
136
+ options, channel_credentials,
137
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
174
138
 
175
139
  @staticmethod
176
140
  def Submit(request,
@@ -183,21 +147,11 @@ class Isolate(object):
183
147
  wait_for_ready=None,
184
148
  timeout=None,
185
149
  metadata=None):
186
- return grpc.experimental.unary_unary(
187
- request,
188
- target,
189
- '/Isolate/Submit',
150
+ return grpc.experimental.unary_unary(request, target, '/Isolate/Submit',
190
151
  server__pb2.SubmitRequest.SerializeToString,
191
152
  server__pb2.SubmitResponse.FromString,
192
- options,
193
- channel_credentials,
194
- insecure,
195
- call_credentials,
196
- compression,
197
- wait_for_ready,
198
- timeout,
199
- metadata,
200
- _registered_method=True)
153
+ options, channel_credentials,
154
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
201
155
 
202
156
  @staticmethod
203
157
  def SetMetadata(request,
@@ -210,21 +164,11 @@ class Isolate(object):
210
164
  wait_for_ready=None,
211
165
  timeout=None,
212
166
  metadata=None):
213
- return grpc.experimental.unary_unary(
214
- request,
215
- target,
216
- '/Isolate/SetMetadata',
167
+ return grpc.experimental.unary_unary(request, target, '/Isolate/SetMetadata',
217
168
  server__pb2.SetMetadataRequest.SerializeToString,
218
169
  server__pb2.SetMetadataResponse.FromString,
219
- options,
220
- channel_credentials,
221
- insecure,
222
- call_credentials,
223
- compression,
224
- wait_for_ready,
225
- timeout,
226
- metadata,
227
- _registered_method=True)
170
+ options, channel_credentials,
171
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
228
172
 
229
173
  @staticmethod
230
174
  def List(request,
@@ -237,21 +181,11 @@ class Isolate(object):
237
181
  wait_for_ready=None,
238
182
  timeout=None,
239
183
  metadata=None):
240
- return grpc.experimental.unary_unary(
241
- request,
242
- target,
243
- '/Isolate/List',
184
+ return grpc.experimental.unary_unary(request, target, '/Isolate/List',
244
185
  server__pb2.ListRequest.SerializeToString,
245
186
  server__pb2.ListResponse.FromString,
246
- options,
247
- channel_credentials,
248
- insecure,
249
- call_credentials,
250
- compression,
251
- wait_for_ready,
252
- timeout,
253
- metadata,
254
- _registered_method=True)
187
+ options, channel_credentials,
188
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
255
189
 
256
190
  @staticmethod
257
191
  def Cancel(request,
@@ -264,18 +198,8 @@ class Isolate(object):
264
198
  wait_for_ready=None,
265
199
  timeout=None,
266
200
  metadata=None):
267
- return grpc.experimental.unary_unary(
268
- request,
269
- target,
270
- '/Isolate/Cancel',
201
+ return grpc.experimental.unary_unary(request, target, '/Isolate/Cancel',
271
202
  server__pb2.CancelRequest.SerializeToString,
272
203
  server__pb2.CancelResponse.FromString,
273
- options,
274
- channel_credentials,
275
- insecure,
276
- call_credentials,
277
- compression,
278
- wait_for_ready,
279
- timeout,
280
- metadata,
281
- _registered_method=True)
204
+ options, channel_credentials,
205
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: health.proto
4
- # Protobuf Python Version: 5.26.1
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -19,8 +19,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0chealth.proto\x
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'health_pb2', _globals)
22
- if not _descriptor._USE_C_DESCRIPTORS:
23
- DESCRIPTOR._loaded_options = None
22
+ if _descriptor._USE_C_DESCRIPTORS == False:
23
+ DESCRIPTOR._options = None
24
24
  _globals['_HEALTHCHECKREQUEST']._serialized_start=32
25
25
  _globals['_HEALTHCHECKREQUEST']._serialized_end=69
26
26
  _globals['_HEALTHCHECKRESPONSE']._serialized_start=72
@@ -1,34 +1,9 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
- import warnings
5
4
 
6
5
  from isolate.server.health import health_pb2 as health__pb2
7
6
 
8
- GRPC_GENERATED_VERSION = '1.64.0'
9
- GRPC_VERSION = grpc.__version__
10
- EXPECTED_ERROR_RELEASE = '1.65.0'
11
- SCHEDULED_RELEASE_DATE = 'June 25, 2024'
12
- _version_not_supported = False
13
-
14
- try:
15
- from grpc._utilities import first_version_is_lower
16
- _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
17
- except ImportError:
18
- _version_not_supported = True
19
-
20
- if _version_not_supported:
21
- warnings.warn(
22
- f'The grpc package installed is at version {GRPC_VERSION},'
23
- + f' but the generated code in health_pb2_grpc.py depends on'
24
- + f' grpcio>={GRPC_GENERATED_VERSION}.'
25
- + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
26
- + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
27
- + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},'
28
- + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.',
29
- RuntimeWarning
30
- )
31
-
32
7
 
33
8
  class HealthStub(object):
34
9
  """Missing associated documentation comment in .proto file."""
@@ -43,12 +18,12 @@ class HealthStub(object):
43
18
  '/grpc.health.v1.Health/Check',
44
19
  request_serializer=health__pb2.HealthCheckRequest.SerializeToString,
45
20
  response_deserializer=health__pb2.HealthCheckResponse.FromString,
46
- _registered_method=True)
21
+ )
47
22
  self.Watch = channel.unary_stream(
48
23
  '/grpc.health.v1.Health/Watch',
49
24
  request_serializer=health__pb2.HealthCheckRequest.SerializeToString,
50
25
  response_deserializer=health__pb2.HealthCheckResponse.FromString,
51
- _registered_method=True)
26
+ )
52
27
 
53
28
 
54
29
  class HealthServicer(object):
@@ -83,7 +58,6 @@ def add_HealthServicer_to_server(servicer, server):
83
58
  generic_handler = grpc.method_handlers_generic_handler(
84
59
  'grpc.health.v1.Health', rpc_method_handlers)
85
60
  server.add_generic_rpc_handlers((generic_handler,))
86
- server.add_registered_method_handlers('grpc.health.v1.Health', rpc_method_handlers)
87
61
 
88
62
 
89
63
  # This class is part of an EXPERIMENTAL API.
@@ -101,21 +75,11 @@ class Health(object):
101
75
  wait_for_ready=None,
102
76
  timeout=None,
103
77
  metadata=None):
104
- return grpc.experimental.unary_unary(
105
- request,
106
- target,
107
- '/grpc.health.v1.Health/Check',
78
+ return grpc.experimental.unary_unary(request, target, '/grpc.health.v1.Health/Check',
108
79
  health__pb2.HealthCheckRequest.SerializeToString,
109
80
  health__pb2.HealthCheckResponse.FromString,
110
- options,
111
- channel_credentials,
112
- insecure,
113
- call_credentials,
114
- compression,
115
- wait_for_ready,
116
- timeout,
117
- metadata,
118
- _registered_method=True)
81
+ options, channel_credentials,
82
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
119
83
 
120
84
  @staticmethod
121
85
  def Watch(request,
@@ -128,18 +92,8 @@ class Health(object):
128
92
  wait_for_ready=None,
129
93
  timeout=None,
130
94
  metadata=None):
131
- return grpc.experimental.unary_stream(
132
- request,
133
- target,
134
- '/grpc.health.v1.Health/Watch',
95
+ return grpc.experimental.unary_stream(request, target, '/grpc.health.v1.Health/Watch',
135
96
  health__pb2.HealthCheckRequest.SerializeToString,
136
97
  health__pb2.HealthCheckResponse.FromString,
137
- options,
138
- channel_credentials,
139
- insecure,
140
- call_credentials,
141
- compression,
142
- wait_for_ready,
143
- timeout,
144
- metadata,
145
- _registered_method=True)
98
+ options, channel_credentials,
99
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
isolate/server/server.py CHANGED
@@ -29,7 +29,7 @@ from isolate.backends.local import LocalPythonEnvironment
29
29
  from isolate.backends.virtualenv import VirtualPythonEnvironment
30
30
  from isolate.connections.grpc import AgentError, LocalPythonGRPC
31
31
  from isolate.connections.grpc.configuration import get_default_options
32
- from isolate.logger import ENV_LOGGER, IsolateLogger
32
+ from isolate.logger import IsolateLogger
33
33
  from isolate.logs import Log, LogLevel, LogSource
34
34
  from isolate.server import definitions, health
35
35
  from isolate.server.health_server import HealthServicer
@@ -72,7 +72,7 @@ class GRPCException(Exception):
72
72
  @dataclass
73
73
  class RunnerAgent:
74
74
  stub: definitions.AgentStub
75
- message_queue: Queue
75
+ message_queue: Queue[definitions.PartialRunResult]
76
76
  _bound_context: ExitStack
77
77
  _channel_state_history: list[grpc.ChannelConnectivity] = field(default_factory=list)
78
78
 
@@ -175,7 +175,7 @@ class RunTask:
175
175
  request: definitions.BoundFunction
176
176
  future: futures.Future | None = None
177
177
  agent: RunnerAgent | None = None
178
- logger: IsolateLogger = ENV_LOGGER
178
+ logger: IsolateLogger = field(default_factory=IsolateLogger.from_env)
179
179
 
180
180
  def cancel(self):
181
181
  while True:
@@ -188,6 +188,10 @@ class RunTask:
188
188
  except futures.TimeoutError:
189
189
  pass
190
190
 
191
+ @property
192
+ def stream_logs(self) -> bool:
193
+ return self.request.stream_logs
194
+
191
195
 
192
196
  @dataclass
193
197
  class IsolateServicer(definitions.IsolateServicer):
@@ -277,6 +281,7 @@ class IsolateServicer(definitions.IsolateServicer):
277
281
 
278
282
  future = local_pool.submit(
279
283
  _proxy_to_queue,
284
+ # The agent may have been cached, so use the agent's message queue
280
285
  queue=agent.message_queue,
281
286
  bridge=agent.stub,
282
287
  input=function_call,
@@ -324,16 +329,9 @@ class IsolateServicer(definitions.IsolateServicer):
324
329
  request: definitions.SubmitRequest,
325
330
  context: ServicerContext,
326
331
  ) -> definitions.SubmitResponse:
327
- logger = ENV_LOGGER
328
- if request.metadata.logger_labels:
329
- logger_labels_dict = dict(request.metadata.logger_labels)
330
- try:
331
- logger = IsolateLogger.with_env_expanded(logger_labels_dict)
332
- except BaseException:
333
- # Ignore the error if the logger couldn't be created.
334
- pass
332
+ task = RunTask(request=request.function)
333
+ self.set_metadata(task, request.metadata)
335
334
 
336
- task = RunTask(request=request.function, logger=logger)
337
335
  task.future = RUNNER_THREAD_POOL.submit(self._run_task_in_background, task)
338
336
  task_id = str(uuid.uuid4())
339
337
 
@@ -365,21 +363,23 @@ class IsolateServicer(definitions.IsolateServicer):
365
363
  StatusCode.NOT_FOUND,
366
364
  )
367
365
 
368
- task = self.background_tasks[request.task_id]
369
-
370
- task.logger.extra_labels = dict(request.metadata.logger_labels)
366
+ self.set_metadata(self.background_tasks[request.task_id], request.metadata)
371
367
 
372
368
  return definitions.SetMetadataResponse()
373
369
 
370
+ def set_metadata(self, task: RunTask, metadata: definitions.TaskMetadata) -> None:
371
+ task.logger.extra_labels = dict(metadata.logger_labels)
372
+
374
373
  def Run(
375
374
  self,
376
375
  request: definitions.BoundFunction,
377
376
  context: ServicerContext,
378
377
  ) -> Iterator[definitions.PartialRunResult]:
379
378
  try:
380
- # HACK: we can support only one task at a time for Run
381
- # TODO: move away from this when we use submit for env-aware tasks
382
379
  task = RunTask(request=request)
380
+
381
+ # HACK: we can support only one task at a time
382
+ # TODO: move away from this when we use submit for env-aware tasks
383
383
  self.background_tasks["RUN"] = task
384
384
  yield from self._run_task(task)
385
385
  except GRPCException as exc:
@@ -495,6 +495,11 @@ class LogHandler:
495
495
  self._add_log_to_queue(log)
496
496
 
497
497
  def _add_log_to_queue(self, log: Log) -> None:
498
+ if not self.task.stream_logs:
499
+ # We do not queue the logs if the stream_logs is disabled
500
+ # but still log them to the logger.
501
+ return
502
+
498
503
  grpc_log = cast(definitions.Log, to_grpc(log))
499
504
  grpc_result = definitions.PartialRunResult(
500
505
  is_complete=False,
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: isolate
3
- Version: 0.14.3
3
+ Version: 0.16.0
4
4
  Summary: Managed isolated environments for Python
5
5
  Author-email: Features & Labels <hello@fal.ai>
6
6
  Project-URL: Issues, https://github.com/fal-ai/isolate/issues
@@ -16,15 +16,14 @@ Requires-Dist: importlib-metadata>=4.4; python_version < "3.10"
16
16
  Provides-Extra: build
17
17
  Requires-Dist: virtualenv>=20.4; extra == "build"
18
18
  Requires-Dist: PyYAML>=6.0; extra == "build"
19
- Provides-Extra: dev
20
- Requires-Dist: isolate[test]; extra == "dev"
21
- Requires-Dist: grpcio-tools==1.64.0; extra == "dev"
22
19
  Provides-Extra: test
23
20
  Requires-Dist: isolate[build]; extra == "test"
24
21
  Requires-Dist: pytest; extra == "test"
25
22
  Requires-Dist: cloudpickle>=2.2.0; extra == "test"
26
23
  Requires-Dist: dill>=0.3.5.1; extra == "test"
27
- Requires-Dist: pytest-rerunfailures; extra == "test"
24
+ Provides-Extra: dev
25
+ Requires-Dist: isolate[test]; extra == "dev"
26
+ Requires-Dist: grpcio-tools==1.64.0; extra == "dev"
28
27
 
29
28
  # Isolate
30
29
 
@@ -1,7 +1,7 @@
1
1
  isolate/__init__.py,sha256=uXOKnONs7sXgARNgElwr4_A1sKoA6ACHVEvs3IDiX1M,127
2
- isolate/_isolate_version.py,sha256=3mnQHEW9gizHocB0ULApMUw7E4CZd4qai5GsjMH_Vo4,413
2
+ isolate/_isolate_version.py,sha256=6rRRmvuDj83YMwAXEQTx-SPTN2ocQjA6cw2_dMCfweM,413
3
3
  isolate/_version.py,sha256=05pXvy-yr5t3I1m9JMn42Ilzpg7fa8IB2J8a3G7t1cU,274
4
- isolate/logger.py,sha256=Z4a03kjFg54H3RDVVp4nQeut0xlxq0PIbbEczCT9ImU,1758
4
+ isolate/logger.py,sha256=IXPebob_fV8bl8HAyKcheXcTJocfdWk-v-ujSl13oVA,1718
5
5
  isolate/logs.py,sha256=R_AHUVYD18z_PhtK_mDWi9Gch79CxmwHY09hUDShtwg,2079
6
6
  isolate/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  isolate/registry.py,sha256=hpzv4HI7iihG5I7i5r8Pb257ibhEKY18xQcG-w1-BgI,1590
@@ -12,50 +12,50 @@ isolate/backends/conda.py,sha256=S5q5bdY787AMTck2iMGtwu-LHMH4a1qCIjNHDKTkqok,764
12
12
  isolate/backends/container.py,sha256=MCQJbcmQvRUS-tTgTW_pKYBMKwSJO2KZsLeaBMXpPC0,1645
13
13
  isolate/backends/local.py,sha256=woxe4dmXuEHxWKsGNndoRA1_sP6yG-dg6tlFZni0mZc,1360
14
14
  isolate/backends/pyenv.py,sha256=ZwTYoVPIWhS3Y4hN51x95aIOHi15GF7kEDdKTNhlMTE,5434
15
- isolate/backends/remote.py,sha256=qUm54mpqk0kaEfbPZl962Td3_P3qcpyVcfGdKfmkJHs,4234
16
- isolate/backends/settings.py,sha256=AiPYpzeon_AHS3ewSIKc0TMF4XrNdM32EFvgSTH2odE,3291
15
+ isolate/backends/remote.py,sha256=z6QyBiCt8ltv4Zm8IYX3zyMkBH1k8lTowhnD92-Ed2M,4293
16
+ isolate/backends/settings.py,sha256=LvYn4ox9pyFs7bO7WMpDdQHjGOrMn6bdDrHnpfOJyAQ,4443
17
17
  isolate/backends/virtualenv.py,sha256=CdzDO4stxNCMbBsNnR1agwyu2FDBDx9UwJWI7bv010k,6992
18
18
  isolate/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  isolate/common/timestamp.py,sha256=seh7FrMRH4i1SCQavA8d-7z8qi0pP8lYYhd29gTPMwE,367
20
20
  isolate/connections/__init__.py,sha256=oa0PNo7ZQ0StPIDvKnJ02_CNVMyfOhxJ3M1C0VMvj9c,627
21
21
  isolate/connections/common.py,sha256=PAfBGKZNUdtFlZQlw3_nQaUCKQXTnEkxzNNRV_i4R2A,3498
22
22
  isolate/connections/_local/__init__.py,sha256=6FtCKRSFBvTvjm5LNlNA-mieKEq3J7DZZRPcXVedERo,146
23
- isolate/connections/_local/_base.py,sha256=YGf141VgXErrXYNyRN7sXcts2SemlFEEocZsKmLQfVM,6659
23
+ isolate/connections/_local/_base.py,sha256=wx6WkP_zBZ7zHOq2mHqafVUAvGDMQGRELX64-o-uCdo,6676
24
24
  isolate/connections/_local/agent_startup.py,sha256=swCs6Q0yVkDw7w-RftizHSMyJDM7DQwuP3TB0qI1ucg,1552
25
25
  isolate/connections/grpc/__init__.py,sha256=tcesLxlC36P6wSg2lBcO2egsJWMbSKwc8zFXhWac3YU,85
26
- isolate/connections/grpc/_base.py,sha256=6cBlJRoKDoJFQudLgkEeUcGVxcIyaAzkB-Zec14hm8k,5639
26
+ isolate/connections/grpc/_base.py,sha256=kUB-EDetcyb0fsYfH25E14DrxbVXe19bEH4u5b0-Gqw,5656
27
27
  isolate/connections/grpc/agent.py,sha256=fZF4-v8WN1qPzFp17UxOX_A3Jq8bXD8Wss-7eNgNoYg,8071
28
28
  isolate/connections/grpc/configuration.py,sha256=50YvGGHA9uyKg74xU_gc73j7bsFk973uIpMhmw2HhxY,788
29
29
  isolate/connections/grpc/interface.py,sha256=yt63kytgXRXrTnjePGJVdXz4LJJVSSrNkJCF1yz6FIE,2270
30
30
  isolate/connections/grpc/definitions/__init__.py,sha256=Z0453Bbjoq-Oxm2Wfi9fae-BFf8YsZwmuh88strmvxo,459
31
31
  isolate/connections/grpc/definitions/agent.proto,sha256=Hx11hHc8PKwhWzyasViLeq7JL33KsRex2-iibfWruTw,568
32
- isolate/connections/grpc/definitions/agent_pb2.py,sha256=F8KVIE1CK542c7_EJKJ40LY8mPZwEqvdmgBPntAMqE0,1424
32
+ isolate/connections/grpc/definitions/agent_pb2.py,sha256=zNosgecB47QO57T-RXd2PKbKsXMVXboVW8598Egwvk8,1422
33
33
  isolate/connections/grpc/definitions/agent_pb2.pyi,sha256=IKJHEq01DZRIy4xrtpHalJmM56IQCZRxFEOZEs7hCUw,1744
34
- isolate/connections/grpc/definitions/agent_pb2_grpc.py,sha256=7tm-RB4CTu_YmqvI7QGRll1Z1NmkMWY2Vm-4AHr57X8,3632
34
+ isolate/connections/grpc/definitions/agent_pb2_grpc.py,sha256=lmtOSyea6ferlWQi9sZFix9Xua9ejThWUE61i3DAh3A,2428
35
35
  isolate/connections/grpc/definitions/common.proto,sha256=4W1upvDIPezNj-Ab6FVNa-7cA9_N-2xJMJpwytRhpCw,1260
36
- isolate/connections/grpc/definitions/common_pb2.py,sha256=lkpvpARZbPDrzrVkKJ-4WZWISN2kzrzJPNBUczmvkHU,2464
36
+ isolate/connections/grpc/definitions/common_pb2.py,sha256=PuKLZTnl63Kc6kdp9Gkf5IoTp4iH-pNodS0Ng33Yg3M,2462
37
37
  isolate/connections/grpc/definitions/common_pb2.pyi,sha256=J3av86ZHoHR28_5zshqCJ0I7v9WCxuQsvOAin-zig9w,6222
38
- isolate/connections/grpc/definitions/common_pb2_grpc.py,sha256=EvGJ0LYaWTflBesxg0P1nh_EeWKYKqUVRf0_plMISTs,1123
38
+ isolate/connections/grpc/definitions/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
39
39
  isolate/connections/ipc/__init__.py,sha256=j2Mbsph2mRhAWmkMyrtPOz0VG-e75h1OOZLwzs6pXUo,131
40
- isolate/connections/ipc/_base.py,sha256=Jk715XK2ei3yBpFcwUnFZ0owQMMf5jekZFNh2WlKRT4,8009
40
+ isolate/connections/ipc/_base.py,sha256=ZhMvOPRGwzuUIWSKGOjbUdj4y22jAc2qG8EuQYfgRVI,8026
41
41
  isolate/connections/ipc/agent.py,sha256=hGlL4x78FhRvMZ4DkVh3dk-EmWQqxHW4LIipgyOkw08,7069
42
42
  isolate/server/__init__.py,sha256=7R3GuWmxuqe0q28rVqETJN9OCrP_-Svjv9h0NR1GFL0,79
43
43
  isolate/server/health_server.py,sha256=yN7F1Q28DdX8-Zk3gef7XcQEE25XwlHwzV5GBM75aQM,1249
44
44
  isolate/server/interface.py,sha256=nGbjdxrN0p9m1LNdeds8NIoJOwPYW2NM6ktmbhfG4_s,687
45
- isolate/server/server.py,sha256=41Y_3dtUmeJR8RuQF2VMC5x_kM_k0w1hyzPFl5uW5Do,23477
45
+ isolate/server/server.py,sha256=azbV2yJqX8gOC6p2DIfzQl30pgQg2BePG71I_9Q9qvc,23660
46
46
  isolate/server/definitions/__init__.py,sha256=f_Q3pdjMuZrjgNlbM60btFKiB1Vg8cnVyKEbp0RmU0A,572
47
- isolate/server/definitions/server.proto,sha256=UihlFbYG8fbwm0IUfKDRH1vNkopzP3C-wplXXcAO1c8,1761
48
- isolate/server/definitions/server_pb2.py,sha256=TYBJC_z_dNf2J6FgHukY9mDyc3WBt9EPQOVFd_ayQNc,4304
49
- isolate/server/definitions/server_pb2.pyi,sha256=bGDzwxvYJEq_N7R4mvE86t_GhBfUx8eXRYbrvOzFhqc,8352
50
- isolate/server/definitions/server_pb2_grpc.py,sha256=TUKXKlT-6oOpZ2zg8EhJ-XFvjKGX90ze4iY0f5R6ZHU,10107
47
+ isolate/server/definitions/server.proto,sha256=_xAqGR2te_EQ8Z95aqRmXL_4Xtcj_LHcnPEI8-FO54o,1787
48
+ isolate/server/definitions/server_pb2.py,sha256=Iu5pAGN89MOponRnTW8FrUkuxEEYvdldUxLuUFJ74zU,4338
49
+ isolate/server/definitions/server_pb2.pyi,sha256=R4m1YE2v_Vrw1FFMbkQBJ4sLM8YkxUxsvFzngqt6JJg,8499
50
+ isolate/server/definitions/server_pb2_grpc.py,sha256=-Whn1yUXWQ4EjfRm6IvyO_Iv0v7fseS0Vv1LbI5dURw,8224
51
51
  isolate/server/health/__init__.py,sha256=sy349GRK2YGX9KFKqDxM-jdYtBpMXjZu1QwBkjn0SsM,337
52
52
  isolate/server/health/health.proto,sha256=wE2_QD0OQAblKkEBG7sALLXEOj1mOLKG-FbC4tFopWE,455
53
- isolate/server/health/health_pb2.py,sha256=onOdP3M4Tpqhqs2PlGcyfoKe2VVKUEDx5ALeRcObb9A,1899
53
+ isolate/server/health/health_pb2.py,sha256=-fd91wiaZOSJj_zeo55IqxMBsQGuGF-yjZS-Wc1RaS0,1897
54
54
  isolate/server/health/health_pb2.pyi,sha256=AK-DPCpJzoYhU6DydD856c0Ywx84x6k-Cs4m6HpNv5A,2459
55
- isolate/server/health/health_pb2_grpc.py,sha256=XgsULrnRBmYIqvKr8eI7bqs6NIea5A0kkqdOOc2JHBY,5303
56
- isolate-0.14.3.dist-info/LICENSE,sha256=427vuyirL5scgBLqA9UWcdnxKrtSGc0u_JfUupk6lAA,11359
57
- isolate-0.14.3.dist-info/METADATA,sha256=LxlsStQM06vUMmDzW2XsnmdrVvm1mgPgBslNnC22W4Q,3191
58
- isolate-0.14.3.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
59
- isolate-0.14.3.dist-info/entry_points.txt,sha256=s3prh2EERaVCbL8R45tfY5WFPZ1TsYOsz305YR7s-Pc,360
60
- isolate-0.14.3.dist-info/top_level.txt,sha256=W9QJBHcq5WXRkbOXf25bvftzFsOZZN4n1DAatdroZrs,8
61
- isolate-0.14.3.dist-info/RECORD,,
55
+ isolate/server/health/health_pb2_grpc.py,sha256=BrwuS8t4w6K-XVxIdrUQj5Rn0FAMXrYB2iFgUfeXGMM,3913
56
+ isolate-0.16.0.dist-info/LICENSE,sha256=427vuyirL5scgBLqA9UWcdnxKrtSGc0u_JfUupk6lAA,11359
57
+ isolate-0.16.0.dist-info/METADATA,sha256=4Huhn7W3m0pfmoF5HEnWVOFw7GkjV5bucE1O_afy0h4,3138
58
+ isolate-0.16.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
59
+ isolate-0.16.0.dist-info/entry_points.txt,sha256=s3prh2EERaVCbL8R45tfY5WFPZ1TsYOsz305YR7s-Pc,360
60
+ isolate-0.16.0.dist-info/top_level.txt,sha256=W9QJBHcq5WXRkbOXf25bvftzFsOZZN4n1DAatdroZrs,8
61
+ isolate-0.16.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5