airbyte-agent-greenhouse 0.17.39__tar.gz → 0.17.40__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.
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/CHANGELOG.md +5 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/PKG-INFO +3 -3
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/README.md +2 -2
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/local_executor.py +69 -9
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/pyproject.toml +1 -1
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/.gitignore +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/REFERENCE.md +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/auth_strategies.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/auth_template.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/cloud_utils/client.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/connector_model_loader.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/constants.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/exceptions.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/models.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/extensions.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/config.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/exceptions.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/protocols.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/response.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http_client.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/introspection.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/logging/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/logging/logger.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/logging/types.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/config.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/models.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/redactor.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/session.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/performance/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/performance/instrumentation.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/performance/metrics.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/base.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/components.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/connector.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/extensions.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/operations.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/security.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/secrets.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/__init__.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/config.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/events.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/tracker.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/types.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/utils.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/validation.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/connector.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/connector_model.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/models.py +0 -0
- {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/types.py +0 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Greenhouse changelog
|
|
2
2
|
|
|
3
|
+
## [0.17.40] - 2026-01-15
|
|
4
|
+
- Updated connector definition (YAML version 0.1.2)
|
|
5
|
+
- Source commit: b7138b41
|
|
6
|
+
- SDK version: 0.1.0
|
|
7
|
+
|
|
3
8
|
## [0.17.39] - 2026-01-15
|
|
4
9
|
- Updated connector definition (YAML version 0.1.2)
|
|
5
10
|
- Source commit: 10173eb1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-greenhouse
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.40
|
|
4
4
|
Summary: Airbyte Greenhouse Connector for AI platforms
|
|
5
5
|
Project-URL: Homepage, https://github.com/airbytehq/airbyte-agent-connectors
|
|
6
6
|
Project-URL: Documentation, https://docs.airbyte.com/ai-agents/
|
|
@@ -111,6 +111,6 @@ For the service's official API docs, see the [Greenhouse API reference](https://
|
|
|
111
111
|
|
|
112
112
|
## Version information
|
|
113
113
|
|
|
114
|
-
- **Package version:** 0.17.
|
|
114
|
+
- **Package version:** 0.17.40
|
|
115
115
|
- **Connector version:** 0.1.2
|
|
116
|
-
- **Generated with Connector SDK commit SHA:**
|
|
116
|
+
- **Generated with Connector SDK commit SHA:** b7138b411130e18a6ece05c58de092aa28ca0474
|
|
@@ -78,6 +78,6 @@ For the service's official API docs, see the [Greenhouse API reference](https://
|
|
|
78
78
|
|
|
79
79
|
## Version information
|
|
80
80
|
|
|
81
|
-
- **Package version:** 0.17.
|
|
81
|
+
- **Package version:** 0.17.40
|
|
82
82
|
- **Connector version:** 0.1.2
|
|
83
|
-
- **Generated with Connector SDK commit SHA:**
|
|
83
|
+
- **Generated with Connector SDK commit SHA:** b7138b411130e18a6ece05c58de092aa28ca0474
|
|
@@ -1098,35 +1098,93 @@ class LocalExecutor:
|
|
|
1098
1098
|
|
|
1099
1099
|
return interpolate_value(variables)
|
|
1100
1100
|
|
|
1101
|
+
def _wrap_primitives(self, data: Any) -> dict[str, Any] | list[dict[str, Any]] | None:
|
|
1102
|
+
"""Wrap primitive values in dict format for consistent response structure.
|
|
1103
|
+
|
|
1104
|
+
Transforms primitive API responses into dict format so downstream code
|
|
1105
|
+
can always expect dict-based data structures.
|
|
1106
|
+
|
|
1107
|
+
Args:
|
|
1108
|
+
data: Response data (could be primitive, list, dict, or None)
|
|
1109
|
+
|
|
1110
|
+
Returns:
|
|
1111
|
+
- If data is a primitive (str, int, float, bool): {"value": data}
|
|
1112
|
+
- If data is a list: wraps all non-dict elements as {"value": item}
|
|
1113
|
+
- If data is already a dict or list of dicts: unchanged
|
|
1114
|
+
- If data is None: None
|
|
1115
|
+
|
|
1116
|
+
Examples:
|
|
1117
|
+
>>> executor._wrap_primitives(42)
|
|
1118
|
+
{"value": 42}
|
|
1119
|
+
>>> executor._wrap_primitives([1, 2, 3])
|
|
1120
|
+
[{"value": 1}, {"value": 2}, {"value": 3}]
|
|
1121
|
+
>>> executor._wrap_primitives([1, {"id": 2}, 3])
|
|
1122
|
+
[{"value": 1}, {"id": 2}, {"value": 3}]
|
|
1123
|
+
>>> executor._wrap_primitives([[1, 2], 3])
|
|
1124
|
+
[{"value": [1, 2]}, {"value": 3}]
|
|
1125
|
+
>>> executor._wrap_primitives({"id": 1})
|
|
1126
|
+
{"id": 1} # unchanged
|
|
1127
|
+
"""
|
|
1128
|
+
if data is None:
|
|
1129
|
+
return None
|
|
1130
|
+
|
|
1131
|
+
# Handle primitive scalars
|
|
1132
|
+
if isinstance(data, (bool, str, int, float)):
|
|
1133
|
+
return {"value": data}
|
|
1134
|
+
|
|
1135
|
+
# Handle lists - wrap non-dict elements
|
|
1136
|
+
if isinstance(data, list):
|
|
1137
|
+
if not data:
|
|
1138
|
+
return [] # Empty list unchanged
|
|
1139
|
+
|
|
1140
|
+
wrapped = []
|
|
1141
|
+
for item in data:
|
|
1142
|
+
if isinstance(item, dict):
|
|
1143
|
+
wrapped.append(item)
|
|
1144
|
+
else:
|
|
1145
|
+
wrapped.append({"value": item})
|
|
1146
|
+
return wrapped
|
|
1147
|
+
|
|
1148
|
+
# Dict - return unchanged
|
|
1149
|
+
if isinstance(data, dict):
|
|
1150
|
+
return data
|
|
1151
|
+
|
|
1152
|
+
# Unknown type - wrap for safety
|
|
1153
|
+
return {"value": data}
|
|
1154
|
+
|
|
1101
1155
|
def _extract_records(
|
|
1102
1156
|
self,
|
|
1103
|
-
response_data:
|
|
1157
|
+
response_data: Any,
|
|
1104
1158
|
endpoint: EndpointDefinition,
|
|
1105
|
-
) -> dict[str, Any] | list[Any] | None:
|
|
1159
|
+
) -> dict[str, Any] | list[dict[str, Any]] | None:
|
|
1106
1160
|
"""Extract records from response using record extractor.
|
|
1107
1161
|
|
|
1108
1162
|
Type inference based on action:
|
|
1109
1163
|
- list, search: Returns array ([] if not found)
|
|
1110
1164
|
- get, create, update, delete: Returns single record (None if not found)
|
|
1111
1165
|
|
|
1166
|
+
Automatically wraps primitive values (int, str, float, bool) in {"value": primitive}
|
|
1167
|
+
format to ensure consistent dict-based responses for downstream code.
|
|
1168
|
+
|
|
1112
1169
|
Args:
|
|
1113
|
-
response_data: Full API response
|
|
1170
|
+
response_data: Full API response (can be dict, list, primitive, or None)
|
|
1114
1171
|
endpoint: Endpoint with optional record extractor and action
|
|
1115
1172
|
|
|
1116
1173
|
Returns:
|
|
1117
1174
|
- Extracted data if extractor configured and path found
|
|
1118
1175
|
- [] or None if path not found (based on action)
|
|
1119
1176
|
- Original response if no extractor configured or on error
|
|
1177
|
+
- Primitives are wrapped as {"value": primitive}
|
|
1120
1178
|
"""
|
|
1121
1179
|
# Check if endpoint has record extractor
|
|
1122
1180
|
extractor = endpoint.record_extractor
|
|
1123
1181
|
if not extractor:
|
|
1124
|
-
return response_data
|
|
1182
|
+
return self._wrap_primitives(response_data)
|
|
1125
1183
|
|
|
1126
1184
|
# Determine if this action returns array or single record
|
|
1127
1185
|
action = endpoint.action
|
|
1128
1186
|
if not action:
|
|
1129
|
-
return response_data
|
|
1187
|
+
return self._wrap_primitives(response_data)
|
|
1130
1188
|
|
|
1131
1189
|
is_array_action = action in (Action.LIST, Action.API_SEARCH)
|
|
1132
1190
|
|
|
@@ -1139,17 +1197,19 @@ class LocalExecutor:
|
|
|
1139
1197
|
# Path not found - return empty based on action
|
|
1140
1198
|
return [] if is_array_action else None
|
|
1141
1199
|
|
|
1142
|
-
# Return extracted data
|
|
1200
|
+
# Return extracted data with primitive wrapping
|
|
1143
1201
|
if is_array_action:
|
|
1144
1202
|
# For array actions, return the array (or list of matches)
|
|
1145
|
-
|
|
1203
|
+
result = matches[0] if len(matches) == 1 else matches
|
|
1146
1204
|
else:
|
|
1147
1205
|
# For single record actions, return first match
|
|
1148
|
-
|
|
1206
|
+
result = matches[0]
|
|
1207
|
+
|
|
1208
|
+
return self._wrap_primitives(result)
|
|
1149
1209
|
|
|
1150
1210
|
except Exception as e:
|
|
1151
1211
|
logging.warning(f"Failed to apply record extractor '{extractor}': {e}. Returning original response.")
|
|
1152
|
-
return response_data
|
|
1212
|
+
return self._wrap_primitives(response_data)
|
|
1153
1213
|
|
|
1154
1214
|
def _extract_metadata(
|
|
1155
1215
|
self,
|
|
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
|
|
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
|