runwayml 2.2.0__tar.gz → 2.2.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.
Files changed (70) hide show
  1. runwayml-2.2.1/.release-please-manifest.json +3 -0
  2. {runwayml-2.2.0 → runwayml-2.2.1}/CHANGELOG.md +9 -0
  3. {runwayml-2.2.0 → runwayml-2.2.1}/PKG-INFO +1 -1
  4. {runwayml-2.2.0 → runwayml-2.2.1}/pyproject.toml +1 -1
  5. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_models.py +7 -1
  6. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_transform.py +11 -1
  7. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_version.py +1 -1
  8. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_transform.py +10 -1
  9. runwayml-2.2.0/.release-please-manifest.json +0 -3
  10. {runwayml-2.2.0 → runwayml-2.2.1}/.gitignore +0 -0
  11. {runwayml-2.2.0 → runwayml-2.2.1}/CONTRIBUTING.md +0 -0
  12. {runwayml-2.2.0 → runwayml-2.2.1}/LICENSE +0 -0
  13. {runwayml-2.2.0 → runwayml-2.2.1}/README.md +0 -0
  14. {runwayml-2.2.0 → runwayml-2.2.1}/SECURITY.md +0 -0
  15. {runwayml-2.2.0 → runwayml-2.2.1}/api.md +0 -0
  16. {runwayml-2.2.0 → runwayml-2.2.1}/bin/check-release-environment +0 -0
  17. {runwayml-2.2.0 → runwayml-2.2.1}/bin/publish-pypi +0 -0
  18. {runwayml-2.2.0 → runwayml-2.2.1}/examples/.keep +0 -0
  19. {runwayml-2.2.0 → runwayml-2.2.1}/mypy.ini +0 -0
  20. {runwayml-2.2.0 → runwayml-2.2.1}/noxfile.py +0 -0
  21. {runwayml-2.2.0 → runwayml-2.2.1}/release-please-config.json +0 -0
  22. {runwayml-2.2.0 → runwayml-2.2.1}/requirements-dev.lock +0 -0
  23. {runwayml-2.2.0 → runwayml-2.2.1}/requirements.lock +0 -0
  24. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/__init__.py +0 -0
  25. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_base_client.py +0 -0
  26. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_client.py +0 -0
  27. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_compat.py +0 -0
  28. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_constants.py +0 -0
  29. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_exceptions.py +0 -0
  30. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_files.py +0 -0
  31. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_qs.py +0 -0
  32. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_resource.py +0 -0
  33. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_response.py +0 -0
  34. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_streaming.py +0 -0
  35. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_types.py +0 -0
  36. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/__init__.py +0 -0
  37. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_logs.py +0 -0
  38. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_proxy.py +0 -0
  39. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_reflection.py +0 -0
  40. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_streams.py +0 -0
  41. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_sync.py +0 -0
  42. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_typing.py +0 -0
  43. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/_utils/_utils.py +0 -0
  44. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/lib/.keep +0 -0
  45. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/py.typed +0 -0
  46. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/resources/__init__.py +0 -0
  47. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/resources/image_to_video.py +0 -0
  48. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/resources/tasks.py +0 -0
  49. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/types/__init__.py +0 -0
  50. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/types/image_to_video_create_params.py +0 -0
  51. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/types/image_to_video_create_response.py +0 -0
  52. {runwayml-2.2.0 → runwayml-2.2.1}/src/runwayml/types/task_retrieve_response.py +0 -0
  53. {runwayml-2.2.0 → runwayml-2.2.1}/tests/__init__.py +0 -0
  54. {runwayml-2.2.0 → runwayml-2.2.1}/tests/api_resources/__init__.py +0 -0
  55. {runwayml-2.2.0 → runwayml-2.2.1}/tests/api_resources/test_image_to_video.py +0 -0
  56. {runwayml-2.2.0 → runwayml-2.2.1}/tests/api_resources/test_tasks.py +0 -0
  57. {runwayml-2.2.0 → runwayml-2.2.1}/tests/conftest.py +0 -0
  58. {runwayml-2.2.0 → runwayml-2.2.1}/tests/sample_file.txt +0 -0
  59. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_client.py +0 -0
  60. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_deepcopy.py +0 -0
  61. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_extract_files.py +0 -0
  62. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_files.py +0 -0
  63. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_models.py +0 -0
  64. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_qs.py +0 -0
  65. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_required_args.py +0 -0
  66. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_response.py +0 -0
  67. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_streaming.py +0 -0
  68. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_utils/test_proxy.py +0 -0
  69. {runwayml-2.2.0 → runwayml-2.2.1}/tests/test_utils/test_typing.py +0 -0
  70. {runwayml-2.2.0 → runwayml-2.2.1}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "2.2.1"
3
+ }
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.1 (2025-02-07)
4
+
5
+ Full Changelog: [v2.2.0...v2.2.1](https://github.com/runwayml/sdk-python/compare/v2.2.0...v2.2.1)
6
+
7
+ ### Chores
8
+
9
+ * **internal:** fix type traversing dictionary params ([#90](https://github.com/runwayml/sdk-python/issues/90)) ([49d44b9](https://github.com/runwayml/sdk-python/commit/49d44b9b3f234f9aa5c69e3694f1774a8a0a4581))
10
+ * **internal:** minor type handling changes ([#92](https://github.com/runwayml/sdk-python/issues/92)) ([f4f122f](https://github.com/runwayml/sdk-python/commit/f4f122f97e7bd10d51250bdcca67f55cb8a76e4a))
11
+
3
12
  ## 2.2.0 (2025-02-06)
4
13
 
5
14
  Full Changelog: [v2.1.11...v2.2.0](https://github.com/runwayml/sdk-python/compare/v2.1.11...v2.2.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runwayml
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: The official Python library for the runwayml API
5
5
  Project-URL: Homepage, https://github.com/runwayml/sdk-python
6
6
  Project-URL: Repository, https://github.com/runwayml/sdk-python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runwayml"
3
- version = "2.2.0"
3
+ version = "2.2.1"
4
4
  description = "The official Python library for the runwayml API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -426,10 +426,16 @@ def construct_type(*, value: object, type_: object) -> object:
426
426
 
427
427
  If the given value does not match the expected type then it is returned as-is.
428
428
  """
429
+
430
+ # store a reference to the original type we were given before we extract any inner
431
+ # types so that we can properly resolve forward references in `TypeAliasType` annotations
432
+ original_type = None
433
+
429
434
  # we allow `object` as the input type because otherwise, passing things like
430
435
  # `Literal['value']` will be reported as a type error by type checkers
431
436
  type_ = cast("type[object]", type_)
432
437
  if is_type_alias_type(type_):
438
+ original_type = type_ # type: ignore[unreachable]
433
439
  type_ = type_.__value__ # type: ignore[unreachable]
434
440
 
435
441
  # unwrap `Annotated[T, ...]` -> `T`
@@ -446,7 +452,7 @@ def construct_type(*, value: object, type_: object) -> object:
446
452
 
447
453
  if is_union(origin):
448
454
  try:
449
- return validate_type(type_=cast("type[object]", type_), value=value)
455
+ return validate_type(type_=cast("type[object]", original_type or type_), value=value)
450
456
  except Exception:
451
457
  pass
452
458
 
@@ -25,7 +25,7 @@ from ._typing import (
25
25
  is_annotated_type,
26
26
  strip_annotated_type,
27
27
  )
28
- from .._compat import model_dump, is_typeddict
28
+ from .._compat import get_origin, model_dump, is_typeddict
29
29
 
30
30
  _T = TypeVar("_T")
31
31
 
@@ -164,9 +164,14 @@ def _transform_recursive(
164
164
  inner_type = annotation
165
165
 
166
166
  stripped_type = strip_annotated_type(inner_type)
167
+ origin = get_origin(stripped_type) or stripped_type
167
168
  if is_typeddict(stripped_type) and is_mapping(data):
168
169
  return _transform_typeddict(data, stripped_type)
169
170
 
171
+ if origin == dict and is_mapping(data):
172
+ items_type = get_args(stripped_type)[1]
173
+ return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()}
174
+
170
175
  if (
171
176
  # List[T]
172
177
  (is_list_type(stripped_type) and is_list(data))
@@ -307,9 +312,14 @@ async def _async_transform_recursive(
307
312
  inner_type = annotation
308
313
 
309
314
  stripped_type = strip_annotated_type(inner_type)
315
+ origin = get_origin(stripped_type) or stripped_type
310
316
  if is_typeddict(stripped_type) and is_mapping(data):
311
317
  return await _async_transform_typeddict(data, stripped_type)
312
318
 
319
+ if origin == dict and is_mapping(data):
320
+ items_type = get_args(stripped_type)[1]
321
+ return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()}
322
+
313
323
  if (
314
324
  # List[T]
315
325
  (is_list_type(stripped_type) and is_list(data))
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "runwayml"
4
- __version__ = "2.2.0" # x-release-please-version
4
+ __version__ = "2.2.1" # x-release-please-version
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import io
4
4
  import pathlib
5
- from typing import Any, List, Union, TypeVar, Iterable, Optional, cast
5
+ from typing import Any, Dict, List, Union, TypeVar, Iterable, Optional, cast
6
6
  from datetime import date, datetime
7
7
  from typing_extensions import Required, Annotated, TypedDict
8
8
 
@@ -388,6 +388,15 @@ async def test_iterable_of_dictionaries(use_async: bool) -> None:
388
388
  }
389
389
 
390
390
 
391
+ @parametrize
392
+ @pytest.mark.asyncio
393
+ async def test_dictionary_items(use_async: bool) -> None:
394
+ class DictItems(TypedDict):
395
+ foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")]
396
+
397
+ assert await transform({"foo": {"foo_baz": "bar"}}, Dict[str, DictItems], use_async) == {"foo": {"fooBaz": "bar"}}
398
+
399
+
391
400
  class TypedDictIterableUnionStr(TypedDict):
392
401
  foo: Annotated[Union[str, Iterable[Baz8]], PropertyInfo(alias="FOO")]
393
402
 
@@ -1,3 +0,0 @@
1
- {
2
- ".": "2.2.0"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes