apexdevkit 1.23.3__tar.gz → 1.23.5__tar.gz
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.
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/PKG-INFO +1 -1
- apexdevkit-1.23.5/apexdevkit/date.py +79 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/server.py +13 -2
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/pyproject.toml +1 -1
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/LICENSE +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/README.md +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/annotation/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/annotation/deprecate.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/environment.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/error.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/builder.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/dependable.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/docs.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/name.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/request.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/resource.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/response.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/router.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/schema.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fastapi/service.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/fluent.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/formatter.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/fake.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/fluent.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/httpx/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/httpx/client.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/httpx/hooks.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/json.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/http/url.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/id.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/key_fn.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/py.typed +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/query/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/query/generator.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/query/query.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/base.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/connector.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/database.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/decorator.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/in_memory.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/interface.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/mssql.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/repository.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/sql.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/repository/sqlite.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/synchronization.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/testing/__init__.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/testing/database.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/testing/fake.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/testing/rest.py +0 -0
- {apexdevkit-1.23.3 → apexdevkit-1.23.5}/apexdevkit/value.py +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from datetime import UTC, datetime
|
|
5
|
+
from zoneinfo import ZoneInfo
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class DateTime:
|
|
10
|
+
timestamp_ms: int
|
|
11
|
+
|
|
12
|
+
# Date in format of "yyyy-mm-dd"
|
|
13
|
+
def as_date(self, time_zone: ZoneInfo | None = None) -> str:
|
|
14
|
+
if time_zone is None:
|
|
15
|
+
time_zone = ZoneInfo("UTC")
|
|
16
|
+
|
|
17
|
+
dt = datetime.fromtimestamp(self.as_timestamp(), tz=UTC)
|
|
18
|
+
local_dt = dt.astimezone(time_zone)
|
|
19
|
+
return local_dt.strftime("%Y-%m-%d")
|
|
20
|
+
|
|
21
|
+
# Date in format of "yyyy-mm-ddTHH:MM:SS"
|
|
22
|
+
def as_date_time(self, time_zone: ZoneInfo | None = None) -> str:
|
|
23
|
+
if time_zone is None:
|
|
24
|
+
time_zone = ZoneInfo("UTC")
|
|
25
|
+
|
|
26
|
+
dt = datetime.fromtimestamp(self.as_timestamp(), tz=UTC)
|
|
27
|
+
local_dt = dt.astimezone(time_zone)
|
|
28
|
+
return local_dt.strftime("%Y-%m-%dT%H:%M:%S")
|
|
29
|
+
|
|
30
|
+
def as_timestamp(self) -> float:
|
|
31
|
+
return float(self.timestamp_ms) / 1000.0
|
|
32
|
+
|
|
33
|
+
def as_timestamp_ms(self) -> int:
|
|
34
|
+
return self.timestamp_ms
|
|
35
|
+
|
|
36
|
+
# Date in format of "yyyy-mm-dd"
|
|
37
|
+
@classmethod
|
|
38
|
+
def from_date(cls, date: str, time_zone: ZoneInfo | None = None) -> DateTime:
|
|
39
|
+
if time_zone is None:
|
|
40
|
+
time_zone = ZoneInfo("UTC")
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
dt = datetime.strptime(date, "%Y-%m-%d")
|
|
44
|
+
dt = dt.replace(tzinfo=time_zone)
|
|
45
|
+
timestamp_ms = int(dt.timestamp() * 1000)
|
|
46
|
+
return cls(timestamp_ms=timestamp_ms)
|
|
47
|
+
|
|
48
|
+
except ValueError as e:
|
|
49
|
+
raise ValueError(
|
|
50
|
+
f"Invalid date format: '{date}'. Expected 'yyyy-mm-dd'."
|
|
51
|
+
) from e
|
|
52
|
+
|
|
53
|
+
# Date in format of "yyyy-mm-ddTHH:MM:SS"
|
|
54
|
+
@classmethod
|
|
55
|
+
def from_date_time(
|
|
56
|
+
cls, date_time: str, time_zone: ZoneInfo | None = None
|
|
57
|
+
) -> DateTime:
|
|
58
|
+
if time_zone is None:
|
|
59
|
+
time_zone = ZoneInfo("UTC")
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
dt = datetime.strptime(date_time, "%Y-%m-%dT%H:%M:%S")
|
|
63
|
+
dt = dt.replace(tzinfo=time_zone)
|
|
64
|
+
timestamp_ms = int(dt.timestamp() * 1000)
|
|
65
|
+
return cls(timestamp_ms=timestamp_ms)
|
|
66
|
+
except ValueError as e:
|
|
67
|
+
raise ValueError(
|
|
68
|
+
f"Invalid datetime format: '{date_time}'."
|
|
69
|
+
f" Expected 'yyyy-mm-ddTHH:MM:SS'."
|
|
70
|
+
) from e
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
def from_timestamp(cls, timestamp: float) -> DateTime:
|
|
74
|
+
timestamp_ms = int(timestamp * 1000)
|
|
75
|
+
return cls(timestamp_ms=timestamp_ms)
|
|
76
|
+
|
|
77
|
+
@classmethod
|
|
78
|
+
def from_timestamp_ms(cls, timestamp_ms: int) -> DateTime:
|
|
79
|
+
return cls(timestamp_ms=timestamp_ms)
|
|
@@ -74,6 +74,14 @@ class UvicornServer:
|
|
|
74
74
|
class Sentry:
|
|
75
75
|
dsn: str = environment_variable("SENTRY_DSN", default="")
|
|
76
76
|
release: str = environment_variable("RELEASE", default="unknown")
|
|
77
|
+
trace_sample_rate: str = environment_variable(
|
|
78
|
+
"SENTRY_TRACE_SAMPLE_RATE",
|
|
79
|
+
default="0.2",
|
|
80
|
+
)
|
|
81
|
+
profile_sample_rate: str = environment_variable(
|
|
82
|
+
"SENTRY_PROFILE_SAMPLE_RATE",
|
|
83
|
+
default="0.2",
|
|
84
|
+
)
|
|
77
85
|
|
|
78
86
|
def setup(self) -> None:
|
|
79
87
|
if not self.dsn:
|
|
@@ -81,8 +89,11 @@ class Sentry:
|
|
|
81
89
|
|
|
82
90
|
sentry_sdk.init(
|
|
83
91
|
release=self.release,
|
|
84
|
-
traces_sample_rate=
|
|
85
|
-
profiles_sample_rate=
|
|
92
|
+
traces_sample_rate=float(self.trace_sample_rate),
|
|
93
|
+
profiles_sample_rate=float(self.profile_sample_rate),
|
|
94
|
+
_experiments={
|
|
95
|
+
"enable_logs": True,
|
|
96
|
+
},
|
|
86
97
|
)
|
|
87
98
|
|
|
88
99
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|