Skip to content

Commit 46a9f76

Browse files
committed
Address reviews
1 parent 172a38f commit 46a9f76

6 files changed

Lines changed: 22 additions & 3 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"type": "breaking",
3-
"description": "Replace FieldPosition enum with a Literal type"
3+
"description": "Replace `FieldPosition` enum values with string literals for `Field.kind`. Use \"header\" and \"trailer\" instead of `FieldPosition.HEADER` and `FieldPosition.TRAILER`."
44
}

packages/aws-sdk-signers/src/aws_sdk_signers/_http.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
from copy import deepcopy
1616
from dataclasses import dataclass
1717
from functools import cached_property
18-
from typing import TypedDict
18+
from typing import TypedDict, get_args
1919
from urllib.parse import urlunparse
2020

2121
import aws_sdk_signers.interfaces.http as interfaces_http
2222

23+
_VALID_FIELD_POSITIONS = frozenset(get_args(interfaces_http.FieldPosition))
24+
2325

2426
class Field(interfaces_http.Field):
2527
"""A name-value pair representing a single field in an HTTP Request or Response.
@@ -40,6 +42,8 @@ def __init__(
4042
):
4143
self.name = name
4244
self.values: list[str] = list(values) if values is not None else []
45+
if kind not in _VALID_FIELD_POSITIONS:
46+
raise ValueError(f"Unknown field kind: {kind!r}")
4347
self.kind = kind
4448

4549
def add(self, value: str) -> None:

packages/aws-sdk-signers/tests/unit/test_fields.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,3 +313,8 @@ def test_fields_delitem_missing() -> None:
313313
fields = Fields([Field(name="fname1")])
314314
with pytest.raises(KeyError):
315315
del fields["fname2"]
316+
317+
318+
def test_field_invalid_kind() -> None:
319+
with pytest.raises(ValueError, match="Unknown field kind"):
320+
Field(name="fname", kind="metadata") # type: ignore
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"type": "breaking",
3-
"description": "Replace FieldPosition enum with a Literal type"
3+
"description": "Replace `FieldPosition` enum values with string literals for `Field.kind`. Use \"header\" and \"trailer\" instead of `FieldPosition.HEADER` and `FieldPosition.TRAILER`."
44
}

packages/smithy-http/src/smithy_http/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
# SPDX-License-Identifier: Apache-2.0
33
from collections import Counter, OrderedDict
44
from collections.abc import Iterable, Iterator
5+
from typing import get_args
56

67
from . import interfaces
78
from .interfaces import FieldPosition
89

910
__version__ = "0.3.1"
1011

12+
_VALID_FIELD_POSITIONS = frozenset(get_args(FieldPosition))
13+
1114

1215
class Field(interfaces.Field):
1316
"""A name-value pair representing a single field in an HTTP Request or Response.
@@ -28,6 +31,8 @@ def __init__(
2831
):
2932
self.name = name
3033
self.values: list[str] = list(values) if values is not None else []
34+
if kind not in _VALID_FIELD_POSITIONS:
35+
raise ValueError(f"Unknown field kind: {kind!r}")
3136
self.kind = kind
3237

3338
def add(self, value: str) -> None:

packages/smithy-http/tests/unit/test_fields.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,8 @@ def test_fields_delitem_missing() -> None:
316316
fields = Fields([Field(name="fname1")])
317317
with pytest.raises(KeyError):
318318
del fields["fname2"]
319+
320+
321+
def test_field_invalid_kind() -> None:
322+
with pytest.raises(ValueError, match="Unknown field kind"):
323+
Field(name="fname", kind="metadata") # type: ignore

0 commit comments

Comments
 (0)