typed-ffmpeg-compatible 3.3.1__py3-none-any.whl → 3.4__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.
@@ -6,7 +6,7 @@ where hashable dictionaries are needed, such as in sets or as keys in other
6
6
  dictionaries. Once created, a FrozenDict cannot be modified.
7
7
  """
8
8
 
9
- from collections.abc import Iterator, Mapping
9
+ from collections.abc import Iterable, Iterator, Mapping
10
10
  from typing import Any, Generic, TypeVar
11
11
 
12
12
  K = TypeVar("K")
@@ -106,3 +106,58 @@ class FrozenDict(Mapping[K, V], Generic[K, V]):
106
106
  # Create a stable hash based on sorted key-value pairs
107
107
  self._hash = hash(frozenset(self._data.items()))
108
108
  return self._hash
109
+
110
+ def __or__(self, other: Mapping[Any, Any]) -> dict[Any, Any]:
111
+ return dict(self) | dict(other)
112
+
113
+ def __ror__(self, other: Mapping[Any, Any]) -> dict[Any, Any]:
114
+ return dict(other) | dict(self)
115
+
116
+
117
+ def merge(*maps: Mapping[Any, Any] | None) -> FrozenDict[Any, Any]:
118
+ """
119
+ Merge multiple dictionaries into a single dictionary.
120
+
121
+ Args:
122
+ *maps: Dictionaries to merge
123
+
124
+ Returns:
125
+ A new dictionary containing the merged contents of all input dictionaries
126
+ """
127
+ output = {}
128
+
129
+ for map in maps:
130
+ if map is None:
131
+ continue
132
+ # exclude None values
133
+ output.update({k: v for k, v in map.items() if v is not None})
134
+
135
+ return FrozenDict(output)
136
+
137
+
138
+ def exclude(maps: Mapping[Any, Any], exclude: Iterable[Any]) -> FrozenDict[Any, Any]:
139
+ """
140
+ Exclude the keys of a dictionary.
141
+
142
+ Args:
143
+ maps: Dictionary to exclude from
144
+ exclude: Keys to exclude
145
+
146
+ Returns:
147
+ A new dictionary with the keys excluded
148
+ """
149
+ return FrozenDict({k: v for k, v in maps.items() if k not in exclude})
150
+
151
+
152
+ def rekey(maps: Mapping[Any, Any], rekey: Mapping[Any, Any]) -> FrozenDict[Any, Any]:
153
+ """
154
+ rekey the keys of a dictionary.
155
+
156
+ Args:
157
+ maps: Dictionary to rekey
158
+ rekey: Mapping of old keys to new keys
159
+
160
+ Returns:
161
+ A new dictionary with the keys remapped
162
+ """
163
+ return FrozenDict({rekey.get(k, k): v for k, v in maps.items()})
typed_ffmpeg/utils/run.py CHANGED
@@ -10,7 +10,7 @@ from collections.abc import Mapping
10
10
 
11
11
  from ..schema import Default
12
12
  from ..utils.lazy_eval.schema import LazyValue
13
- from .forzendict import FrozenDict
13
+ from .frozendict import FrozenDict
14
14
 
15
15
 
16
16
  def command_line(args: list[str]) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: typed-ffmpeg-compatible
3
- Version: 3.3.1
3
+ Version: 3.4
4
4
  Summary: Modern Python FFmpeg wrappers offer comprehensive support for complex filters, complete with detailed typing and documentation.
5
5
  Author-email: lucemia <lucemia@gmail.com>
6
6
  License-Expression: MIT
@@ -1,17 +1,21 @@
1
- typed_ffmpeg/__init__.py,sha256=yixdEj2DRDUwCVipkVMaPGNo-DjIA_6ZSZrYQTxkUQY,1630
2
- typed_ffmpeg/_version.py,sha256=DGQPU6_vrM6PfHseD1DbTrLzSemTnUX5siYWgZbIrdI,511
3
- typed_ffmpeg/base.py,sha256=oNL_ZCYiweYoKOm2Kh-OePvIfVOlpQ4cDF8_aLNTz98,6309
1
+ typed_ffmpeg/__init__.py,sha256=l53f6Iit3dLhGHxYg20TLkzmmh0vCMNYGIXCyXWcZfA,1652
2
+ typed_ffmpeg/_version.py,sha256=FOaITfYFdmbc5BCzn2TIcvOwuyawOglcSDQRSAu-J5U,506
3
+ typed_ffmpeg/base.py,sha256=JNNNnN-1A50i9zviR6uOjAs-bClCDx5qx9A5iSePBeI,6309
4
4
  typed_ffmpeg/exceptions.py,sha256=D4SID6WOwkjVV8O8mAjrEDHWn-8BRDnK_jteaDof1SY,2474
5
- typed_ffmpeg/filters.py,sha256=_lBpGZgPHK3KgGVrw-TCdQEsBRuEXVIgwggYNGd80MU,110076
5
+ typed_ffmpeg/filters.py,sha256=XY1LqXY6Ch1wOX-1XW3SzgwH3NQaAtSEQew6f3JoTeY,144001
6
6
  typed_ffmpeg/info.py,sha256=0KCzf8hJaI6ObPRT0uftLa96RlYvaQmoEq1sqFJSc24,9521
7
7
  typed_ffmpeg/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  typed_ffmpeg/schema.py,sha256=KVtmyGeJutjFot70r6Nj8W8WBqwvfg2-rSgjdhPVh-o,1615
9
- typed_ffmpeg/sources.py,sha256=ASt0l8FMW82X-70qw72167xpyBY7tQQClVuhy8r0HfU,86026
9
+ typed_ffmpeg/sources.py,sha256=gR8qH-Qf36X2veab4kh9ZE5CYu5K0Yz6eXzd0lCFdPE,122297
10
10
  typed_ffmpeg/types.py,sha256=ly3zLtg7KxRa_jsDDrFPAxRZRjTQdWVpiQzOD9NdrFM,4137
11
+ typed_ffmpeg/codecs/__init__.py,sha256=qEqV-Oo2vG06WIAm3obcArK6ZBDWNP7_Kw6cszSGqb8,87
12
+ typed_ffmpeg/codecs/decoders.py,sha256=5_s7TJoq98784GZ-6wE6QmF7Mzafmm7nwB98QgFWsUw,122104
13
+ typed_ffmpeg/codecs/encoders.py,sha256=iucSZt8zTdfBNvWaOXOfHHQdCx3bJTbn4-9MOlr5-zI,217955
14
+ typed_ffmpeg/codecs/schema.py,sha256=d0OeLkJAHf6GwUjUFgr_1sR38mQOCUQns3aSmpX7EF8,451
11
15
  typed_ffmpeg/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
16
  typed_ffmpeg/common/cache.py,sha256=j0JvfX7jewLpdJWxgo7Pwze0BkUJdYGHX2uGR8BZ-9M,1386
13
17
  typed_ffmpeg/common/schema.py,sha256=qM8yfMX9UU3EAQSNsTrr-SAmyqKx8eQCXTtu3RJWkEk,19673
14
- typed_ffmpeg/common/serialize.py,sha256=dLim0DBP5CdJ1JiMV9xEmmh1XMSIhBOWs61EopAL15s,7719
18
+ typed_ffmpeg/common/serialize.py,sha256=ECgnown2I6BpKK2xYxYKzBUE4tnWxDEyUiSvsymoG1I,7719
15
19
  typed_ffmpeg/compile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
20
  typed_ffmpeg/compile/compile_cli.py,sha256=FyFcFN2qgpi57M3fERzXlSdEs4Z7XwD0zKicXbl7_4M,32980
17
21
  typed_ffmpeg/compile/compile_json.py,sha256=YCiTyfAnUVSbFr7BiQpmJYs13K5sa-xo77Iih33mb6I,992
@@ -20,40 +24,40 @@ typed_ffmpeg/compile/context.py,sha256=macQ3HhEJ73j_WbWYtU9GCQCzcB_KQGAPimcuU-WO
20
24
  typed_ffmpeg/compile/validate.py,sha256=QsWksdvlRwWw6hnatFo-ABakms1qDXRbEmvMQGRLrD8,9579
21
25
  typed_ffmpeg/dag/__init__.py,sha256=qAApSNqjbZ1DtUaV5bSku9RwG7MpMPa1HJO764cSBt4,849
22
26
  typed_ffmpeg/dag/factory.py,sha256=2IMVKP_2UaTrlGXBg8YDx5KXBqhpScJiJQ87PRrppzY,3147
23
- typed_ffmpeg/dag/nodes.py,sha256=lfHChT8JqRs3UUDWtgrWnnXn845HXSD5S1QmHpIUT4U,20526
24
- typed_ffmpeg/dag/schema.py,sha256=xsVT46XgT3Usgb4N9OWdjP74MG9dBrXgZGbjsYhsUEM,5916
27
+ typed_ffmpeg/dag/nodes.py,sha256=TEBlG2299_sTjvt0eTbsULK6Ln8ndo1Z38ftNYUC5Lc,20526
28
+ typed_ffmpeg/dag/schema.py,sha256=ZIW2RTdSa484akezWnREEZC5FgdTZHvVLYC-Vl6-dF8,5916
25
29
  typed_ffmpeg/dag/utils.py,sha256=hydh7_kjpOCw8WEGhXMxIXR4Ek-3DeoOt6esInuK2Xw,1941
26
30
  typed_ffmpeg/dag/global_runnable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- typed_ffmpeg/dag/global_runnable/global_args.py,sha256=ehLtx4v-XxqkmODhpE_gik0r79hs4Sa8TJnRsH9Fj1o,8043
31
+ typed_ffmpeg/dag/global_runnable/global_args.py,sha256=PINtqw5QNDcZ9OC4w0frt-fWV8Yg6_We6w68dnXia94,7801
28
32
  typed_ffmpeg/dag/global_runnable/runnable.py,sha256=0QGBm3ghM4LFT4H9km9-h_N0w5BR3kTaESRapb-qTv0,11098
29
33
  typed_ffmpeg/dag/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- typed_ffmpeg/dag/io/_input.py,sha256=KRLTSQPEfmgPcPEAJdeWRHZhNsClaJCB9Ac6czMOrmE,7214
31
- typed_ffmpeg/dag/io/_output.py,sha256=_no6ffAOABznbLNTki8CYr7pvr4Sa0LweRfn38-cszs,12470
32
- typed_ffmpeg/dag/io/output_args.py,sha256=SThIhZh9PXs2m6Fz5JsSy8oS-Te7GM_oz7HRuZo0-eI,13901
34
+ typed_ffmpeg/dag/io/_input.py,sha256=AHUtauMh31pCz6YSVa3WFJ-lEHqf44P8cvlWOSwic3Y,7607
35
+ typed_ffmpeg/dag/io/_output.py,sha256=PkluhHrXGF7GhqhQ3Pn6LknWi_Bk0PuC3f8JApXakGw,13027
36
+ typed_ffmpeg/dag/io/output_args.py,sha256=_MkoX6pRsECCkvLndrERq7674YDWlhOzAvUifVJZegE,14543
33
37
  typed_ffmpeg/ffprobe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
38
  typed_ffmpeg/ffprobe/parse.py,sha256=fq1cGFkUpUdvyVi3S-TAQ7qn-tXUdae6ADhymZt7-t4,3791
35
39
  typed_ffmpeg/ffprobe/probe.py,sha256=D_opsKp3OgT2HSBzhxgY1b9SIqXpDhz3xh_k9HUGux0,10367
36
40
  typed_ffmpeg/ffprobe/schema.py,sha256=PBgBWYGO8wKnI0Lae9oCJ1Nprhv2ciPkdLrumzPVllY,13631
37
41
  typed_ffmpeg/ffprobe/xml2json.py,sha256=1TSuxR7SYc-M_-JmE-1khHGbXCapgW0Oap9kzL0nwNg,2455
38
42
  typed_ffmpeg/streams/__init__.py,sha256=32kiqBVigKH2EqS3cA6EfXCW8KpVdQNWSStAmQ0MktM,196
39
- typed_ffmpeg/streams/audio.py,sha256=2oNRhb5UetWtlPG3NW73AjUZoFPl303yMv-6W1sGWt0,259054
43
+ typed_ffmpeg/streams/audio.py,sha256=_40HQ4B1Hc5VLzkq1oNdjgY4uuDZXjaRmMmE-0EZCkc,274665
40
44
  typed_ffmpeg/streams/av.py,sha256=qrsO692BG6OVMWVwIeuCKPntBGTR685lc2ULbGPTSkQ,2594
41
45
  typed_ffmpeg/streams/channel_layout.py,sha256=hGagaoc1tnWS8K1yiITp4f_92qq5e7C_zB15bHOL0DI,1162
42
46
  typed_ffmpeg/streams/subtitle.py,sha256=zhbRKUYH0C972Hurm4hK_dqLvT4Y6v_VNZFzQrkCm9A,141
43
- typed_ffmpeg/streams/video.py,sha256=cQwHfew75YO_dbZjmpUYd-nXt1JHN0M7suFKKe5UH5s,453576
47
+ typed_ffmpeg/streams/video.py,sha256=_dPV_ZzXyNgu5MFr5W727t-SSbZo-gN3_w6OTELIouE,508354
44
48
  typed_ffmpeg/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
49
  typed_ffmpeg/utils/escaping.py,sha256=m6CTEBwWZTFdtZHTHW-3pQCgkpdZb9f9ynoO-gsD7uM,2937
46
- typed_ffmpeg/utils/forzendict.py,sha256=9QWdPQA2AbSfiC9-mrq1YeZFl1qN--zw8WlsqQ2ulCk,3114
47
- typed_ffmpeg/utils/run.py,sha256=mSoAdcvD-InldqkRgWNc8iXKgJJoEMAOE4PL2gVmtqw,2178
50
+ typed_ffmpeg/utils/frozendict.py,sha256=oRlG0hQWIHhnYCrMeGQ6JE37yge_dB1gY3lDdoiJ0hw,4569
51
+ typed_ffmpeg/utils/run.py,sha256=R3WSxEUdY-QmJnHT03VrvdUVQDyyI1QEiMw6Nz8AH1s,2178
48
52
  typed_ffmpeg/utils/snapshot.py,sha256=SHdfM1OXxR0cReNs4snDdAASjW45unz2KjF_6jMwq7c,2180
49
53
  typed_ffmpeg/utils/typing.py,sha256=DBQn_gCF8C_DTwsfMHeCgfnNUROwAjlIcHrQ7lNDOoE,1187
50
54
  typed_ffmpeg/utils/view.py,sha256=jiCKJnx-KVJh-uvhkADBQNlWH1uHPqyYgmSZ_iSEj0c,3484
51
55
  typed_ffmpeg/utils/lazy_eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
56
  typed_ffmpeg/utils/lazy_eval/operator.py,sha256=QWybd-UH3VdDa8kgWkqAMi3WV0b0WF1d1JixQr6is2E,4136
53
57
  typed_ffmpeg/utils/lazy_eval/schema.py,sha256=WSg-E3MS3itN1AT6Dq4Z9btnRHEReuN3o6zruXou7h4,9623
54
- typed_ffmpeg_compatible-3.3.1.dist-info/licenses/LICENSE,sha256=8Aaya5i_09Cou2i3QMxTwz6uHGzi_fGA4uhkco07-A4,1066
55
- typed_ffmpeg_compatible-3.3.1.dist-info/METADATA,sha256=5ZtyLl8XCPa1W-B6XCCjyosTQMJotk5LWqy1WiixwYg,8385
56
- typed_ffmpeg_compatible-3.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
57
- typed_ffmpeg_compatible-3.3.1.dist-info/entry_points.txt,sha256=kUQvZ27paV-07qtkIFV-emKsYtjFOTw9kknBRSXPs04,45
58
- typed_ffmpeg_compatible-3.3.1.dist-info/top_level.txt,sha256=vuASJGVRQiNmhWY1pt0RXESWSNkknWXqWLIRAU7H_L4,13
59
- typed_ffmpeg_compatible-3.3.1.dist-info/RECORD,,
58
+ typed_ffmpeg_compatible-3.4.dist-info/licenses/LICENSE,sha256=8Aaya5i_09Cou2i3QMxTwz6uHGzi_fGA4uhkco07-A4,1066
59
+ typed_ffmpeg_compatible-3.4.dist-info/METADATA,sha256=3LLsFUWShSTQBmwmJILuByrK3GwjDTk95jq_Vo5lAr4,8383
60
+ typed_ffmpeg_compatible-3.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
61
+ typed_ffmpeg_compatible-3.4.dist-info/entry_points.txt,sha256=kUQvZ27paV-07qtkIFV-emKsYtjFOTw9kknBRSXPs04,45
62
+ typed_ffmpeg_compatible-3.4.dist-info/top_level.txt,sha256=vuASJGVRQiNmhWY1pt0RXESWSNkknWXqWLIRAU7H_L4,13
63
+ typed_ffmpeg_compatible-3.4.dist-info/RECORD,,