dockerhub-api 1.3.1__tar.gz → 1.3.3__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 (87) hide show
  1. {dockerhub_api-1.3.1/dockerhub_api.egg-info → dockerhub_api-1.3.3}/PKG-INFO +4 -4
  2. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/README.md +1 -1
  3. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/connectors/tool_schema_fingerprints.json +1 -1
  4. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/kg_ingest.py +1 -1
  5. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp_server.py +1 -1
  6. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/certification.json +3 -3
  7. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3/dockerhub_api.egg-info}/PKG-INFO +4 -4
  8. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api.egg-info/SOURCES.txt +2 -0
  9. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api.egg-info/entry_points.txt +3 -0
  10. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api.egg-info/requires.txt +2 -2
  11. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/pyproject.toml +7 -3
  12. dockerhub_api-1.3.3/tests/test_default_content_surfaces.py +43 -0
  13. dockerhub_api-1.3.3/tests/test_fleet_name.py +53 -0
  14. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/LICENSE +0 -0
  15. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/MANIFEST.in +0 -0
  16. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/__init__.py +0 -0
  17. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/__main__.py +0 -0
  18. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/__init__.py +0 -0
  19. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_access_tokens.py +0 -0
  20. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_audit_logs.py +0 -0
  21. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_auth.py +0 -0
  22. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_base.py +0 -0
  23. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_groups.py +0 -0
  24. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_org_access_tokens.py +0 -0
  25. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_orgs.py +0 -0
  26. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_registry.py +0 -0
  27. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_registry_base.py +0 -0
  28. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_repositories.py +0 -0
  29. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_scim.py +0 -0
  30. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api/api_client_scout.py +0 -0
  31. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/api_client.py +0 -0
  32. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/auth.py +0 -0
  33. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/connectors/__init__.py +0 -0
  34. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/connectors/mcp_source_presets.json +0 -0
  35. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/dockerhub_input_models.py +0 -0
  36. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/dockerhub_response_models.py +0 -0
  37. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/__init__.py +0 -0
  38. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_admin.py +0 -0
  39. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_audit.py +0 -0
  40. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_auth.py +0 -0
  41. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_kg.py +0 -0
  42. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_org.py +0 -0
  43. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_registry.py +0 -0
  44. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_repos.py +0 -0
  45. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_scim.py +0 -0
  46. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_scout.py +0 -0
  47. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp/mcp_teams.py +0 -0
  48. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/mcp_config.json +0 -0
  49. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/__init__.py +0 -0
  50. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/dockerhub.ttl +0 -0
  51. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/fixtures/records.json +0 -0
  52. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/mappings/source.yaml +0 -0
  53. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/migrations/manifest.json +0 -0
  54. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/ontology/shapes/connector.shacl.ttl +0 -0
  55. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/prompts/__init__.py +0 -0
  56. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/__init__.py +0 -0
  57. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-api-operations/SKILL.md +0 -0
  58. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-api-operations/agents/openai.yaml +0 -0
  59. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-api-operations/references/catalog.md +0 -0
  60. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-image-registry-scout/SKILL.md +0 -0
  61. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-image-registry-scout/WORKFLOW.md +0 -0
  62. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-org-administration/SKILL.md +0 -0
  63. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-org-administration/WORKFLOW.md +0 -0
  64. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-repository-management/SKILL.md +0 -0
  65. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api/skills/dockerhub-repository-management/WORKFLOW.md +0 -0
  66. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api.egg-info/dependency_links.txt +0 -0
  67. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/dockerhub_api.egg-info/top_level.txt +0 -0
  68. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/requirements.txt +0 -0
  69. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/setup.cfg +0 -0
  70. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_audit.py +0 -0
  71. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_org.py +0 -0
  72. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_registry.py +0 -0
  73. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_repositories.py +0 -0
  74. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_scim.py +0 -0
  75. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_scout.py +0 -0
  76. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_teams.py +0 -0
  77. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_tokens.py +0 -0
  78. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_api_wrapper.py +0 -0
  79. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_auth.py +0 -0
  80. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_dockerhub_a2a_validation.py +0 -0
  81. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_dockerhub_mcp_validation.py +0 -0
  82. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_identity_namespace_scoping.py +0 -0
  83. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_init_dynamics.py +0 -0
  84. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_kg_ingest.py +0 -0
  85. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_models.py +0 -0
  86. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_rate_limit.py +0 -0
  87. {dockerhub_api-1.3.1 → dockerhub_api-1.3.3}/tests/test_startup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dockerhub-api
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: Docker Hub API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
16
16
  Requires-Dist: httpx>=0.28.1
17
17
  Requires-Dist: python-dotenv>=1.2.4
18
18
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5; extra == "mcp"
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
20
20
  Provides-Extra: all
21
21
  Requires-Dist: dockerhub-api[mcp]>=1.0.1; extra == "all"
22
22
  Provides-Extra: test
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/dockerhub-api)
42
42
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/dockerhub-api)
43
43
 
44
- *Version: 1.3.1*
44
+ *Version: 1.3.3*
45
45
 
46
46
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
47
47
  > Docker Hub platform are maintained in [docs/](docs/index.md).
@@ -13,7 +13,7 @@
13
13
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/dockerhub-api)
14
14
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/dockerhub-api)
15
15
 
16
- *Version: 1.3.1*
16
+ *Version: 1.3.3*
17
17
 
18
18
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
19
19
  > Docker Hub platform are maintained in [docs/](docs/index.md).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "algorithm": "agent-connector-sdk:mcp-tool-contract-compat:v2",
3
- "connector": "dockerhub-api",
3
+ "connector": "dockerhub-mcp",
4
4
  "schema_version": "1",
5
5
  "tools": {
6
6
  "dockerhub_get_repositories": "c6fb6018860f39159633a23ca0b19a3555daa371598111e280e753ef80ca0595"
@@ -25,7 +25,7 @@ from agent_connector_sdk.ingest import (
25
25
  current_ingest,
26
26
  )
27
27
 
28
- _BINDING = IngestBinding(connector="dockerhub-api", stream="dockerhub")
28
+ _BINDING = IngestBinding(connector="dockerhub-mcp", stream="dockerhub")
29
29
 
30
30
  _ENTITY_RESERVED_KEYS = frozenset({"id", "node_type"})
31
31
  _RELATIONSHIP_RESERVED_KEYS = frozenset({"source", "target", "relationship"})
@@ -45,7 +45,7 @@ from dockerhub_api.mcp import (
45
45
  register_teams_tools, # noqa: F401
46
46
  )
47
47
 
48
- __version__ = "1.3.1"
48
+ __version__ = "1.3.3"
49
49
  print(f"Docker Hub MCP v{__version__}", file=sys.stderr)
50
50
 
51
51
  logger = get_logger(name="mcp_server")
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "api_version": "arbora.io/v1",
3
3
  "artifacts": {
4
- "connector_manifest.yml": "aa4e92054e9cf8ce40dd82b3878d86dbfbc94dcd675e592ef6489f9e61e491c6",
4
+ "connector_manifest.yml": "1d2826d511f1b9ad3c921d7cca5d094285890c92bdd61cf4d27fc33853301e7d",
5
5
  "dockerhub_api/connectors/mcp_source_presets.json": "96b893636a49ece1a5f32decb9aea8e3740178cb5e4a19753748b4d18e7ca678",
6
- "dockerhub_api/connectors/tool_schema_fingerprints.json": "5a20f3a9ddc3df4428a3018b4e2e86d586c843cb2770f88dfd02a92b13ecf7a2",
6
+ "dockerhub_api/connectors/tool_schema_fingerprints.json": "60f37329f11dc900fa385099069f005c7fc8f4b8afcb0ac05d48794b1c62324a",
7
7
  "dockerhub_api/ontology/dockerhub.ttl": "bd3f4498e3e9463ee4395a5da1d6afcbfc081a1437e1be52437ab4d52e18d55a",
8
8
  "dockerhub_api/ontology/fixtures/records.json": "cdf24bdcd53b75daef789c05f93d55ced4ce4a138360a2ff9f1e34c55f8f6da8",
9
9
  "dockerhub_api/ontology/mappings/source.yaml": "72d333a63cb808bbc9a2f031834fa4c75919b11a8171ad5b347fad61247fa016",
@@ -22,7 +22,7 @@
22
22
  "bundle_schema": "2",
23
23
  "epistemic_graph": ">=2.27.0,<3"
24
24
  },
25
- "connector": "dockerhub-api",
25
+ "connector": "dockerhub-mcp",
26
26
  "kind": "ConnectorSourceAttestation",
27
27
  "live_certified": false,
28
28
  "mode": "offline-source",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dockerhub-api
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: Docker Hub API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
16
16
  Requires-Dist: httpx>=0.28.1
17
17
  Requires-Dist: python-dotenv>=1.2.4
18
18
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5; extra == "mcp"
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
20
20
  Provides-Extra: all
21
21
  Requires-Dist: dockerhub-api[mcp]>=1.0.1; extra == "all"
22
22
  Provides-Extra: test
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/dockerhub-api)
42
42
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/dockerhub-api)
43
43
 
44
- *Version: 1.3.1*
44
+ *Version: 1.3.3*
45
45
 
46
46
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
47
47
  > Docker Hub platform are maintained in [docs/](docs/index.md).
@@ -73,8 +73,10 @@ tests/test_api_teams.py
73
73
  tests/test_api_tokens.py
74
74
  tests/test_api_wrapper.py
75
75
  tests/test_auth.py
76
+ tests/test_default_content_surfaces.py
76
77
  tests/test_dockerhub_a2a_validation.py
77
78
  tests/test_dockerhub_mcp_validation.py
79
+ tests/test_fleet_name.py
78
80
  tests/test_identity_namespace_scoping.py
79
81
  tests/test_init_dynamics.py
80
82
  tests/test_kg_ingest.py
@@ -1,3 +1,6 @@
1
+ [agent_connector_sdk.connector]
2
+ dockerhub-mcp = dockerhub_api
3
+
1
4
  [agent_connector_sdk.ontology_providers]
2
5
  dockerhub-api = dockerhub_api.ontology
3
6
 
@@ -1,4 +1,4 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.3.5
1
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
2
2
  httpx>=0.28.1
3
3
  python-dotenv>=1.2.4
4
4
 
@@ -6,7 +6,7 @@ python-dotenv>=1.2.4
6
6
  dockerhub-api[mcp]>=1.0.1
7
7
 
8
8
  [mcp]
9
- agent-connector-sdk[mcp]<1.0.0,>=0.3.5
9
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
10
10
 
11
11
  [test]
12
12
  pytest-xdist>=3.8.0
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dockerhub-api"
7
- version = "1.3.1"
7
+ version = "1.3.3"
8
8
  description = "Docker Hub API + MCP Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12, <3.15"
12
- dependencies = [ "agent-connector-sdk[mcp]>=0.3.5,<1.0.0", "httpx>=0.28.1", "python-dotenv>=1.2.4",]
12
+ dependencies = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0", "httpx>=0.28.1", "python-dotenv>=1.2.4",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -18,7 +18,7 @@ email = "maintainers@users.noreply.github.com"
18
18
  text = "MIT"
19
19
 
20
20
  [project.optional-dependencies]
21
- mcp = [ "agent-connector-sdk[mcp]>=0.3.5,<1.0.0",]
21
+ mcp = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",]
22
22
  all = [ "dockerhub-api[mcp]>=1.0.1",]
23
23
  test = [
24
24
  "pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
@@ -35,6 +35,10 @@ dockerhub-api = "dockerhub_api.ontology"
35
35
  [project.entry-points."agent_connector_sdk.source_connector_providers"]
36
36
  dockerhub-api = "dockerhub_api.connectors"
37
37
 
38
+ # The one declared connector identity: the fleet name (SDK-CONNECTOR-CONTROL-R071).
39
+ [project.entry-points."agent_connector_sdk.connector"]
40
+ dockerhub-mcp = "dockerhub_api"
41
+
38
42
  [tool.uv.workspace]
39
43
  members = ["."]
40
44
 
@@ -0,0 +1,43 @@
1
+ """CONN-DOCKERHUB-API-CONNECTOR-CONTENT-R001: the server lists its packaged skills, ontology and prompts by default."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import importlib
7
+ from pathlib import Path
8
+
9
+ import pytest
10
+ from fastmcp import Client
11
+
12
+ PACKAGE = "dockerhub_api"
13
+ ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
14
+
15
+ pytestmark = pytest.mark.spec("CONN-DOCKERHUB-API-CONNECTOR-CONTENT-R001")
16
+
17
+
18
+ def _server():
19
+ namespace = {"__name__": PACKAGE + ".mcp_server"}
20
+ exec(
21
+ "from agent_connector_sdk.mcp.server import create_mcp_server\n"
22
+ "result = create_mcp_server('dockerhub-mcp', version='0', command_args=[])",
23
+ namespace,
24
+ )
25
+ return namespace["result"][1]
26
+
27
+
28
+ async def _listings():
29
+ async with Client(_server()) as client:
30
+ resources = {str(r.uri) for r in await client.list_resources()}
31
+ prompts = {p.name for p in await client.list_prompts()}
32
+ return resources, prompts
33
+
34
+
35
+ def test_default_content_surfaces() -> None:
36
+ resources, prompts = asyncio.run(_listings())
37
+ if list(ROOT.glob("skills/*/SKILL.md")):
38
+ assert any(u.startswith("skill://") for u in resources)
39
+ if list(ROOT.glob("ontology/*.ttl")):
40
+ assert any(u.startswith("ontology://dockerhub-mcp/") for u in resources)
41
+ for path in ROOT.glob("prompts/*.json"):
42
+ if not path.name.startswith("_"):
43
+ assert path.stem in prompts
@@ -0,0 +1,53 @@
1
+ """CONN-DOCKERHUB-API-CONNECTOR-IDENTITY-R001: the connector is filed under its fleet name, dockerhub-mcp."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import ast
6
+ import json
7
+ import re
8
+ import tomllib
9
+ from pathlib import Path
10
+
11
+ import pytest
12
+
13
+ ROOT = Path(__file__).resolve().parents[1]
14
+ PACKAGE = ROOT / "dockerhub_api"
15
+ FLEET = "dockerhub-mcp"
16
+
17
+
18
+ def _call_connectors(path: Path) -> list[str]:
19
+ names = []
20
+ for node in ast.walk(ast.parse(path.read_text(encoding="utf-8"))):
21
+ if isinstance(node, ast.Call) and getattr(
22
+ node.func, "id", getattr(node.func, "attr", "")
23
+ ) in {
24
+ "IngestBinding",
25
+ "ConnectorContent",
26
+ }:
27
+ names += [
28
+ str(k.value.value)
29
+ for k in node.keywords
30
+ if k.arg == "connector" and isinstance(k.value, ast.Constant)
31
+ ]
32
+ return names
33
+
34
+
35
+ @pytest.mark.spec("CONN-DOCKERHUB-API-CONNECTOR-IDENTITY-R001")
36
+ def test_connector_name_is_the_fleet_name() -> None:
37
+ pyproject = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
38
+ assert pyproject["project"]["entry-points"]["agent_connector_sdk.connector"] == {
39
+ FLEET: "dockerhub_api"
40
+ }
41
+ manifest_path = PACKAGE / "connector_manifest.yml"
42
+ if not manifest_path.is_file():
43
+ manifest_path = ROOT / "connector_manifest.yml"
44
+ manifest = manifest_path.read_text(encoding="utf-8")
45
+ match = re.search(r'^\s*"?connector"?\s*:\s*"?([^"\s,]+)', manifest, re.MULTILINE)
46
+ assert match is not None and match.group(1) == FLEET
47
+ fingerprints = PACKAGE / "connectors" / "tool_schema_fingerprints.json"
48
+ if fingerprints.is_file():
49
+ assert (
50
+ json.loads(fingerprints.read_text(encoding="utf-8"))["connector"] == FLEET
51
+ )
52
+ for module in sorted(PACKAGE.glob("*.py")):
53
+ assert all(name == FLEET for name in _call_connectors(module)), module.name
File without changes
File without changes
File without changes