airbyte-agent-hubspot 0.15.25__py3-none-any.whl → 0.15.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_hubspot/__init__.py +2 -2
- airbyte_agent_hubspot/_vendored/connector_sdk/executor/local_executor.py +39 -19
- airbyte_agent_hubspot/models.py +7 -7
- {airbyte_agent_hubspot-0.15.25.dist-info → airbyte_agent_hubspot-0.15.28.dist-info}/METADATA +12 -8
- {airbyte_agent_hubspot-0.15.25.dist-info → airbyte_agent_hubspot-0.15.28.dist-info}/RECORD +6 -6
- {airbyte_agent_hubspot-0.15.25.dist-info → airbyte_agent_hubspot-0.15.28.dist-info}/WHEEL +0 -0
|
@@ -22,9 +22,9 @@ from .models import (
|
|
|
22
22
|
Ticket,
|
|
23
23
|
TicketsList,
|
|
24
24
|
SchemaAssociationsItem,
|
|
25
|
-
SchemaLabels,
|
|
26
25
|
SchemaPropertiesItemModificationmetadata,
|
|
27
26
|
SchemaPropertiesItem,
|
|
27
|
+
SchemaLabels,
|
|
28
28
|
Schema,
|
|
29
29
|
SchemasList,
|
|
30
30
|
CRMObjectProperties,
|
|
@@ -83,4 +83,4 @@ from .types import (
|
|
|
83
83
|
ObjectsGetParams
|
|
84
84
|
)
|
|
85
85
|
|
|
86
|
-
__all__ = ["HubspotConnector", "HubspotAuthConfig", "ContactProperties", "Contact", "PagingNext", "Paging", "ContactsList", "CompanyProperties", "Company", "CompaniesList", "DealProperties", "Deal", "DealsList", "TicketProperties", "Ticket", "TicketsList", "SchemaAssociationsItem", "
|
|
86
|
+
__all__ = ["HubspotConnector", "HubspotAuthConfig", "ContactProperties", "Contact", "PagingNext", "Paging", "ContactsList", "CompanyProperties", "Company", "CompaniesList", "DealProperties", "Deal", "DealsList", "TicketProperties", "Ticket", "TicketsList", "SchemaAssociationsItem", "SchemaPropertiesItemModificationmetadata", "SchemaPropertiesItem", "SchemaLabels", "Schema", "SchemasList", "CRMObjectProperties", "CRMObject", "ObjectsList", "ContactsListResultMeta", "ContactsSearchResultMeta", "CompaniesListResultMeta", "CompaniesSearchResultMeta", "DealsListResultMeta", "DealsSearchResultMeta", "TicketsListResultMeta", "TicketsSearchResultMeta", "ObjectsListResultMeta", "HubspotExecuteResult", "HubspotExecuteResultWithMeta", "ContactsListResult", "ContactsSearchResult", "CompaniesListResult", "CompaniesSearchResult", "DealsListResult", "DealsSearchResult", "TicketsListResult", "TicketsSearchResult", "SchemasListResult", "ObjectsListResult", "ContactsSearchParamsFiltergroupsItemFiltersItem", "ContactsSearchParamsFiltergroupsItem", "ContactsSearchParamsSortsItem", "CompaniesSearchParamsFiltergroupsItemFiltersItem", "CompaniesSearchParamsFiltergroupsItem", "CompaniesSearchParamsSortsItem", "DealsSearchParamsFiltergroupsItemFiltersItem", "DealsSearchParamsFiltergroupsItem", "DealsSearchParamsSortsItem", "TicketsSearchParamsFiltergroupsItemFiltersItem", "TicketsSearchParamsFiltergroupsItem", "TicketsSearchParamsSortsItem", "ContactsListParams", "ContactsGetParams", "ContactsSearchParams", "CompaniesListParams", "CompaniesGetParams", "CompaniesSearchParams", "DealsListParams", "DealsGetParams", "DealsSearchParams", "TicketsListParams", "TicketsGetParams", "TicketsSearchParams", "SchemasListParams", "SchemasGetParams", "ObjectsListParams", "ObjectsGetParams"]
|
|
@@ -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):
|
airbyte_agent_hubspot/models.py
CHANGED
|
@@ -200,13 +200,6 @@ class SchemaAssociationsItem(BaseModel):
|
|
|
200
200
|
created_at: Union[str | None, Any] = Field(default=None, alias="createdAt")
|
|
201
201
|
updated_at: Union[str | None, Any] = Field(default=None, alias="updatedAt")
|
|
202
202
|
|
|
203
|
-
class SchemaLabels(BaseModel):
|
|
204
|
-
"""Display labels"""
|
|
205
|
-
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
206
|
-
|
|
207
|
-
singular: Union[str, Any] = Field(default=None)
|
|
208
|
-
plural: Union[str, Any] = Field(default=None)
|
|
209
|
-
|
|
210
203
|
class SchemaPropertiesItemModificationmetadata(BaseModel):
|
|
211
204
|
"""Nested schema for SchemaPropertiesItem.modificationMetadata"""
|
|
212
205
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
@@ -243,6 +236,13 @@ class SchemaPropertiesItem(BaseModel):
|
|
|
243
236
|
show_currency_symbol: Union[bool, Any] = Field(default=None, alias="showCurrencySymbol")
|
|
244
237
|
modification_metadata: Union[SchemaPropertiesItemModificationmetadata, Any] = Field(default=None, alias="modificationMetadata")
|
|
245
238
|
|
|
239
|
+
class SchemaLabels(BaseModel):
|
|
240
|
+
"""Display labels"""
|
|
241
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
242
|
+
|
|
243
|
+
singular: Union[str, Any] = Field(default=None)
|
|
244
|
+
plural: Union[str, Any] = Field(default=None)
|
|
245
|
+
|
|
246
246
|
class Schema(BaseModel):
|
|
247
247
|
"""Custom object schema definition"""
|
|
248
248
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
{airbyte_agent_hubspot-0.15.25.dist-info → airbyte_agent_hubspot-0.15.28.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-hubspot
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.28
|
|
4
4
|
Summary: Airbyte Hubspot 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
|
|
@@ -41,10 +41,12 @@ tickets, and custom objects for customer relationship management and sales analy
|
|
|
41
41
|
|
|
42
42
|
## Example questions
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
The Hubspot connector is optimized to handle prompts like these.
|
|
45
|
+
|
|
46
|
+
- Show me all deals from \{company\} this quarter
|
|
45
47
|
- What are the top 5 most valuable deals in my pipeline right now?
|
|
46
|
-
- List recent tickets from {customer} and analyze their support trends
|
|
47
|
-
- Search for contacts in the marketing department at {company}
|
|
48
|
+
- List recent tickets from \{customer\} and analyze their support trends
|
|
49
|
+
- Search for contacts in the marketing department at \{company\}
|
|
48
50
|
- Give me an overview of my sales team's deals in the last 30 days
|
|
49
51
|
- Identify the most active companies in our CRM this month
|
|
50
52
|
- Compare the number of deals closed by different sales representatives
|
|
@@ -52,8 +54,10 @@ tickets, and custom objects for customer relationship management and sales analy
|
|
|
52
54
|
|
|
53
55
|
## Unsupported questions
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
The Hubspot connector isn't currently able to handle prompts like these.
|
|
58
|
+
|
|
59
|
+
- Create a new contact record for \{person\}
|
|
60
|
+
- Update the contact information for \{customer\}
|
|
57
61
|
- Delete the ticket from last week's support case
|
|
58
62
|
- Schedule a follow-up task for this deal
|
|
59
63
|
- Send an email to all contacts in the sales pipeline
|
|
@@ -101,6 +105,6 @@ For the service's official API docs, see the [Hubspot API reference](https://dev
|
|
|
101
105
|
|
|
102
106
|
## Version information
|
|
103
107
|
|
|
104
|
-
- **Package version:** 0.15.
|
|
108
|
+
- **Package version:** 0.15.28
|
|
105
109
|
- **Connector version:** 0.1.3
|
|
106
|
-
- **Generated with Connector SDK commit SHA:**
|
|
110
|
+
- **Generated with Connector SDK commit SHA:** 0580c7278394ff52ee3bec5d5192905ac3b15878
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
airbyte_agent_hubspot/__init__.py,sha256=
|
|
1
|
+
airbyte_agent_hubspot/__init__.py,sha256=4x_auxNYOqSh44LecxxBfCRXPj9lbAbVEwQoOoM3fn4,3861
|
|
2
2
|
airbyte_agent_hubspot/connector.py,sha256=SRJ9EUfM9xrnj4H5KtEmu_TMU60eXKlCCGMygWBxw9w,43498
|
|
3
3
|
airbyte_agent_hubspot/connector_model.py,sha256=BH4zHfe9M8HNNdhdz0v3eiMpKTHua9Vn675uAKJnbIY,148176
|
|
4
|
-
airbyte_agent_hubspot/models.py,sha256=
|
|
4
|
+
airbyte_agent_hubspot/models.py,sha256=7FqeeCTwWtWhyk8xs21wkhWZvv7m9xmkgOckKWyDj2o,20452
|
|
5
5
|
airbyte_agent_hubspot/types.py,sha256=SraBhiq24dhJwB0nh8jysVFJ7UyCI8zSimb78yhel1c,7569
|
|
6
6
|
airbyte_agent_hubspot/_vendored/__init__.py,sha256=ILl7AHXMui__swyrjxrh9yRa4dLiwBvV6axPWFWty80,38
|
|
7
7
|
airbyte_agent_hubspot/_vendored/connector_sdk/__init__.py,sha256=T5o7roU6NSpH-lCAGZ338sE5dlh4ZU6i6IkeG1zpems,1949
|
|
@@ -20,7 +20,7 @@ airbyte_agent_hubspot/_vendored/connector_sdk/cloud_utils/__init__.py,sha256=479
|
|
|
20
20
|
airbyte_agent_hubspot/_vendored/connector_sdk/cloud_utils/client.py,sha256=HoDgZuEgGHj78P-BGwUf6HGPVWynbdKjGOmjb-JDk58,7188
|
|
21
21
|
airbyte_agent_hubspot/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
|
|
22
22
|
airbyte_agent_hubspot/_vendored/connector_sdk/executor/hosted_executor.py,sha256=YQ-qfT7PZh9izNFHHe7SAcETiZOKrWjTU-okVb0_VL8,7079
|
|
23
|
-
airbyte_agent_hubspot/_vendored/connector_sdk/executor/local_executor.py,sha256=
|
|
23
|
+
airbyte_agent_hubspot/_vendored/connector_sdk/executor/local_executor.py,sha256=Y79sYM63U_hmWKG6v-gFg24lfasafkJqzRK2U80tHOE,63003
|
|
24
24
|
airbyte_agent_hubspot/_vendored/connector_sdk/executor/models.py,sha256=lYVT_bNcw-PoIks4WHNyl2VY-lJVf2FntzINSOBIheE,5845
|
|
25
25
|
airbyte_agent_hubspot/_vendored/connector_sdk/http/__init__.py,sha256=y8fbzZn-3yV9OxtYz8Dy6FFGI5v6TOqADd1G3xHH3Hw,911
|
|
26
26
|
airbyte_agent_hubspot/_vendored/connector_sdk/http/config.py,sha256=6J7YIIwHC6sRu9i-yKa5XvArwK2KU60rlnmxzDZq3lw,3283
|
|
@@ -50,6 +50,6 @@ airbyte_agent_hubspot/_vendored/connector_sdk/telemetry/__init__.py,sha256=RaLgk
|
|
|
50
50
|
airbyte_agent_hubspot/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
|
|
51
51
|
airbyte_agent_hubspot/_vendored/connector_sdk/telemetry/events.py,sha256=NvqjlUbkm6cbGh4ffKxYxtjdwwgzfPF4MKJ2GfgWeFg,1285
|
|
52
52
|
airbyte_agent_hubspot/_vendored/connector_sdk/telemetry/tracker.py,sha256=KacNdbHatvPPhnNrycp5YUuD5xpkp56AFcHd-zguBgk,5247
|
|
53
|
-
airbyte_agent_hubspot-0.15.
|
|
54
|
-
airbyte_agent_hubspot-0.15.
|
|
55
|
-
airbyte_agent_hubspot-0.15.
|
|
53
|
+
airbyte_agent_hubspot-0.15.28.dist-info/METADATA,sha256=guaeouPgdAp3VStJVxaFWwC5uK9qBxjw54zxC7ADw_w,4327
|
|
54
|
+
airbyte_agent_hubspot-0.15.28.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
55
|
+
airbyte_agent_hubspot-0.15.28.dist-info/RECORD,,
|
|
File without changes
|