Skip to content

Commit ea981f9

Browse files
Merge pull request #2596 from airbytehq/publish/confluence-v0.1.4
chore(confluence): bump to 0.1.4
2 parents 84740bb + 8fc1f82 commit ea981f9

File tree

6 files changed

+140
-53
lines changed

6 files changed

+140
-53
lines changed

connectors/confluence/CHANGELOG.md

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

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

connectors/confluence/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ See the official [Confluence API reference](https://developer.atlassian.com/clou
113113

114114
## Version information
115115

116-
- **Package version:** 0.1.3
116+
- **Package version:** 0.1.4
117117
- **Connector version:** 1.0.0
118-
- **Generated with Connector SDK commit SHA:** 5718dee300be8dbcbdece58f9474cf54625872e7
118+
- **Generated with Connector SDK commit SHA:** 6ad04bc3fb66fc474336c37d69c79fb843ea1609
119119
- **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/confluence/CHANGELOG.md)

connectors/confluence/airbyte_agent_confluence/__init__.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
Space,
1212
SpacesListLinks,
1313
SpacesList,
14+
PageBody,
1415
PageLinks,
1516
PageVersion,
16-
PageBody,
1717
Page,
1818
PagesListLinks,
1919
PagesList,
20-
BlogPostVersion,
21-
BlogPostBody,
2220
BlogPostLinks,
21+
BlogPostBody,
22+
BlogPostVersion,
2323
BlogPost,
2424
BlogPostsListLinks,
2525
BlogPostsList,
@@ -28,8 +28,8 @@
2828
GroupsListLinks,
2929
GroupsList,
3030
AuditRecordAffectedobject,
31-
AuditRecordAssociatedobjectsItem,
3231
AuditRecordAuthor,
32+
AuditRecordAssociatedobjectsItem,
3333
AuditRecord,
3434
AuditRecordsListLinks,
3535
AuditRecordsList,
@@ -96,15 +96,15 @@
9696
"Space",
9797
"SpacesListLinks",
9898
"SpacesList",
99+
"PageBody",
99100
"PageLinks",
100101
"PageVersion",
101-
"PageBody",
102102
"Page",
103103
"PagesListLinks",
104104
"PagesList",
105-
"BlogPostVersion",
106-
"BlogPostBody",
107105
"BlogPostLinks",
106+
"BlogPostBody",
107+
"BlogPostVersion",
108108
"BlogPost",
109109
"BlogPostsListLinks",
110110
"BlogPostsList",
@@ -113,8 +113,8 @@
113113
"GroupsListLinks",
114114
"GroupsList",
115115
"AuditRecordAffectedobject",
116-
"AuditRecordAssociatedobjectsItem",
117116
"AuditRecordAuthor",
117+
"AuditRecordAssociatedobjectsItem",
118118
"AuditRecord",
119119
"AuditRecordsListLinks",
120120
"AuditRecordsList",

connectors/confluence/airbyte_agent_confluence/_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/confluence/airbyte_agent_confluence/models.py

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ class SpacesList(BaseModel):
6767
results: Union[list[Space], Any] = Field(default=None)
6868
links: Union[SpacesListLinks, Any] = Field(default=None, alias="_links")
6969

70+
class PageBody(BaseModel):
71+
"""Page body content"""
72+
model_config = ConfigDict(extra="allow", populate_by_name=True)
73+
74+
storage: Union[dict[str, Any], Any] = Field(default=None, description="Storage format body")
75+
"""Storage format body"""
76+
atlas_doc_format: Union[dict[str, Any], Any] = Field(default=None, description="Atlas doc format body")
77+
"""Atlas doc format body"""
78+
7079
class PageLinks(BaseModel):
7180
"""Links related to the page"""
7281
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -99,15 +108,6 @@ class PageVersion(BaseModel):
99108
ncs_step_version: Union[Any, Any] = Field(default=None, alias="ncsStepVersion", description="NCS step version")
100109
"""NCS step version"""
101110

102-
class PageBody(BaseModel):
103-
"""Page body content"""
104-
model_config = ConfigDict(extra="allow", populate_by_name=True)
105-
106-
storage: Union[dict[str, Any], Any] = Field(default=None, description="Storage format body")
107-
"""Storage format body"""
108-
atlas_doc_format: Union[dict[str, Any], Any] = Field(default=None, description="Atlas doc format body")
109-
"""Atlas doc format body"""
110-
111111
class Page(BaseModel):
112112
"""Confluence page object"""
113113
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -143,6 +143,30 @@ class PagesList(BaseModel):
143143
results: Union[list[Page], Any] = Field(default=None)
144144
links: Union[PagesListLinks, Any] = Field(default=None, alias="_links")
145145

146+
class BlogPostLinks(BaseModel):
147+
"""Links related to the blog post"""
148+
model_config = ConfigDict(extra="allow", populate_by_name=True)
149+
150+
webui: Union[str, Any] = Field(default=None, description="Web UI link")
151+
"""Web UI link"""
152+
editui: Union[str, Any] = Field(default=None, description="Edit UI link")
153+
"""Edit UI link"""
154+
edituiv2: Union[str, Any] = Field(default=None, description="Edit UI v2 link")
155+
"""Edit UI v2 link"""
156+
tinyui: Union[str, Any] = Field(default=None, description="Tiny UI link")
157+
"""Tiny UI link"""
158+
base: Union[str, Any] = Field(default=None, description="Base URL")
159+
"""Base URL"""
160+
161+
class BlogPostBody(BaseModel):
162+
"""Blog post body content"""
163+
model_config = ConfigDict(extra="allow", populate_by_name=True)
164+
165+
storage: Union[dict[str, Any], Any] = Field(default=None, description="Storage format body")
166+
"""Storage format body"""
167+
atlas_doc_format: Union[dict[str, Any], Any] = Field(default=None, description="Atlas doc format body")
168+
"""Atlas doc format body"""
169+
146170
class BlogPostVersion(BaseModel):
147171
"""Version information"""
148172
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -160,30 +184,6 @@ class BlogPostVersion(BaseModel):
160184
ncs_step_version: Union[Any, Any] = Field(default=None, alias="ncsStepVersion", description="NCS step version")
161185
"""NCS step version"""
162186

163-
class BlogPostBody(BaseModel):
164-
"""Blog post body content"""
165-
model_config = ConfigDict(extra="allow", populate_by_name=True)
166-
167-
storage: Union[dict[str, Any], Any] = Field(default=None, description="Storage format body")
168-
"""Storage format body"""
169-
atlas_doc_format: Union[dict[str, Any], Any] = Field(default=None, description="Atlas doc format body")
170-
"""Atlas doc format body"""
171-
172-
class BlogPostLinks(BaseModel):
173-
"""Links related to the blog post"""
174-
model_config = ConfigDict(extra="allow", populate_by_name=True)
175-
176-
webui: Union[str, Any] = Field(default=None, description="Web UI link")
177-
"""Web UI link"""
178-
editui: Union[str, Any] = Field(default=None, description="Edit UI link")
179-
"""Edit UI link"""
180-
edituiv2: Union[str, Any] = Field(default=None, description="Edit UI v2 link")
181-
"""Edit UI v2 link"""
182-
tinyui: Union[str, Any] = Field(default=None, description="Tiny UI link")
183-
"""Tiny UI link"""
184-
base: Union[str, Any] = Field(default=None, description="Base URL")
185-
"""Base URL"""
186-
187187
class BlogPost(BaseModel):
188188
"""Confluence blog post object"""
189189
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -261,15 +261,6 @@ class AuditRecordAffectedobject(BaseModel):
261261
object_type: Union[str, Any] = Field(default=None, alias="objectType", description="Type of the affected object")
262262
"""Type of the affected object"""
263263

264-
class AuditRecordAssociatedobjectsItem(BaseModel):
265-
"""Nested schema for AuditRecord.associatedObjects_item"""
266-
model_config = ConfigDict(extra="allow", populate_by_name=True)
267-
268-
name: Union[str, Any] = Field(default=None, description="Name of the associated object")
269-
"""Name of the associated object"""
270-
object_type: Union[str, Any] = Field(default=None, alias="objectType", description="Type of the associated object")
271-
"""Type of the associated object"""
272-
273264
class AuditRecordAuthor(BaseModel):
274265
"""User who triggered the audit event"""
275266
model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -289,6 +280,15 @@ class AuditRecordAuthor(BaseModel):
289280
operations: Union[Any, Any] = Field(default=None, description="Operations available for the author")
290281
"""Operations available for the author"""
291282

283+
class AuditRecordAssociatedobjectsItem(BaseModel):
284+
"""Nested schema for AuditRecord.associatedObjects_item"""
285+
model_config = ConfigDict(extra="allow", populate_by_name=True)
286+
287+
name: Union[str, Any] = Field(default=None, description="Name of the associated object")
288+
"""Name of the associated object"""
289+
object_type: Union[str, Any] = Field(default=None, alias="objectType", description="Type of the associated object")
290+
"""Type of the associated object"""
291+
292292
class AuditRecord(BaseModel):
293293
"""Confluence audit record"""
294294
model_config = ConfigDict(extra="allow", populate_by_name=True)

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

0 commit comments

Comments
 (0)