Skip to content

Commit 3815517

Browse files
stainless-botRobertCraigie
authored andcommitted
chore: add case insensitive get header function
1 parent 3355f03 commit 3815517

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/openai/_utils/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from ._utils import is_required_type as is_required_type
2323
from ._utils import is_annotated_type as is_annotated_type
2424
from ._utils import maybe_coerce_float as maybe_coerce_float
25+
from ._utils import get_required_header as get_required_header
2526
from ._utils import maybe_coerce_boolean as maybe_coerce_boolean
2627
from ._utils import maybe_coerce_integer as maybe_coerce_integer
2728
from ._utils import strip_annotated_type as strip_annotated_type

src/openai/_utils/_utils.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from __future__ import annotations
22

33
import os
4+
import re
45
import inspect
56
import functools
67
from typing import Any, Mapping, TypeVar, Callable, Iterable, Sequence, cast, overload
78
from pathlib import Path
89
from typing_extensions import Required, Annotated, TypeGuard, get_args, get_origin
910

10-
from .._types import NotGiven, FileTypes, NotGivenOr
11+
from .._types import Headers, NotGiven, FileTypes, NotGivenOr, HeadersLike
1112
from .._compat import is_union as _is_union
1213
from .._compat import parse_date as parse_date
1314
from .._compat import parse_datetime as parse_datetime
@@ -351,3 +352,22 @@ def file_from_path(path: str) -> FileTypes:
351352
contents = Path(path).read_bytes()
352353
file_name = os.path.basename(path)
353354
return (file_name, contents)
355+
356+
357+
def get_required_header(headers: HeadersLike, header: str) -> str:
358+
lower_header = header.lower()
359+
if isinstance(headers, Mapping):
360+
headers = cast(Headers, headers)
361+
for k, v in headers.items():
362+
if k.lower() == lower_header and isinstance(v, str):
363+
return v
364+
365+
""" to deal with the case where the header looks like Stainless-Event-Id """
366+
intercaps_header = re.sub(r"([^\w])(\w)", lambda pat: pat.group(1) + pat.group(2).upper(), header.capitalize())
367+
368+
for normalized_header in [header, lower_header, header.upper(), intercaps_header]:
369+
value = headers.get(normalized_header)
370+
if value:
371+
return value
372+
373+
raise ValueError(f"Could not find {header} header")

0 commit comments

Comments
 (0)