hyperforge-nucliadb 1.0.0.post105__tar.gz → 1.0.0.post108__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 (41) hide show
  1. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/PKG-INFO +1 -1
  2. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/pyproject.toml +1 -1
  3. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/sync/agent.py +2 -0
  4. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb.egg-info/PKG-INFO +1 -1
  5. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/tests/test_sync.py +54 -0
  6. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/README.md +0 -0
  7. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/setup.cfg +0 -0
  8. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/__init__.py +0 -0
  9. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/advanced_ask_agent.py +0 -0
  10. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/advanced_ask_config.py +0 -0
  11. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/__init__.py +0 -0
  12. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/analysis.py +0 -0
  13. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/ask.py +0 -0
  14. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/config.py +0 -0
  15. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/hydrate.py +0 -0
  16. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/kb_analysis.py +0 -0
  17. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/knowledge_scan.py +0 -0
  18. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/models.py +0 -0
  19. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/multi.py +0 -0
  20. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/nucliadb.py +0 -0
  21. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/prompt_analysis.py +0 -0
  22. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/query_analysis.py +0 -0
  23. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/rerank.py +0 -0
  24. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask/utils.py +0 -0
  25. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/ask_utils.py +0 -0
  26. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/basic_ask_agent.py +0 -0
  27. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/basic_ask_config.py +0 -0
  28. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/driver.py +0 -0
  29. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/driver_config.py +0 -0
  30. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/py.typed +0 -0
  31. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/sync/__init__.py +0 -0
  32. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/sync/config.py +0 -0
  33. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/sync/config_driver.py +0 -0
  34. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb/sync/driver.py +0 -0
  35. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb.egg-info/SOURCES.txt +0 -0
  36. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb.egg-info/dependency_links.txt +0 -0
  37. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb.egg-info/requires.txt +0 -0
  38. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/src/hyperforge_nucliadb.egg-info/top_level.txt +0 -0
  39. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/tests/test_ask_utils.py +0 -0
  40. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/tests/test_driver.py +0 -0
  41. {hyperforge_nucliadb-1.0.0.post105 → hyperforge_nucliadb-1.0.0.post108}/tests/test_nucliadb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperforge_nucliadb
3
- Version: 1.0.0.post105
3
+ Version: 1.0.0.post108
4
4
  Summary: NucliaDB Hyperforge agent
5
5
  Author-email: Nuclia <nucliadb@nuclia.com>
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hyperforge_nucliadb"
7
- version = "1.0.0.post105"
7
+ version = "1.0.0.post108"
8
8
  license = "Apache-2.0"
9
9
  description = "NucliaDB Hyperforge agent"
10
10
  authors = [{ name = "Nuclia", email = "nucliadb@nuclia.com" }]
@@ -398,6 +398,8 @@ class SyncAskAgent(BasicAskAgent):
398
398
  connection_id,
399
399
  connection_credentials,
400
400
  ) in existing_credentials.items():
401
+ if connection_id not in connections_by_resource:
402
+ continue
401
403
  source = connections[kb_source_id]
402
404
  if (
403
405
  connection_id not in source.sync_configs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperforge_nucliadb
3
- Version: 1.0.0.post105
3
+ Version: 1.0.0.post108
4
4
  Summary: NucliaDB Hyperforge agent
5
5
  Author-email: Nuclia <nucliadb@nuclia.com>
6
6
  License-Expression: Apache-2.0
@@ -311,6 +311,60 @@ async def test_hybrid_dynamic_connection_is_authorized():
311
311
  assert result == {"source": {SYNC_CONFIG_ID: ["connected-resource"]}}
312
312
 
313
313
 
314
+ async def test_hybrid_dynamic_connection_ignores_unrequested_credentials():
315
+ agent = SyncAskAgent(SyncAskAgentConfig(sources=["source"]))
316
+ driver = SimpleNamespace(
317
+ config=SimpleNamespace(connection_ids=[]),
318
+ sync_configs={SYNC_CONFIG_ID: [EXTERNAL_CONNECTION_ID]},
319
+ information={
320
+ EXTERNAL_CONNECTION_ID: SimpleNamespace(provider="sharefile_oauth")
321
+ },
322
+ validate_resources=AsyncMock(return_value=["connected-resource"]),
323
+ )
324
+ resource = SimpleNamespace(
325
+ id="connected-resource",
326
+ origin=SimpleNamespace(
327
+ source_id=f"sync_config_{SYNC_CONFIG_ID}",
328
+ sync_metadata=SimpleNamespace(model_dump=MagicMock(return_value={})),
329
+ ),
330
+ )
331
+ ndb = SimpleNamespace(
332
+ config=SimpleNamespace(kbid="kb"),
333
+ driver=SimpleNamespace(get_resource_by_id=AsyncMock(return_value=resource)),
334
+ )
335
+ manager = SimpleNamespace(
336
+ drivers=SimpleNamespace(get=MagicMock(return_value=driver))
337
+ )
338
+ memory = MagicMock()
339
+ memory.get_session_id.return_value = "session"
340
+ memory.send_feedback = AsyncMock(
341
+ return_value=UserToAgentInteraction(
342
+ request_id="session",
343
+ response=json.dumps(
344
+ {
345
+ "existing_credentials": {
346
+ SYNC_CONFIG_ID: {EXTERNAL_CONNECTION_ID: "credential"},
347
+ "00000000-0000-0000-0000-000000000002": {
348
+ "unrequested-connection": "credential"
349
+ },
350
+ }
351
+ }
352
+ ),
353
+ )
354
+ )
355
+
356
+ with patch("hyperforge_nucliadb.sync.agent.get_ndb_driver", return_value=ndb):
357
+ result = await agent._post_filter_configured_resources(
358
+ memory=memory,
359
+ manager=manager, # type: ignore[arg-type]
360
+ resources={"source": [resource.id]},
361
+ allowed_connection_ids={SYNC_CONFIG_ID},
362
+ )
363
+
364
+ assert result == {"source": {SYNC_CONFIG_ID: ["connected-resource"]}}
365
+ driver.validate_resources.assert_awaited_once()
366
+
367
+
314
368
  async def test_hybrid_resources_without_connections_skip_authorization():
315
369
  agent = SyncAskAgent(SyncAskAgentConfig(sources=["source"]))
316
370
  driver = SimpleNamespace(config=SimpleNamespace(connection_ids=[]))