Skip to content

Commit cf442b0

Browse files
normalize-id-types-to-match-public-documentation
1 parent 03e052a commit cf442b0

11 files changed

Lines changed: 54 additions & 15 deletions

ttd_databricks_python/ttd_databricks/handlers/advertiser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from ttd_databricks_python.ttd_databricks.constants import TTD_DATABRICKS_SDK_ORIGIN_ID
88
from ttd_databricks_python.ttd_databricks.contexts import AdvertiserContext
9+
from ttd_databricks_python.ttd_databricks.id_types import normalize_id_type
910

1011
if TYPE_CHECKING:
1112
from ttd_data import DataClient
@@ -26,7 +27,7 @@ def build_items(items_data: list[dict[str, Any]]) -> list[AdvertiserDataItem]:
2627
adv_data_kwargs[field] = d[field]
2728

2829
adv_item_kwargs = {
29-
d["id_type"]: d["id_value"],
30+
normalize_id_type(d["id_type"]): d["id_value"],
3031
"data": [AdvertiserData(**adv_data_kwargs)],
3132
}
3233
for field in ITEM_OPTIONAL_FIELDS:

ttd_databricks_python/ttd_databricks/handlers/deletion_optout_advertiser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import TYPE_CHECKING, Any, Optional, cast
66

77
from ttd_databricks_python.ttd_databricks.contexts import DeletionOptOutAdvertiserContext
8+
from ttd_databricks_python.ttd_databricks.id_types import normalize_id_type
89

910
if TYPE_CHECKING:
1011
from ttd_data import DataClient
@@ -17,7 +18,7 @@ def build_items(items_data: list[dict[str, Any]]) -> list[PartnerDsrDataItem]:
1718

1819
items = []
1920
for d in items_data:
20-
items.append(PartnerDsrDataItem(**{d["id_type"]: d["id_value"]}))
21+
items.append(PartnerDsrDataItem(**{normalize_id_type(d["id_type"]): d["id_value"]}))
2122
return items
2223

2324

ttd_databricks_python/ttd_databricks/handlers/deletion_optout_merchant.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import TYPE_CHECKING, Any, Optional, cast
66

77
from ttd_databricks_python.ttd_databricks.contexts import DeletionOptOutMerchantContext
8+
from ttd_databricks_python.ttd_databricks.id_types import normalize_id_type
89

910
if TYPE_CHECKING:
1011
from ttd_data import DataClient
@@ -17,7 +18,7 @@ def build_items(items_data: list[dict[str, Any]]) -> list[PartnerDsrDataItem]:
1718

1819
items = []
1920
for d in items_data:
20-
items.append(PartnerDsrDataItem(**{d["id_type"]: d["id_value"]}))
21+
items.append(PartnerDsrDataItem(**{normalize_id_type(d["id_type"]): d["id_value"]}))
2122
return items
2223

2324

ttd_databricks_python/ttd_databricks/handlers/deletion_optout_thirdparty.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import TYPE_CHECKING, Any, Optional, cast
66

77
from ttd_databricks_python.ttd_databricks.contexts import DeletionOptOutThirdPartyContext
8+
from ttd_databricks_python.ttd_databricks.id_types import normalize_id_type
89

910
if TYPE_CHECKING:
1011
from ttd_data import DataClient
@@ -17,7 +18,7 @@ def build_items(items_data: list[dict[str, Any]]) -> list[PartnerDsrDataItem]:
1718

1819
items = []
1920
for d in items_data:
20-
items.append(PartnerDsrDataItem(**{d["id_type"]: d["id_value"]}))
21+
items.append(PartnerDsrDataItem(**{normalize_id_type(d["id_type"]): d["id_value"]}))
2122
return items
2223

2324

ttd_databricks_python/ttd_databricks/handlers/third_party.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from ttd_databricks_python.ttd_databricks.constants import TTD_DATABRICKS_SDK_ORIGIN_ID
88
from ttd_databricks_python.ttd_databricks.contexts import ThirdPartyContext
9+
from ttd_databricks_python.ttd_databricks.id_types import normalize_id_type
910

1011
if TYPE_CHECKING:
1112
from ttd_data import DataClient
@@ -26,7 +27,7 @@ def build_items(items_data: list[dict[str, Any]]) -> list[ThirdPartyDataItem]:
2627
tp_data_kwargs[field] = d[field]
2728

2829
tp_item_kwargs = {
29-
d["id_type"]: d["id_value"],
30+
normalize_id_type(d["id_type"]): d["id_value"],
3031
"data": [ThirdPartyData(**tp_data_kwargs)],
3132
}
3233
for field in ITEM_OPTIONAL_FIELDS:
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""User-facing id_type names and normalization to ttd-data Pydantic field names."""
2+
3+
from __future__ import annotations
4+
5+
# TTD public documentation specifies id_type values in PascalCase/ALLCAPS.
6+
# This dict maps those user-facing id_type values to the corresponding Python
7+
# field names on the ttd-data Pydantic models, which use snake_case field names
8+
# with PascalCase/ALLCAPS aliases for the wire format.
9+
_NORMALIZATION: dict[str, str] = {
10+
"TDID": "tdid",
11+
"DAID": "daid",
12+
"UID2": "uid2",
13+
"UID2Token": "uid2_token",
14+
"EUID": "euid",
15+
"EUIDToken": "euid_token",
16+
"RampID": "ramp_id",
17+
"ID5": "id5",
18+
"netID": "net_id",
19+
"FirstId": "first_id"
20+
}
21+
22+
VALID_ID_TYPES: frozenset[str] = frozenset(_NORMALIZATION)
23+
24+
25+
def normalize_id_type(id_type: str) -> str:
26+
"""Map a user-facing id_type to the Python field name expected by ttd-data models.
27+
28+
Raises ValueError for unrecognized values.
29+
"""
30+
try:
31+
return _NORMALIZATION[id_type]
32+
except KeyError:
33+
valid = ", ".join(sorted(_NORMALIZATION))
34+
raise ValueError(f"Unknown id_type {id_type!r}. Must be one of: {valid}.")

ttd_databricks_python/ttd_databricks/schemas/advertiser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ def input_schema() -> StructType:
3434
3535
Mandatory columns (not nullable):
3636
id_type → which AdvertiserDataItem identity field this row uses.
37-
Must be one of: tdid, daid, uid2, uid2_token, ramp_id, core_id,
38-
euid, euid_token, id5, net_id, first_id, merkury_id, iqvia_ppid.
37+
Must be one of: TDID, DAID, UID2, UID2Token, EUID, EUIDToken,
38+
RampID, ID5, netID, FirstId, CoreID, MerkuryID, IqviaPPID.
3939
id_value → the identifier value for the given id_type.
4040
segment_name → AdvertiserData.name (audience segment / data element name).
4141

ttd_databricks_python/ttd_databricks/schemas/deletion_optout_advertiser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ def input_schema() -> StructType:
1717
1818
Mandatory columns (not nullable):
1919
id_type → which PartnerDsrDataItem identity field this row uses.
20-
Must be one of: tdid, daid, uid2, uid2_token, ramp_id, core_id,
21-
euid, euid_token, id5, net_id, first_id, merkury_id, iqvia_ppid.
20+
Must be one of: TDID, DAID, UID2, UID2Token, EUID, EUIDToken,
21+
RampID, ID5, netID, FirstId, CoreID, MerkuryID, IqviaPPID.
2222
id_value → the identifier value for the given id_type.
2323
"""
2424
from pyspark.sql.types import StringType, StructField, StructType

ttd_databricks_python/ttd_databricks/schemas/deletion_optout_merchant.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ def input_schema() -> StructType:
1717
1818
Mandatory columns (not nullable):
1919
id_type → which PartnerDsrDataItem identity field this row uses.
20-
Must be one of: tdid, daid, uid2, uid2_token, ramp_id, core_id,
21-
euid, euid_token, id5, net_id, first_id, merkury_id, iqvia_ppid.
20+
Must be one of: TDID, DAID, UID2, UID2Token, EUID, EUIDToken,
21+
RampID, ID5, netID, FirstId, CoreID, MerkuryID, IqviaPPID.
2222
id_value → the identifier value for the given id_type.
2323
"""
2424
from pyspark.sql.types import StringType, StructField, StructType

ttd_databricks_python/ttd_databricks/schemas/deletion_optout_thirdparty.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ def input_schema() -> StructType:
1717
1818
Mandatory columns (not nullable):
1919
id_type → which PartnerDsrDataItem identity field this row uses.
20-
Must be one of: tdid, daid, uid2, uid2_token, ramp_id, core_id,
21-
euid, euid_token, id5, net_id, first_id, merkury_id, iqvia_ppid.
20+
Must be one of: TDID, DAID, UID2, UID2Token, EUID, EUIDToken,
21+
RampID, ID5, netID, FirstId, CoreID, MerkuryID, IqviaPPID.
2222
id_value → the identifier value for the given id_type.
2323
"""
2424
from pyspark.sql.types import StringType, StructField, StructType

0 commit comments

Comments
 (0)