diff --git a/protovalidate/internal/rules.py b/protovalidate/internal/rules.py index ba09994a..c1c09abb 100644 --- a/protovalidate/internal/rules.py +++ b/protovalidate/internal/rules.py @@ -15,13 +15,13 @@ import dataclasses import datetime import typing -from collections.abc import Callable +from collections.abc import Callable, Container, Iterable, Mapping import celpy from celpy import celtypes -from google.protobuf import any_pb2, descriptor, message, message_factory +from google.protobuf import any_pb2, descriptor, duration_pb2, message, message_factory -from buf.validate import validate_pb2 # type: ignore +from buf.validate import validate_pb2 from protovalidate.config import Config from protovalidate.internal.cel_field_presence import InterpretedRunner, in_has @@ -30,14 +30,14 @@ class CompilationError(Exception): pass -def make_duration(msg: message.Message) -> celtypes.DurationType: +def make_duration(msg: duration_pb2.Duration) -> celtypes.DurationType: return celtypes.DurationType( - seconds=msg.seconds, # type: ignore - nanos=msg.nanos, # type: ignore + seconds=msg.seconds, + nanos=msg.nanos, ) -def make_timestamp(msg: message.Message) -> celtypes.TimestampType: +def make_timestamp(msg: duration_pb2.Duration) -> celtypes.TimestampType: return celtypes.TimestampType(1970, 1, 1) + make_duration(msg) @@ -62,7 +62,6 @@ def unwrap(msg: message.Message) -> celtypes.Value: class MessageType(celtypes.MapType): msg: message.Message - desc: descriptor.Descriptor def __init__(self, msg: message.Message): super().__init__() @@ -163,7 +162,7 @@ def _field_value_to_cel(val: typing.Any, field: descriptor.FieldDescriptor) -> c def _is_empty_field(msg: message.Message, field: descriptor.FieldDescriptor) -> bool: - if field.has_presence: # type: ignore[attr-defined] + if field.has_presence: return not _proto_message_has_field(msg, field) if field.label == descriptor.FieldDescriptor.LABEL_REPEATED: return len(_proto_message_get_field(msg, field)) == 0 @@ -176,14 +175,11 @@ def _repeated_field_to_cel(msg: message.Message, field: descriptor.FieldDescript return _repeated_field_value_to_cel(_proto_message_get_field(msg, field), field) -def _repeated_field_value_to_cel(val: typing.Any, field: descriptor.FieldDescriptor) -> celtypes.Value: - result = celtypes.ListType() - for item in val: - result.append(_scalar_field_value_to_cel(item, field)) - return result +def _repeated_field_value_to_cel(val: Iterable, field: descriptor.FieldDescriptor) -> celtypes.Value: + return celtypes.ListType(_scalar_field_value_to_cel(item, field) for item in val) -def _map_field_value_to_cel(mapping: typing.Any, field: descriptor.FieldDescriptor) -> celtypes.Value: +def _map_field_value_to_cel(mapping: Mapping, field: descriptor.FieldDescriptor) -> celtypes.Value: result = celtypes.MapType() key_field = field.message_type.fields[0] val_field = field.message_type.fields[1] @@ -269,6 +265,7 @@ class RuleContext: """The state associated with a single rule evaluation.""" _cfg: Config + _violations: list[Violation] def __init__(self, *, config: Config, violations: typing.Optional[list[Violation]] = None): self._cfg = config @@ -305,7 +302,7 @@ def done(self) -> bool: def has_errors(self) -> bool: return len(self._violations) > 0 - def sub_context(self): + def sub_context(self) -> "RuleContext": return RuleContext(config=self._cfg) @@ -545,19 +542,17 @@ def __init__( type_case = field_level.WhichOneof("type") super().__init__(None if type_case is None else getattr(field_level, type_case)) self._field = field - self._ignore_empty = field_level.ignore in (validate_pb2.IGNORE_IF_ZERO_VALUE,) or ( - field.has_presence # type: ignore[attr-defined] - and not for_items + self._ignore_empty = field_level.ignore == validate_pb2.IGNORE_IF_ZERO_VALUE or ( + field.has_presence and not for_items ) self._required = field_level.required - type_case = field_level.WhichOneof("type") if type_case is not None: rules: message.Message = getattr(field_level, type_case) # For each set field in the message, look for the private rule # extension. for list_field, _ in rules.ListFields(): - if validate_pb2.predefined in list_field.GetOptions().Extensions: - for cel in list_field.GetOptions().Extensions[validate_pb2.predefined].cel: + if validate_pb2.predefined in list_field.GetOptions().Extensions: # type: ignore + for cel in list_field.GetOptions().Extensions[validate_pb2.predefined].cel: # type: ignore self.add_rule( env, funcs, @@ -646,25 +641,20 @@ def __init__( field_level: validate_pb2.FieldRules, ): super().__init__(env, funcs, field, field_level) - self._in = [] - if getattr(field_level.any, "in"): - self._in = getattr(field_level.any, "in") - self._not_in = [] - if field_level.any.not_in: - self._not_in = field_level.any.not_in + self._in = getattr(field_level.any, "in") or [] + self._not_in: Container[str] = field_level.any.not_in or [] def _validate_value(self, ctx: RuleContext, value: any_pb2.Any, *, for_key: bool = False): - if len(self._in) > 0: - if value.type_url not in self._in: - ctx.add( - Violation( - rule=AnyRules._in_rule_path, - rule_value=self._in, - rule_id="any.in", - message="type URL must be in the allow list", - for_key=for_key, - ) + if len(self._in) > 0 and value.type_url not in self._in: + ctx.add( + Violation( + rule=AnyRules._in_rule_path, + rule_value=self._in, + rule_id="any.in", + message="type URL must be in the allow list", + for_key=for_key, ) + ) if value.type_url in self._not_in: ctx.add( Violation( @@ -710,22 +700,20 @@ def validate(self, ctx: RuleContext, message: message.Message): super().validate(ctx, message) if ctx.done: return - if self._defined_only: - value = getattr(message, self._field.name) - if value not in self._field.enum_type.values_by_number: - ctx.add( - Violation( - field=validate_pb2.FieldPath( - elements=[ - _field_to_element(self._field), - ], - ), - rule=EnumRules._defined_only_rule_path, - rule_value=self._defined_only, - rule_id="enum.defined_only", - message="value must be one of the defined enum values", + if self._defined_only and getattr(message, self._field.name) not in self._field.enum_type.values_by_number: + ctx.add( + Violation( + field=validate_pb2.FieldPath( + elements=[ + _field_to_element(self._field), + ], ), - ) + rule=EnumRules._defined_only_rule_path, + rule_value=self._defined_only, + rule_id="enum.defined_only", + message="value must be one of the defined enum values", + ), + ) class RepeatedRules(FieldRules): @@ -875,7 +863,7 @@ def __init__(self, funcs: dict[str, celpy.CELFunction]): self._funcs = funcs self._cache = {} - def get(self, descriptor: descriptor.Descriptor) -> list[Rules]: + def get(self, descriptor) -> list[Rules]: if descriptor not in self._cache: try: self._cache[descriptor] = self._new_rules(descriptor) @@ -1042,8 +1030,8 @@ def _new_rules(self, desc: descriptor.Descriptor) -> list[Rules]: result: list[Rules] = [] rule: typing.Optional[Rules] = None all_msg_oneof_fields = set() - if validate_pb2.message in desc.GetOptions().Extensions: - message_level = desc.GetOptions().Extensions[validate_pb2.message] + if desc.GetOptions().HasExtension(validate_pb2.message): # type: ignore + message_level = desc.GetOptions().Extensions[validate_pb2.message] # type: ignore for oneof in message_level.oneof: all_msg_oneof_fields.update(oneof.fields) if rule := self._new_message_rule(message_level, desc): @@ -1094,8 +1082,8 @@ def __init__( def validate(self, ctx: RuleContext, message: message.Message): if not message.HasField(self._field.name): return - rules = self._factory.get(self._field.message_type) - if rules is None: + rules: list[Rules] = self._factory.get(self._field.message_type) + if not rules: return val = getattr(message, self._field.name) sub_ctx = ctx.sub_context() @@ -1124,8 +1112,8 @@ def validate(self, ctx: RuleContext, message: message.Message): val = getattr(message, self._field.name) if not val: return - rules = self._factory.get(self._value_field.message_type) - if rules is None: + rules: list[Rules] = self._factory.get(self._value_field.message_type) + if not rules: return for k, v in val.items(): sub_ctx = ctx.sub_context() @@ -1151,8 +1139,8 @@ def validate(self, ctx: RuleContext, message: message.Message): val = getattr(message, self._field.name) if not val: return - rules = self._factory.get(self._field.message_type) - if rules is None: + rules: list[Rules] = self._factory.get(self._field.message_type) + if not rules: return for idx, item in enumerate(val): sub_ctx = ctx.sub_context() diff --git a/protovalidate/validator.py b/protovalidate/validator.py index 11a22c6d..2215997d 100644 --- a/protovalidate/validator.py +++ b/protovalidate/validator.py @@ -16,7 +16,7 @@ from google.protobuf import message -from buf.validate import validate_pb2 # type: ignore +from buf.validate import validate_pb2 from protovalidate.config import Config from protovalidate.internal import extra_func from protovalidate.internal import rules as _rules @@ -38,7 +38,7 @@ class Validator: _factory: _rules.RuleFactory _cfg: Config - def __init__(self, config=None): + def __init__(self, config: typing.Optional[Config] = None): self._cfg = config if config is not None else Config() funcs = extra_func.make_extra_funcs() self._factory = _rules.RuleFactory(funcs) @@ -92,9 +92,9 @@ def collect_violations( break for violation in ctx.violations: if violation.proto.HasField("field"): - violation.proto.field.elements.reverse() + violation.proto.field.elements.reverse() # type: ignore if violation.proto.HasField("rule"): - violation.proto.rule.elements.reverse() + violation.proto.rule.elements.reverse() # type: ignore return ctx.violations diff --git a/pyproject.toml b/pyproject.toml index b8c430e2..e7dd82c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ dev = [ "google-re2-stubs>=0.1.1", "mypy>=1.17.1", "ruff>=0.12.0", - "types-protobuf>=5", + "types-protobuf>=5.29.1.20250315", ] [tool.hatch.version] @@ -106,3 +106,9 @@ ban-relative-imports = "all" [tool.ruff.lint.per-file-ignores] # Tests can use magic values, assertions, and relative imports. "tests/**/*" = ["PLR2004", "S101", "TID252"] + +[tool.mypy] +mypy_path = "gen" + +[tool.ty.environment] +extra-paths = ["gen"] diff --git a/uv.lock b/uv.lock index a0468445..a5020b96 100644 --- a/uv.lock +++ b/uv.lock @@ -26,113 +26,63 @@ wheels = [ [[package]] name = "google-re2" -version = "1.1.20250722" +version = "1.1.20250805" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/28/3d/254eb1651da04fb38b28558510072f06ba4992ea6cb080e75d2d8ee2f3ff/google_re2-1.1.20250722.tar.gz", hash = "sha256:5e2a464df75dbcef9fe0daf18a78f73c3f0a51b81cdb865460a0579b226f2ef3", size = 11698, upload-time = "2025-07-28T15:40:52.271Z" } +sdist = { url = "https://files.pythonhosted.org/packages/93/ed/7caa25b34a201ef8db5a635e03ca71c926caff92aba1b17e86b78190de43/google_re2-1.1.20250805.tar.gz", hash = "sha256:c55d9f7c92a814eb53918a7b38e5ba5eaa1c99548321acb826da9532781af5b5", size = 11698, upload-time = "2025-08-05T19:30:24.345Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/a5/48f716cede7de0223dc9ba937e97b69324cf03d0cbc909aaafb48a42be34/google_re2-1.1.20250722-1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:c37147bf584605f1445a9fe6965708e801d81529b0f704d562c7e12d08ed1340", size = 459207, upload-time = "2025-07-28T15:39:43.052Z" }, - { url = "https://files.pythonhosted.org/packages/81/ba/4659aa20a08cea158af5adbf8c6f5dddca5b5d33568cfac3aa39b8565047/google_re2-1.1.20250722-1-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:74e33250977a1b74c3c6048b4e0bb9a7c82fa4b26b5bcaf714b79831cf28714c", size = 487141, upload-time = "2025-07-28T15:39:44.644Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d0/51a1c6edc555926b683baff1f997809a424e6663c02e4d0a4e9e3aa7665a/google_re2-1.1.20250722-1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:31c5ca2a8bed6e036744afb72af3936e8c3141aa632e2946fd126a728d5e64e6", size = 459959, upload-time = "2025-07-28T15:39:47.492Z" }, - { url = "https://files.pythonhosted.org/packages/93/c9/50203881f649a75c6266e865f986b8ebbd58dcac0593d1073c5dd14dc75e/google_re2-1.1.20250722-1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:be7bab182e3f0509e2b4d89cb0c61ad1cd7b35eaf016e606b8ef9bb54f5ec39e", size = 487971, upload-time = "2025-07-28T15:39:49.082Z" }, - { url = "https://files.pythonhosted.org/packages/f0/07/5489e6b170da78c9b65730a84aafe130f458c577196e9e4780d2dd13dc73/google_re2-1.1.20250722-1-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:918d69b0e285893f39d51a5b18d6eba2f3d130b03a1f3d4c9502d01e5580df6d", size = 460765, upload-time = "2025-07-28T15:39:50.263Z" }, - { url = "https://files.pythonhosted.org/packages/0e/6c/75e48ae2924db4e480c8d1432db51630bc39dd82c764f3ec0219de452b04/google_re2-1.1.20250722-1-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:51ec67b6c4ab2f9937cd6c7bbf7f8002984a63343ad3efde6adbc17ce6677ff0", size = 484453, upload-time = "2025-07-28T15:39:51.647Z" }, - { url = "https://files.pythonhosted.org/packages/05/b2/dd998249c667bdf3af853df974b2987956971e4c580b6a7db6fcc457bcf3/google_re2-1.1.20250722-1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92f78394d18ab06a63cf1c22f650fe42e751588fcd8733029f40ba8789cf7920", size = 551401, upload-time = "2025-07-28T15:39:53.286Z" }, - { url = "https://files.pythonhosted.org/packages/a0/51/e4877b8c789319d5ac2dc2e756f8f1334654b546a7a1193b99f089ce9c05/google_re2-1.1.20250722-1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3266965761d25ea4d037aedf54710d6f0ca28fc63c2b2b9270d0b786a91a486f", size = 565722, upload-time = "2025-07-28T15:39:54.501Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1c/0e7bccf2210ea4a1dea445af27924f46b32873cc30473a7f6bc52b56b0a9/google_re2-1.1.20250722-1-cp310-cp310-win32.whl", hash = "sha256:750ebea85a7006d580d69ca6a5629d745e49bc816183317cc7993a578076c84b", size = 427781, upload-time = "2025-07-28T15:39:55.826Z" }, - { url = "https://files.pythonhosted.org/packages/87/84/2ed1b51f7d61d09cb00dd806f69a0f1f43621b804fa55b385b6dc1733c73/google_re2-1.1.20250722-1-cp310-cp310-win_amd64.whl", hash = "sha256:34572a8e2a54af45abe853db9590018e69ac29d7fb0cf4496542e386a40f0606", size = 485273, upload-time = "2025-07-28T15:39:57.136Z" }, - { url = "https://files.pythonhosted.org/packages/0f/a1/817218049238970605e41a627daa01942c1a16fb32cc71aaf141c04b3b75/google_re2-1.1.20250722-1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:91650927b1062c703699bbac97906f366e2a6cf2f45ced505fe16b2cf53e012e", size = 460038, upload-time = "2025-07-28T15:39:58.332Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0f/ce0147f9d6c43efcac395fac9dcd0413cd13e12b02075312c778f7c9c76e/google_re2-1.1.20250722-1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:919b0f1064509002024b1510845d8d50442d51428f564d09fffaab46802b2f19", size = 488265, upload-time = "2025-07-28T15:39:59.765Z" }, - { url = "https://files.pythonhosted.org/packages/46/54/5b2d23ede4509deddec0894fb57d56334b79dd34215823aaf9d70a2d23c1/google_re2-1.1.20250722-1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7bf0658f628b7f24fb4f5754c3688128bb4a650576abc7f3c6b18688692ab40f", size = 461440, upload-time = "2025-07-28T15:40:01.001Z" }, - { url = "https://files.pythonhosted.org/packages/cc/34/0e31db1a790be0f351972925f0546644c0debf045c9810a8aa5c82b62ec6/google_re2-1.1.20250722-1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f7eedc88377ddfa145a58f2fd3441df106916f42d1e8c437c10d94dcfb1591fe", size = 489723, upload-time = "2025-07-28T15:40:02.361Z" }, - { url = "https://files.pythonhosted.org/packages/f8/c7/fe6bcd3b1eb9f07d801f64fa69e581a52d2ab82da5feaecf772a92dd4799/google_re2-1.1.20250722-1-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:03761cb3b18144051cffec0e62424d98aaffbbb0c6f14c626b8645757fb6b75e", size = 462024, upload-time = "2025-07-28T15:40:04.074Z" }, - { url = "https://files.pythonhosted.org/packages/16/0a/30aa60d5a795167c7c710dc50bf70b2c67d3de1c37c99f70ff26ca089662/google_re2-1.1.20250722-1-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:bdad8093c371540a87a82f9b75ce268ff5878fd7fd90c058c1e13d498fa109c4", size = 485394, upload-time = "2025-07-28T15:40:05.632Z" }, - { url = "https://files.pythonhosted.org/packages/92/6d/84008e814a59e3cfec2dbb2186de7d90563f16e448328d8893d51a04de90/google_re2-1.1.20250722-1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9b2a9ea4a2bdeb4cb03283f513974bbae2db72fbf983a60100c0300e9f23c3a", size = 552039, upload-time = "2025-07-28T15:40:07.284Z" }, - { url = "https://files.pythonhosted.org/packages/74/a0/8277488e4f8575f3a271804611935d4b70083483a18aa62a344e3a7686cf/google_re2-1.1.20250722-1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:121b6a60e57d3d74a69eb514220d2f882fe28b5e83e53cda6e9c54b456fb4b66", size = 566652, upload-time = "2025-07-28T15:40:08.567Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c1/8e897f16640e1615b0b969d5a9e103b189974203233897648e855d4a9fb3/google_re2-1.1.20250722-1-cp311-cp311-win32.whl", hash = "sha256:1e99ae727729388897a561d190cf26802fbfce8d00366281f225a7e9ba363714", size = 428987, upload-time = "2025-07-28T15:40:10.018Z" }, - { url = "https://files.pythonhosted.org/packages/ea/ba/6729a76b7409ad6e862d6f9bab35c3dbd26684265fa6d90af11914087ab4/google_re2-1.1.20250722-1-cp311-cp311-win_amd64.whl", hash = "sha256:84ced13526d25350ebbad85a26945d374b35757c22e519de939d0d2fe6750f63", size = 486208, upload-time = "2025-07-28T15:40:11.294Z" }, - { url = "https://files.pythonhosted.org/packages/9e/13/b9d07a68ac323f02ac96865df5a7f587e8ff7d08ea4143a944ead674f5d7/google_re2-1.1.20250722-1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:52797f960c25086a29ea909e7d8e83a7812489ae179b174014b28701295687e4", size = 461397, upload-time = "2025-07-28T15:40:12.67Z" }, - { url = "https://files.pythonhosted.org/packages/7c/1b/0abbf1765186b04d9907042ec2ee6a3b16b85069f96084c5fad7813848e8/google_re2-1.1.20250722-1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:81409451f8e2a6cdac3e016ae7cb5d618098da3446150a01ade7945dec4feae5", size = 491271, upload-time = "2025-07-28T15:40:14.236Z" }, - { url = "https://files.pythonhosted.org/packages/ec/05/c8b01adc8bbb6d79f6485859a88d961dd1081e610aad389fc3e574331884/google_re2-1.1.20250722-1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:d31db243dc595af0773cd983b2ea49e1dd34bd5e6daf6d1f89eeed76a154c2d4", size = 463134, upload-time = "2025-07-28T15:40:15.409Z" }, - { url = "https://files.pythonhosted.org/packages/b7/38/1da5d111352f1e775d45280e3fe187e5220a53a1bc4288ec08570601d176/google_re2-1.1.20250722-1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:32574106eb821a719fd64bf26f291bcc19cd4c874b9bd32594f4c3d1be081cec", size = 492806, upload-time = "2025-07-28T15:40:16.619Z" }, - { url = "https://files.pythonhosted.org/packages/05/a3/ebcab973b4e767304ad20571ebb36e1769435d9cfaaaa1d5439ad2507667/google_re2-1.1.20250722-1-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:5bc328a1c9cd22e325839044f404ff2649ec05fc825a060b2511bd7162627a2f", size = 463116, upload-time = "2025-07-28T15:40:17.915Z" }, - { url = "https://files.pythonhosted.org/packages/3a/14/940907ed7d9cab14368b8cfaffb6b489e0c39d7f4510b13cd71badba5c89/google_re2-1.1.20250722-1-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:7f9ddd67a78a59e5e29592c9e2d19608146b5107a3446b922976aaa1d1001889", size = 487411, upload-time = "2025-07-28T15:40:19.128Z" }, - { url = "https://files.pythonhosted.org/packages/c1/64/112965b786c55497c0fe73849673f8fb953086f2319dad9a78c6422ee429/google_re2-1.1.20250722-1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4fc2f670b97695458e69f64e830ff9f7ba2383825e40f111c1e8d7225fadbc3", size = 550383, upload-time = "2025-07-28T15:40:20.715Z" }, - { url = "https://files.pythonhosted.org/packages/83/82/c95b7bb80ffb929429cb5f37d4fbdff5428c87076ff764f6b11737965131/google_re2-1.1.20250722-1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3208a8010902c8994cee12caa0dcef818b3f56e5109ef34ceede24ba909c8990", size = 566667, upload-time = "2025-07-28T15:40:21.958Z" }, - { url = "https://files.pythonhosted.org/packages/42/e3/e9b496bf96232e31422dc65f8f33d55f2dfb492de81eed575368e5332223/google_re2-1.1.20250722-1-cp312-cp312-win32.whl", hash = "sha256:40f10ec0e686b7b313cbbb45ac4fb404a5d262d7ebe50ff5ad3d000e8d4fb253", size = 429065, upload-time = "2025-07-28T15:40:23.381Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fd/062cef7714eed6a7790639e00b7ed20aa837e10dd3878120e2cce3932325/google_re2-1.1.20250722-1-cp312-cp312-win_amd64.whl", hash = "sha256:225b3f8712280cac1c307d9d0b3cf4323b20962cb3b2f57bf37db3e4f1e09067", size = 486635, upload-time = "2025-07-28T15:40:24.598Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b5/62966d57169641e608bfb9e592c65ecaa4011572cfdf3491451b5d7fb5ff/google_re2-1.1.20250722-1-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:e318796ed53c743d319d409e166fbc83c3e5f8f19c1c8c30a019a1a5a0790022", size = 461596, upload-time = "2025-07-28T15:40:25.777Z" }, - { url = "https://files.pythonhosted.org/packages/98/bc/2191460356e0fdcf82e27c52d0b3c4c4eb8ca7ea3e1756d96f4c918c5237/google_re2-1.1.20250722-1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:2661eb54dedf4de0bf83e11c3d4526cbe2664a31a22372df1967590a164cd654", size = 491310, upload-time = "2025-07-28T15:40:26.986Z" }, - { url = "https://files.pythonhosted.org/packages/12/a6/84f993126414000945fda38de39ff2155be0204337aa3ecb2200e8e0edfa/google_re2-1.1.20250722-1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:2487b5149786260a70844264c8c646faf382ab92a12ab1acc48669fbaa2f561a", size = 463216, upload-time = "2025-07-28T15:40:28.247Z" }, - { url = "https://files.pythonhosted.org/packages/e1/00/04ef211677595eeda99610c3259c02a73eefc39a8882663c455c4b979d54/google_re2-1.1.20250722-1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:c0327b174519ef76c266090d77359ecce8ac8ca28760b82b24ff825a76fcca8a", size = 492797, upload-time = "2025-07-28T15:40:29.726Z" }, - { url = "https://files.pythonhosted.org/packages/81/81/e1223144e8bbe4e01b5d220199239aea98166456464bfe719f4d008a5666/google_re2-1.1.20250722-1-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:250137a6da01d62262eab6466c6486d2c088a39bac9000edf9e3d11996eba053", size = 463229, upload-time = "2025-07-28T15:40:31.374Z" }, - { url = "https://files.pythonhosted.org/packages/7b/5a/3c25ace76f7d16385fcdd6c46afbfaac3f5b5afcfb142e39fa81db245a6b/google_re2-1.1.20250722-1-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:5fdade52207219b73e9102dfd0d607ee03e09229ceed6b71d350bc106df181a8", size = 487451, upload-time = "2025-07-28T15:40:32.644Z" }, - { url = "https://files.pythonhosted.org/packages/bd/90/291cc45296f0c4599b82eecf04ab78043e40ceb3528fd7eb5f06e8e1d566/google_re2-1.1.20250722-1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c05ab5108713eb0d0fad7cf0a6856a18418625ae3468e62525f0d31914b3137c", size = 550492, upload-time = "2025-07-28T15:40:33.906Z" }, - { url = "https://files.pythonhosted.org/packages/45/98/9a88c831f726ca9ed157c2934722111426f0578cb54d49467112d2c0afde/google_re2-1.1.20250722-1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:282346724a98c04543ca13e2210f06d7e613933fe1475c2e9b577c2133587861", size = 566806, upload-time = "2025-07-28T15:40:35.132Z" }, - { url = "https://files.pythonhosted.org/packages/b9/43/77598154e34e6d992cb81d004510473265b440a1bc30148f7a79e5ae86a8/google_re2-1.1.20250722-1-cp313-cp313-win32.whl", hash = "sha256:3961c05530981daae19a7452724fe6de93448dbc7fdbafb36f017bd8d5b3a482", size = 429049, upload-time = "2025-07-28T15:40:36.342Z" }, - { url = "https://files.pythonhosted.org/packages/37/6d/d2cfcdabad0207b0f9ff813214518a15f573426e064b90ddcb75d77e9f50/google_re2-1.1.20250722-1-cp313-cp313-win_amd64.whl", hash = "sha256:879f1439e514b461b525f971afb6bee9a37743267f52a6ac60e1bbc26827a45d", size = 486706, upload-time = "2025-07-28T15:40:37.544Z" }, - { url = "https://files.pythonhosted.org/packages/d0/3e/d0df4fe9d6acb89d6a67fbaa71eac04fe4081c443046b8affc3cac237d0d/google_re2-1.1.20250722-1-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:4ac3b83ca1c7d54fadefd094dbcbcda7e78e4eae52f402dec2abc11128a5d452", size = 459223, upload-time = "2025-07-28T15:40:38.925Z" }, - { url = "https://files.pythonhosted.org/packages/44/b7/e4dfa4b691e03ae5656a515e899a4d9c7782857e3290dd2cb7d890e20641/google_re2-1.1.20250722-1-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:7f424835dbb89aab4b3d5b5df9d9134800e21aa5732d1a80a01317fcc421f7d3", size = 487197, upload-time = "2025-07-28T15:40:40.182Z" }, - { url = "https://files.pythonhosted.org/packages/2b/24/2f90ba0a265d11aac36d0c2a166a944de4ecd93e8585c89c3679daaf379d/google_re2-1.1.20250722-1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:552e0cd71f8902b8fb6ad72f8b63d77cb8caad6b65e25a836c9f676053b8a396", size = 460012, upload-time = "2025-07-28T15:40:41.411Z" }, - { url = "https://files.pythonhosted.org/packages/e3/05/5affc3617ed57eaba49cd8f314907341fc47db0e570d05349afcae5df46d/google_re2-1.1.20250722-1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:9447d321a9697c3084f7bf8d468b9549e53eb0dc15bd1e578a252e440e32c2fd", size = 488040, upload-time = "2025-07-28T15:40:42.624Z" }, - { url = "https://files.pythonhosted.org/packages/dc/74/21d429e287a05d88ee94d37e11f31c0caea7bfdb049e57150cccbefdc13b/google_re2-1.1.20250722-1-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:ead8a2557175fb1609e18445c819bb0f31813be08d1162cc61501d26fbbf3c15", size = 460945, upload-time = "2025-07-28T15:40:44.722Z" }, - { url = "https://files.pythonhosted.org/packages/4d/2d/d0ce2f0eebee76942be711d58b4dc54ed96bbd704decf091271e670288db/google_re2-1.1.20250722-1-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:fd71cb2a313bc8f218b71af44de569c062def6781290aeadfb0de75514ff63a3", size = 484530, upload-time = "2025-07-28T15:40:45.957Z" }, - { url = "https://files.pythonhosted.org/packages/1b/18/2982d60e0789b16555aee1a1734fd8e258e592978f51e3604881133e3977/google_re2-1.1.20250722-1-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f3111ebd01c1d88746134a24b7e4370557548cdf232dcad6e362e3b7d45cac", size = 551843, upload-time = "2025-07-28T15:40:47.202Z" }, - { url = "https://files.pythonhosted.org/packages/da/fa/c2db7feb34e7a22399bceadcd92ac5d90a9d718db0753d02a0359c82e35c/google_re2-1.1.20250722-1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c074f1a59b587004f1c929fbc8c5441b1d1ebc5f8a3ff876db972d311f281cfd", size = 565706, upload-time = "2025-07-28T15:40:48.459Z" }, - { url = "https://files.pythonhosted.org/packages/e6/a2/daf610bcddecc0b16c58746d8c5873c4ab0aff7f4a6c632e4ac00869f137/google_re2-1.1.20250722-1-cp39-cp39-win32.whl", hash = "sha256:fd98a1ea4da9cb9245a3cccdf0a8169fbfa1d516ac1bcac87dc49914f57f6a61", size = 428492, upload-time = "2025-07-28T15:40:49.733Z" }, - { url = "https://files.pythonhosted.org/packages/33/0b/d1a79ef5e3c2d37feb7c371ea0df602441200bfcbde667cd18d3813a0389/google_re2-1.1.20250722-1-cp39-cp39-win_amd64.whl", hash = "sha256:8922de94320c698f831525ceadd2d8f24912c4b02621308984d3dd1fcb10f6a0", size = 485734, upload-time = "2025-07-28T15:40:50.897Z" }, - { url = "https://files.pythonhosted.org/packages/5e/87/881a3249dd20c4852c4c5b9c457dd0f4f439e13f21f99c355faff5b4c0d9/google_re2-1.1.20250722-2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:78f5bdd587cf33a85914b6be383ff889d7b04abe2bf7c0d3ce3cd9ee97935954", size = 459207, upload-time = "2025-07-28T18:19:11.216Z" }, - { url = "https://files.pythonhosted.org/packages/39/0c/1987a8d4d7081e920b3bdce0b6f67afac1d02ce85befb1329e57536503ec/google_re2-1.1.20250722-2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:7fc37f5ccef0138b79eef36f06b9955d24e6e70855f1ec3cf9c202ca478284d2", size = 487142, upload-time = "2025-07-28T18:19:13.017Z" }, - { url = "https://files.pythonhosted.org/packages/bc/03/f253fdeccf816aa0a0fbe029a123a6e9260bcf0ef30f1497656853cdddf6/google_re2-1.1.20250722-2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:138ecb65512edd788548b314b2192bd5bdf5d943d5aef1efc53afb507fc1980f", size = 459958, upload-time = "2025-07-28T18:19:16.695Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6b/299c32ee5d7676cd26f6cf6d1af296627454ed023feb376781b4a5b25235/google_re2-1.1.20250722-2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:fcf665531e69e3543e74cc8b27242cb978bf8b442250b7fc2ca5d248387f4418", size = 487971, upload-time = "2025-07-28T18:19:18.016Z" }, - { url = "https://files.pythonhosted.org/packages/e6/f9/e8b699e59a6b82e3adee305ad37c7d1c61008316dca4e38977e85455960c/google_re2-1.1.20250722-2-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:eda4d7db1cf1907cad34f796ccaeaa463c80fefa1a6ecb6857dda7e456e50d9b", size = 460765, upload-time = "2025-07-28T18:19:19.697Z" }, - { url = "https://files.pythonhosted.org/packages/72/99/32b1d2b489bce5764950ededbf85aa6023b00ec5abef725961673dcbbd8c/google_re2-1.1.20250722-2-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:574b7f497b0f14c0003dde7edd5b6024529ac5aab9efd10e17766ecd94c16597", size = 484454, upload-time = "2025-07-28T18:19:21.507Z" }, - { url = "https://files.pythonhosted.org/packages/80/f9/4d8607186d3b87f3e0b4276cae57ab43aaa9d9f89162a9f8742b39ddd7f7/google_re2-1.1.20250722-2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:942e8564e1de4068168d4691acf658527e9bd98af91b917144c88290fa6f4631", size = 551397, upload-time = "2025-07-28T18:19:23.239Z" }, - { url = "https://files.pythonhosted.org/packages/dd/9e/7f289da0eeb1f6e4c07bdab901a690574c81fc38a256d50708142d4186a8/google_re2-1.1.20250722-2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b084131dea3253ac09c29eacc6eda326392da8081505c2e1d38e80d0e0b4e474", size = 565719, upload-time = "2025-07-28T18:19:24.585Z" }, - { url = "https://files.pythonhosted.org/packages/f6/7d/1b2c851a6d9a8bc73414cdd6d7bece57763c95c37c0bc3667e0179e762e7/google_re2-1.1.20250722-2-cp310-cp310-win32.whl", hash = "sha256:97030af2a903e18130229089bcddadf7817279645dd99842d0a967b91f56aba3", size = 427782, upload-time = "2025-07-28T18:19:25.893Z" }, - { url = "https://files.pythonhosted.org/packages/bf/14/caf5deec9ab6d1c8573178ab7f22b9b8d73fd52f908ca9cfc6f402bb651f/google_re2-1.1.20250722-2-cp310-cp310-win_amd64.whl", hash = "sha256:6dce0594f46aa8798e19829d3aa2c8622ccc2d4ce21ad2c7468141b50b78835c", size = 485274, upload-time = "2025-07-28T18:19:27.317Z" }, - { url = "https://files.pythonhosted.org/packages/60/de/df9457ea5138c08dad0c9ed4b49e5ed032543a850762603e54f3886648d5/google_re2-1.1.20250722-2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:d43b3a32e0bb5397ecc5fb158c1a11b7cdf658dfc35ffd7b41032a6f105d3f51", size = 460040, upload-time = "2025-07-28T18:19:28.684Z" }, - { url = "https://files.pythonhosted.org/packages/ab/93/29ddfa354d41cd67e7206dee93013f7da848bc2cd447589493b9952d55bd/google_re2-1.1.20250722-2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:4e96f8ae224e219cd047b6a533e38cd3bba749243788208786747630df3557e5", size = 488266, upload-time = "2025-07-28T18:19:29.993Z" }, - { url = "https://files.pythonhosted.org/packages/d1/54/e98cccd3f147f6ee24905f2527ae0bcbb21dc127a6eb8a8a30095cc6f171/google_re2-1.1.20250722-2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:62b142650dba4df5f6f9546723d0e4464e19e2756ff63d60d249be0089aedcd9", size = 461442, upload-time = "2025-07-28T18:19:31.629Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c5/9ed44fcde1568b6f2cce03f9b5de9afbcfda8385c764a8cc52e6bf6aee9c/google_re2-1.1.20250722-2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:1cc204ea8ac21e52f83f71e693960d3764160d0c4ed29b7ffde6cd6d7b984d50", size = 489723, upload-time = "2025-07-28T18:19:33.452Z" }, - { url = "https://files.pythonhosted.org/packages/35/fe/9d36e7c99bc2e4421803c800a27cf5e26742a0efb825914401eec5d00b26/google_re2-1.1.20250722-2-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:a5fd5eb3f34eb942c6929eda246ec227bed7e50cb906b75b6c2fe26b658e20b9", size = 462022, upload-time = "2025-07-28T18:19:34.848Z" }, - { url = "https://files.pythonhosted.org/packages/b7/e8/1aaf8326c772e3f4ca7d97d599f77e8b054928f2a8113ed298b88f66d85e/google_re2-1.1.20250722-2-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:f49d1ff6f5b526b224a69fdc4f0df82cc806ea031be391d648aa94d6e8afec61", size = 485395, upload-time = "2025-07-28T18:19:36.757Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ea/ec3af787d3947f9ff5e59b3eed7e83b4f822f59f7a3e961e87f809cefa99/google_re2-1.1.20250722-2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bd791db1eadab27f12268594adf649abe0d310d00d51d1e3f9d944578f58c0a", size = 552039, upload-time = "2025-07-28T18:19:38.528Z" }, - { url = "https://files.pythonhosted.org/packages/cf/16/4704f7d3652dc141c3af74f157913a75a3698e59d819ab86de3562cf541b/google_re2-1.1.20250722-2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7edd8d743813e6354b9145dbf32509987e4b6876decae05b5532ee55e89ebf57", size = 566648, upload-time = "2025-07-28T18:19:39.967Z" }, - { url = "https://files.pythonhosted.org/packages/dc/82/2ad3572d4401996da8f2ab22a47f9bd8da3e0d0be1c1d5502b4ac421d04c/google_re2-1.1.20250722-2-cp311-cp311-win32.whl", hash = "sha256:01f8f97693926b10313785b4a069f3850b36cbad184b85a004111869d1e2fbe6", size = 428984, upload-time = "2025-07-28T18:19:41.71Z" }, - { url = "https://files.pythonhosted.org/packages/d3/40/89b4627cdc424dd944636adab7ee96695700a76890ebd407e0c4d0f76727/google_re2-1.1.20250722-2-cp311-cp311-win_amd64.whl", hash = "sha256:720b96d0179dfd6f6c07ad731d30218515436bd6e0ad3e5c506c5433ef30929f", size = 486209, upload-time = "2025-07-28T18:19:43.124Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a9/b0a7f59e5f3b4d0c70f38c7e7ac6bbacc96d085ce2576ea0b1d9f1fc4db6/google_re2-1.1.20250722-2-cp311-cp311-win_arm64.whl", hash = "sha256:cbdcdc9b2765eb80414ed9574f9bcc1f52e8a18ce91c6ad344fc1e80868e89a1", size = 642155, upload-time = "2025-07-28T18:19:45.078Z" }, - { url = "https://files.pythonhosted.org/packages/6f/09/aaaf173eaed1367cd6c285a72c2a660e8f831ea8117330539440506c8795/google_re2-1.1.20250722-2-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:e0bc1bd9b0f31364a48a5c9d2e3ddef31c47b3567b2270b27b6ba56e0aee8405", size = 461397, upload-time = "2025-07-28T18:19:46.909Z" }, - { url = "https://files.pythonhosted.org/packages/68/77/f8dfaed9527dfe9f0515c7f0f9495b319dc42f82049ceb291c655fd555b7/google_re2-1.1.20250722-2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:34a4630810dbdb7022639f4b61c834eb6846eda1601ebf5cb63fa220d30f331d", size = 491271, upload-time = "2025-07-28T18:19:48.33Z" }, - { url = "https://files.pythonhosted.org/packages/38/22/5313c77e3feb055c60b6c21a92432dfbb2fc7043e3a4e7b142a52f753cc9/google_re2-1.1.20250722-2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:728cfbf611706a7dd2cf04fd50e7b84eca630ad7e4daf04cf1101cfdada5db7e", size = 463134, upload-time = "2025-07-28T18:19:51.473Z" }, - { url = "https://files.pythonhosted.org/packages/12/29/0b87d17885990271fa0af6a40b03880701a335a8ace10f6f60cfc7c0c8b3/google_re2-1.1.20250722-2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fb199f86f5538ba8a6ef4540ae2b1fa1e805b457652901b06cb3310a5a6cc357", size = 492806, upload-time = "2025-07-28T18:19:52.905Z" }, - { url = "https://files.pythonhosted.org/packages/62/5f/7d6fef577a97b428ca1b9ecf6060bb800d69ddb4aef636f4d67d139074a2/google_re2-1.1.20250722-2-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:0aee96c2a2785b7ae0c225d52837e898132371adfe9ccda04e7b61dd6f5c2a9a", size = 463117, upload-time = "2025-07-28T18:19:54.253Z" }, - { url = "https://files.pythonhosted.org/packages/42/5f/881b2c2665e33499403d11746122818e5bdee618fc16c4d6c11352146ce2/google_re2-1.1.20250722-2-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:7faaa0910f5df1b29a40395da193756beb630303fc9c39a8488a6a97de395463", size = 487411, upload-time = "2025-07-28T18:19:55.66Z" }, - { url = "https://files.pythonhosted.org/packages/43/2f/2e6e16b0dfe7738ee36c19f84b916299cf0386b3c434269b34e03852d7ff/google_re2-1.1.20250722-2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2703c396ec1bb9bdaa765aefbdb7164f44ae3de5cfb7ea76a40955bcd8305328", size = 550382, upload-time = "2025-07-28T18:19:57.179Z" }, - { url = "https://files.pythonhosted.org/packages/77/96/5cc8849771fc9dec5d2448117c9e827f4b4f2539b6b37afedf567e4ba575/google_re2-1.1.20250722-2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:739c0ac4729a79f22f986606c8a996a6cc1c5ef300ae59ac28cb76f250a5df08", size = 566666, upload-time = "2025-07-28T18:19:59.147Z" }, - { url = "https://files.pythonhosted.org/packages/cd/09/f55d7fde76ccb3fb95f99cb196233c085caece8c5d8f49be55d5baf6ddd4/google_re2-1.1.20250722-2-cp312-cp312-win32.whl", hash = "sha256:1d1a235d77695805e59efe907abe438388f280ea5d31bf0758d5b63cdc1e3c2f", size = 429063, upload-time = "2025-07-28T18:20:00.913Z" }, - { url = "https://files.pythonhosted.org/packages/66/97/a09d75b80f2e28fa4710687905d4531d411b1eff9f0cc4e3ef2faab0fb2e/google_re2-1.1.20250722-2-cp312-cp312-win_amd64.whl", hash = "sha256:e2dc7a81e06fb1caefbd145e54ca6fa0fed05e894b2821a6116c909f196362a9", size = 486638, upload-time = "2025-07-28T18:20:02.254Z" }, - { url = "https://files.pythonhosted.org/packages/da/33/a68c3129ec5a84d1789e0d499af7078797895897feaadc604035937befaa/google_re2-1.1.20250722-2-cp312-cp312-win_arm64.whl", hash = "sha256:836458e4d8f05b9118b2c27a9e66a8f4bcf4f2b2f647d5e7f810efbff11be8ac", size = 642420, upload-time = "2025-07-28T18:20:03.626Z" }, - { url = "https://files.pythonhosted.org/packages/27/d6/e2b14b0a3cee1840b5b30d9d219cbb77adb9b67042761055a3ad24c1ad0c/google_re2-1.1.20250722-2-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:fb1be22193a9e801f8ab0347aa9f9408290fe04c2fa56bd5ff66104667cf1796", size = 461594, upload-time = "2025-07-28T18:20:05.005Z" }, - { url = "https://files.pythonhosted.org/packages/14/70/cac8be15c380d2eea556792b4d594de3e67617cf625b0807121bd174a4b6/google_re2-1.1.20250722-2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:503433f378fe9f7785a68f012bc136fd2e998de749b5f2f3f4a06770177da720", size = 491311, upload-time = "2025-07-28T18:20:06.422Z" }, - { url = "https://files.pythonhosted.org/packages/e9/30/f74c143ac2f939a499702dcf4a7648bdb8f06a7545db4f3e01325b41549a/google_re2-1.1.20250722-2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:48cb29756d47bab8a07ff4e4a8048c9b0dcbabe49e90e87f8c5aa4f090e219a9", size = 463215, upload-time = "2025-07-28T18:20:07.772Z" }, - { url = "https://files.pythonhosted.org/packages/6e/90/52652f9da956aae4f80011bb03194698112d025935484de0f563141428b0/google_re2-1.1.20250722-2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3cc5091fae3554cb52f04ae98bf137c02bd678671f97806e3ef13e8ec52ade99", size = 492798, upload-time = "2025-07-28T18:20:09.18Z" }, - { url = "https://files.pythonhosted.org/packages/70/48/27101caf49aa0cc4ef84bf9dd718269a0f4fab260d95f5dfa53ef6f28caa/google_re2-1.1.20250722-2-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:91dd7f34ed573c7b70fdf940b57d30ba1f87af1440273142b400cba0d898bb3c", size = 463228, upload-time = "2025-07-28T18:20:10.888Z" }, - { url = "https://files.pythonhosted.org/packages/5f/48/e011c0a5f001fa761909fcae404e16db34792f71b8425bf9a4ba4412ea7b/google_re2-1.1.20250722-2-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:c0fc0854f0ede86457ec7d70bc8bb23e7f6ab2fff3358fecca40e00b49927b96", size = 487451, upload-time = "2025-07-28T18:20:12.401Z" }, - { url = "https://files.pythonhosted.org/packages/d5/b3/1322ebaf07fd5738bd62b28259c4ab6046ead169cc5a64b7e94e196df4ff/google_re2-1.1.20250722-2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c7b9d5fd899610062eca570f38b66fd6de6f52031feccd1eb02d0ca6a60982b", size = 550492, upload-time = "2025-07-28T18:20:13.783Z" }, - { url = "https://files.pythonhosted.org/packages/d6/8a/721e41a6d1658ee12c9274fc4bbee02c23894be1bf714c27b67465821a18/google_re2-1.1.20250722-2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3697f258420ef9180e82459d526043078feee20d17642bd7ab09354634b732ed", size = 566804, upload-time = "2025-07-28T18:20:15.191Z" }, - { url = "https://files.pythonhosted.org/packages/cc/ef/64a4ac3c206e419c0eb4ac91eee807097738ad7d59aff10f7e22d2da9abc/google_re2-1.1.20250722-2-cp313-cp313-win32.whl", hash = "sha256:a201a4ca5c96736ae276d4ba8284bcd80d1a091988ea2a9d44ef576ae5e925ab", size = 429049, upload-time = "2025-07-28T18:20:16.534Z" }, - { url = "https://files.pythonhosted.org/packages/05/58/c8ec5a1c070922f0272ca3d7d44853eb5babc37668e25e4f45f0a0e1de1a/google_re2-1.1.20250722-2-cp313-cp313-win_amd64.whl", hash = "sha256:8575ed57522af14c00a6ce616459c934a553cdaa2f6d83312e2dbc2364bf1d03", size = 486707, upload-time = "2025-07-28T18:20:17.881Z" }, - { url = "https://files.pythonhosted.org/packages/e7/5c/c11c47908dbf287e7d26313f7cb766c6f7150ae9844bd718f4a48a4bbdbd/google_re2-1.1.20250722-2-cp313-cp313-win_arm64.whl", hash = "sha256:3d9ec2052befcada22b0941cd5ac6ada18023353c1e146aa5c9c16a3189b3cbf", size = 642451, upload-time = "2025-07-28T18:20:19.605Z" }, - { url = "https://files.pythonhosted.org/packages/2c/da/3d4b0860efc0ade017c197fd69d47a9bad36039e2a6ee54fbba4875da4db/google_re2-1.1.20250722-2-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:0cdc640d98a619937a970fae1115095da8cb5a02b6f763913b4d1df784bd5891", size = 459221, upload-time = "2025-07-28T18:20:21.034Z" }, - { url = "https://files.pythonhosted.org/packages/05/cc/630afe4c2641e69213f303ee715508c7d8e575c756f0214ed7a2e9fd3c29/google_re2-1.1.20250722-2-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:8c34d555f26e80a6aee40f9b3022c7080de2d1600af56a1ffac57db5907216b1", size = 487197, upload-time = "2025-07-28T18:20:22.549Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ec/986e39a414b406da9c2c48517b03c1cab2d3888e51dc83cd1c4bc31eddaa/google_re2-1.1.20250722-2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:78103346dcd05a91dd4ef85e70f5f01ba47c5b34699c5d4d7b4deec39d38fd6f", size = 460012, upload-time = "2025-07-28T18:20:23.956Z" }, - { url = "https://files.pythonhosted.org/packages/fe/02/bd3d4560632dbeec184fc196b5f2a16af7c76c883ea5f8f23d79215c2486/google_re2-1.1.20250722-2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:a3b0b20c4241003fe94e1784a16e9f046d156a5f27049c89287718e0e844d128", size = 488040, upload-time = "2025-07-28T18:20:25.721Z" }, - { url = "https://files.pythonhosted.org/packages/a8/69/b0d940ca732dd2a09656af002bb7602eaef59bfd45d800e3ecce16595d79/google_re2-1.1.20250722-2-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:ecdc0811be0a83ed180e22437d68d08192b65c7bc52988f43bd19e8560e9ebbe", size = 460944, upload-time = "2025-07-28T18:20:27.059Z" }, - { url = "https://files.pythonhosted.org/packages/b8/b5/cd81139f4bad6b91d2add966e5b0f348e25bebcc5bd4b5e09be855a1f244/google_re2-1.1.20250722-2-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:fd6e66ca19a09647887fb2127d6ac5dde33afc0a34c1ea989e86f5102b37d4eb", size = 484534, upload-time = "2025-07-28T18:20:28.521Z" }, - { url = "https://files.pythonhosted.org/packages/ff/50/3c2208c79fea92e9cb68b8a27ff866796b63ef31764904cd9191daa3ccec/google_re2-1.1.20250722-2-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6fdde12541a5be971e4bb32ddeb69131a8998285713e1ee783bdd86e2a08b18", size = 551841, upload-time = "2025-07-28T18:20:29.896Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2e/1babde5bd843c6c64d005926a7a30e90f81cc69e2865cd03b84c899edcad/google_re2-1.1.20250722-2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c76f94685960801eac4ffd52e5d83c3f61cff7ba29c2d81dc7cb8126bafe5341", size = 565704, upload-time = "2025-07-28T18:20:31.358Z" }, - { url = "https://files.pythonhosted.org/packages/30/fd/4e01c8acd4c1799a35b144a96bbb23a3b52a096225507193708540e4e7dd/google_re2-1.1.20250722-2-cp39-cp39-win32.whl", hash = "sha256:2618f8dad592cf02efd6900fd6c539c3acc4ffbd0295d205a3297e8198c093e8", size = 428492, upload-time = "2025-07-28T18:20:32.778Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4e/bb6856475c91961db9bed13982fd6ee6329206e08ba4718da5d7009cb9b6/google_re2-1.1.20250722-2-cp39-cp39-win_amd64.whl", hash = "sha256:dfc3cf4d7dc9445a54e7af88d5bd6e4d24269c83885a1d3325fd56567ce7e59d", size = 485737, upload-time = "2025-07-28T18:20:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/92/9c/e120dc14daa0b6d5e0ddb659e0f132292abf22fad3563c017b73ab549a01/google_re2-1.1.20250805-1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:7d2a7dea1448733184a99516a41f28ffcfc9eda345697a14fd5c6d8144b60841", size = 483036, upload-time = "2025-08-05T19:29:05.84Z" }, + { url = "https://files.pythonhosted.org/packages/b2/b6/981ae8734410617c0cb6d32b059a6833ca980bbe6e65840bc8e68f5697ea/google_re2-1.1.20250805-1-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:51b4e3c5e6f3f74193666295385b44e1043e55cf98e4b933fe11a0d7a2457a67", size = 514139, upload-time = "2025-08-05T19:29:07.721Z" }, + { url = "https://files.pythonhosted.org/packages/73/56/d1c1c729b7e356dd8b8224bf1873d90fa94c350eddce0ef7da775440a552/google_re2-1.1.20250805-1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:0c43d2120ba62e8da4d064dcb5b5c9ac103bfe4cd71a5472055a7f02298b544b", size = 484050, upload-time = "2025-08-05T19:29:09.163Z" }, + { url = "https://files.pythonhosted.org/packages/1d/78/a07b752d7d879f25b6de12f442ebfd57be9acc79857f16c026ba989afad0/google_re2-1.1.20250805-1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:46eb32ca99136e5ff76b33195b37d41342afcc505f4b60309a4159008f80b064", size = 515591, upload-time = "2025-08-05T19:29:10.742Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4a/651971a6ece6a85ff6598bcf801cb0c7ee20a251b9631b7b5d4886642818/google_re2-1.1.20250805-1-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:eaf8b912020ec9bcc1811f64478e2dfb82907e502b718ad4b263045820519595", size = 484613, upload-time = "2025-08-05T19:29:12.348Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ad/8768a99b2b79b14806b7da89f783f6828f540469169066cf3a7bb16cbe44/google_re2-1.1.20250805-1-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:0df2591355131457f9a008b3bd8fbdb104f8344b75d150fd90ddc0bc19b80935", size = 511041, upload-time = "2025-08-05T19:29:13.87Z" }, + { url = "https://files.pythonhosted.org/packages/68/34/997ee9e113398c5ca6ec8bb5c2d210e7931e44b1fbd38024d09dabd2ba9a/google_re2-1.1.20250805-1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb56c6e7c8fe2eaf045b987dbf8dfc979f61a21e6446dd8b3c0e4028f9ff8611", size = 572722, upload-time = "2025-08-05T19:29:15.435Z" }, + { url = "https://files.pythonhosted.org/packages/51/e2/f99887835200a961a957dab4208d00ae344a8906ed9e0bb1ce578aec87a1/google_re2-1.1.20250805-1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7f2124ccc4e06c1841e18360edbc379f050b8dcb54096293e2e6e90b5f913f92", size = 588956, upload-time = "2025-08-05T19:29:16.975Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fc/bd56b2133ce1d6853e4abafa89685860eda725a2fe62c233a30cfe928abb/google_re2-1.1.20250805-1-cp310-cp310-win32.whl", hash = "sha256:0bcf2acdc32a3890ddfca87fa846806b6db200a059a83ab114e6ab390beaf10e", size = 432851, upload-time = "2025-08-05T19:29:18.568Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ac/21473b4de4a829bc9822d810fc1a26c7abdbee76c60a915a8ade0dae6372/google_re2-1.1.20250805-1-cp310-cp310-win_amd64.whl", hash = "sha256:8c6da22b158459e5a592fcd66a9e99347f517284d91d61b6ff2befff3eb79339", size = 490154, upload-time = "2025-08-05T19:29:19.762Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6f/c99a04f13114282362bf73dd1a79e96b92ed80ed47bf1f57744646753e08/google_re2-1.1.20250805-1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:e7f7e960002c702ae2c0aff3b8db895ded37006ac7aa0c158743fb20dcd485c2", size = 483730, upload-time = "2025-08-05T19:29:21.181Z" }, + { url = "https://files.pythonhosted.org/packages/23/c8/994a5fef87eb977d06ff8dfe7bb59ba31f535d3f2622334b6b32f1b65528/google_re2-1.1.20250805-1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:bfacaa9b274871796bfd0750e23f804ff632a5397b830c640449d3d57b3d148f", size = 515513, upload-time = "2025-08-05T19:29:22.63Z" }, + { url = "https://files.pythonhosted.org/packages/30/25/81672efc1d0cce43813e0b3bffc14c3d32e102cf254c9d280bf4e5194664/google_re2-1.1.20250805-1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c4f72b275ec6b5ef6e3215dab9392aefc2e8f8590d0c3d8b266e6a913503d2a1", size = 485374, upload-time = "2025-08-05T19:29:23.925Z" }, + { url = "https://files.pythonhosted.org/packages/da/04/7a3361618217d401203a9eb34712c824e9645f7d2830d1e804eb9859374c/google_re2-1.1.20250805-1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:c6b5550a9767e444b17a9c3c4b020c51629282748d77244d833aacbd765f28fe", size = 517105, upload-time = "2025-08-05T19:29:25.196Z" }, + { url = "https://files.pythonhosted.org/packages/38/97/29e8097e449b0af993acd7d7d658ecfac3914ac501e6c6d40ffcebc03b8e/google_re2-1.1.20250805-1-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:4c1e5ec68dfe2e0866f14468600e2e2928dcfe684c0f2fbeda8d16f14f909141", size = 485756, upload-time = "2025-08-05T19:29:26.975Z" }, + { url = "https://files.pythonhosted.org/packages/1c/88/cb3647eb92c991d93fde8b1fefddd52ff3bb45a5d1c20185e2fd24e1e5fa/google_re2-1.1.20250805-1-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:336d6830888ea2abdc1744d201e19cf76c4f001cf821bed3e8844c1899bcbdaf", size = 512227, upload-time = "2025-08-05T19:29:28.207Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fe/33e357bb8d090a4879e9e257be577740d1b5d762686b4fa448f050b15caf/google_re2-1.1.20250805-1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52a153ce37ccfd5429257a91d68f4338fe2809711bff64c7ab84c97ddef2de25", size = 573694, upload-time = "2025-08-05T19:29:29.52Z" }, + { url = "https://files.pythonhosted.org/packages/96/97/e1648859b140b76717319a8d8aceec3365e354ea9ff0690d0fbbcb5774e3/google_re2-1.1.20250805-1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ffc79fe2f4be9c5e3e8bb04c8e84e0c9a27b5f08ad5103779b084005e99d220", size = 590760, upload-time = "2025-08-05T19:29:30.967Z" }, + { url = "https://files.pythonhosted.org/packages/af/0a/1dae50eece5fe4f53503f47f8535ee7f8667e2f84dbbf87f0fa8942678b6/google_re2-1.1.20250805-1-cp311-cp311-win32.whl", hash = "sha256:2cfccbbd8577250406a3a3ff1b5d3ee21a479e3f1a01f78042d4d15c461eca1e", size = 434080, upload-time = "2025-08-05T19:29:32.578Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b8/1c4e100d2b1dac7c4ab52d18b8c3060a835f1e2b9dc0802024313fa69277/google_re2-1.1.20250805-1-cp311-cp311-win_amd64.whl", hash = "sha256:4d0669fed9f9f993c5cffae42d7193da752e5b4e42e95b0e9ee0b95de9fcd8ad", size = 490954, upload-time = "2025-08-05T19:29:33.784Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ac/3ed55b2f70cb1b091a59c5242376524e68de88d0280ea0be7c8f4754a37d/google_re2-1.1.20250805-1-cp311-cp311-win_arm64.whl", hash = "sha256:50495e5f783e0c1577384bac75455a799904158b5077284c70e6a9510995f3be", size = 642137, upload-time = "2025-08-05T19:29:34.973Z" }, + { url = "https://files.pythonhosted.org/packages/78/b5/5ed6ffcb1f33348e7f212819d1082f125bd224c89aef842b78b63f9a97e0/google_re2-1.1.20250805-1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:39f81ff026701533593ffb43acd999d11b8ff769d2234e2083c9ae38d02a01a4", size = 485610, upload-time = "2025-08-05T19:29:36.243Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e3/b4db34e633b0c5c880c2a3371eedcab600ea0c04a51a2509cda09c913e1e/google_re2-1.1.20250805-1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:7d26aecd8850ec469bf8ae7d3a1ad26b1b1c0477400351ff5df181ef5dff68f0", size = 518722, upload-time = "2025-08-05T19:29:37.51Z" }, + { url = "https://files.pythonhosted.org/packages/b9/96/ca6f0ff5693558ba104007cf7cc8187d3d47c5d01af06c4204bbe9d8d160/google_re2-1.1.20250805-1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f45314ef7b22c28a1c43469d522398068af4bd1b59839c831033723c782c7402", size = 486962, upload-time = "2025-08-05T19:29:38.775Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e5/41e316d9a160bca99f7a4bff2dc9f4a9b8a3b3b927a610fdf7717f0af2f7/google_re2-1.1.20250805-1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:13e8b83655fcb97d7190d8c07a2886dd5bf9c55935419c98a4b7f09cc6e2019d", size = 520209, upload-time = "2025-08-05T19:29:39.967Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c6/30d8c5988c640d6de7a9b0739bc33d9b2a4d00bf12a7e6c0abfebc0c365b/google_re2-1.1.20250805-1-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:9c17c678b3bf2ca874c74b898a21b534d3e60123eda8ef18dde1c1932d142b1f", size = 487152, upload-time = "2025-08-05T19:29:41.596Z" }, + { url = "https://files.pythonhosted.org/packages/73/1f/d3f04e5c66c2bf235cb449f4e7372596375f6a8537eaeaa35f076927bd0b/google_re2-1.1.20250805-1-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:a848f44752286372cfb0ff225a836ed7b02738b29ca31ed3c58e70dc7d584537", size = 514497, upload-time = "2025-08-05T19:29:43.196Z" }, + { url = "https://files.pythonhosted.org/packages/2b/e3/14c2999896aa5bc111a18fe41c56283f222179076c52d515ea5c3e0043ad/google_re2-1.1.20250805-1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a90f090081e415ee182a01f4113076ad5707c5501ae985c8edc5bfc439cbdee6", size = 572418, upload-time = "2025-08-05T19:29:44.478Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ad/7c4e61bccbfaf036011960ebbc8743971a34f1bd1b07d1f379b2feb81296/google_re2-1.1.20250805-1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b5749bcbb363cdfdff5da14aa0c53de28f918662d0b6f546af31f96c8fd46dd", size = 591359, upload-time = "2025-08-05T19:29:46.186Z" }, + { url = "https://files.pythonhosted.org/packages/9f/fe/f1a0966c76a52467879f951ba1ffbbc5f2a4a0ecc2f2c2e40b131613b9e9/google_re2-1.1.20250805-1-cp312-cp312-win32.whl", hash = "sha256:19689531ce9839813035663df68aa49074c92e426b20095e5e665521c55c1cab", size = 433756, upload-time = "2025-08-05T19:29:47.416Z" }, + { url = "https://files.pythonhosted.org/packages/7e/27/f20d98d5121479eed67127eafb3ed99531d9bc43fac2e75e04938950b2ca/google_re2-1.1.20250805-1-cp312-cp312-win_amd64.whl", hash = "sha256:b533077b8a1c120c5f446e6734893d2a18d098e3edde149dda6a9ff9a3e2e7d2", size = 491663, upload-time = "2025-08-05T19:29:48.726Z" }, + { url = "https://files.pythonhosted.org/packages/80/5a/8997a1e00fcd75db5a6c1243ee512f174a2e266f0017d2a209de36007cef/google_re2-1.1.20250805-1-cp312-cp312-win_arm64.whl", hash = "sha256:3a0193237b274faf57492efbeecc9be5818f3852f186ea5c672490b49da4d124", size = 642623, upload-time = "2025-08-05T19:29:50.172Z" }, + { url = "https://files.pythonhosted.org/packages/79/c0/f4b5c894335bc7d276e5be58d72e24811db8d5900dfdf37069528d65b73c/google_re2-1.1.20250805-1-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:049732fce70dea6246f035027e512f7cbc22fa9c7f2969c503cd0abb0fcfc674", size = 485546, upload-time = "2025-08-05T19:29:51.461Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a8/afcddbf964add57569cc0081e99fc968e1bc9d65c34612e0a63ec2085606/google_re2-1.1.20250805-1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:552e37f08514778d98b6d27aea2abd80efca19c4812ca6388175fd5e54d08229", size = 518842, upload-time = "2025-08-05T19:29:52.826Z" }, + { url = "https://files.pythonhosted.org/packages/02/a4/82063779d7c6c56136b8217c022f6d95c490d73ccc78ca5e57158fd91855/google_re2-1.1.20250805-1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6d452dab6bd9dedecef4cc4a0ba22203f5c4273395fd7896fe9ed0cc85643b11", size = 487043, upload-time = "2025-08-05T19:29:54.526Z" }, + { url = "https://files.pythonhosted.org/packages/5d/06/aee9f7315c00c77e1f3653d44a356c68c2066bc1de516c1bd473b6d827c5/google_re2-1.1.20250805-1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:358f497682cb5d57f0dd107944f7a2167226d31fb5211cfd187ec16cb5275355", size = 520233, upload-time = "2025-08-05T19:29:55.8Z" }, + { url = "https://files.pythonhosted.org/packages/08/7f/d28e64ce85604635da2870c99ac8c8c3e078aaba1f132ecea239f65f0030/google_re2-1.1.20250805-1-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:af66c822179f7f412e4c1fcc8b5ca84885e24ba77c2ee8aa7364f19131b77e7d", size = 487233, upload-time = "2025-08-05T19:29:57.531Z" }, + { url = "https://files.pythonhosted.org/packages/ff/37/bc22d185861461aafa8e8193a1e22f9eac1217e9bec9ac34b681f1c10bd9/google_re2-1.1.20250805-1-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:555b6183fa1a6f54117ec0eda333b98d96620c5d59b563a1dbe2a3eddf64ca24", size = 514473, upload-time = "2025-08-05T19:29:58.826Z" }, + { url = "https://files.pythonhosted.org/packages/56/05/a6da22582817396e30931e0d292d2ef4819c2eea3fb21b08661f9a6f3106/google_re2-1.1.20250805-1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7dfeab6a641a8e6c8ac1cb7fa40b4d2cb91571a3c4bcc840a6d1245d37c33bb", size = 572370, upload-time = "2025-08-05T19:30:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/ec/14/feb54f3f11522f334294a916dffb54ab36dfaba47c7c8d0e091aec1084f1/google_re2-1.1.20250805-1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8b328e6d75e7b1e161dd834c42a7e1762d2e03919453257a64712a5bda798226", size = 591407, upload-time = "2025-08-05T19:30:01.62Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b2/7c785a0596e8535794b5c21d27c3081928748acd556a4a0ef3b2c8338881/google_re2-1.1.20250805-1-cp313-cp313-win32.whl", hash = "sha256:eb1c398eaec3c8ffe74fe7064008c81f452ca5bdf12c2538acc4c087d043a6e1", size = 433845, upload-time = "2025-08-05T19:30:03.46Z" }, + { url = "https://files.pythonhosted.org/packages/5b/1d/af1fc1a5247d6549e67716bcb5e790761bb550026e659dfcfd89408389fd/google_re2-1.1.20250805-1-cp313-cp313-win_amd64.whl", hash = "sha256:18f72952c71de0ace48fbe0ca9928bd7b7bbe1062f685c0d1326a0205966f2dc", size = 491718, upload-time = "2025-08-05T19:30:05.14Z" }, + { url = "https://files.pythonhosted.org/packages/eb/89/39fd1d16a9cbda45cf55b920fac4840fc16ca668b96333f1a5d8931e1ec0/google_re2-1.1.20250805-1-cp313-cp313-win_arm64.whl", hash = "sha256:149ec3ce1a4711daf45aab4fc7d5926f9e3082ee2c6ea138043c27e64ff1d782", size = 642609, upload-time = "2025-08-05T19:30:06.632Z" }, + { url = "https://files.pythonhosted.org/packages/0a/21/68bbd19e9657154e61d89263344a3f192f693dd9262405818d6f2aa1c62a/google_re2-1.1.20250805-1-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:1cb729cba2c6d31c325a6f485119c087828033eba6f9b49f2fa7fb922f01fe75", size = 483102, upload-time = "2025-08-05T19:30:08.105Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a0/61802fa83d85c202f4cca2d2f75349aa427c9f635f00869c23a01139716c/google_re2-1.1.20250805-1-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:10366ae2b7de70793a39c9c5c906828674b25d014685c0c162cc29dd21a312e3", size = 514210, upload-time = "2025-08-05T19:30:09.491Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f4/3dda1b03879f064fd6d0c953b8ba7543653602b6788b8927ceb92a84618c/google_re2-1.1.20250805-1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:486467c4defdeaea5988f368a29596accf74c89a249906152f4be68038349234", size = 484051, upload-time = "2025-08-05T19:30:11.017Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6f/5e5868fe3b5e52369d2c3e7ea581d36c5bcc9811fd6cd705212cce05533a/google_re2-1.1.20250805-1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:df12b5575e63c1c53ccefef03ff7994aa693ae8dc80eede2e8e6abc4ee351b37", size = 515717, upload-time = "2025-08-05T19:30:12.325Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e1/39b724953c179034a3cf311dc09dd59cf241dac5b7c0aad84228788e188a/google_re2-1.1.20250805-1-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:8da72200c0a2cf91332058137c9288074188bcb30f015ad3358be1aea8a042a6", size = 484744, upload-time = "2025-08-05T19:30:13.96Z" }, + { url = "https://files.pythonhosted.org/packages/83/63/dfc7ce9dac77f0537078e6bd83a4a197660aca0261dc42e017813acaa90b/google_re2-1.1.20250805-1-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:76176818b2c0cc77dfbe13c8067744ceb88d38c1b5eb8c517e29b875ab36fdb1", size = 511102, upload-time = "2025-08-05T19:30:15.197Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a2/d21c5d112bf8f787557bc2cdcb894e3015e9f06dcf6e7d0e88e7c1aaf0a4/google_re2-1.1.20250805-1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f763fdb3ca87e718f1c529188f119d84d6378f490c93b25c3b4719b4c848319a", size = 573077, upload-time = "2025-08-05T19:30:16.803Z" }, + { url = "https://files.pythonhosted.org/packages/51/ca/1a326101a1b2524d3dd08c3a18cfd028cdc4a766637fe5009e8c10fe385c/google_re2-1.1.20250805-1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a225474f2f985cd8f93a133dd8d0288cd6f19827279a19838b5147f61a5a688", size = 589458, upload-time = "2025-08-05T19:30:20.546Z" }, + { url = "https://files.pythonhosted.org/packages/c7/63/c0d535b10b7f8ee1e8572b0b2c9e682c39caf78c1fdcdc5f79d8be317f03/google_re2-1.1.20250805-1-cp39-cp39-win32.whl", hash = "sha256:90d2fe1a1b1a05d49c3bbc88510dfe5f7b6e9325c48b4e079fc84fb09ad1b043", size = 433553, upload-time = "2025-08-05T19:30:21.817Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ec/83546e532d74931c28e1711a259f2205f63e27e80ce5398c411a7f600c59/google_re2-1.1.20250805-1-cp39-cp39-win_amd64.whl", hash = "sha256:65dca27d5a65ee478c00ec8d4080ada680ada7d30552f91fe515ac57b18689bc", size = 497279, upload-time = "2025-08-05T19:30:23.132Z" }, ] [[package]] @@ -218,11 +168,11 @@ wheels = [ [[package]] name = "mypy-extensions" -version = "1.0.0" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433, upload-time = "2023-02-04T12:11:27.157Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695, upload-time = "2023-02-04T12:11:25.002Z" }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] [[package]] @@ -236,18 +186,18 @@ wheels = [ [[package]] name = "protobuf" -version = "6.31.1" +version = "6.32.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797, upload-time = "2025-05-28T19:25:54.947Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/df/fb4a8eeea482eca989b51cffd274aac2ee24e825f0bf3cbce5281fa1567b/protobuf-6.32.0.tar.gz", hash = "sha256:a81439049127067fc49ec1d36e25c6ee1d1a2b7be930675f919258d03c04e7d2", size = 440614, upload-time = "2025-08-14T21:21:25.015Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603, upload-time = "2025-05-28T19:25:41.198Z" }, - { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283, upload-time = "2025-05-28T19:25:44.275Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604, upload-time = "2025-05-28T19:25:45.702Z" }, - { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115, upload-time = "2025-05-28T19:25:47.128Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070, upload-time = "2025-05-28T19:25:50.036Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f0/4160dbd205eee8fdf8647d154e7ceaa9d25b3a877b6311274eb6dc896b75/protobuf-6.31.1-cp39-cp39-win32.whl", hash = "sha256:0414e3aa5a5f3ff423828e1e6a6e907d6c65c1d5b7e6e975793d5590bdeecc16", size = 423626, upload-time = "2025-05-28T19:25:51.355Z" }, - { url = "https://files.pythonhosted.org/packages/09/34/13989eb9f482409ed821bfa3e34e6a3878b42607c38e7f7572b4cc825091/protobuf-6.31.1-cp39-cp39-win_amd64.whl", hash = "sha256:8764cf4587791e7564051b35524b72844f845ad0bb011704c3736cce762d8fe9", size = 435347, upload-time = "2025-05-28T19:25:52.932Z" }, - { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724, upload-time = "2025-05-28T19:25:53.926Z" }, + { url = "https://files.pythonhosted.org/packages/33/18/df8c87da2e47f4f1dcc5153a81cd6bca4e429803f4069a299e236e4dd510/protobuf-6.32.0-cp310-abi3-win32.whl", hash = "sha256:84f9e3c1ff6fb0308dbacb0950d8aa90694b0d0ee68e75719cb044b7078fe741", size = 424409, upload-time = "2025-08-14T21:21:12.366Z" }, + { url = "https://files.pythonhosted.org/packages/e1/59/0a820b7310f8139bd8d5a9388e6a38e1786d179d6f33998448609296c229/protobuf-6.32.0-cp310-abi3-win_amd64.whl", hash = "sha256:a8bdbb2f009cfc22a36d031f22a625a38b615b5e19e558a7b756b3279723e68e", size = 435735, upload-time = "2025-08-14T21:21:15.046Z" }, + { url = "https://files.pythonhosted.org/packages/cc/5b/0d421533c59c789e9c9894683efac582c06246bf24bb26b753b149bd88e4/protobuf-6.32.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d52691e5bee6c860fff9a1c86ad26a13afbeb4b168cd4445c922b7e2cf85aaf0", size = 426449, upload-time = "2025-08-14T21:21:16.687Z" }, + { url = "https://files.pythonhosted.org/packages/ec/7b/607764ebe6c7a23dcee06e054fd1de3d5841b7648a90fd6def9a3bb58c5e/protobuf-6.32.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:501fe6372fd1c8ea2a30b4d9be8f87955a64d6be9c88a973996cef5ef6f0abf1", size = 322869, upload-time = "2025-08-14T21:21:18.282Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/2e730bd1c25392fc32e3268e02446f0d77cb51a2c3a8486b1798e34d5805/protobuf-6.32.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:75a2aab2bd1aeb1f5dc7c5f33bcb11d82ea8c055c9becbb41c26a8c43fd7092c", size = 322009, upload-time = "2025-08-14T21:21:19.893Z" }, + { url = "https://files.pythonhosted.org/packages/84/9c/244509764dc78d69e4a72bfe81b00f2691bdfcaffdb591a3e158695096d7/protobuf-6.32.0-cp39-cp39-win32.whl", hash = "sha256:7db8ed09024f115ac877a1427557b838705359f047b2ff2f2b2364892d19dacb", size = 424503, upload-time = "2025-08-14T21:21:21.328Z" }, + { url = "https://files.pythonhosted.org/packages/9b/6f/b1d90a22f619808cf6337aede0d6730af1849330f8dc4d434cfc4a8831b4/protobuf-6.32.0-cp39-cp39-win_amd64.whl", hash = "sha256:15eba1b86f193a407607112ceb9ea0ba9569aed24f93333fe9a497cf2fda37d3", size = 435822, upload-time = "2025-08-14T21:21:22.495Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f2/80ffc4677aac1bc3519b26bc7f7f5de7fce0ee2f7e36e59e27d8beb32dd1/protobuf-6.32.0-py3-none-any.whl", hash = "sha256:ba377e5b67b908c8f3072a57b63e2c6a4cbd18aea4ed98d2584350dbf46f2783", size = 169287, upload-time = "2025-08-14T21:21:23.515Z" }, ] [[package]] @@ -286,7 +236,7 @@ dev = [ { name = "google-re2-stubs", specifier = ">=0.1.1" }, { name = "mypy", specifier = ">=1.17.1" }, { name = "ruff", specifier = ">=0.12.0" }, - { name = "types-protobuf", specifier = ">=5" }, + { name = "types-protobuf", specifier = ">=5.29.1.20250315" }, ] [[package]] @@ -430,36 +380,36 @@ wheels = [ [[package]] name = "types-protobuf" -version = "6.30.2.20250503" +version = "6.30.2.20250822" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/6b/1c384ec9746a6f2a255de6002d43591b886b5950985cb6c62713b3a2b275/types_protobuf-6.30.2.20250503.tar.gz", hash = "sha256:14ad797be85ce763c710b2d8e7cf8c4fc7972d4b986620899727c7dec1e66468", size = 59682, upload-time = "2025-05-03T02:58:07.114Z" } +sdist = { url = "https://files.pythonhosted.org/packages/61/68/0c7144be5c6dc16538e79458839fc914ea494481c7e64566de4ecc0c3682/types_protobuf-6.30.2.20250822.tar.gz", hash = "sha256:faacbbe87bd8cba4472361c0bd86f49296bd36f7761e25d8ada4f64767c1bde9", size = 62379, upload-time = "2025-08-22T03:01:56.572Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/49/03d14506f26c3e5a9302d6a1f0709cc6ed40b83f0088e647e3fbc0ede4a5/types_protobuf-6.30.2.20250503-py3-none-any.whl", hash = "sha256:fc78df75118155b9617c8e8c3944eaf8f537f943b2f258b00b8520162c32d829", size = 73845, upload-time = "2025-05-03T02:58:05.735Z" }, + { url = "https://files.pythonhosted.org/packages/52/64/b926a6355993f712d7828772e42b9ae942f2d306d25072329805c374e729/types_protobuf-6.30.2.20250822-py3-none-any.whl", hash = "sha256:5584c39f7e36104b5f8bdfd31815fa1d5b7b3455a79ddddc097b62320f4b1841", size = 76523, upload-time = "2025-08-22T03:01:55.157Z" }, ] [[package]] name = "types-python-dateutil" -version = "2.9.0.20241206" +version = "2.9.0.20250822" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/60/47d92293d9bc521cd2301e423a358abfac0ad409b3a1606d8fbae1321961/types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb", size = 13802, upload-time = "2024-12-06T02:56:41.019Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/0a/775f8551665992204c756be326f3575abba58c4a3a52eef9909ef4536428/types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53", size = 16084, upload-time = "2025-08-22T03:02:00.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/b3/ca41df24db5eb99b00d97f89d7674a90cb6b3134c52fb8121b6d8d30f15c/types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53", size = 14384, upload-time = "2024-12-06T02:56:39.412Z" }, + { url = "https://files.pythonhosted.org/packages/ab/d9/a29dfa84363e88b053bf85a8b7f212a04f0d7343a4d24933baa45c06e08b/types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc", size = 17892, upload-time = "2025-08-22T03:01:59.436Z" }, ] [[package]] name = "types-pyyaml" -version = "6.0.12.20241230" +version = "6.0.12.20250822" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/f9/4d566925bcf9396136c0a2e5dc7e230ff08d86fa011a69888dd184469d80/types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c", size = 17078, upload-time = "2024-12-30T02:44:38.168Z" } +sdist = { url = "https://files.pythonhosted.org/packages/49/85/90a442e538359ab5c9e30de415006fb22567aa4301c908c09f19e42975c2/types_pyyaml-6.0.12.20250822.tar.gz", hash = "sha256:259f1d93079d335730a9db7cff2bcaf65d7e04b4a56b5927d49a612199b59413", size = 17481, upload-time = "2025-08-22T03:02:16.209Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/c1/48474fbead512b70ccdb4f81ba5eb4a58f69d100ba19f17c92c0c4f50ae6/types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6", size = 20029, upload-time = "2024-12-30T02:44:36.162Z" }, + { url = "https://files.pythonhosted.org/packages/32/8e/8f0aca667c97c0d76024b37cffa39e76e2ce39ca54a38f285a64e6ae33ba/types_pyyaml-6.0.12.20250822-py3-none-any.whl", hash = "sha256:1fe1a5e146aa315483592d292b72a172b65b946a6d98aa6ddd8e4aa838ab7098", size = 20314, upload-time = "2025-08-22T03:02:15.002Z" }, ] [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321, upload-time = "2024-06-07T18:52:15.995Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438, upload-time = "2024-06-07T18:52:13.582Z" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ]