interloper-toolkit 0.110.2__tar.gz → 0.113.0__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.
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/PKG-INFO +1 -1
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/pyproject.toml +1 -1
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/pyproject.toml.orig +1 -1
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/catalog.py +19 -17
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/collection.py +5 -15
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/sources.py +4 -3
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/utils.py +0 -1
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/README.md +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/__init__.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/analytics.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/authz.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/context.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/jobs.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/lineage.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/models.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/scheduling.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/stats.py +0 -0
- {interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/tools.py +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# ###############
|
|
4
4
|
[project]
|
|
5
5
|
name = "interloper-toolkit"
|
|
6
|
-
version = "0.
|
|
6
|
+
version = "0.113.0"
|
|
7
7
|
description = "Interloper tool functions shared by the AI surfaces (agent, MCP)"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
authors = [{ name = "Guillaume Onfroy", email = "guillaume@digitlcloud.com" }]
|
|
@@ -50,9 +50,7 @@ def _inline_refs(node: Any, defs: dict[str, Any] | None = None, _stack: frozense
|
|
|
50
50
|
return {k: _inline_refs(v, defs, _stack) for k, v in node.items() if k not in ("$defs", "$ref")}
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
def list_definitions(
|
|
54
|
-
ctx: ToolkitContext, kind: str | None = None
|
|
55
|
-
) -> DefinitionCounts | DefinitionList | ToolError:
|
|
53
|
+
def list_definitions(ctx: ToolkitContext, kind: str | None = None) -> DefinitionCounts | DefinitionList | ToolError:
|
|
56
54
|
"""List the component definitions available in the catalog.
|
|
57
55
|
|
|
58
56
|
This answers "what does Interloper support / what could we add?" — the
|
|
@@ -214,14 +212,16 @@ def search_fields(ctx: ToolkitContext, query: str, limit: int = 50, offset: int
|
|
|
214
212
|
for field_name, field_info in schema["properties"].items():
|
|
215
213
|
field_desc = field_info.get("description", "")
|
|
216
214
|
if query_lower in field_name.lower() or query_lower in field_desc.lower():
|
|
217
|
-
matches.append(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
215
|
+
matches.append(
|
|
216
|
+
FieldMatch(
|
|
217
|
+
source_key=source_key,
|
|
218
|
+
asset_key=asset_key,
|
|
219
|
+
qualified_key=f"{source_key}.{asset_key}",
|
|
220
|
+
field_name=field_name,
|
|
221
|
+
field_type=_extract_type(field_info),
|
|
222
|
+
description=field_desc,
|
|
223
|
+
)
|
|
224
|
+
)
|
|
225
225
|
|
|
226
226
|
page = matches[offset : offset + limit]
|
|
227
227
|
return FieldSearchResult(query=query, match_count=len(page), total=len(matches), matches=page)
|
|
@@ -266,12 +266,14 @@ def compare_schemas(
|
|
|
266
266
|
for field in sorted(shared):
|
|
267
267
|
type_a = _extract_type(schema_a[field])
|
|
268
268
|
type_b = _extract_type(schema_b[field])
|
|
269
|
-
shared_details.append(
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
269
|
+
shared_details.append(
|
|
270
|
+
SharedField(
|
|
271
|
+
field=field,
|
|
272
|
+
type_a=type_a,
|
|
273
|
+
type_b=type_b,
|
|
274
|
+
type_match=type_a == type_b,
|
|
275
|
+
)
|
|
276
|
+
)
|
|
275
277
|
|
|
276
278
|
return SchemaComparison(
|
|
277
279
|
asset_a=f"{source_key_a}.{asset_key_a}",
|
{interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/collection.py
RENAMED
|
@@ -19,20 +19,12 @@ from uuid import UUID
|
|
|
19
19
|
|
|
20
20
|
import httpx2
|
|
21
21
|
from interloper.component import KINDS
|
|
22
|
-
from interloper.connection
|
|
23
|
-
from interloper.errors import
|
|
24
|
-
CatalogKeyError,
|
|
25
|
-
ComponentDriftError,
|
|
26
|
-
ConfigError,
|
|
27
|
-
ConnectionCheckError,
|
|
28
|
-
HydrationError,
|
|
29
|
-
InUseError,
|
|
30
|
-
NotFoundError,
|
|
31
|
-
)
|
|
22
|
+
from interloper.connection import Connection
|
|
23
|
+
from interloper.errors import CatalogKeyError, ConfigError, ConnectionCheckError
|
|
32
24
|
from interloper.oauth import OAuthAppCredentials
|
|
33
25
|
from interloper.settings import AppSettings
|
|
34
|
-
from interloper.utils
|
|
35
|
-
from interloper_db import ComponentQuery
|
|
26
|
+
from interloper.utils import invoke
|
|
27
|
+
from interloper_db import ComponentDriftError, ComponentQuery, HydrationError, InUseError, NotFoundError
|
|
36
28
|
from pydantic import ValidationError
|
|
37
29
|
|
|
38
30
|
from interloper_toolkit.authz import requires_role
|
|
@@ -455,9 +447,7 @@ async def check_connection(ctx: ToolkitContext, connection_id: str) -> Connectio
|
|
|
455
447
|
# Never forward the wrapped message: pydantic errors embed input
|
|
456
448
|
# values, which for connections may be secrets — name fields only.
|
|
457
449
|
if isinstance(e.__cause__, ValidationError):
|
|
458
|
-
fields = ", ".join(
|
|
459
|
-
".".join(str(loc) for loc in err["loc"]) or "(root)" for err in e.__cause__.errors()
|
|
460
|
-
)
|
|
450
|
+
fields = ", ".join(".".join(str(loc) for loc in err["loc"]) or "(root)" for err in e.__cause__.errors())
|
|
461
451
|
message = f"The stored config is no longer valid for this connection type (invalid fields: {fields})."
|
|
462
452
|
else:
|
|
463
453
|
message = "The stored connection could not be reconstructed."
|
|
@@ -13,9 +13,10 @@ import logging
|
|
|
13
13
|
from typing import Any
|
|
14
14
|
from uuid import UUID
|
|
15
15
|
|
|
16
|
-
from interloper.errors import CatalogKeyError,
|
|
17
|
-
from interloper.resource
|
|
18
|
-
from interloper.utils
|
|
16
|
+
from interloper.errors import CatalogKeyError, ConfigError
|
|
17
|
+
from interloper.resource import is_fetch_field_provider
|
|
18
|
+
from interloper.utils import invoke
|
|
19
|
+
from interloper_db import ComponentDriftError, HydrationError
|
|
19
20
|
|
|
20
21
|
from interloper_toolkit.authz import requires_role
|
|
21
22
|
from interloper_toolkit.context import ToolkitContext
|
|
File without changes
|
{interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/__init__.py
RENAMED
|
File without changes
|
{interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/analytics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interloper_toolkit-0.110.2 → interloper_toolkit-0.113.0}/src/interloper_toolkit/scheduling.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|