isolate 0.11.1__tar.gz → 0.12.1__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.

Potentially problematic release.


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

Files changed (55) hide show
  1. {isolate-0.11.1 → isolate-0.12.1}/PKG-INFO +6 -5
  2. {isolate-0.11.1 → isolate-0.12.1}/pyproject.toml +1 -1
  3. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/_base.py +1 -1
  4. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/conda.py +6 -1
  5. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/virtualenv.py +2 -0
  6. isolate-0.12.1/src/isolate/common/__init__.py +0 -0
  7. isolate-0.12.1/src/isolate/common/timestamp.py +15 -0
  8. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/common.py +4 -0
  9. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/_base.py +1 -1
  10. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/agent.py +6 -3
  11. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/common.proto +3 -0
  12. isolate-0.12.1/src/isolate/connections/grpc/definitions/common_pb2.py +38 -0
  13. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/common_pb2.pyi +16 -1
  14. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/interface.py +3 -0
  15. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/ipc/_base.py +3 -3
  16. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/logs.py +3 -1
  17. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/server.py +13 -1
  18. isolate-0.11.1/setup.py +0 -57
  19. isolate-0.11.1/src/isolate/connections/grpc/definitions/common_pb2.py +0 -34
  20. {isolate-0.11.1 → isolate-0.12.1}/README.md +0 -0
  21. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/__init__.py +0 -0
  22. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/__init__.py +0 -0
  23. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/common.py +0 -0
  24. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/local.py +0 -0
  25. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/pyenv.py +0 -0
  26. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/remote.py +0 -0
  27. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/backends/settings.py +0 -0
  28. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/__init__.py +0 -0
  29. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/_local/__init__.py +0 -0
  30. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/_local/_base.py +0 -0
  31. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/_local/agent_startup.py +0 -0
  32. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/__init__.py +0 -0
  33. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/configuration.py +0 -0
  34. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/__init__.py +0 -0
  35. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/agent.proto +0 -0
  36. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/agent_pb2.py +0 -0
  37. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/agent_pb2.pyi +0 -0
  38. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/agent_pb2_grpc.py +0 -0
  39. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/grpc/definitions/common_pb2_grpc.py +0 -0
  40. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/ipc/__init__.py +0 -0
  41. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/connections/ipc/agent.py +0 -0
  42. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/registry.py +0 -0
  43. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/__init__.py +0 -0
  44. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/definitions/__init__.py +0 -0
  45. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/definitions/server.proto +0 -0
  46. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/definitions/server_pb2.py +0 -0
  47. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/definitions/server_pb2.pyi +0 -0
  48. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/definitions/server_pb2_grpc.py +0 -0
  49. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/health/__init__.py +0 -0
  50. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/health/health.proto +0 -0
  51. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/health/health_pb2.py +0 -0
  52. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/health/health_pb2.pyi +0 -0
  53. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/health/health_pb2_grpc.py +0 -0
  54. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/health_server.py +0 -0
  55. {isolate-0.11.1 → isolate-0.12.1}/src/isolate/server/interface.py +0 -0
@@ -1,25 +1,26 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isolate
3
- Version: 0.11.1
3
+ Version: 0.12.1
4
4
  Summary: Managed isolated environments for Python
5
5
  Author: Features & Labels
6
6
  Author-email: hello@fal.ai
7
7
  Requires-Python: >=3.7,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
- Classifier: Programming Language :: Python :: 3.10
10
9
  Classifier: Programming Language :: Python :: 3.7
11
10
  Classifier: Programming Language :: Python :: 3.8
12
11
  Classifier: Programming Language :: Python :: 3.9
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
13
14
  Provides-Extra: build
14
15
  Provides-Extra: grpc
15
16
  Provides-Extra: server
16
- Requires-Dist: PyYAML (>=6.0); extra == "build"
17
+ Requires-Dist: PyYAML (>=6.0) ; extra == "build"
17
18
  Requires-Dist: grpcio (>=1.49)
18
- Requires-Dist: importlib-metadata (>=4.4); python_version < "3.10"
19
+ Requires-Dist: importlib-metadata (>=4.4) ; python_version < "3.10"
19
20
  Requires-Dist: platformdirs
20
21
  Requires-Dist: protobuf
21
22
  Requires-Dist: tblib (>=1.7.0)
22
- Requires-Dist: virtualenv (>=20.4); extra == "build"
23
+ Requires-Dist: virtualenv (>=20.4) ; extra == "build"
23
24
  Description-Content-Type: text/markdown
24
25
 
25
26
  # Isolate
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "isolate"
3
- version = "0.11.1"
3
+ version = "0.12.1"
4
4
  readme = "README.md"
5
5
  description = "Managed isolated environments for Python"
6
6
  authors = ["Features & Labels <hello@fal.ai>"]
@@ -117,7 +117,7 @@ class EnvironmentConnection:
117
117
  executable: BasicCallable,
118
118
  *args: Any,
119
119
  **kwargs: Any,
120
- ) -> CallResultType:
120
+ ) -> CallResultType: # type: ignore[type-var]
121
121
  """Run the given executable inside the environment, and return the result.
122
122
  If the executable raises an exception, then it will be raised directly."""
123
123
  raise NotImplementedError
@@ -42,6 +42,7 @@ class CondaEnvironment(BaseEnvironment[Path]):
42
42
 
43
43
  environment_definition: Dict[str, Any] = field(default_factory=dict)
44
44
  python_version: Optional[str] = None
45
+ tags: List[str] = field(default_factory=list)
45
46
 
46
47
  @classmethod
47
48
  def from_config(
@@ -106,7 +107,11 @@ class CondaEnvironment(BaseEnvironment[Path]):
106
107
 
107
108
  @property
108
109
  def key(self) -> str:
109
- return sha256_digest_of(repr(self.environment_definition))
110
+ return sha256_digest_of(
111
+ repr(self.environment_definition),
112
+ self.python_version,
113
+ *sorted(self.tags),
114
+ )
110
115
 
111
116
  def create(self, *, force: bool = False) -> Path:
112
117
  env_path = self.settings.cache_dir_for(self)
@@ -29,6 +29,7 @@ class VirtualPythonEnvironment(BaseEnvironment[Path]):
29
29
  constraints_file: Optional[os.PathLike] = None
30
30
  python_version: Optional[str] = None
31
31
  extra_index_urls: List[str] = field(default_factory=list)
32
+ tags: List[str] = field(default_factory=list)
32
33
 
33
34
  @classmethod
34
35
  def from_config(
@@ -54,6 +55,7 @@ class VirtualPythonEnvironment(BaseEnvironment[Path]):
54
55
  *self.requirements,
55
56
  *constraints,
56
57
  *self.extra_index_urls,
58
+ *sorted(self.tags),
57
59
  )
58
60
 
59
61
  def install_requirements(self, path: Path) -> None:
File without changes
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime, timezone
4
+
5
+ from google.protobuf.timestamp_pb2 import Timestamp
6
+
7
+
8
+ def from_datetime(time: datetime) -> Timestamp:
9
+ timestamp = Timestamp()
10
+ timestamp.FromDatetime(time)
11
+ return timestamp
12
+
13
+
14
+ def to_datetime(timestamp: Timestamp) -> datetime:
15
+ return timestamp.ToDatetime(tzinfo=timezone.utc)
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import importlib
4
4
  import os
5
+ from dataclasses import dataclass
5
6
  from contextlib import contextmanager
6
7
  from typing import TYPE_CHECKING, Any, Iterator, Optional, cast
7
8
 
@@ -21,9 +22,12 @@ if TYPE_CHECKING:
21
22
  AGENT_SIGNATURE = "IS_ISOLATE_AGENT"
22
23
 
23
24
 
25
+ @dataclass
24
26
  class SerializationError(Exception):
25
27
  """An error that happened during the serialization process."""
26
28
 
29
+ message: str
30
+
27
31
 
28
32
  @contextmanager
29
33
  def _step(message: str) -> Iterator[None]:
@@ -61,7 +61,7 @@ class GRPCExecutionBase(EnvironmentConnection):
61
61
  executable: BasicCallable,
62
62
  *args: Any,
63
63
  **kwargs: Any,
64
- ) -> CallResultType:
64
+ ) -> CallResultType: # type: ignore[type-var]
65
65
  # Implementation details
66
66
  # ======================
67
67
  #
@@ -142,14 +142,17 @@ class AgentServicer(definitions.AgentServicer):
142
142
  serialization_method: str,
143
143
  result: object,
144
144
  was_it_raised: bool,
145
- stringized_tb: str,
145
+ stringized_tb: str | None,
146
146
  ) -> Generator[definitions.PartialRunResult, None, Any]:
147
147
  try:
148
148
  definition = serialize_object(serialization_method, result)
149
149
  except SerializationError:
150
- yield from self.log(traceback.format_exc(), level=LogLevel.ERROR)
150
+ if stringized_tb:
151
+ yield from self.log(
152
+ stringized_tb, source=LogSource.USER, level=LogLevel.STDERR
153
+ )
151
154
  raise AbortException(
152
- "The result of the input function could not be serialized."
155
+ f"Error while serializing the execution result (object of type {type(result)})."
153
156
  )
154
157
  except BaseException:
155
158
  yield from self.log(traceback.format_exc(), level=LogLevel.ERROR)
@@ -1,5 +1,7 @@
1
1
  syntax = "proto3";
2
2
 
3
+ import "google/protobuf/timestamp.proto";
4
+
3
5
  message SerializedObject {
4
6
  // The serialization method used to serialize the the raw_object. Must be
5
7
  // present in the environment that is running the agent itself.
@@ -27,6 +29,7 @@ message Log {
27
29
  string message = 1;
28
30
  LogSource source = 2;
29
31
  LogLevel level = 3;
32
+ google.protobuf.Timestamp timestamp = 4;
30
33
  }
31
34
 
32
35
  enum LogSource {
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: common.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf import descriptor as _descriptor
6
+ from google.protobuf import descriptor_pool as _descriptor_pool
7
+ from google.protobuf import symbol_database as _symbol_database
8
+ from google.protobuf.internal import builder as _builder
9
+
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from google.protobuf import (
16
+ timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2,
17
+ )
18
+
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
20
+ b'\n\x0c\x63ommon.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x89\x01\n\x10SerializedObject\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x12\n\ndefinition\x18\x02 \x01(\x0c\x12\x15\n\rwas_it_raised\x18\x03 \x01(\x08\x12!\n\x14stringized_traceback\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x17\n\x15_stringized_traceback"n\n\x10PartialRunResult\x12\x13\n\x0bis_complete\x18\x01 \x01(\x08\x12\x12\n\x04logs\x18\x02 \x03(\x0b\x32\x04.Log\x12&\n\x06result\x18\x03 \x01(\x0b\x32\x11.SerializedObjectH\x00\x88\x01\x01\x42\t\n\x07_result"{\n\x03Log\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x1a\n\x06source\x18\x02 \x01(\x0e\x32\n.LogSource\x12\x18\n\x05level\x18\x03 \x01(\x0e\x32\t.LogLevel\x12-\n\ttimestamp\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp*.\n\tLogSource\x12\x0b\n\x07\x42UILDER\x10\x00\x12\n\n\x06\x42RIDGE\x10\x01\x12\x08\n\x04USER\x10\x02*Z\n\x08LogLevel\x12\t\n\x05TRACE\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07WARNING\x10\x03\x12\t\n\x05\x45RROR\x10\x04\x12\n\n\x06STDOUT\x10\x05\x12\n\n\x06STDERR\x10\x06\x62\x06proto3'
21
+ )
22
+
23
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
24
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "common_pb2", globals())
25
+ if _descriptor._USE_C_DESCRIPTORS == False:
26
+
27
+ DESCRIPTOR._options = None
28
+ _LOGSOURCE._serialized_start = 426
29
+ _LOGSOURCE._serialized_end = 472
30
+ _LOGLEVEL._serialized_start = 474
31
+ _LOGLEVEL._serialized_end = 564
32
+ _SERIALIZEDOBJECT._serialized_start = 50
33
+ _SERIALIZEDOBJECT._serialized_end = 187
34
+ _PARTIALRUNRESULT._serialized_start = 189
35
+ _PARTIALRUNRESULT._serialized_end = 299
36
+ _LOG._serialized_start = 301
37
+ _LOG._serialized_end = 424
38
+ # @@protoc_insertion_point(module_scope)
@@ -8,6 +8,7 @@ import google.protobuf.descriptor
8
8
  import google.protobuf.internal.containers
9
9
  import google.protobuf.internal.enum_type_wrapper
10
10
  import google.protobuf.message
11
+ import google.protobuf.timestamp_pb2
11
12
  import sys
12
13
  import typing
13
14
 
@@ -187,20 +188,34 @@ class Log(google.protobuf.message.Message):
187
188
  MESSAGE_FIELD_NUMBER: builtins.int
188
189
  SOURCE_FIELD_NUMBER: builtins.int
189
190
  LEVEL_FIELD_NUMBER: builtins.int
191
+ TIMESTAMP_FIELD_NUMBER: builtins.int
190
192
  message: builtins.str
191
193
  source: global___LogSource.ValueType
192
194
  level: global___LogLevel.ValueType
195
+ @property
196
+ def timestamp(self) -> google.protobuf.timestamp_pb2.Timestamp: ...
193
197
  def __init__(
194
198
  self,
195
199
  *,
196
200
  message: builtins.str = ...,
197
201
  source: global___LogSource.ValueType = ...,
198
202
  level: global___LogLevel.ValueType = ...,
203
+ timestamp: google.protobuf.timestamp_pb2.Timestamp | None = ...,
199
204
  ) -> None: ...
205
+ def HasField(
206
+ self, field_name: typing_extensions.Literal["timestamp", b"timestamp"]
207
+ ) -> builtins.bool: ...
200
208
  def ClearField(
201
209
  self,
202
210
  field_name: typing_extensions.Literal[
203
- "level", b"level", "message", b"message", "source", b"source"
211
+ "level",
212
+ b"level",
213
+ "message",
214
+ b"message",
215
+ "source",
216
+ b"source",
217
+ "timestamp",
218
+ b"timestamp",
204
219
  ],
205
220
  ) -> None: ...
206
221
 
@@ -4,6 +4,7 @@ and the Isolate Server to share."""
4
4
  import functools
5
5
  from typing import TYPE_CHECKING, Any, Optional
6
6
 
7
+ from isolate.common import timestamp
7
8
  from isolate.connections.common import load_serialized_object, serialize_object
8
9
  from isolate.connections.grpc import definitions
9
10
  from isolate.logs import Log, LogLevel, LogSource
@@ -41,6 +42,7 @@ def _(message: definitions.Log) -> Log:
41
42
  message=message.message,
42
43
  source=source,
43
44
  level=level,
45
+ timestamp=timestamp.to_datetime(message.timestamp),
44
46
  )
45
47
 
46
48
 
@@ -50,6 +52,7 @@ def _(obj: Log) -> definitions.Log:
50
52
  message=obj.message,
51
53
  source=definitions.LogSource.Value(obj.source.name.upper()),
52
54
  level=definitions.LogLevel.Value(obj.level.name.upper()),
55
+ timestamp=timestamp.from_datetime(obj.timestamp),
53
56
  )
54
57
 
55
58
 
@@ -101,12 +101,12 @@ class IsolatedProcessConnection(EnvironmentConnection):
101
101
  """Start the agent process."""
102
102
  raise NotImplementedError
103
103
 
104
- def run(
104
+ def run( # type: ignore[return-value]
105
105
  self,
106
106
  executable: BasicCallable,
107
107
  *args: Any,
108
108
  **kwargs: Any,
109
- ) -> CallResultType:
109
+ ) -> CallResultType: # type: ignore[type-var]
110
110
  """Spawn an agent process using the given environment, run the given
111
111
  `executable` in that process, and return the result object back."""
112
112
 
@@ -164,7 +164,7 @@ class IsolatedProcessConnection(EnvironmentConnection):
164
164
  self,
165
165
  process: subprocess.Popen,
166
166
  connection: Connection,
167
- ) -> CallResultType:
167
+ ) -> CallResultType: # type: ignore[type-var]
168
168
  """Take the given process, and poll until either it exits or returns
169
169
  a result object."""
170
170
 
@@ -4,6 +4,7 @@ import shutil
4
4
  import tempfile
5
5
  from contextlib import contextmanager
6
6
  from dataclasses import dataclass, field, replace
7
+ from datetime import datetime, timezone
7
8
  from enum import Enum
8
9
  from functools import total_ordering
9
10
  from pathlib import Path
@@ -65,9 +66,10 @@ class Log:
65
66
  source: LogSource
66
67
  level: LogLevel = LogLevel.INFO
67
68
  bound_env: Optional[BaseEnvironment] = field(default=None, repr=False)
69
+ timestamp: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
68
70
 
69
71
  def __str__(self) -> str:
70
- parts = []
72
+ parts = [self.timestamp.strftime("%m/%d/%Y %H:%M:%S")]
71
73
  if self.bound_env:
72
74
  parts.append(f"[{self.bound_env.key[:6]}]")
73
75
  else:
@@ -261,6 +261,17 @@ class IsolateServicer(definitions.IsolateServicer):
261
261
  # during the execution, and handle them accordingly.
262
262
  exception = future.exception(timeout=0.1)
263
263
  if exception is not None:
264
+ # If this is an RPC error, propagate it as is without any
265
+ # further processing.
266
+ if isinstance(exception, grpc.RpcError):
267
+ return self.abort_with_msg(
268
+ exception.details(),
269
+ context,
270
+ code=exception.code(),
271
+ )
272
+
273
+ # Otherwise this is a bug in the agent itself, so needs
274
+ # to be propagated with more details.
264
275
  for line in traceback.format_exception(
265
276
  type(exception), exception, exception.__traceback__
266
277
  ):
@@ -282,7 +293,8 @@ class IsolateServicer(definitions.IsolateServicer):
282
293
  self, queue: Queue, is_completed: Callable[[], bool]
283
294
  ) -> Iterator[definitions.PartialRunResult]:
284
295
  """Watch the given queue until the is_completed function returns True. Note that even
285
- if the function is completed, this function might not finish until the queue is empty."""
296
+ if the function is completed, this function might not finish until the queue is empty.
297
+ """
286
298
  while not is_completed():
287
299
  try:
288
300
  yield queue.get(timeout=_Q_WAIT_DELAY)
isolate-0.11.1/setup.py DELETED
@@ -1,57 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- from setuptools import setup
3
-
4
- package_dir = \
5
- {'': 'src'}
6
-
7
- packages = \
8
- ['isolate',
9
- 'isolate.backends',
10
- 'isolate.connections',
11
- 'isolate.connections._local',
12
- 'isolate.connections.grpc',
13
- 'isolate.connections.grpc.definitions',
14
- 'isolate.connections.ipc',
15
- 'isolate.server',
16
- 'isolate.server.definitions',
17
- 'isolate.server.health']
18
-
19
- package_data = \
20
- {'': ['*']}
21
-
22
- install_requires = \
23
- ['grpcio>=1.49', 'platformdirs', 'protobuf', 'tblib>=1.7.0']
24
-
25
- extras_require = \
26
- {':python_version < "3.10"': ['importlib-metadata>=4.4'],
27
- 'build': ['virtualenv>=20.4', 'PyYAML>=6.0']}
28
-
29
- entry_points = \
30
- {'isolate.backends': ['conda = isolate.backends.conda:CondaEnvironment',
31
- 'isolate-server = isolate.backends.remote:IsolateServer',
32
- 'local = isolate.backends.local:LocalPythonEnvironment',
33
- 'pyenv = isolate.backends.pyenv:PyenvEnvironment',
34
- 'virtualenv = '
35
- 'isolate.backends.virtualenv:VirtualPythonEnvironment']}
36
-
37
- setup_kwargs = {
38
- 'name': 'isolate',
39
- 'version': '0.11.1',
40
- 'description': 'Managed isolated environments for Python',
41
- 'long_description': '# Isolate\n\n> :warning: **Isolate** is still very young, and none of the APIs should be considered stable.\n\nRun any Python function, with any dependencies, in any machine you want. Isolate offers a\npluggable end-to-end solution for building, managing, and using isolated environments (virtualenv,\nconda, remote, and more).\n\n\n## Motivation\n\n![XKCD 1987](https://imgs.xkcd.com/comics/python_environment.png)\n\nThe fact that nearly every piece of software uses some other libraries or some\nother programs is undeniable. Each of these come with their set of dependencies,\nand this chain moves forward. Once there are enough \'nodes\' in the chain, then\nthe ["dependency mess"](https://en.wikipedia.org/wiki/Dependency_hell) starts\nto surface and our lives become much harder.\n\nPython tried to solve it by recommending the "virtual environment" concept. In\ntheory it was designed to isolate environments of different projects, so my project\nA can depend on `pandas==1.0.0` while B depends on `pandas==2.0.0` and whichever\nproject I choose to work with, I just activate its own environment.\n\nOverall this was a very nice solution that did work, and still continues to work\nfor this use case. But as with every other scoped fix, in time other problems started\nto appear that demand a much narrower scope (like defining module-level dependencies,\nor even function-level ones for cloud runtimes that allow seamless integration with the\nrest of your code running in a different machine).\n\nHowever, unlike "virtual environment" concept, each of the projects that tried to tackle\nthis problem lacked a universal interface which one can simply define a set of requirements\n(this might be dependencies, size of the machine that is needed to run it, or something completely\ndifferent) and can change it without any loss. Isolate is working towards a future where this\ntransititon is as seamless as the transition from your local environment to the remote\nenvironment.\n',
42
- 'author': 'Features & Labels',
43
- 'author_email': 'hello@fal.ai',
44
- 'maintainer': None,
45
- 'maintainer_email': None,
46
- 'url': None,
47
- 'package_dir': package_dir,
48
- 'packages': packages,
49
- 'package_data': package_data,
50
- 'install_requires': install_requires,
51
- 'extras_require': extras_require,
52
- 'entry_points': entry_points,
53
- 'python_requires': '>=3.7,<4.0',
54
- }
55
-
56
-
57
- setup(**setup_kwargs)
@@ -1,34 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Generated by the protocol buffer compiler. DO NOT EDIT!
3
- # source: common.proto
4
- """Generated protocol buffer code."""
5
- from google.protobuf import descriptor as _descriptor
6
- from google.protobuf import descriptor_pool as _descriptor_pool
7
- from google.protobuf import symbol_database as _symbol_database
8
- from google.protobuf.internal import builder as _builder
9
-
10
- # @@protoc_insertion_point(imports)
11
-
12
- _sym_db = _symbol_database.Default()
13
-
14
-
15
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
16
- b'\n\x0c\x63ommon.proto"\x89\x01\n\x10SerializedObject\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x12\n\ndefinition\x18\x02 \x01(\x0c\x12\x15\n\rwas_it_raised\x18\x03 \x01(\x08\x12!\n\x14stringized_traceback\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x17\n\x15_stringized_traceback"n\n\x10PartialRunResult\x12\x13\n\x0bis_complete\x18\x01 \x01(\x08\x12\x12\n\x04logs\x18\x02 \x03(\x0b\x32\x04.Log\x12&\n\x06result\x18\x03 \x01(\x0b\x32\x11.SerializedObjectH\x00\x88\x01\x01\x42\t\n\x07_result"L\n\x03Log\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x1a\n\x06source\x18\x02 \x01(\x0e\x32\n.LogSource\x12\x18\n\x05level\x18\x03 \x01(\x0e\x32\t.LogLevel*.\n\tLogSource\x12\x0b\n\x07\x42UILDER\x10\x00\x12\n\n\x06\x42RIDGE\x10\x01\x12\x08\n\x04USER\x10\x02*Z\n\x08LogLevel\x12\t\n\x05TRACE\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07WARNING\x10\x03\x12\t\n\x05\x45RROR\x10\x04\x12\n\n\x06STDOUT\x10\x05\x12\n\n\x06STDERR\x10\x06\x62\x06proto3'
17
- )
18
-
19
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
20
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "common_pb2", globals())
21
- if _descriptor._USE_C_DESCRIPTORS == False:
22
-
23
- DESCRIPTOR._options = None
24
- _LOGSOURCE._serialized_start = 346
25
- _LOGSOURCE._serialized_end = 392
26
- _LOGLEVEL._serialized_start = 394
27
- _LOGLEVEL._serialized_end = 484
28
- _SERIALIZEDOBJECT._serialized_start = 17
29
- _SERIALIZEDOBJECT._serialized_end = 154
30
- _PARTIALRUNRESULT._serialized_start = 156
31
- _PARTIALRUNRESULT._serialized_end = 266
32
- _LOG._serialized_start = 268
33
- _LOG._serialized_end = 344
34
- # @@protoc_insertion_point(module_scope)
File without changes