Skip to content

Commit 9809b8c

Browse files
Merge pull request #2603 from airbytehq/publish/linkedin-ads-v0.1.5
chore(linkedin-ads): bump to 0.1.5
2 parents cf619b6 + ddc0f25 commit 9809b8c

File tree

6 files changed

+135
-48
lines changed

6 files changed

+135
-48
lines changed

connectors/linkedin-ads/CHANGELOG.md

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

3+
## [0.1.5] - 2026-03-23
4+
- Updated connector definition (YAML version 1.0.1)
5+
- Source commit: 6ad04bc3
6+
- SDK version: 0.1.0
7+
38
## [0.1.4] - 2026-03-23
49
- Updated connector definition (YAML version 1.0.1)
510
- Source commit: 5718dee3

connectors/linkedin-ads/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ See the official [Linkedin-Ads API reference](https://learn.microsoft.com/en-us/
115115

116116
## Version information
117117

118-
- **Package version:** 0.1.4
118+
- **Package version:** 0.1.5
119119
- **Connector version:** 1.0.1
120-
- **Generated with Connector SDK commit SHA:** 5718dee300be8dbcbdece58f9474cf54625872e7
120+
- **Generated with Connector SDK commit SHA:** 6ad04bc3fb66fc474336c37d69c79fb843ea1609
121121
- **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/linkedin-ads/CHANGELOG.md)

connectors/linkedin-ads/airbyte_agent_linkedin_ads/__init__.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@
2121
AccountUser,
2222
AccountUsersListMetadata,
2323
AccountUsersList,
24-
CampaignUnitcost,
25-
CampaignDailybudget,
2624
CampaignChangeauditstampsLastmodified,
2725
CampaignChangeauditstampsCreated,
2826
CampaignChangeauditstamps,
29-
CampaignRunschedule,
27+
CampaignUnitcost,
28+
CampaignDailybudget,
3029
CampaignVersion,
31-
CampaignLocale,
30+
CampaignRunschedule,
3231
CampaignTotalbudget,
32+
CampaignLocale,
3333
Campaign,
3434
CampaignsListMetadata,
3535
CampaignsList,
36-
CampaignGroupTotalbudget,
3736
CampaignGroupRunschedule,
38-
CampaignGroupChangeauditstampsCreated,
37+
CampaignGroupTotalbudget,
3938
CampaignGroupChangeauditstampsLastmodified,
39+
CampaignGroupChangeauditstampsCreated,
4040
CampaignGroupChangeauditstamps,
4141
CampaignGroup,
4242
CampaignGroupsListMetadata,
@@ -153,22 +153,22 @@
153153
"AccountUser",
154154
"AccountUsersListMetadata",
155155
"AccountUsersList",
156-
"CampaignUnitcost",
157-
"CampaignDailybudget",
158156
"CampaignChangeauditstampsLastmodified",
159157
"CampaignChangeauditstampsCreated",
160158
"CampaignChangeauditstamps",
161-
"CampaignRunschedule",
159+
"CampaignUnitcost",
160+
"CampaignDailybudget",
162161
"CampaignVersion",
163-
"CampaignLocale",
162+
"CampaignRunschedule",
164163
"CampaignTotalbudget",
164+
"CampaignLocale",
165165
"Campaign",
166166
"CampaignsListMetadata",
167167
"CampaignsList",
168-
"CampaignGroupTotalbudget",
169168
"CampaignGroupRunschedule",
170-
"CampaignGroupChangeauditstampsCreated",
169+
"CampaignGroupTotalbudget",
171170
"CampaignGroupChangeauditstampsLastmodified",
171+
"CampaignGroupChangeauditstampsCreated",
172172
"CampaignGroupChangeauditstamps",
173173
"CampaignGroup",
174174
"CampaignGroupsListMetadata",

connectors/linkedin-ads/airbyte_agent_linkedin_ads/_vendored/connector_sdk/executor/local_executor.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,88 @@ async def check(self) -> ExecutionResult:
602602
error=str(e),
603603
)
604604

605+
async def check_entities(self, entities: list[str]) -> ExecutionResult:
606+
"""Perform health checks for specific entities by probing their list or get operations.
607+
608+
For each entity, looks up (entity_name, Action.LIST) in the operation index.
609+
If not found, falls back to (entity_name, Action.GET). Runs all probes
610+
concurrently and returns per-entity results.
611+
612+
Args:
613+
entities: List of entity names to check.
614+
615+
Returns:
616+
ExecutionResult with per-entity health check results.
617+
"""
618+
logging.debug("check_entities: probing entities %s", entities)
619+
620+
standard_handler = next(
621+
(h for h in self._operation_handlers if isinstance(h, _StandardOperationHandler)),
622+
None,
623+
)
624+
625+
if standard_handler is None:
626+
entity_results = [
627+
{"entity": name, "status": "skipped", "error": "No standard handler available", "checked_action": None}
628+
for name in entities
629+
]
630+
return ExecutionResult(
631+
success=not entities,
632+
data={"entity_results": entity_results, "status": "unhealthy" if entities else "healthy"},
633+
)
634+
635+
tasks = [self._probe_entity(name, standard_handler) for name in entities]
636+
entity_results = await asyncio.gather(*tasks)
637+
638+
all_healthy = all(r["status"] == "healthy" for r in entity_results)
639+
failed = [r for r in entity_results if r["status"] != "healthy"]
640+
error = None
641+
if failed:
642+
names = ", ".join(r["entity"] for r in failed)
643+
error = f"Entity check failed for: {names}"
644+
return ExecutionResult(
645+
success=all_healthy,
646+
data={
647+
"entity_results": list(entity_results),
648+
"status": "healthy" if all_healthy else "unhealthy",
649+
},
650+
error=error,
651+
)
652+
653+
async def _probe_entity(self, entity_name: str, standard_handler: _StandardOperationHandler) -> dict[str, Any]:
654+
"""Probe a single entity's health by executing its list or get operation."""
655+
endpoint = self._operation_index.get((entity_name, Action.LIST))
656+
action = Action.LIST
657+
if endpoint is None:
658+
endpoint = self._operation_index.get((entity_name, Action.GET))
659+
action = Action.GET
660+
if endpoint is None:
661+
return {
662+
"entity": entity_name,
663+
"status": "failed",
664+
"error": f"Entity '{entity_name}' has no list or get operation available for checking",
665+
"status_code": None,
666+
"checked_action": None,
667+
}
668+
try:
669+
params = {"limit": 1} if action == Action.LIST else {}
670+
await standard_handler.execute_operation(entity_name, action, params)
671+
return {
672+
"entity": entity_name,
673+
"status": "healthy",
674+
"error": None,
675+
"status_code": None,
676+
"checked_action": action.value,
677+
}
678+
except Exception as e:
679+
return {
680+
"entity": entity_name,
681+
"status": "unhealthy",
682+
"error": str(e),
683+
"status_code": getattr(e, "status_code", None),
684+
"checked_action": action.value,
685+
}
686+
605687
async def _execute_operation(
606688
self,
607689
entity: str,

connectors/linkedin-ads/airbyte_agent_linkedin_ads/models.py

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -139,20 +139,6 @@ class AccountUsersList(BaseModel):
139139
elements: Union[list[AccountUser], Any] = Field(default=None)
140140
metadata: Union[AccountUsersListMetadata, Any] = Field(default=None)
141141

142-
class CampaignUnitcost(BaseModel):
143-
"""Cost per unit (bid amount)"""
144-
model_config = ConfigDict(extra="allow", populate_by_name=True)
145-
146-
amount: Union[str | None, Any] = Field(default=None)
147-
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
148-
149-
class CampaignDailybudget(BaseModel):
150-
"""Daily budget configuration"""
151-
model_config = ConfigDict(extra="allow", populate_by_name=True)
152-
153-
amount: Union[str | None, Any] = Field(default=None)
154-
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
155-
156142
class CampaignChangeauditstampsLastmodified(BaseModel):
157143
"""Nested schema for CampaignChangeauditstamps.lastModified"""
158144
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -174,25 +160,32 @@ class CampaignChangeauditstamps(BaseModel):
174160
created: Union[CampaignChangeauditstampsCreated | None, Any] = Field(default=None)
175161
last_modified: Union[CampaignChangeauditstampsLastmodified | None, Any] = Field(default=None, alias="lastModified")
176162

177-
class CampaignRunschedule(BaseModel):
178-
"""Campaign run schedule"""
163+
class CampaignUnitcost(BaseModel):
164+
"""Cost per unit (bid amount)"""
179165
model_config = ConfigDict(extra="allow", populate_by_name=True)
180166

181-
start: Union[int | None, Any] = Field(default=None)
182-
end: Union[int | None, Any] = Field(default=None)
167+
amount: Union[str | None, Any] = Field(default=None)
168+
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
169+
170+
class CampaignDailybudget(BaseModel):
171+
"""Daily budget configuration"""
172+
model_config = ConfigDict(extra="allow", populate_by_name=True)
173+
174+
amount: Union[str | None, Any] = Field(default=None)
175+
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
183176

184177
class CampaignVersion(BaseModel):
185178
"""Version information"""
186179
model_config = ConfigDict(extra="allow", populate_by_name=True)
187180

188181
version_tag: Union[str | None, Any] = Field(default=None, alias="versionTag")
189182

190-
class CampaignLocale(BaseModel):
191-
"""Campaign locale settings"""
183+
class CampaignRunschedule(BaseModel):
184+
"""Campaign run schedule"""
192185
model_config = ConfigDict(extra="allow", populate_by_name=True)
193186

194-
country: Union[str | None, Any] = Field(default=None)
195-
language: Union[str | None, Any] = Field(default=None)
187+
start: Union[int | None, Any] = Field(default=None)
188+
end: Union[int | None, Any] = Field(default=None)
196189

197190
class CampaignTotalbudget(BaseModel):
198191
"""Total budget configuration"""
@@ -201,6 +194,13 @@ class CampaignTotalbudget(BaseModel):
201194
amount: Union[str | None, Any] = Field(default=None)
202195
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
203196

197+
class CampaignLocale(BaseModel):
198+
"""Campaign locale settings"""
199+
model_config = ConfigDict(extra="allow", populate_by_name=True)
200+
201+
country: Union[str | None, Any] = Field(default=None)
202+
language: Union[str | None, Any] = Field(default=None)
203+
204204
class Campaign(BaseModel):
205205
"""LinkedIn ad campaign object"""
206206
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -248,26 +248,19 @@ class CampaignsList(BaseModel):
248248
elements: Union[list[Campaign], Any] = Field(default=None)
249249
metadata: Union[CampaignsListMetadata, Any] = Field(default=None)
250250

251-
class CampaignGroupTotalbudget(BaseModel):
252-
"""Total budget for the campaign group"""
253-
model_config = ConfigDict(extra="allow", populate_by_name=True)
254-
255-
amount: Union[str | None, Any] = Field(default=None)
256-
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
257-
258251
class CampaignGroupRunschedule(BaseModel):
259252
"""Campaign group run schedule"""
260253
model_config = ConfigDict(extra="allow", populate_by_name=True)
261254

262255
start: Union[int | None, Any] = Field(default=None)
263256
end: Union[int | None, Any] = Field(default=None)
264257

265-
class CampaignGroupChangeauditstampsCreated(BaseModel):
266-
"""Nested schema for CampaignGroupChangeauditstamps.created"""
258+
class CampaignGroupTotalbudget(BaseModel):
259+
"""Total budget for the campaign group"""
267260
model_config = ConfigDict(extra="allow", populate_by_name=True)
268261

269-
actor: Union[str | None, Any] = Field(default=None)
270-
time: Union[int | None, Any] = Field(default=None)
262+
amount: Union[str | None, Any] = Field(default=None)
263+
currency_code: Union[str | None, Any] = Field(default=None, alias="currencyCode")
271264

272265
class CampaignGroupChangeauditstampsLastmodified(BaseModel):
273266
"""Nested schema for CampaignGroupChangeauditstamps.lastModified"""
@@ -276,6 +269,13 @@ class CampaignGroupChangeauditstampsLastmodified(BaseModel):
276269
actor: Union[str | None, Any] = Field(default=None)
277270
time: Union[int | None, Any] = Field(default=None)
278271

272+
class CampaignGroupChangeauditstampsCreated(BaseModel):
273+
"""Nested schema for CampaignGroupChangeauditstamps.created"""
274+
model_config = ConfigDict(extra="allow", populate_by_name=True)
275+
276+
actor: Union[str | None, Any] = Field(default=None)
277+
time: Union[int | None, Any] = Field(default=None)
278+
279279
class CampaignGroupChangeauditstamps(BaseModel):
280280
"""Creation and last modification audit stamps"""
281281
model_config = ConfigDict(extra="allow", populate_by_name=True)

connectors/linkedin-ads/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-linkedin-ads"
3-
version = "0.1.4"
3+
version = "0.1.5"
44
description = "Airbyte Linkedin-Ads Connector for AI platforms"
55
readme = "README.md"
66
requires-python = ">=3.13"

0 commit comments

Comments
 (0)