ttd-data 0.2.3__tar.gz → 0.2.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.
- {ttd_data-0.2.3/src/ttd_data.egg-info → ttd_data-0.2.5}/PKG-INFO +2 -2
- {ttd_data-0.2.3 → ttd_data-0.2.5}/pyproject.toml +2 -2
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/__init__.py +1 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_hooks/types.py +13 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_version.py +3 -3
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/advertiser.py +4 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/client.py +23 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/deletionoptout.py +12 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdataserverresponseline.py +9 -2
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdsrfailedline.py +14 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/dsrerrorcode.py +1 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/merchantdsrfailedline.py +9 -2
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydataserverresponseline.py +14 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydsrfailedline.py +16 -2
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/offlineconversion.py +4 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/thirdparty.py +4 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/__init__.py +3 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/datetimes.py +15 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5/src/ttd_data.egg-info}/PKG-INFO +2 -2
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data.egg-info/requires.txt +1 -1
- {ttd_data-0.2.3 → ttd_data-0.2.5}/LICENSE +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/NOTICES.txt +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/README-PYPI.md +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/README.md +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/setup.cfg +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_hooks/__init__.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_hooks/data_origins_hook.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_hooks/plain_text_error_normalizer.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_hooks/registration.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/_hooks/sdkhooks.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/basesdk.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/__init__.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/advertiserdataserverresponse_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/advertiserdsrresponse_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/apierror.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/dataerror.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/merchantdsrresponse_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/no_response_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/offlineconversiondataserverresponse_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/responsevalidationerror.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/thirdpartydataserverresponse_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/thirdpartydsrresponse_error.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/ttddataerror.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/uid2serviceerror.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/httpclient.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/__init__.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdata.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdatarequest.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdataresponseerrorcode.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdataserverresponse.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdsrrequest.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/advertiserdsrresponse.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/baseadvertiserdataitem.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/baseofflineconversiondataitem.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/basepartnerdsrdataitem.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/basethirdpartydataitem.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/dataorigin.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/dataorigintype.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/datasubjectrequestadvertiserdataop.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/datasubjectrequestmerchantdataop.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/datasubjectrequestthirdpartydataop.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/httpmetadata.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/ingestadvertiserdataop.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/ingestofflineconversiondataop.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/ingestthirdpartydataop.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/merchantdsrrequest.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/merchantdsrresponse.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondatarequest.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondataresponseerrorcode.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondataserverresponse.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondataserverresponseline.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/partnerdsrrequesttype.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/realtimeconversioneventlineitem.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/realtimeconversioneventsprivacysetting.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydata.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydatarequest.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydataresponseerrorcode.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydataserverresponse.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydsrrequest.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/thirdpartydsrresponse.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/py.typed +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/sdk.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/sdkconfiguration.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/types/__init__.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/types/base64fileinput.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/types/basemodel.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/uid2/__init__.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/uid2/config.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/uid2/models.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/uid2/resolver.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/annotations.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/dynamic_imports.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/enums.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/eventstreaming.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/forms.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/headers.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/logger.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/metadata.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/queryparams.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/requestbodies.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/retries.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/security.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/serializers.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/unmarshal_json_response.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/url.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/utils/values.py +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data.egg-info/SOURCES.txt +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data.egg-info/dependency_links.txt +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data.egg-info/top_level.txt +0 -0
- {ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data_python/_hooks/registration.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ttd-data
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Python Client SDK for TTD Data API.
|
|
5
5
|
Author: Speakeasy
|
|
6
6
|
License: map[name:Apache License 2.0 shortName:Apache-2.0 url:https://www.apache.org/licenses/LICENSE-2.0]
|
|
@@ -11,7 +11,7 @@ License-File: LICENSE
|
|
|
11
11
|
License-File: NOTICES.txt
|
|
12
12
|
Requires-Dist: httpcore>=1.0.9
|
|
13
13
|
Requires-Dist: httpx>=0.28.1
|
|
14
|
-
Requires-Dist: pydantic
|
|
14
|
+
Requires-Dist: pydantic<2.13,>=2.11.2
|
|
15
15
|
Requires-Dist: uid2-client<3.0.0,>=2.9.0
|
|
16
16
|
Dynamic: license-file
|
|
17
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ttd-data"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.5"
|
|
4
4
|
description = "Python Client SDK for TTD Data API."
|
|
5
5
|
authors = [{ name = "Speakeasy" },]
|
|
6
6
|
readme = "README-PYPI.md"
|
|
@@ -8,7 +8,7 @@ requires-python = ">=3.10"
|
|
|
8
8
|
dependencies = [
|
|
9
9
|
"httpcore >=1.0.9",
|
|
10
10
|
"httpx >=0.28.1",
|
|
11
|
-
"pydantic >=2.11.2",
|
|
11
|
+
"pydantic >=2.11.2,<2.13",
|
|
12
12
|
"uid2-client >=2.9.0,<3.0.0",
|
|
13
13
|
]
|
|
14
14
|
urls.repository = "https://github.com/thetradedesk/ttd-data-python.git"
|
|
@@ -11,6 +11,7 @@ from ._version import (
|
|
|
11
11
|
from .sdkconfiguration import *
|
|
12
12
|
# region: Manually edited code section
|
|
13
13
|
# pylint: disable=useless-import-alias
|
|
14
|
+
from .client import ClientConfig as ClientConfig
|
|
14
15
|
from .client import DataClient as DataClient
|
|
15
16
|
from .uid2 import (
|
|
16
17
|
IdentityScope as IdentityScope,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
from abc import ABC, abstractmethod
|
|
5
5
|
import httpx
|
|
6
6
|
from ttd_data.sdkconfiguration import SDKConfiguration
|
|
7
|
-
from typing import Any, Callable, List, Optional, Tuple, Union
|
|
7
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class HookContext:
|
|
@@ -13,6 +13,8 @@ class HookContext:
|
|
|
13
13
|
operation_id: str
|
|
14
14
|
oauth2_scopes: Optional[List[str]] = None
|
|
15
15
|
security_source: Optional[Union[Any, Callable[[], Any]]] = None
|
|
16
|
+
tags: Optional[List[str]] = None
|
|
17
|
+
extensions: Optional[Dict[str, Any]] = None
|
|
16
18
|
|
|
17
19
|
def __init__(
|
|
18
20
|
self,
|
|
@@ -21,12 +23,16 @@ class HookContext:
|
|
|
21
23
|
operation_id: str,
|
|
22
24
|
oauth2_scopes: Optional[List[str]],
|
|
23
25
|
security_source: Optional[Union[Any, Callable[[], Any]]],
|
|
26
|
+
tags: Optional[List[str]],
|
|
27
|
+
extensions: Optional[Dict[str, Any]],
|
|
24
28
|
):
|
|
25
29
|
self.config = config
|
|
26
30
|
self.base_url = base_url
|
|
27
31
|
self.operation_id = operation_id
|
|
28
32
|
self.oauth2_scopes = oauth2_scopes
|
|
29
33
|
self.security_source = security_source
|
|
34
|
+
self.tags = tags
|
|
35
|
+
self.extensions = extensions
|
|
30
36
|
|
|
31
37
|
|
|
32
38
|
class BeforeRequestContext(HookContext):
|
|
@@ -37,6 +43,8 @@ class BeforeRequestContext(HookContext):
|
|
|
37
43
|
hook_ctx.operation_id,
|
|
38
44
|
hook_ctx.oauth2_scopes,
|
|
39
45
|
hook_ctx.security_source,
|
|
46
|
+
hook_ctx.tags,
|
|
47
|
+
hook_ctx.extensions,
|
|
40
48
|
)
|
|
41
49
|
|
|
42
50
|
|
|
@@ -48,6 +56,8 @@ class AfterSuccessContext(HookContext):
|
|
|
48
56
|
hook_ctx.operation_id,
|
|
49
57
|
hook_ctx.oauth2_scopes,
|
|
50
58
|
hook_ctx.security_source,
|
|
59
|
+
hook_ctx.tags,
|
|
60
|
+
hook_ctx.extensions,
|
|
51
61
|
)
|
|
52
62
|
|
|
53
63
|
|
|
@@ -59,6 +69,8 @@ class AfterErrorContext(HookContext):
|
|
|
59
69
|
hook_ctx.operation_id,
|
|
60
70
|
hook_ctx.oauth2_scopes,
|
|
61
71
|
hook_ctx.security_source,
|
|
72
|
+
hook_ctx.tags,
|
|
73
|
+
hook_ctx.extensions,
|
|
62
74
|
)
|
|
63
75
|
|
|
64
76
|
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
import importlib.metadata
|
|
5
5
|
|
|
6
6
|
__title__: str = "ttd-data"
|
|
7
|
-
__version__: str = "0.2.
|
|
7
|
+
__version__: str = "0.2.5"
|
|
8
8
|
__openapi_doc_version__: str = "v0.1"
|
|
9
|
-
__gen_version__: str = "2.
|
|
10
|
-
__user_agent__: str = "speakeasy-sdk/python 0.2.
|
|
9
|
+
__gen_version__: str = "2.916.2"
|
|
10
|
+
__user_agent__: str = "speakeasy-sdk/python 0.2.5 2.916.2 v0.1 ttd-data"
|
|
11
11
|
|
|
12
12
|
try:
|
|
13
13
|
if __package__ is not None:
|
|
@@ -103,6 +103,8 @@ class Advertiser(BaseSDK):
|
|
|
103
103
|
operation_id="IngestAdvertiserData",
|
|
104
104
|
oauth2_scopes=None,
|
|
105
105
|
security_source=None,
|
|
106
|
+
tags=["Advertiser"],
|
|
107
|
+
extensions=None,
|
|
106
108
|
),
|
|
107
109
|
request=req,
|
|
108
110
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -227,6 +229,8 @@ class Advertiser(BaseSDK):
|
|
|
227
229
|
operation_id="IngestAdvertiserData",
|
|
228
230
|
oauth2_scopes=None,
|
|
229
231
|
security_source=None,
|
|
232
|
+
tags=["Advertiser"],
|
|
233
|
+
extensions=None,
|
|
230
234
|
),
|
|
231
235
|
request=req,
|
|
232
236
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -6,13 +6,15 @@ from __future__ import annotations
|
|
|
6
6
|
# pylint: disable=protected-access
|
|
7
7
|
|
|
8
8
|
import asyncio
|
|
9
|
+
from dataclasses import dataclass
|
|
9
10
|
from functools import cached_property
|
|
10
11
|
from typing import Any, Dict, Iterable, List, Optional, Tuple, Type
|
|
11
12
|
|
|
12
13
|
from uid2_client import IdentityMapV3Client, IdentityMapV3Input # type: ignore[import-not-found,import-untyped]
|
|
13
14
|
|
|
14
15
|
from ttd_data.sdk import BaseDataClient
|
|
15
|
-
from ttd_data.types import BaseModel
|
|
16
|
+
from ttd_data.types import BaseModel, OptionalNullable
|
|
17
|
+
from ttd_data.utils import RetryConfig
|
|
16
18
|
from ttd_data.models.advertiserdataresponseerrorcode import (
|
|
17
19
|
AdvertiserDataResponseErrorCode,
|
|
18
20
|
)
|
|
@@ -51,6 +53,14 @@ from .uid2.resolver import (
|
|
|
51
53
|
)
|
|
52
54
|
|
|
53
55
|
|
|
56
|
+
@dataclass(frozen=True)
|
|
57
|
+
class ClientConfig:
|
|
58
|
+
server_url: Optional[str]
|
|
59
|
+
retry_config: OptionalNullable[RetryConfig]
|
|
60
|
+
timeout_ms: Optional[int]
|
|
61
|
+
uid2_config: Optional[UID2Config]
|
|
62
|
+
|
|
63
|
+
|
|
54
64
|
class DataClient:
|
|
55
65
|
"""DataClient for the ttd-data SDK — enables ingesting advertiser,
|
|
56
66
|
third-party, offline-conversion, and deletion-opt-out data to the
|
|
@@ -71,6 +81,18 @@ class DataClient:
|
|
|
71
81
|
self.uid2_config = uid2_config
|
|
72
82
|
self.data_client = data_client or BaseDataClient(**data_client_kwargs)
|
|
73
83
|
|
|
84
|
+
@property
|
|
85
|
+
def config(self) -> ClientConfig:
|
|
86
|
+
"""Read-only view of this client's settings, exposed immutably to
|
|
87
|
+
prevent callers from mutating live client state."""
|
|
88
|
+
sdk_config = self.data_client.sdk_configuration
|
|
89
|
+
return ClientConfig(
|
|
90
|
+
server_url=sdk_config.server_url,
|
|
91
|
+
retry_config=sdk_config.retry_config,
|
|
92
|
+
timeout_ms=sdk_config.timeout_ms,
|
|
93
|
+
uid2_config=self.uid2_config,
|
|
94
|
+
)
|
|
95
|
+
|
|
74
96
|
# ----- UID2 identity-map wiring (internal) -----
|
|
75
97
|
|
|
76
98
|
@cached_property
|
|
@@ -99,6 +99,8 @@ class DeletionOptOut(BaseSDK):
|
|
|
99
99
|
operation_id="DataSubjectRequestAdvertiserData",
|
|
100
100
|
oauth2_scopes=None,
|
|
101
101
|
security_source=None,
|
|
102
|
+
tags=["DeletionOptOut"],
|
|
103
|
+
extensions=None,
|
|
102
104
|
),
|
|
103
105
|
request=req,
|
|
104
106
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -219,6 +221,8 @@ class DeletionOptOut(BaseSDK):
|
|
|
219
221
|
operation_id="DataSubjectRequestAdvertiserData",
|
|
220
222
|
oauth2_scopes=None,
|
|
221
223
|
security_source=None,
|
|
224
|
+
tags=["DeletionOptOut"],
|
|
225
|
+
extensions=None,
|
|
222
226
|
),
|
|
223
227
|
request=req,
|
|
224
228
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -336,6 +340,8 @@ class DeletionOptOut(BaseSDK):
|
|
|
336
340
|
operation_id="DataSubjectRequestMerchantData",
|
|
337
341
|
oauth2_scopes=None,
|
|
338
342
|
security_source=None,
|
|
343
|
+
tags=["DeletionOptOut"],
|
|
344
|
+
extensions=None,
|
|
339
345
|
),
|
|
340
346
|
request=req,
|
|
341
347
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -453,6 +459,8 @@ class DeletionOptOut(BaseSDK):
|
|
|
453
459
|
operation_id="DataSubjectRequestMerchantData",
|
|
454
460
|
oauth2_scopes=None,
|
|
455
461
|
security_source=None,
|
|
462
|
+
tags=["DeletionOptOut"],
|
|
463
|
+
extensions=None,
|
|
456
464
|
),
|
|
457
465
|
request=req,
|
|
458
466
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -573,6 +581,8 @@ class DeletionOptOut(BaseSDK):
|
|
|
573
581
|
operation_id="DataSubjectRequestThirdPartyData",
|
|
574
582
|
oauth2_scopes=None,
|
|
575
583
|
security_source=None,
|
|
584
|
+
tags=["DeletionOptOut"],
|
|
585
|
+
extensions=None,
|
|
576
586
|
),
|
|
577
587
|
request=req,
|
|
578
588
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -693,6 +703,8 @@ class DeletionOptOut(BaseSDK):
|
|
|
693
703
|
operation_id="DataSubjectRequestThirdPartyData",
|
|
694
704
|
oauth2_scopes=None,
|
|
695
705
|
security_source=None,
|
|
706
|
+
tags=["DeletionOptOut"],
|
|
707
|
+
extensions=None,
|
|
696
708
|
),
|
|
697
709
|
request=req,
|
|
698
710
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -16,6 +16,7 @@ class AdvertiserDataServerResponseLineTypedDict(TypedDict):
|
|
|
16
16
|
error_code: NotRequired[AdvertiserDataResponseErrorCode]
|
|
17
17
|
message: NotRequired[Nullable[str]]
|
|
18
18
|
item_number: NotRequired[Nullable[str]]
|
|
19
|
+
data_number: NotRequired[Nullable[str]]
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class AdvertiserDataServerResponseLine(BaseModel):
|
|
@@ -35,12 +36,18 @@ class AdvertiserDataServerResponseLine(BaseModel):
|
|
|
35
36
|
OptionalNullable[str], pydantic.Field(alias="ItemNumber")
|
|
36
37
|
] = UNSET
|
|
37
38
|
|
|
39
|
+
data_number: Annotated[
|
|
40
|
+
OptionalNullable[str], pydantic.Field(alias="DataNumber")
|
|
41
|
+
] = UNSET
|
|
42
|
+
|
|
38
43
|
@model_serializer(mode="wrap")
|
|
39
44
|
def serialize_model(self, handler):
|
|
40
45
|
optional_fields = set(
|
|
41
|
-
["TDID", "DataName", "ErrorCode", "Message", "ItemNumber"]
|
|
46
|
+
["TDID", "DataName", "ErrorCode", "Message", "ItemNumber", "DataNumber"]
|
|
47
|
+
)
|
|
48
|
+
nullable_fields = set(
|
|
49
|
+
["TDID", "DataName", "Message", "ItemNumber", "DataNumber"]
|
|
42
50
|
)
|
|
43
|
-
nullable_fields = set(["TDID", "DataName", "Message", "ItemNumber"])
|
|
44
51
|
serialized = handler(self)
|
|
45
52
|
m = {}
|
|
46
53
|
|
|
@@ -17,6 +17,7 @@ class AdvertiserDsrFailedLineTypedDict(TypedDict):
|
|
|
17
17
|
error_code: NotRequired[DsrErrorCode]
|
|
18
18
|
message: NotRequired[Nullable[str]]
|
|
19
19
|
item_number: NotRequired[Nullable[str]]
|
|
20
|
+
data_number: NotRequired[Nullable[str]]
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class AdvertiserDsrFailedLine(BaseModel):
|
|
@@ -40,6 +41,10 @@ class AdvertiserDsrFailedLine(BaseModel):
|
|
|
40
41
|
OptionalNullable[str], pydantic.Field(alias="ItemNumber")
|
|
41
42
|
] = UNSET
|
|
42
43
|
|
|
44
|
+
data_number: Annotated[
|
|
45
|
+
OptionalNullable[str], pydantic.Field(alias="DataNumber")
|
|
46
|
+
] = UNSET
|
|
47
|
+
|
|
43
48
|
@model_serializer(mode="wrap")
|
|
44
49
|
def serialize_model(self, handler):
|
|
45
50
|
optional_fields = set(
|
|
@@ -50,10 +55,18 @@ class AdvertiserDsrFailedLine(BaseModel):
|
|
|
50
55
|
"ErrorCode",
|
|
51
56
|
"Message",
|
|
52
57
|
"ItemNumber",
|
|
58
|
+
"DataNumber",
|
|
53
59
|
]
|
|
54
60
|
)
|
|
55
61
|
nullable_fields = set(
|
|
56
|
-
[
|
|
62
|
+
[
|
|
63
|
+
"AdvertiserId",
|
|
64
|
+
"DataProviderId",
|
|
65
|
+
"TDID",
|
|
66
|
+
"Message",
|
|
67
|
+
"ItemNumber",
|
|
68
|
+
"DataNumber",
|
|
69
|
+
]
|
|
57
70
|
)
|
|
58
71
|
serialized = handler(self)
|
|
59
72
|
m = {}
|
|
@@ -16,6 +16,7 @@ class MerchantDsrFailedLineTypedDict(TypedDict):
|
|
|
16
16
|
error_code: NotRequired[DsrErrorCode]
|
|
17
17
|
message: NotRequired[Nullable[str]]
|
|
18
18
|
item_number: NotRequired[Nullable[str]]
|
|
19
|
+
data_number: NotRequired[Nullable[str]]
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class MerchantDsrFailedLine(BaseModel):
|
|
@@ -35,12 +36,18 @@ class MerchantDsrFailedLine(BaseModel):
|
|
|
35
36
|
OptionalNullable[str], pydantic.Field(alias="ItemNumber")
|
|
36
37
|
] = UNSET
|
|
37
38
|
|
|
39
|
+
data_number: Annotated[
|
|
40
|
+
OptionalNullable[str], pydantic.Field(alias="DataNumber")
|
|
41
|
+
] = UNSET
|
|
42
|
+
|
|
38
43
|
@model_serializer(mode="wrap")
|
|
39
44
|
def serialize_model(self, handler):
|
|
40
45
|
optional_fields = set(
|
|
41
|
-
["MerchantId", "TDID", "ErrorCode", "Message", "ItemNumber"]
|
|
46
|
+
["MerchantId", "TDID", "ErrorCode", "Message", "ItemNumber", "DataNumber"]
|
|
47
|
+
)
|
|
48
|
+
nullable_fields = set(
|
|
49
|
+
["MerchantId", "TDID", "Message", "ItemNumber", "DataNumber"]
|
|
42
50
|
)
|
|
43
|
-
nullable_fields = set(["MerchantId", "TDID", "Message", "ItemNumber"])
|
|
44
51
|
serialized = handler(self)
|
|
45
52
|
m = {}
|
|
46
53
|
|
|
@@ -17,6 +17,7 @@ class ThirdPartyDataServerResponseLineTypedDict(TypedDict):
|
|
|
17
17
|
error_code: NotRequired[ThirdPartyDataResponseErrorCode]
|
|
18
18
|
message: NotRequired[Nullable[str]]
|
|
19
19
|
item_number: NotRequired[Nullable[str]]
|
|
20
|
+
data_number: NotRequired[Nullable[str]]
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class ThirdPartyDataServerResponseLine(BaseModel):
|
|
@@ -40,6 +41,10 @@ class ThirdPartyDataServerResponseLine(BaseModel):
|
|
|
40
41
|
OptionalNullable[str], pydantic.Field(alias="ItemNumber")
|
|
41
42
|
] = UNSET
|
|
42
43
|
|
|
44
|
+
data_number: Annotated[
|
|
45
|
+
OptionalNullable[str], pydantic.Field(alias="DataNumber")
|
|
46
|
+
] = UNSET
|
|
47
|
+
|
|
43
48
|
@model_serializer(mode="wrap")
|
|
44
49
|
def serialize_model(self, handler):
|
|
45
50
|
optional_fields = set(
|
|
@@ -50,10 +55,18 @@ class ThirdPartyDataServerResponseLine(BaseModel):
|
|
|
50
55
|
"ErrorCode",
|
|
51
56
|
"Message",
|
|
52
57
|
"ItemNumber",
|
|
58
|
+
"DataNumber",
|
|
53
59
|
]
|
|
54
60
|
)
|
|
55
61
|
nullable_fields = set(
|
|
56
|
-
[
|
|
62
|
+
[
|
|
63
|
+
"DataProviderUserId",
|
|
64
|
+
"TDID",
|
|
65
|
+
"DataName",
|
|
66
|
+
"Message",
|
|
67
|
+
"ItemNumber",
|
|
68
|
+
"DataNumber",
|
|
69
|
+
]
|
|
57
70
|
)
|
|
58
71
|
serialized = handler(self)
|
|
59
72
|
m = {}
|
|
@@ -16,6 +16,7 @@ class ThirdPartyDsrFailedLineTypedDict(TypedDict):
|
|
|
16
16
|
error_code: NotRequired[DsrErrorCode]
|
|
17
17
|
message: NotRequired[Nullable[str]]
|
|
18
18
|
item_number: NotRequired[Nullable[str]]
|
|
19
|
+
data_number: NotRequired[Nullable[str]]
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class ThirdPartyDsrFailedLine(BaseModel):
|
|
@@ -35,12 +36,25 @@ class ThirdPartyDsrFailedLine(BaseModel):
|
|
|
35
36
|
OptionalNullable[str], pydantic.Field(alias="ItemNumber")
|
|
36
37
|
] = UNSET
|
|
37
38
|
|
|
39
|
+
data_number: Annotated[
|
|
40
|
+
OptionalNullable[str], pydantic.Field(alias="DataNumber")
|
|
41
|
+
] = UNSET
|
|
42
|
+
|
|
38
43
|
@model_serializer(mode="wrap")
|
|
39
44
|
def serialize_model(self, handler):
|
|
40
45
|
optional_fields = set(
|
|
41
|
-
[
|
|
46
|
+
[
|
|
47
|
+
"DataProviderId",
|
|
48
|
+
"TDID",
|
|
49
|
+
"ErrorCode",
|
|
50
|
+
"Message",
|
|
51
|
+
"ItemNumber",
|
|
52
|
+
"DataNumber",
|
|
53
|
+
]
|
|
54
|
+
)
|
|
55
|
+
nullable_fields = set(
|
|
56
|
+
["DataProviderId", "TDID", "Message", "ItemNumber", "DataNumber"]
|
|
42
57
|
)
|
|
43
|
-
nullable_fields = set(["DataProviderId", "TDID", "Message", "ItemNumber"])
|
|
44
58
|
serialized = handler(self)
|
|
45
59
|
m = {}
|
|
46
60
|
|
|
@@ -105,6 +105,8 @@ class OfflineConversion(BaseSDK):
|
|
|
105
105
|
operation_id="IngestOfflineConversionData",
|
|
106
106
|
oauth2_scopes=None,
|
|
107
107
|
security_source=None,
|
|
108
|
+
tags=["OfflineConversion"],
|
|
109
|
+
extensions=None,
|
|
108
110
|
),
|
|
109
111
|
request=req,
|
|
110
112
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -233,6 +235,8 @@ class OfflineConversion(BaseSDK):
|
|
|
233
235
|
operation_id="IngestOfflineConversionData",
|
|
234
236
|
oauth2_scopes=None,
|
|
235
237
|
security_source=None,
|
|
238
|
+
tags=["OfflineConversion"],
|
|
239
|
+
extensions=None,
|
|
236
240
|
),
|
|
237
241
|
request=req,
|
|
238
242
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -103,6 +103,8 @@ class ThirdParty(BaseSDK):
|
|
|
103
103
|
operation_id="IngestThirdPartyData",
|
|
104
104
|
oauth2_scopes=None,
|
|
105
105
|
security_source=None,
|
|
106
|
+
tags=["ThirdParty"],
|
|
107
|
+
extensions=None,
|
|
106
108
|
),
|
|
107
109
|
request=req,
|
|
108
110
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -227,6 +229,8 @@ class ThirdParty(BaseSDK):
|
|
|
227
229
|
operation_id="IngestThirdPartyData",
|
|
228
230
|
oauth2_scopes=None,
|
|
229
231
|
security_source=None,
|
|
232
|
+
tags=["ThirdParty"],
|
|
233
|
+
extensions=None,
|
|
230
234
|
),
|
|
231
235
|
request=req,
|
|
232
236
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
@@ -16,7 +16,7 @@ async def run_sync_in_thread(func: Callable[..., _T], *args) -> _T:
|
|
|
16
16
|
|
|
17
17
|
if TYPE_CHECKING:
|
|
18
18
|
from .annotations import get_discriminator
|
|
19
|
-
from .datetimes import parse_datetime
|
|
19
|
+
from .datetimes import parse_datetime, parse_duration
|
|
20
20
|
from .enums import OpenEnumMeta
|
|
21
21
|
from .headers import get_headers, get_response_headers
|
|
22
22
|
from .metadata import (
|
|
@@ -71,6 +71,7 @@ __all__ = [
|
|
|
71
71
|
"get_default_logger",
|
|
72
72
|
"get_discriminator",
|
|
73
73
|
"parse_datetime",
|
|
74
|
+
"parse_duration",
|
|
74
75
|
"get_global_from_env",
|
|
75
76
|
"get_headers",
|
|
76
77
|
"get_pydantic_model",
|
|
@@ -123,6 +124,7 @@ _dynamic_imports: dict[str, str] = {
|
|
|
123
124
|
"get_default_logger": ".logger",
|
|
124
125
|
"get_discriminator": ".annotations",
|
|
125
126
|
"parse_datetime": ".datetimes",
|
|
127
|
+
"parse_duration": ".datetimes",
|
|
126
128
|
"get_global_from_env": ".values",
|
|
127
129
|
"get_headers": ".headers",
|
|
128
130
|
"get_pydantic_model": ".serializers",
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
# @generated-id: 2d794a4852dd
|
|
3
3
|
|
|
4
|
-
from datetime import datetime
|
|
4
|
+
from datetime import datetime, timedelta
|
|
5
5
|
import sys
|
|
6
6
|
|
|
7
|
+
from pydantic import TypeAdapter
|
|
8
|
+
|
|
7
9
|
|
|
8
10
|
def parse_datetime(datetime_string: str) -> datetime:
|
|
9
11
|
"""
|
|
@@ -22,3 +24,15 @@ def parse_datetime(datetime_string: str) -> datetime:
|
|
|
22
24
|
datetime_string = datetime_string[:-1] + "+00:00"
|
|
23
25
|
|
|
24
26
|
return datetime.fromisoformat(datetime_string)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
_DURATION_ADAPTER = TypeAdapter(timedelta)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def parse_duration(duration_string: str) -> timedelta:
|
|
33
|
+
"""
|
|
34
|
+
Convert an ISO 8601 duration string (e.g. "PT1H30M") into a timedelta.
|
|
35
|
+
The standard library has no ISO 8601 duration parser, so this delegates to
|
|
36
|
+
pydantic, which is already a runtime dependency of the SDK.
|
|
37
|
+
"""
|
|
38
|
+
return _DURATION_ADAPTER.validate_python(duration_string)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ttd-data
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Python Client SDK for TTD Data API.
|
|
5
5
|
Author: Speakeasy
|
|
6
6
|
License: map[name:Apache License 2.0 shortName:Apache-2.0 url:https://www.apache.org/licenses/LICENSE-2.0]
|
|
@@ -11,7 +11,7 @@ License-File: LICENSE
|
|
|
11
11
|
License-File: NOTICES.txt
|
|
12
12
|
Requires-Dist: httpcore>=1.0.9
|
|
13
13
|
Requires-Dist: httpx>=0.28.1
|
|
14
|
-
Requires-Dist: pydantic
|
|
14
|
+
Requires-Dist: pydantic<2.13,>=2.11.2
|
|
15
15
|
Requires-Dist: uid2-client<3.0.0,>=2.9.0
|
|
16
16
|
Dynamic: license-file
|
|
17
17
|
|
|
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
|
{ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/errors/offlineconversiondataserverresponse_error.py
RENAMED
|
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
|
{ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondataresponseerrorcode.py
RENAMED
|
File without changes
|
{ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondataserverresponse.py
RENAMED
|
File without changes
|
{ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/offlineconversiondataserverresponseline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ttd_data-0.2.3 → ttd_data-0.2.5}/src/ttd_data/models/realtimeconversioneventsprivacysetting.py
RENAMED
|
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
|