Skip to content

Commit ab62392

Browse files
committed
Using proper x-sent-at timestamp
1 parent e71ba04 commit ab62392

File tree

3 files changed

+22
-19
lines changed

3 files changed

+22
-19
lines changed

src/stagehand/_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ def default_headers(self) -> dict[str, str | Omit]:
225225
**super().default_headers,
226226
"x-language": "python",
227227
"x-sdk-version": __version__,
228-
"x-sent-at": datetime.datetime.now().isoformat(),
228+
"x-sent-at": datetime.datetime.now(datetime.timezone.utc).isoformat().replace("+00:00", "Z"),
229229
"X-Stainless-Async": "false",
230230
**self._custom_headers,
231231
}
@@ -516,7 +516,7 @@ def default_headers(self) -> dict[str, str | Omit]:
516516
**super().default_headers,
517517
"x-language": "python",
518518
"x-sdk-version": __version__,
519-
"x-sent-at": datetime.datetime.now().isoformat(),
519+
"x-sent-at": datetime.datetime.now(datetime.timezone.utc).isoformat().replace("+00:00", "Z"),
520520
"X-Stainless-Async": f"async:{get_async_library()}",
521521
**self._custom_headers,
522522
}

src/stagehand/resources/sessions.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import annotations
44

55
from typing import Dict, Union
6-
from datetime import datetime
6+
from datetime import datetime, timezone
77
from typing_extensions import Literal, overload
88

99
import httpx
@@ -42,7 +42,10 @@
4242

4343
def _format_x_sent_at(value: Union[str, datetime] | Omit) -> str | NotGiven:
4444
if isinstance(value, datetime):
45-
return value.isoformat()
45+
if value.tzinfo is None:
46+
value = value.replace(tzinfo=timezone.utc)
47+
value = value.astimezone(timezone.utc)
48+
return value.isoformat().replace("+00:00", "Z")
4649
if isinstance(value, Omit):
4750
return not_given
4851
return value
@@ -226,7 +229,7 @@ def act(
226229
extra_headers = {
227230
**strip_not_given(
228231
{
229-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
232+
"x-sent-at": _format_x_sent_at(x_sent_at),
230233
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
231234
}
232235
),
@@ -290,7 +293,7 @@ def end(
290293
extra_headers = {
291294
**strip_not_given(
292295
{
293-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
296+
"x-sent-at": _format_x_sent_at(x_sent_at),
294297
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
295298
}
296299
),
@@ -454,7 +457,7 @@ def execute(
454457
extra_headers = {
455458
**strip_not_given(
456459
{
457-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
460+
"x-sent-at": _format_x_sent_at(x_sent_at),
458461
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
459462
}
460463
),
@@ -645,7 +648,7 @@ def extract(
645648
extra_headers = {
646649
**strip_not_given(
647650
{
648-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
651+
"x-sent-at": _format_x_sent_at(x_sent_at),
649652
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
650653
}
651654
),
@@ -719,7 +722,7 @@ def navigate(
719722
extra_headers = {
720723
**strip_not_given(
721724
{
722-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
725+
"x-sent-at": _format_x_sent_at(x_sent_at),
723726
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
724727
}
725728
),
@@ -899,7 +902,7 @@ def observe(
899902
extra_headers = {
900903
**strip_not_given(
901904
{
902-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
905+
"x-sent-at": _format_x_sent_at(x_sent_at),
903906
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
904907
}
905908
),
@@ -986,7 +989,7 @@ def start(
986989
extra_headers = {
987990
**strip_not_given(
988991
{
989-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
992+
"x-sent-at": _format_x_sent_at(x_sent_at),
990993
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
991994
}
992995
),
@@ -1195,7 +1198,7 @@ async def act(
11951198
extra_headers = {
11961199
**strip_not_given(
11971200
{
1198-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1201+
"x-sent-at": _format_x_sent_at(x_sent_at),
11991202
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
12001203
}
12011204
),
@@ -1259,7 +1262,7 @@ async def end(
12591262
extra_headers = {
12601263
**strip_not_given(
12611264
{
1262-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1265+
"x-sent-at": _format_x_sent_at(x_sent_at),
12631266
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
12641267
}
12651268
),
@@ -1423,7 +1426,7 @@ async def execute(
14231426
extra_headers = {
14241427
**strip_not_given(
14251428
{
1426-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1429+
"x-sent-at": _format_x_sent_at(x_sent_at),
14271430
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
14281431
}
14291432
),
@@ -1614,7 +1617,7 @@ async def extract(
16141617
extra_headers = {
16151618
**strip_not_given(
16161619
{
1617-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1620+
"x-sent-at": _format_x_sent_at(x_sent_at),
16181621
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
16191622
}
16201623
),
@@ -1688,7 +1691,7 @@ async def navigate(
16881691
extra_headers = {
16891692
**strip_not_given(
16901693
{
1691-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1694+
"x-sent-at": _format_x_sent_at(x_sent_at),
16921695
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
16931696
}
16941697
),
@@ -1868,7 +1871,7 @@ async def observe(
18681871
extra_headers = {
18691872
**strip_not_given(
18701873
{
1871-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1874+
"x-sent-at": _format_x_sent_at(x_sent_at),
18721875
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
18731876
}
18741877
),
@@ -1955,7 +1958,7 @@ async def start(
19551958
extra_headers = {
19561959
**strip_not_given(
19571960
{
1958-
"x-sent-at": x_sent_at.isoformat() if is_given(x_sent_at) else not_given,
1961+
"x-sent-at": _format_x_sent_at(x_sent_at),
19591962
"x-stream-response": str(x_stream_response) if is_given(x_stream_response) else not_given,
19601963
}
19611964
),

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)