Skip to content

Commit b663642

Browse files
Merge pull request #3226 from airbytehq/publish/klaviyo-v0.1.56
chore(klaviyo): bump to 0.1.56
2 parents 80e7fac + c83acaf commit b663642

File tree

6 files changed

+60
-25
lines changed

6 files changed

+60
-25
lines changed

connectors/klaviyo/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Klaviyo changelog
22

3+
## [0.1.56] - 2026-04-09
4+
- Updated connector definition (YAML version 1.0.4)
5+
- Source commit: c5258deb
6+
- SDK version: 0.1.0
7+
38
## [0.1.55] - 2026-04-09
49
- Updated connector definition (YAML version 1.0.4)
510
- Source commit: 6bf360a5

connectors/klaviyo/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ See the official [Klaviyo API reference](https://developers.klaviyo.com/en/refer
119119

120120
## Version information
121121

122-
- **Package version:** 0.1.55
122+
- **Package version:** 0.1.56
123123
- **Connector version:** 1.0.4
124-
- **Generated with Connector SDK commit SHA:** 6bf360a546d577c9f76e8a6b8abf9ffc4dbfcf3a
124+
- **Generated with Connector SDK commit SHA:** c5258debd165ab701252c1436d4acfb475bf92b9
125125
- **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/klaviyo/CHANGELOG.md)

connectors/klaviyo/airbyte_agent_klaviyo/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
Profile,
1414
ProfilesListLinks,
1515
ProfilesList,
16-
ListLinks,
1716
ListAttributes,
17+
ListLinks,
1818
List,
1919
ListsListLinks,
2020
ListsList,
21-
CampaignLinks,
2221
CampaignAttributes,
22+
CampaignLinks,
2323
Campaign,
2424
CampaignsListLinks,
2525
CampaignsList,
@@ -126,13 +126,13 @@
126126
"Profile",
127127
"ProfilesListLinks",
128128
"ProfilesList",
129-
"ListLinks",
130129
"ListAttributes",
130+
"ListLinks",
131131
"List",
132132
"ListsListLinks",
133133
"ListsList",
134-
"CampaignLinks",
135134
"CampaignAttributes",
135+
"CampaignLinks",
136136
"Campaign",
137137
"CampaignsListLinks",
138138
"CampaignsList",

connectors/klaviyo/airbyte_agent_klaviyo/_vendored/connector_sdk/executor/local_executor.py

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,36 @@
6262

6363

6464
class ParamResolutionError(Exception):
65-
"""Raised when a path parameter cannot be resolved for entity probing."""
65+
"""Raised when a path parameter cannot be resolved for entity probing.
66+
67+
Covers structural resolution failures (unresolvable param, self-reference,
68+
parent with no LIST op, parent returning no records, missing parent key,
69+
max recursion depth). ``_probe_entity`` converts these into UNHEALTHY
70+
results so the backend controller classifies them as INCONCLUSIVE. SKIPPED
71+
is reserved exclusively for "this entity has no list/get action at all".
72+
73+
Execution failures from probing a parent entity use ParentProbeError
74+
instead, so the child can inherit the parent's ``status_code`` for
75+
401/403 -> FAILED classification.
76+
"""
77+
78+
79+
class ParentProbeError(Exception):
80+
"""Raised when a parent entity's LIST probe fails during param resolution.
81+
82+
Wraps the original exception's message with parent-entity context for
83+
debuggability, while preserving the parent's ``status_code`` so the child
84+
can be classified the same way the parent would be (401/403 -> FAILED,
85+
everything else -> INCONCLUSIVE at the backend controller layer).
86+
87+
Distinct from ``ParamResolutionError`` so the ``status_code`` survives --
88+
both route through ``_probe_entity``'s UNHEALTHY branch, but only
89+
ParentProbeError carries the parent's HTTP status.
90+
"""
91+
92+
def __init__(self, message: str, status_code: int | None = None) -> None:
93+
super().__init__(message)
94+
self.status_code = status_code
6695

6796

6897
class _OperationContext:
@@ -727,9 +756,7 @@ async def _probe_entity(
727756
# Also resolve query params that have a matching scoping or config
728757
# key, so explicit config values take precedence over defaults.
729758
for qp in endpoint.query_params:
730-
if qp not in params_needing_resolution and (
731-
qp in self._scoping_index or qp in self.config_values
732-
):
759+
if qp not in params_needing_resolution and (qp in self._scoping_index or qp in self.config_values):
733760
params_needing_resolution.append(qp)
734761
if params_needing_resolution:
735762
try:
@@ -744,7 +771,7 @@ async def _probe_entity(
744771
except ParamResolutionError as exc:
745772
return {
746773
"entity": entity_name,
747-
"status": CHECK_STATUS_SKIPPED,
774+
"status": CHECK_STATUS_UNHEALTHY,
748775
"error": str(exc),
749776
"status_code": None,
750777
"checked_action": action.value,
@@ -846,7 +873,10 @@ async def _resolve_path_params(
846873
parent_params,
847874
)
848875
except Exception as exc:
849-
raise ParamResolutionError(f"Parent entity '{parent_entity_name}' probe failed: {exc}") from exc
876+
raise ParentProbeError(
877+
f"Parent entity '{parent_entity_name}' probe failed: {exc}",
878+
status_code=getattr(exc, "status_code", None),
879+
) from exc
850880
records = result.data if isinstance(result.data, list) else []
851881
if not records:
852882
raise ParamResolutionError(f"Parent entity '{parent_entity_name}' returned no records")

connectors/klaviyo/airbyte_agent_klaviyo/models.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,6 @@ class ProfilesList(BaseModel):
9595
data: Union[list[Profile], Any] = Field(default=None)
9696
links: Union[ProfilesListLinks | None, Any] = Field(default=None)
9797

98-
class ListLinks(BaseModel):
99-
"""Related links"""
100-
model_config = ConfigDict(extra="allow", populate_by_name=True)
101-
102-
self: Union[str | None, Any] = Field(default=None)
103-
10498
class ListAttributes(BaseModel):
10599
"""List attributes"""
106100
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -114,6 +108,12 @@ class ListAttributes(BaseModel):
114108
opt_in_process: Union[str | None, Any] = Field(default=None, description="Opt-in process type")
115109
"""Opt-in process type"""
116110

111+
class ListLinks(BaseModel):
112+
"""Related links"""
113+
model_config = ConfigDict(extra="allow", populate_by_name=True)
114+
115+
self: Union[str | None, Any] = Field(default=None)
116+
117117
class List(BaseModel):
118118
"""A Klaviyo list for organizing profiles"""
119119
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -138,12 +138,6 @@ class ListsList(BaseModel):
138138
data: Union[list[List], Any] = Field(default=None)
139139
links: Union[ListsListLinks | None, Any] = Field(default=None)
140140

141-
class CampaignLinks(BaseModel):
142-
"""Related links"""
143-
model_config = ConfigDict(extra="allow", populate_by_name=True)
144-
145-
self: Union[str | None, Any] = Field(default=None)
146-
147141
class CampaignAttributes(BaseModel):
148142
"""Campaign attributes"""
149143
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -171,6 +165,12 @@ class CampaignAttributes(BaseModel):
171165
send_time: Union[str | None, Any] = Field(default=None, description="Actual send time")
172166
"""Actual send time"""
173167

168+
class CampaignLinks(BaseModel):
169+
"""Related links"""
170+
model_config = ConfigDict(extra="allow", populate_by_name=True)
171+
172+
self: Union[str | None, Any] = Field(default=None)
173+
174174
class Campaign(BaseModel):
175175
"""A Klaviyo campaign"""
176176
model_config = ConfigDict(extra="allow", populate_by_name=True)

connectors/klaviyo/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "airbyte-agent-klaviyo"
3-
version = "0.1.55"
3+
version = "0.1.56"
44
description = "Airbyte Klaviyo Connector for AI platforms"
55
readme = "README.md"
66
requires-python = ">=3.13"

0 commit comments

Comments
 (0)