continuous-labs 0.2.2__tar.gz → 0.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. {continuous_labs-0.2.2/src/continuous_labs.egg-info → continuous_labs-0.2.4}/PKG-INFO +2 -1
  2. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/README-PYPI.md +1 -0
  3. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/README.md +1 -0
  4. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/pyproject.toml +1 -1
  5. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/_version.py +2 -2
  6. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/__init__.py +29 -0
  7. continuous_labs-0.2.4/src/continuous/models/clone_simulatorop.py +25 -0
  8. continuous_labs-0.2.4/src/continuous/models/clonesimulatorrequest.py +43 -0
  9. continuous_labs-0.2.4/src/continuous/models/clonesimulatorresponse.py +30 -0
  10. continuous_labs-0.2.4/src/continuous/models/limitation.py +31 -0
  11. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/simulatorbuildprogress.py +13 -2
  12. continuous_labs-0.2.4/src/continuous/models/specificationwarning.py +46 -0
  13. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/sdk.py +1 -1
  14. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/simulators.py +231 -1
  15. {continuous_labs-0.2.2 → continuous_labs-0.2.4/src/continuous_labs.egg-info}/PKG-INFO +2 -1
  16. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous_labs.egg-info/SOURCES.txt +4 -0
  17. continuous_labs-0.2.2/src/continuous/models/specificationwarning.py +0 -49
  18. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/LICENSE +0 -0
  19. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/setup.cfg +0 -0
  20. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/__init__.py +0 -0
  21. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/_hooks/__init__.py +0 -0
  22. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/_hooks/registration.py +0 -0
  23. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/_hooks/sdkhooks.py +0 -0
  24. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/_hooks/types.py +0 -0
  25. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/basesdk.py +0 -0
  26. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/errors/__init__.py +0 -0
  27. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/errors/continuousdefaulterror.py +0 -0
  28. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/errors/continuouserror.py +0 -0
  29. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/errors/error.py +0 -0
  30. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/errors/no_response_error.py +0 -0
  31. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/errors/responsevalidationerror.py +0 -0
  32. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/httpclient.py +0 -0
  33. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/advance_simulationop.py +0 -0
  34. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/advance_worldop.py +0 -0
  35. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/advancetimerequest.py +0 -0
  36. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/build_simulatorop.py +0 -0
  37. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/buildsimulatorrequest.py +0 -0
  38. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/buildworldrequest.py +0 -0
  39. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/cancel_simulatorop.py +0 -0
  40. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/cancel_worldop.py +0 -0
  41. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/clockadvance.py +0 -0
  42. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/clockadvancemember.py +0 -0
  43. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/clockevent.py +0 -0
  44. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/create_simulationop.py +0 -0
  45. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/createdsimulation.py +0 -0
  46. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/createsimulationrequest.py +0 -0
  47. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/currentsimulationtoken.py +0 -0
  48. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/delete_simulationop.py +0 -0
  49. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/delete_simulatorop.py +0 -0
  50. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/delete_worldop.py +0 -0
  51. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/fork_simulationop.py +0 -0
  52. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/forksimulationrequest.py +0 -0
  53. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/get_simulation_advanceop.py +0 -0
  54. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/get_simulation_tokenop.py +0 -0
  55. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/get_simulationop.py +0 -0
  56. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/get_simulatorop.py +0 -0
  57. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/get_world_advanceop.py +0 -0
  58. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/get_worldop.py +0 -0
  59. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/list_simulation_advance_eventsop.py +0 -0
  60. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/list_simulation_stepsop.py +0 -0
  61. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/list_simulationsop.py +0 -0
  62. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/list_simulatorsop.py +0 -0
  63. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/list_worldsop.py +0 -0
  64. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/listclockadvanceeventsresponse.py +0 -0
  65. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/listsimulationsresponse.py +0 -0
  66. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/listsimulationstepsresponse.py +0 -0
  67. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/listsimulatorsresponse.py +0 -0
  68. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/listworldsresponse.py +0 -0
  69. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/regenerate_simulation_tokenop.py +0 -0
  70. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/resourceerror.py +0 -0
  71. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/security.py +0 -0
  72. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/simulation.py +0 -0
  73. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/simulationdetail.py +0 -0
  74. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/simulator.py +0 -0
  75. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/simulatoractor.py +0 -0
  76. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/simulatorerror.py +0 -0
  77. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/specificationissue.py +0 -0
  78. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/specificationvalidation.py +0 -0
  79. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/start_simulationop.py +0 -0
  80. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/start_worldop.py +0 -0
  81. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/startworldrequest.py +0 -0
  82. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/step.py +0 -0
  83. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/stop_simulationop.py +0 -0
  84. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/stop_worldop.py +0 -0
  85. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/world.py +0 -0
  86. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/worldbuildprogress.py +0 -0
  87. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/worlddatasummary.py +0 -0
  88. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/worlderror.py +0 -0
  89. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/worldrecordcount.py +0 -0
  90. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/models/worldsimulation.py +0 -0
  91. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/py.typed +0 -0
  92. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/sdkconfiguration.py +0 -0
  93. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/simulations.py +0 -0
  94. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/types/__init__.py +0 -0
  95. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/types/base64fileinput.py +0 -0
  96. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/types/basemodel.py +0 -0
  97. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/__init__.py +0 -0
  98. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/annotations.py +0 -0
  99. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/datetimes.py +0 -0
  100. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/dynamic_imports.py +0 -0
  101. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/enums.py +0 -0
  102. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/eventstreaming.py +0 -0
  103. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/forms.py +0 -0
  104. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/headers.py +0 -0
  105. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/logger.py +0 -0
  106. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/metadata.py +0 -0
  107. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/queryparams.py +0 -0
  108. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/requestbodies.py +0 -0
  109. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/retries.py +0 -0
  110. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/security.py +0 -0
  111. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/serializers.py +0 -0
  112. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/unmarshal_json_response.py +0 -0
  113. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/url.py +0 -0
  114. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/utils/values.py +0 -0
  115. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous/worlds.py +0 -0
  116. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous_labs.egg-info/dependency_links.txt +0 -0
  117. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous_labs.egg-info/requires.txt +0 -0
  118. {continuous_labs-0.2.2 → continuous_labs-0.2.4}/src/continuous_labs.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: continuous-labs
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Python SDK for the Continuous Simulation API.
5
5
  Author: Continuous Labs
6
6
  License: MIT
@@ -227,6 +227,7 @@ with Continuous(
227
227
  * [delete_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#delete_simulator) - Delete Simulator
228
228
  * [get_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#get_simulator) - Get Simulator
229
229
  * [cancel_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#cancel_simulator) - Cancel Simulator Build
230
+ * [clone_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#clone_simulator) - Clone Simulator
230
231
 
231
232
  ### [Worlds](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/worlds/README.md)
232
233
 
@@ -212,6 +212,7 @@ with Continuous(
212
212
  * [delete_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#delete_simulator) - Delete Simulator
213
213
  * [get_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#get_simulator) - Get Simulator
214
214
  * [cancel_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#cancel_simulator) - Cancel Simulator Build
215
+ * [clone_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#clone_simulator) - Clone Simulator
215
216
 
216
217
  ### [Worlds](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/worlds/README.md)
217
218
 
@@ -212,6 +212,7 @@ with Continuous(
212
212
  * [delete_simulator](docs/sdks/simulators/README.md#delete_simulator) - Delete Simulator
213
213
  * [get_simulator](docs/sdks/simulators/README.md#get_simulator) - Get Simulator
214
214
  * [cancel_simulator](docs/sdks/simulators/README.md#cancel_simulator) - Cancel Simulator Build
215
+ * [clone_simulator](docs/sdks/simulators/README.md#clone_simulator) - Clone Simulator
215
216
 
216
217
  ### [Worlds](docs/sdks/worlds/README.md)
217
218
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "continuous-labs"
3
- version = "0.2.2"
3
+ version = "0.2.4"
4
4
  description = "Python SDK for the Continuous Simulation API."
5
5
  authors = [{ name = "Continuous Labs" },]
6
6
  readme = "README-PYPI.md"
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "continuous-labs"
6
- __version__: str = "0.2.2"
6
+ __version__: str = "0.2.4"
7
7
  __openapi_doc_version__: str = "v1"
8
8
  __gen_version__: str = "2.935.1"
9
- __user_agent__: str = "speakeasy-sdk/python 0.2.2 2.935.1 v1 continuous-labs"
9
+ __user_agent__: str = "speakeasy-sdk/python 0.2.4 2.935.1 v1 continuous-labs"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -42,6 +42,18 @@ if TYPE_CHECKING:
42
42
  ClockAdvanceMemberTypedDict,
43
43
  )
44
44
  from .clockevent import ClockEvent, ClockEventTypedDict
45
+ from .clone_simulatorop import (
46
+ CloneSimulatorRequestRequest,
47
+ CloneSimulatorRequestRequestTypedDict,
48
+ )
49
+ from .clonesimulatorrequest import (
50
+ CloneSimulatorRequest,
51
+ CloneSimulatorRequestTypedDict,
52
+ )
53
+ from .clonesimulatorresponse import (
54
+ CloneSimulatorResponse,
55
+ CloneSimulatorResponseTypedDict,
56
+ )
45
57
  from .create_simulationop import (
46
58
  CreateSimulationResponse,
47
59
  CreateSimulationResponseTypedDict,
@@ -95,6 +107,7 @@ if TYPE_CHECKING:
95
107
  GetWorldAdvanceRequestTypedDict,
96
108
  )
97
109
  from .get_worldop import GetWorldRequest, GetWorldRequestTypedDict
110
+ from .limitation import Limitation, LimitationTypedDict
98
111
  from .list_simulation_advance_eventsop import (
99
112
  ListSimulationAdvanceEventsRequest,
100
113
  ListSimulationAdvanceEventsRequestTypedDict,
@@ -246,6 +259,12 @@ __all__ = [
246
259
  "ClockAdvanceTypedDict",
247
260
  "ClockEvent",
248
261
  "ClockEventTypedDict",
262
+ "CloneSimulatorRequest",
263
+ "CloneSimulatorRequestRequest",
264
+ "CloneSimulatorRequestRequestTypedDict",
265
+ "CloneSimulatorRequestTypedDict",
266
+ "CloneSimulatorResponse",
267
+ "CloneSimulatorResponseTypedDict",
249
268
  "CreateSimulationRequest",
250
269
  "CreateSimulationRequestTypedDict",
251
270
  "CreateSimulationResponse",
@@ -281,6 +300,8 @@ __all__ = [
281
300
  "GetWorldAdvanceRequestTypedDict",
282
301
  "GetWorldRequest",
283
302
  "GetWorldRequestTypedDict",
303
+ "Limitation",
304
+ "LimitationTypedDict",
284
305
  "ListClockAdvanceEventsResponse",
285
306
  "ListClockAdvanceEventsResponseTypedDict",
286
307
  "ListSimulationAdvanceEventsRequest",
@@ -415,6 +436,12 @@ _dynamic_imports: dict[str, str] = {
415
436
  "ClockAdvanceMemberTypedDict": ".clockadvancemember",
416
437
  "ClockEvent": ".clockevent",
417
438
  "ClockEventTypedDict": ".clockevent",
439
+ "CloneSimulatorRequestRequest": ".clone_simulatorop",
440
+ "CloneSimulatorRequestRequestTypedDict": ".clone_simulatorop",
441
+ "CloneSimulatorRequest": ".clonesimulatorrequest",
442
+ "CloneSimulatorRequestTypedDict": ".clonesimulatorrequest",
443
+ "CloneSimulatorResponse": ".clonesimulatorresponse",
444
+ "CloneSimulatorResponseTypedDict": ".clonesimulatorresponse",
418
445
  "CreateSimulationResponse": ".create_simulationop",
419
446
  "CreateSimulationResponseTypedDict": ".create_simulationop",
420
447
  "CreatedSimulation": ".createdsimulation",
@@ -450,6 +477,8 @@ _dynamic_imports: dict[str, str] = {
450
477
  "GetWorldAdvanceRequestTypedDict": ".get_world_advanceop",
451
478
  "GetWorldRequest": ".get_worldop",
452
479
  "GetWorldRequestTypedDict": ".get_worldop",
480
+ "Limitation": ".limitation",
481
+ "LimitationTypedDict": ".limitation",
453
482
  "ListSimulationAdvanceEventsRequest": ".list_simulation_advance_eventsop",
454
483
  "ListSimulationAdvanceEventsRequestTypedDict": ".list_simulation_advance_eventsop",
455
484
  "ListSimulationStepsRequest": ".list_simulation_stepsop",
@@ -0,0 +1,25 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .clonesimulatorrequest import CloneSimulatorRequest, CloneSimulatorRequestTypedDict
5
+ from continuous.types import BaseModel
6
+ from continuous.utils import FieldMetadata, PathParamMetadata, RequestMetadata
7
+ from typing_extensions import Annotated, TypedDict
8
+
9
+
10
+ class CloneSimulatorRequestRequestTypedDict(TypedDict):
11
+ id: str
12
+ r"""Source Simulator ID."""
13
+ body: CloneSimulatorRequestTypedDict
14
+
15
+
16
+ class CloneSimulatorRequestRequest(BaseModel):
17
+ id: Annotated[
18
+ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
19
+ ]
20
+ r"""Source Simulator ID."""
21
+
22
+ body: Annotated[
23
+ CloneSimulatorRequest,
24
+ FieldMetadata(request=RequestMetadata(media_type="application/json")),
25
+ ]
@@ -0,0 +1,43 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from continuous.types import BaseModel, UNSET_SENTINEL
5
+ from pydantic import model_serializer
6
+ from typing import Optional
7
+ from typing_extensions import NotRequired, TypedDict
8
+
9
+
10
+ class CloneSimulatorRequestTypedDict(TypedDict):
11
+ idempotency_key: str
12
+ r"""Stable key for retrying this clone into the target workspace."""
13
+ target_workspace_id: str
14
+ r"""Workspace that receives the clone. It must differ from the source workspace."""
15
+ name: NotRequired[str]
16
+ r"""Display name for the clone. Defaults to the source Simulator's name."""
17
+
18
+
19
+ class CloneSimulatorRequest(BaseModel):
20
+ idempotency_key: str
21
+ r"""Stable key for retrying this clone into the target workspace."""
22
+
23
+ target_workspace_id: str
24
+ r"""Workspace that receives the clone. It must differ from the source workspace."""
25
+
26
+ name: Optional[str] = None
27
+ r"""Display name for the clone. Defaults to the source Simulator's name."""
28
+
29
+ @model_serializer(mode="wrap")
30
+ def serialize_model(self, handler):
31
+ optional_fields = set(["name"])
32
+ serialized = handler(self)
33
+ m = {}
34
+
35
+ for n, f in type(self).model_fields.items():
36
+ k = f.alias or n
37
+ val = serialized.get(k, serialized.get(n))
38
+
39
+ if val != UNSET_SENTINEL:
40
+ if val is not None or k not in optional_fields:
41
+ m[k] = val
42
+
43
+ return m
@@ -0,0 +1,30 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from continuous.types import BaseModel
5
+ from typing_extensions import TypedDict
6
+
7
+
8
+ class CloneSimulatorResponseTypedDict(TypedDict):
9
+ digest: str
10
+ r"""OCI manifest digest, unchanged from the source."""
11
+ id: str
12
+ r"""New Simulator ID in the target workspace, or the same ID on an idempotent retry."""
13
+ name: str
14
+ r"""Display name of the clone."""
15
+ workspace_id: str
16
+ r"""Target workspace."""
17
+
18
+
19
+ class CloneSimulatorResponse(BaseModel):
20
+ digest: str
21
+ r"""OCI manifest digest, unchanged from the source."""
22
+
23
+ id: str
24
+ r"""New Simulator ID in the target workspace, or the same ID on an idempotent retry."""
25
+
26
+ name: str
27
+ r"""Display name of the clone."""
28
+
29
+ workspace_id: str
30
+ r"""Target workspace."""
@@ -0,0 +1,31 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from continuous.types import BaseModel
5
+ from typing import List
6
+ from typing_extensions import TypedDict
7
+
8
+
9
+ class LimitationTypedDict(TypedDict):
10
+ location: str
11
+ r"""The operations the limitation affects, readably, or Simulator when it names none."""
12
+ message: str
13
+ r"""What the Simulator does differently from the real system."""
14
+ operations: List[str]
15
+ r"""Operation IDs the limitation affects, or empty when it names none."""
16
+ reviewed: bool
17
+ r"""Whether review confirmed that the pinned contract or the scaffold cannot express the correct behavior. False for a limitation the build recorded after review or that review did not confirm."""
18
+
19
+
20
+ class Limitation(BaseModel):
21
+ location: str
22
+ r"""The operations the limitation affects, readably, or Simulator when it names none."""
23
+
24
+ message: str
25
+ r"""What the Simulator does differently from the real system."""
26
+
27
+ operations: List[str]
28
+ r"""Operation IDs the limitation affects, or empty when it names none."""
29
+
30
+ reviewed: bool
31
+ r"""Whether review confirmed that the pinned contract or the scaffold cannot express the correct behavior. False for a limitation the build recorded after review or that review did not confirm."""
@@ -1,6 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .limitation import Limitation, LimitationTypedDict
4
5
  from .specificationwarning import SpecificationWarning, SpecificationWarningTypedDict
5
6
  from continuous.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
6
7
  from pydantic import model_serializer
@@ -54,10 +55,14 @@ r"""derive while the effective spec, build skeleton, and sandbox are prepared; b
54
55
 
55
56
 
56
57
  class SimulatorBuildProgressTypedDict(TypedDict):
58
+ hidden_limitations: int
59
+ r"""Limitations the accepted build records beyond those listed in limitations."""
57
60
  last_submission: Nullable[SimulatorBuildProgressLastSubmission]
58
61
  r"""Outcome of the most recent submit attempt, or null."""
59
62
  last_tool: Nullable[str]
60
63
  r"""Name of the most recent tool call, or null. Tool arguments and output are private."""
64
+ limitations: List[LimitationTypedDict]
65
+ r"""Behavior the accepted build does not serve like the real system, most important first, set when the build is accepted. Empty when none."""
61
66
  model: SimulatorBuildProgressModel
62
67
  r"""The model the builder and reviewer run on. A build recorded before model selection reports its provider's default."""
63
68
  phase: Nullable[SimulatorBuildProgressPhase]
@@ -69,16 +74,22 @@ class SimulatorBuildProgressTypedDict(TypedDict):
69
74
  tool_calls: int
70
75
  r"""Tool calls the coding loop executed."""
71
76
  warnings: List[SpecificationWarningTypedDict]
72
- r"""Specification defects the build tolerated without changing the specification, set when the build prepares its specification, and limitations the accepted build records, set when the build is accepted. Empty when none."""
77
+ r"""Specification defects the build tolerated without changing the specification, set when the build prepares its specification. Empty when none."""
73
78
 
74
79
 
75
80
  class SimulatorBuildProgress(BaseModel):
81
+ hidden_limitations: int
82
+ r"""Limitations the accepted build records beyond those listed in limitations."""
83
+
76
84
  last_submission: Nullable[SimulatorBuildProgressLastSubmission]
77
85
  r"""Outcome of the most recent submit attempt, or null."""
78
86
 
79
87
  last_tool: Nullable[str]
80
88
  r"""Name of the most recent tool call, or null. Tool arguments and output are private."""
81
89
 
90
+ limitations: List[Limitation]
91
+ r"""Behavior the accepted build does not serve like the real system, most important first, set when the build is accepted. Empty when none."""
92
+
82
93
  model: SimulatorBuildProgressModel
83
94
  r"""The model the builder and reviewer run on. A build recorded before model selection reports its provider's default."""
84
95
 
@@ -95,7 +106,7 @@ class SimulatorBuildProgress(BaseModel):
95
106
  r"""Tool calls the coding loop executed."""
96
107
 
97
108
  warnings: List[SpecificationWarning]
98
- r"""Specification defects the build tolerated without changing the specification, set when the build prepares its specification, and limitations the accepted build records, set when the build is accepted. Empty when none."""
109
+ r"""Specification defects the build tolerated without changing the specification, set when the build prepares its specification. Empty when none."""
99
110
 
100
111
  @model_serializer(mode="wrap")
101
112
  def _serialize_model(self, handler):
@@ -0,0 +1,46 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from continuous.types import BaseModel, UnrecognizedStr
5
+ from typing import List, Literal, Union
6
+ from typing_extensions import TypedDict
7
+
8
+
9
+ SpecificationWarningCode = Union[
10
+ Literal[
11
+ "spec.enum_duplicate",
12
+ "spec.path_parameter_optional",
13
+ "spec.default_invalid",
14
+ "spec.response_untyped",
15
+ "spec.schema_limit",
16
+ "spec.operation_unservable",
17
+ "spec.example_null",
18
+ ],
19
+ UnrecognizedStr,
20
+ ]
21
+ r"""Stable warning code."""
22
+
23
+
24
+ class SpecificationWarningTypedDict(TypedDict):
25
+ code: SpecificationWarningCode
26
+ r"""Stable warning code."""
27
+ location: str
28
+ r"""Readable endpoint or field affected by this warning."""
29
+ message: str
30
+ r"""What the specification declares and how the build handles it."""
31
+ operations: List[str]
32
+ r"""Always empty."""
33
+
34
+
35
+ class SpecificationWarning(BaseModel):
36
+ code: SpecificationWarningCode
37
+ r"""Stable warning code."""
38
+
39
+ location: str
40
+ r"""Readable endpoint or field affected by this warning."""
41
+
42
+ message: str
43
+ r"""What the specification declares and how the build handles it."""
44
+
45
+ operations: List[str]
46
+ r"""Always empty."""
@@ -26,7 +26,7 @@ class Continuous(BaseSDK):
26
26
  simulations: "Simulations"
27
27
  r"""Create Simulations from ready Simulators, then fork, stop, start, and delete them."""
28
28
  simulators: "Simulators"
29
- r"""Build Simulators from OpenAPI or WSDL documents, check or cancel a build, and delete Simulators."""
29
+ r"""Build Simulators from OpenAPI or WSDL documents, check or cancel a build, clone Simulators into other workspaces, and delete Simulators."""
30
30
  worlds: "Worlds"
31
31
  r"""Build Worlds from one or more Simulators and start or stop their Simulations together."""
32
32
  _sub_sdk_map = {
@@ -10,7 +10,7 @@ from typing import Any, Mapping, Optional, Union
10
10
 
11
11
 
12
12
  class Simulators(BaseSDK):
13
- r"""Build Simulators from OpenAPI or WSDL documents, check or cancel a build, and delete Simulators."""
13
+ r"""Build Simulators from OpenAPI or WSDL documents, check or cancel a build, clone Simulators into other workspaces, and delete Simulators."""
14
14
 
15
15
  def list_simulators(
16
16
  self,
@@ -1057,3 +1057,233 @@ class Simulators(BaseSDK):
1057
1057
  )
1058
1058
 
1059
1059
  raise errors.ContinuousDefaultError("Unexpected response received", http_res)
1060
+
1061
+ def clone_simulator(
1062
+ self,
1063
+ *,
1064
+ id: str,
1065
+ idempotency_key: str,
1066
+ target_workspace_id: str,
1067
+ name: Optional[str] = None,
1068
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1069
+ server_url: Optional[str] = None,
1070
+ timeout_ms: Optional[int] = None,
1071
+ http_headers: Optional[Mapping[str, str]] = None,
1072
+ ) -> models.CloneSimulatorResponse:
1073
+ r"""Clone Simulator
1074
+
1075
+ Creates a ready copy of a ready Simulator in another workspace. The clone has a new ID and the source's image digest; the source is unchanged. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization.
1076
+
1077
+ :param id: Source Simulator ID.
1078
+ :param idempotency_key: Stable key for retrying this clone into the target workspace.
1079
+ :param target_workspace_id: Workspace that receives the clone. It must differ from the source workspace.
1080
+ :param name: Display name for the clone. Defaults to the source Simulator's name.
1081
+ :param retries: Override the default retry configuration for this method
1082
+ :param server_url: Override the default server URL for this method
1083
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1084
+ :param http_headers: Additional headers to set or replace on requests.
1085
+ """
1086
+ base_url = None
1087
+ url_variables = None
1088
+ if timeout_ms is None:
1089
+ timeout_ms = self.sdk_configuration.timeout_ms
1090
+
1091
+ if server_url is not None:
1092
+ base_url = server_url
1093
+ else:
1094
+ base_url = self._get_url(base_url, url_variables)
1095
+
1096
+ request = models.CloneSimulatorRequestRequest(
1097
+ id=id,
1098
+ body=models.CloneSimulatorRequest(
1099
+ idempotency_key=idempotency_key,
1100
+ name=name,
1101
+ target_workspace_id=target_workspace_id,
1102
+ ),
1103
+ )
1104
+
1105
+ req = self._build_request(
1106
+ method="POST",
1107
+ path="/v1/simulators/{id}/clone",
1108
+ base_url=base_url,
1109
+ url_variables=url_variables,
1110
+ request=request,
1111
+ request_body_required=True,
1112
+ request_has_path_params=True,
1113
+ request_has_query_params=True,
1114
+ user_agent_header="user-agent",
1115
+ accept_header_value="application/json",
1116
+ http_headers=http_headers,
1117
+ security=self.sdk_configuration.security,
1118
+ get_serialized_body=lambda: utils.serialize_request_body(
1119
+ request.body, False, False, "json", models.CloneSimulatorRequest
1120
+ ),
1121
+ allow_empty_value=None,
1122
+ timeout_ms=timeout_ms,
1123
+ )
1124
+
1125
+ if retries == UNSET:
1126
+ if self.sdk_configuration.retry_config is not UNSET:
1127
+ retries = self.sdk_configuration.retry_config
1128
+
1129
+ retry_config = None
1130
+ if isinstance(retries, utils.RetryConfig):
1131
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1132
+
1133
+ http_res = self.do_request(
1134
+ hook_ctx=HookContext(
1135
+ config=self.sdk_configuration,
1136
+ base_url=base_url or "",
1137
+ operation_id="clone-simulator",
1138
+ oauth2_scopes=None,
1139
+ security_source=get_security_from_env(
1140
+ self.sdk_configuration.security, models.Security
1141
+ ),
1142
+ tags=["simulators"],
1143
+ extensions=None,
1144
+ ),
1145
+ request=req,
1146
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1147
+ retry_config=retry_config,
1148
+ )
1149
+
1150
+ response_data: Any = None
1151
+ if utils.match_response(http_res, "201", "application/json"):
1152
+ return unmarshal_json_response(models.CloneSimulatorResponse, http_res)
1153
+ if utils.match_response(
1154
+ http_res,
1155
+ ["400", "401", "403", "404", "408", "409", "413", "415", "422"],
1156
+ "application/problem+json",
1157
+ ):
1158
+ response_data = unmarshal_json_response(errors.ErrorData, http_res)
1159
+ raise errors.Error(response_data, http_res)
1160
+ if utils.match_response(http_res, ["500", "503"], "application/problem+json"):
1161
+ response_data = unmarshal_json_response(errors.ErrorData, http_res)
1162
+ raise errors.Error(response_data, http_res)
1163
+ if utils.match_response(http_res, "4XX", "*"):
1164
+ http_res_text = utils.stream_to_text(http_res)
1165
+ raise errors.ContinuousDefaultError(
1166
+ "API error occurred", http_res, http_res_text
1167
+ )
1168
+ if utils.match_response(http_res, "5XX", "*"):
1169
+ http_res_text = utils.stream_to_text(http_res)
1170
+ raise errors.ContinuousDefaultError(
1171
+ "API error occurred", http_res, http_res_text
1172
+ )
1173
+
1174
+ raise errors.ContinuousDefaultError("Unexpected response received", http_res)
1175
+
1176
+ async def clone_simulator_async(
1177
+ self,
1178
+ *,
1179
+ id: str,
1180
+ idempotency_key: str,
1181
+ target_workspace_id: str,
1182
+ name: Optional[str] = None,
1183
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1184
+ server_url: Optional[str] = None,
1185
+ timeout_ms: Optional[int] = None,
1186
+ http_headers: Optional[Mapping[str, str]] = None,
1187
+ ) -> models.CloneSimulatorResponse:
1188
+ r"""Clone Simulator
1189
+
1190
+ Creates a ready copy of a ready Simulator in another workspace. The clone has a new ID and the source's image digest; the source is unchanged. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization.
1191
+
1192
+ :param id: Source Simulator ID.
1193
+ :param idempotency_key: Stable key for retrying this clone into the target workspace.
1194
+ :param target_workspace_id: Workspace that receives the clone. It must differ from the source workspace.
1195
+ :param name: Display name for the clone. Defaults to the source Simulator's name.
1196
+ :param retries: Override the default retry configuration for this method
1197
+ :param server_url: Override the default server URL for this method
1198
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1199
+ :param http_headers: Additional headers to set or replace on requests.
1200
+ """
1201
+ base_url = None
1202
+ url_variables = None
1203
+ if timeout_ms is None:
1204
+ timeout_ms = self.sdk_configuration.timeout_ms
1205
+
1206
+ if server_url is not None:
1207
+ base_url = server_url
1208
+ else:
1209
+ base_url = self._get_url(base_url, url_variables)
1210
+
1211
+ request = models.CloneSimulatorRequestRequest(
1212
+ id=id,
1213
+ body=models.CloneSimulatorRequest(
1214
+ idempotency_key=idempotency_key,
1215
+ name=name,
1216
+ target_workspace_id=target_workspace_id,
1217
+ ),
1218
+ )
1219
+
1220
+ req = self._build_request_async(
1221
+ method="POST",
1222
+ path="/v1/simulators/{id}/clone",
1223
+ base_url=base_url,
1224
+ url_variables=url_variables,
1225
+ request=request,
1226
+ request_body_required=True,
1227
+ request_has_path_params=True,
1228
+ request_has_query_params=True,
1229
+ user_agent_header="user-agent",
1230
+ accept_header_value="application/json",
1231
+ http_headers=http_headers,
1232
+ security=self.sdk_configuration.security,
1233
+ get_serialized_body=lambda: utils.serialize_request_body(
1234
+ request.body, False, False, "json", models.CloneSimulatorRequest
1235
+ ),
1236
+ allow_empty_value=None,
1237
+ timeout_ms=timeout_ms,
1238
+ )
1239
+
1240
+ if retries == UNSET:
1241
+ if self.sdk_configuration.retry_config is not UNSET:
1242
+ retries = self.sdk_configuration.retry_config
1243
+
1244
+ retry_config = None
1245
+ if isinstance(retries, utils.RetryConfig):
1246
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1247
+
1248
+ http_res = await self.do_request_async(
1249
+ hook_ctx=HookContext(
1250
+ config=self.sdk_configuration,
1251
+ base_url=base_url or "",
1252
+ operation_id="clone-simulator",
1253
+ oauth2_scopes=None,
1254
+ security_source=get_security_from_env(
1255
+ self.sdk_configuration.security, models.Security
1256
+ ),
1257
+ tags=["simulators"],
1258
+ extensions=None,
1259
+ ),
1260
+ request=req,
1261
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1262
+ retry_config=retry_config,
1263
+ )
1264
+
1265
+ response_data: Any = None
1266
+ if utils.match_response(http_res, "201", "application/json"):
1267
+ return unmarshal_json_response(models.CloneSimulatorResponse, http_res)
1268
+ if utils.match_response(
1269
+ http_res,
1270
+ ["400", "401", "403", "404", "408", "409", "413", "415", "422"],
1271
+ "application/problem+json",
1272
+ ):
1273
+ response_data = unmarshal_json_response(errors.ErrorData, http_res)
1274
+ raise errors.Error(response_data, http_res)
1275
+ if utils.match_response(http_res, ["500", "503"], "application/problem+json"):
1276
+ response_data = unmarshal_json_response(errors.ErrorData, http_res)
1277
+ raise errors.Error(response_data, http_res)
1278
+ if utils.match_response(http_res, "4XX", "*"):
1279
+ http_res_text = await utils.stream_to_text_async(http_res)
1280
+ raise errors.ContinuousDefaultError(
1281
+ "API error occurred", http_res, http_res_text
1282
+ )
1283
+ if utils.match_response(http_res, "5XX", "*"):
1284
+ http_res_text = await utils.stream_to_text_async(http_res)
1285
+ raise errors.ContinuousDefaultError(
1286
+ "API error occurred", http_res, http_res_text
1287
+ )
1288
+
1289
+ raise errors.ContinuousDefaultError("Unexpected response received", http_res)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: continuous-labs
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Python SDK for the Continuous Simulation API.
5
5
  Author: Continuous Labs
6
6
  License: MIT
@@ -227,6 +227,7 @@ with Continuous(
227
227
  * [delete_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#delete_simulator) - Delete Simulator
228
228
  * [get_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#get_simulator) - Get Simulator
229
229
  * [cancel_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#cancel_simulator) - Cancel Simulator Build
230
+ * [clone_simulator](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/simulators/README.md#clone_simulator) - Clone Simulator
230
231
 
231
232
  ### [Worlds](https://github.com/continuous-labs-ai/continuous-python/blob/master/docs/sdks/worlds/README.md)
232
233
 
@@ -34,6 +34,9 @@ src/continuous/models/cancel_worldop.py
34
34
  src/continuous/models/clockadvance.py
35
35
  src/continuous/models/clockadvancemember.py
36
36
  src/continuous/models/clockevent.py
37
+ src/continuous/models/clone_simulatorop.py
38
+ src/continuous/models/clonesimulatorrequest.py
39
+ src/continuous/models/clonesimulatorresponse.py
37
40
  src/continuous/models/create_simulationop.py
38
41
  src/continuous/models/createdsimulation.py
39
42
  src/continuous/models/createsimulationrequest.py
@@ -49,6 +52,7 @@ src/continuous/models/get_simulationop.py
49
52
  src/continuous/models/get_simulatorop.py
50
53
  src/continuous/models/get_world_advanceop.py
51
54
  src/continuous/models/get_worldop.py
55
+ src/continuous/models/limitation.py
52
56
  src/continuous/models/list_simulation_advance_eventsop.py
53
57
  src/continuous/models/list_simulation_stepsop.py
54
58
  src/continuous/models/list_simulationsop.py
@@ -1,49 +0,0 @@
1
- """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
-
3
- from __future__ import annotations
4
- from continuous.types import BaseModel, UnrecognizedStr
5
- from typing import List, Literal, Union
6
- from typing_extensions import TypedDict
7
-
8
-
9
- SpecificationWarningCode = Union[
10
- Literal[
11
- "spec.enum_duplicate",
12
- "spec.path_parameter_optional",
13
- "spec.default_invalid",
14
- "spec.response_untyped",
15
- "spec.schema_limit",
16
- "spec.operation_unservable",
17
- "spec.version_ambiguous",
18
- "spec.example_null",
19
- "build.limitation",
20
- "build.unrepaired",
21
- ],
22
- UnrecognizedStr,
23
- ]
24
- r"""Stable warning code. build.limitation marks behavior the Simulator does not serve like the real system. build.unrepaired marks such behavior that review did not mark a limit of the pinned contract or the scaffold, or that the build declared after review."""
25
-
26
-
27
- class SpecificationWarningTypedDict(TypedDict):
28
- code: SpecificationWarningCode
29
- r"""Stable warning code. build.limitation marks behavior the Simulator does not serve like the real system. build.unrepaired marks such behavior that review did not mark a limit of the pinned contract or the scaffold, or that the build declared after review."""
30
- location: str
31
- r"""Readable endpoint or field affected by this warning, or the affected operations for a limitation."""
32
- message: str
33
- r"""What the specification declares and how the build handles it, or what the limitation is."""
34
- operations: List[str]
35
- r"""Operation IDs a limitation affects, or empty when the warning names none."""
36
-
37
-
38
- class SpecificationWarning(BaseModel):
39
- code: SpecificationWarningCode
40
- r"""Stable warning code. build.limitation marks behavior the Simulator does not serve like the real system. build.unrepaired marks such behavior that review did not mark a limit of the pinned contract or the scaffold, or that the build declared after review."""
41
-
42
- location: str
43
- r"""Readable endpoint or field affected by this warning, or the affected operations for a limitation."""
44
-
45
- message: str
46
- r"""What the specification declares and how the build handles it, or what the limitation is."""
47
-
48
- operations: List[str]
49
- r"""Operation IDs a limitation affects, or empty when the warning names none."""
File without changes