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.
Files changed (60) hide show
  1. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/CHANGELOG.md +5 -0
  2. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/PKG-INFO +3 -3
  3. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/README.md +2 -2
  4. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/local_executor.py +69 -9
  5. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/pyproject.toml +1 -1
  6. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/.gitignore +0 -0
  7. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/REFERENCE.md +0 -0
  8. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/__init__.py +0 -0
  9. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/__init__.py +0 -0
  10. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/__init__.py +0 -0
  11. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/auth_strategies.py +0 -0
  12. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/auth_template.py +0 -0
  13. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
  14. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/cloud_utils/client.py +0 -0
  15. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/connector_model_loader.py +0 -0
  16. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/constants.py +0 -0
  17. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/exceptions.py +0 -0
  18. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/__init__.py +0 -0
  19. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
  20. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/executor/models.py +0 -0
  21. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/extensions.py +0 -0
  22. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/__init__.py +0 -0
  23. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
  24. {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
  25. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/config.py +0 -0
  26. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/exceptions.py +0 -0
  27. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/protocols.py +0 -0
  28. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http/response.py +0 -0
  29. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/http_client.py +0 -0
  30. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/introspection.py +0 -0
  31. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/logging/__init__.py +0 -0
  32. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/logging/logger.py +0 -0
  33. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/logging/types.py +0 -0
  34. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/__init__.py +0 -0
  35. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/config.py +0 -0
  36. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/models.py +0 -0
  37. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/redactor.py +0 -0
  38. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/observability/session.py +0 -0
  39. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/performance/__init__.py +0 -0
  40. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/performance/instrumentation.py +0 -0
  41. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/performance/metrics.py +0 -0
  42. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/__init__.py +0 -0
  43. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/base.py +0 -0
  44. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/components.py +0 -0
  45. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/connector.py +0 -0
  46. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/extensions.py +0 -0
  47. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/operations.py +0 -0
  48. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/schema/security.py +0 -0
  49. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/secrets.py +0 -0
  50. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/__init__.py +0 -0
  51. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/config.py +0 -0
  52. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/events.py +0 -0
  53. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/telemetry/tracker.py +0 -0
  54. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/types.py +0 -0
  55. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/utils.py +0 -0
  56. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/_vendored/connector_sdk/validation.py +0 -0
  57. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/connector.py +0 -0
  58. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/connector_model.py +0 -0
  59. {airbyte_agent_greenhouse-0.17.39 → airbyte_agent_greenhouse-0.17.40}/airbyte_agent_greenhouse/models.py +0 -0
  60. {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.39
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.39
114
+ - **Package version:** 0.17.40
115
115
  - **Connector version:** 0.1.2
116
- - **Generated with Connector SDK commit SHA:** 10173eb17aec4347d9ef4f993e10cd63d63fa847
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.39
81
+ - **Package version:** 0.17.40
82
82
  - **Connector version:** 0.1.2
83
- - **Generated with Connector SDK commit SHA:** 10173eb17aec4347d9ef4f993e10cd63d63fa847
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: dict[str, Any],
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
- return matches[0] if len(matches) == 1 else matches
1203
+ result = matches[0] if len(matches) == 1 else matches
1146
1204
  else:
1147
1205
  # For single record actions, return first match
1148
- return matches[0]
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,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "airbyte-agent-greenhouse"
3
- version = "0.17.39"
3
+ version = "0.17.40"
4
4
  description = "Airbyte Greenhouse Connector for AI platforms"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"