airbyte-agent-zendesk-support 0.18.26__py3-none-any.whl → 0.18.28__py3-none-any.whl
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_zendesk_support/_vendored/connector_sdk/executor/local_executor.py +39 -19
- {airbyte_agent_zendesk_support-0.18.26.dist-info → airbyte_agent_zendesk_support-0.18.28.dist-info}/METADATA +8 -8
- {airbyte_agent_zendesk_support-0.18.26.dist-info → airbyte_agent_zendesk_support-0.18.28.dist-info}/RECORD +4 -4
- {airbyte_agent_zendesk_support-0.18.26.dist-info → airbyte_agent_zendesk_support-0.18.28.dist-info}/WHEEL +0 -0
|
@@ -674,16 +674,16 @@ class LocalExecutor:
|
|
|
674
674
|
return {key: value for key, value in params.items() if key in allowed_params}
|
|
675
675
|
|
|
676
676
|
def _extract_body(self, allowed_fields: list[str], params: dict[str, Any]) -> dict[str, Any]:
|
|
677
|
-
"""Extract body fields from params.
|
|
677
|
+
"""Extract body fields from params, filtering out None values.
|
|
678
678
|
|
|
679
679
|
Args:
|
|
680
680
|
allowed_fields: List of allowed body field names
|
|
681
681
|
params: All parameters
|
|
682
682
|
|
|
683
683
|
Returns:
|
|
684
|
-
Dictionary of body fields
|
|
684
|
+
Dictionary of body fields with None values filtered out
|
|
685
685
|
"""
|
|
686
|
-
return {key: value for key, value in params.items() if key in allowed_fields}
|
|
686
|
+
return {key: value for key, value in params.items() if key in allowed_fields and value is not None}
|
|
687
687
|
|
|
688
688
|
def _serialize_deep_object_params(self, params: dict[str, Any], deep_object_param_names: list[str]) -> dict[str, Any]:
|
|
689
689
|
"""Serialize deepObject parameters to bracket notation format.
|
|
@@ -837,7 +837,9 @@ class LocalExecutor:
|
|
|
837
837
|
Request body dict or None if no body needed
|
|
838
838
|
"""
|
|
839
839
|
if endpoint.graphql_body:
|
|
840
|
-
|
|
840
|
+
# Extract defaults from query_params_schema for GraphQL variable interpolation
|
|
841
|
+
param_defaults = {name: schema.get("default") for name, schema in endpoint.query_params_schema.items() if "default" in schema}
|
|
842
|
+
return self._build_graphql_body(endpoint.graphql_body, params, param_defaults)
|
|
841
843
|
elif endpoint.body_fields:
|
|
842
844
|
return self._extract_body(endpoint.body_fields, params)
|
|
843
845
|
return None
|
|
@@ -903,12 +905,18 @@ class LocalExecutor:
|
|
|
903
905
|
|
|
904
906
|
return query
|
|
905
907
|
|
|
906
|
-
def _build_graphql_body(
|
|
908
|
+
def _build_graphql_body(
|
|
909
|
+
self,
|
|
910
|
+
graphql_config: dict[str, Any],
|
|
911
|
+
params: dict[str, Any],
|
|
912
|
+
param_defaults: dict[str, Any] | None = None,
|
|
913
|
+
) -> dict[str, Any]:
|
|
907
914
|
"""Build GraphQL request body with variable substitution and field selection.
|
|
908
915
|
|
|
909
916
|
Args:
|
|
910
917
|
graphql_config: GraphQL configuration from x-airbyte-body-type extension
|
|
911
918
|
params: Parameters from execute() call
|
|
919
|
+
param_defaults: Default values for params from query_params_schema
|
|
912
920
|
|
|
913
921
|
Returns:
|
|
914
922
|
GraphQL request body: {"query": "...", "variables": {...}}
|
|
@@ -922,7 +930,7 @@ class LocalExecutor:
|
|
|
922
930
|
|
|
923
931
|
# Substitute variables from params
|
|
924
932
|
if "variables" in graphql_config and graphql_config["variables"]:
|
|
925
|
-
body["variables"] = self._interpolate_variables(graphql_config["variables"], params)
|
|
933
|
+
body["variables"] = self._interpolate_variables(graphql_config["variables"], params, param_defaults)
|
|
926
934
|
|
|
927
935
|
# Add operation name if specified
|
|
928
936
|
if "operationName" in graphql_config:
|
|
@@ -981,7 +989,12 @@ class LocalExecutor:
|
|
|
981
989
|
fields_str = " ".join(graphql_fields)
|
|
982
990
|
return query.replace("{{ fields }}", fields_str)
|
|
983
991
|
|
|
984
|
-
def _interpolate_variables(
|
|
992
|
+
def _interpolate_variables(
|
|
993
|
+
self,
|
|
994
|
+
variables: dict[str, Any],
|
|
995
|
+
params: dict[str, Any],
|
|
996
|
+
param_defaults: dict[str, Any] | None = None,
|
|
997
|
+
) -> dict[str, Any]:
|
|
985
998
|
"""Recursively interpolate variables using params.
|
|
986
999
|
|
|
987
1000
|
Preserves types (doesn't stringify everything).
|
|
@@ -990,15 +1003,18 @@ class LocalExecutor:
|
|
|
990
1003
|
- Direct replacement: "{{ owner }}" → params["owner"] (preserves type)
|
|
991
1004
|
- Nested objects: {"input": {"name": "{{ name }}"}}
|
|
992
1005
|
- Arrays: [{"id": "{{ id }}"}]
|
|
993
|
-
-
|
|
1006
|
+
- Default values: "{{ per_page }}" → param_defaults["per_page"] if not in params
|
|
1007
|
+
- Unsubstituted placeholders: "{{ states }}" → None (for optional params without defaults)
|
|
994
1008
|
|
|
995
1009
|
Args:
|
|
996
1010
|
variables: Variables dict with template placeholders
|
|
997
1011
|
params: Parameters to substitute
|
|
1012
|
+
param_defaults: Default values for params from query_params_schema
|
|
998
1013
|
|
|
999
1014
|
Returns:
|
|
1000
1015
|
Interpolated variables dict with types preserved
|
|
1001
1016
|
"""
|
|
1017
|
+
defaults = param_defaults or {}
|
|
1002
1018
|
|
|
1003
1019
|
def interpolate_value(value: Any) -> Any:
|
|
1004
1020
|
if isinstance(value, str):
|
|
@@ -1012,8 +1028,15 @@ class LocalExecutor:
|
|
|
1012
1028
|
value = value.replace(placeholder, str(param_value))
|
|
1013
1029
|
|
|
1014
1030
|
# Check if any unsubstituted placeholders remain
|
|
1015
|
-
# If so, return None (treats as "not provided" for optional params)
|
|
1016
1031
|
if re.search(r"\{\{\s*\w+\s*\}\}", value):
|
|
1032
|
+
# Extract placeholder name and check for default value
|
|
1033
|
+
match = re.search(r"\{\{\s*(\w+)\s*\}\}", value)
|
|
1034
|
+
if match:
|
|
1035
|
+
param_name = match.group(1)
|
|
1036
|
+
if param_name in defaults:
|
|
1037
|
+
# Use default value (preserves type)
|
|
1038
|
+
return defaults[param_name]
|
|
1039
|
+
# No default found - return None (for optional params)
|
|
1017
1040
|
return None
|
|
1018
1041
|
|
|
1019
1042
|
return value
|
|
@@ -1151,21 +1174,18 @@ class LocalExecutor:
|
|
|
1151
1174
|
if action not in (Action.CREATE, Action.UPDATE):
|
|
1152
1175
|
return
|
|
1153
1176
|
|
|
1154
|
-
#
|
|
1155
|
-
|
|
1177
|
+
# Get the request schema to find truly required fields
|
|
1178
|
+
request_schema = endpoint.request_schema
|
|
1179
|
+
if not request_schema:
|
|
1156
1180
|
return
|
|
1157
1181
|
|
|
1158
|
-
#
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
missing_fields = []
|
|
1162
|
-
for field in endpoint.body_fields:
|
|
1163
|
-
if field not in params:
|
|
1164
|
-
missing_fields.append(field)
|
|
1182
|
+
# Only validate fields explicitly marked as required in the schema
|
|
1183
|
+
required_fields = request_schema.get("required", [])
|
|
1184
|
+
missing_fields = [field for field in required_fields if field not in params]
|
|
1165
1185
|
|
|
1166
1186
|
if missing_fields:
|
|
1167
1187
|
raise MissingParameterError(
|
|
1168
|
-
f"Missing required body fields for {entity}.{action.value}: {missing_fields}. Provided parameters: {list(params.keys())}"
|
|
1188
|
+
f"Missing required body fields for {entity}.{action.value}: {missing_fields}. " f"Provided parameters: {list(params.keys())}"
|
|
1169
1189
|
)
|
|
1170
1190
|
|
|
1171
1191
|
async def close(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-zendesk-support
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.28
|
|
4
4
|
Summary: Airbyte Zendesk-Support Connector for AI platforms
|
|
5
5
|
Project-URL: Homepage, https://github.com/airbytehq/airbyte-embedded
|
|
6
6
|
Project-URL: Documentation, https://github.com/airbytehq/airbyte-embedded/tree/main/integrations
|
|
@@ -47,10 +47,10 @@ The Zendesk-Support connector is optimized to handle prompts like these.
|
|
|
47
47
|
|
|
48
48
|
- Show me the tickets assigned to me last week
|
|
49
49
|
- What are the top 5 support issues our organization has faced this month?
|
|
50
|
-
- List all unresolved tickets for {customer}
|
|
50
|
+
- List all unresolved tickets for \{customer\}
|
|
51
51
|
- Analyze the satisfaction ratings for our support team in the last 30 days
|
|
52
52
|
- Compare ticket resolution times across different support groups
|
|
53
|
-
- Show me the details of recent tickets tagged with {tag}
|
|
53
|
+
- Show me the details of recent tickets tagged with \{tag\}
|
|
54
54
|
- Identify the most common ticket fields used in our support workflow
|
|
55
55
|
- Summarize the performance of our SLA policies this quarter
|
|
56
56
|
|
|
@@ -58,11 +58,11 @@ The Zendesk-Support connector is optimized to handle prompts like these.
|
|
|
58
58
|
|
|
59
59
|
The Zendesk-Support connector isn't currently able to handle prompts like these.
|
|
60
60
|
|
|
61
|
-
- Create a new support ticket for {customer}
|
|
61
|
+
- Create a new support ticket for \{customer\}
|
|
62
62
|
- Update the priority of this ticket
|
|
63
|
-
- Assign this ticket to {team_member}
|
|
63
|
+
- Assign this ticket to \{team_member\}
|
|
64
64
|
- Delete these old support tickets
|
|
65
|
-
- Send an automatic response to {customer}
|
|
65
|
+
- Send an automatic response to \{customer\}
|
|
66
66
|
|
|
67
67
|
## Installation
|
|
68
68
|
|
|
@@ -141,6 +141,6 @@ For the service's official API docs, see the [Zendesk-Support API reference](htt
|
|
|
141
141
|
|
|
142
142
|
## Version information
|
|
143
143
|
|
|
144
|
-
- **Package version:** 0.18.
|
|
144
|
+
- **Package version:** 0.18.28
|
|
145
145
|
- **Connector version:** 0.1.4
|
|
146
|
-
- **Generated with Connector SDK commit SHA:**
|
|
146
|
+
- **Generated with Connector SDK commit SHA:** 0580c7278394ff52ee3bec5d5192905ac3b15878
|
|
@@ -20,7 +20,7 @@ airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/__init__.py,sh
|
|
|
20
20
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py,sha256=HoDgZuEgGHj78P-BGwUf6HGPVWynbdKjGOmjb-JDk58,7188
|
|
21
21
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
|
|
22
22
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py,sha256=YQ-qfT7PZh9izNFHHe7SAcETiZOKrWjTU-okVb0_VL8,7079
|
|
23
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=
|
|
23
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=Y79sYM63U_hmWKG6v-gFg24lfasafkJqzRK2U80tHOE,63003
|
|
24
24
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/models.py,sha256=lYVT_bNcw-PoIks4WHNyl2VY-lJVf2FntzINSOBIheE,5845
|
|
25
25
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/__init__.py,sha256=y8fbzZn-3yV9OxtYz8Dy6FFGI5v6TOqADd1G3xHH3Hw,911
|
|
26
26
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/config.py,sha256=6J7YIIwHC6sRu9i-yKa5XvArwK2KU60rlnmxzDZq3lw,3283
|
|
@@ -50,6 +50,6 @@ airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/__init__.py,sha2
|
|
|
50
50
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
|
|
51
51
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py,sha256=NvqjlUbkm6cbGh4ffKxYxtjdwwgzfPF4MKJ2GfgWeFg,1285
|
|
52
52
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py,sha256=KacNdbHatvPPhnNrycp5YUuD5xpkp56AFcHd-zguBgk,5247
|
|
53
|
-
airbyte_agent_zendesk_support-0.18.
|
|
54
|
-
airbyte_agent_zendesk_support-0.18.
|
|
55
|
-
airbyte_agent_zendesk_support-0.18.
|
|
53
|
+
airbyte_agent_zendesk_support-0.18.28.dist-info/METADATA,sha256=OmUL-2Sj134KaJgTKDH-chSYfqZhlj7jCn8m1ai0SeI,6267
|
|
54
|
+
airbyte_agent_zendesk_support-0.18.28.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
55
|
+
airbyte_agent_zendesk_support-0.18.28.dist-info/RECORD,,
|
|
File without changes
|