onetrust-api 1.3.3__tar.gz → 1.3.4__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.
- {onetrust_api-1.3.3/onetrust_api.egg-info → onetrust_api-1.3.4}/PKG-INFO +4 -4
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/README.md +1 -1
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/__init__.py +18 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/connector_sources.py +0 -20
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp_server.py +10 -12
- {onetrust_api-1.3.3 → onetrust_api-1.3.4/onetrust_api.egg-info}/PKG-INFO +4 -4
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api.egg-info/SOURCES.txt +1 -0
- onetrust_api-1.3.4/onetrust_api.egg-info/entry_points.txt +8 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api.egg-info/requires.txt +2 -2
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/pyproject.toml +4 -10
- onetrust_api-1.3.4/tests/test_default_content_surfaces.py +248 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_fleet_name.py +1 -1
- onetrust_api-1.3.4/tests/test_publication_workflow.py +81 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_startup.py +0 -2
- onetrust_api-1.3.3/onetrust_api.egg-info/entry_points.txt +0 -14
- onetrust_api-1.3.3/tests/test_default_content_surfaces.py +0 -43
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/LICENSE +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/MANIFEST.in +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/__main__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/_operation_manifest.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_access_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_ai_governance.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_assessments.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_audit_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_base.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_bulk_export.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_cmp.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_compliance_automation.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_consent_interfaces.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_consent_receipts.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_cookie_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_cookie_consent_legacy.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_cookie_domain_data.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_cross_device_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_data_catalog.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_data_discovery.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_data_discovery_worker.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_data_mapping.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_data_mapping_legacy.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_documents.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_dsar.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_esg.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_incidents.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_integrations.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_inventory.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_issues_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_it_risk_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_mobile_app_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_object_manager.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_policy_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_privacy_notices.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_task_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_tprm.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_training.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_universal_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api/api_client_user_provisioning.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/api_client.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/auth.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/connectors/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/kg_ingest.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_access_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_ai_governance.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_assessments.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_audit_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_bulk_export.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_cmp.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_compliance_automation.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_consent_interfaces.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_consent_receipts.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_cookie_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_cookie_consent_legacy.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_cookie_domain_data.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_cross_device_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_custom_api.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_data_catalog.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_data_discovery.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_data_discovery_worker.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_data_mapping.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_data_mapping_legacy.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_documents.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_dsar.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_esg.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_incidents.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_integrations.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_inventory.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_issues_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_it_risk_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_mobile_app_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_object_manager.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_policy_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_privacy_notices.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_task_management.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_tprm.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_training.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_universal_consent.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/mcp/mcp_user_provisioning.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/onetrust_models.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/certification.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/fixtures/records.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/mappings/source.yaml +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/migrations/manifest.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/onetrust.ttl +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/ontology/shapes/connector.shacl.ttl +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/prompts/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/prompts/consent_cookie_specialist.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/prompts/privacy_governance_specialist.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-api-operations/SKILL.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-api-operations/agents/openai.yaml +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-api-operations/references/catalog.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-cookie-consent/SKILL.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-cookie-consent/WORKFLOW.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-data-mapping/SKILL.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-data-mapping/WORKFLOW.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-privacy-assessments/SKILL.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/skills/onetrust-privacy-assessments/WORKFLOW.md +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/ai-governance.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-consent-interfaces.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-consent-management-platform-cmp.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-consent-receipts.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-cookie-consent-swagger.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-cookie-consent.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-cookie-domain-data.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-cross-device-consent.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-mobile-app-consent.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-policy-notice-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/consent-preferences-universal-consent-preference-management-oas.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/data-use-governance-data-catalog.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/data-use-governance-data-discovery-worker-node.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/data-use-governance-data-discovery.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/esg-program-reporting-disclosures.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-access-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-bulk-export.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-documents.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-integrations.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-inventory.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-object-manager.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-task-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/platform-user-provisioning.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/privacy-automation-assessment-automation.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/privacy-automation-data-mapping-automation-swagger.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/privacy-automation-data-mapping-automation.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/privacy-automation-data-subject-request-dsr-automation.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/privacy-automation-incident-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/tech-risk-compliance-audit-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/tech-risk-compliance-compliance-automation.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/tech-risk-compliance-enterprise-policy-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/tech-risk-compliance-issues-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/tech-risk-compliance-it-risk-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/tech-risk-compliance-training.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api/specs/third-party-management-third-party-risk-management.json +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api.egg-info/dependency_links.txt +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/onetrust_api.egg-info/top_level.txt +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/requirements.txt +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/scripts/generate_from_openapi.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/scripts/security_sanitizer.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/setup.cfg +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/__init__.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/conftest.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_api_client_base.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_auth.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_cxa_fl_onetrustapi_01_characterization.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_generate_from_openapi.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_kg_ingest.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_mcp_server.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_onetrust_api_brute_force_coverage.py +0 -0
- {onetrust_api-1.3.3 → onetrust_api-1.3.4}/tests/test_onetrust_coverage.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: onetrust-api
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.4
|
|
4
4
|
Summary: OneTrust API + MCP Server + A2A Agent — 100% API coverage
|
|
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.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist:
|
|
15
|
+
Requires-Dist: scion-sdk[mcp]<1.0.0,>=0.5.6
|
|
16
16
|
Requires-Dist: python-dotenv>=1.2.4
|
|
17
17
|
Requires-Dist: requests>=2.34.2
|
|
18
18
|
Provides-Extra: mcp
|
|
19
|
-
Requires-Dist:
|
|
19
|
+
Requires-Dist: scion-sdk[mcp]<1.0.0,>=0.5.6; extra == "mcp"
|
|
20
20
|
Provides-Extra: all
|
|
21
21
|
Requires-Dist: onetrust-api[mcp]>=1.3.0; extra == "all"
|
|
22
22
|
Provides-Extra: test
|
|
@@ -49,7 +49,7 @@ Dynamic: license-file
|
|
|
49
49
|

|
|
50
50
|

|
|
51
51
|
|
|
52
|
-
*Version: 1.3.
|
|
52
|
+
*Version: 1.3.4*
|
|
53
53
|
|
|
54
54
|
## Overview
|
|
55
55
|
|
|
@@ -58,3 +58,21 @@ onetrust-api
|
|
|
58
58
|
|
|
59
59
|
Python OneTrust API client + MCP server + A2A agent with 100% API coverage
|
|
60
60
|
"""
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
from agent_connector_sdk.connector import Connector
|
|
64
|
+
from agent_connector_sdk.connector_hooks import RegistrationContext
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _register_legacy_surface(context: RegistrationContext) -> None:
|
|
68
|
+
from onetrust_api.mcp_server import register_server_surface
|
|
69
|
+
|
|
70
|
+
vars(context.server)["_onetrust_registered_tags"] = register_server_surface(
|
|
71
|
+
context.server
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
connector = Connector(
|
|
76
|
+
instructions="OneTrust Api MCP Server",
|
|
77
|
+
extra_registrations=(_register_legacy_surface,),
|
|
78
|
+
)
|
|
@@ -7,7 +7,6 @@ Served live as ``connector://resources``. Regenerate by editing the declarations
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
from agent_connector_sdk.ingest.live_declaration import source_meta
|
|
10
|
-
from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
|
|
11
10
|
|
|
12
11
|
CONNECTOR = "onetrust-mcp"
|
|
13
12
|
|
|
@@ -233,22 +232,3 @@ RESOURCES = (
|
|
|
233
232
|
"name": "Inventory",
|
|
234
233
|
},
|
|
235
234
|
)
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
def declaration() -> IngestSourceDeclaration:
|
|
239
|
-
"""The declaration the server assembles from this module."""
|
|
240
|
-
specs = []
|
|
241
|
-
for item in SOURCES:
|
|
242
|
-
for entry in item["connector_sources"]:
|
|
243
|
-
body = {k: v for k, v in entry.items() if k not in ("tool", "mapping")}
|
|
244
|
-
specs.append(
|
|
245
|
-
IngestSourceSpec.model_validate({**body, "tools": (entry["tool"],)})
|
|
246
|
-
)
|
|
247
|
-
return IngestSourceDeclaration.model_validate(
|
|
248
|
-
{
|
|
249
|
-
"connector": CONNECTOR,
|
|
250
|
-
"sources": specs,
|
|
251
|
-
"schema_mappings": SCHEMA_MAPPINGS,
|
|
252
|
-
"resources": RESOURCES,
|
|
253
|
-
}
|
|
254
|
-
)
|
|
@@ -5,7 +5,8 @@ import sys
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
7
|
from agent_connector_sdk.config import load_config
|
|
8
|
-
from agent_connector_sdk.
|
|
8
|
+
from agent_connector_sdk.connector import build_server
|
|
9
|
+
from agent_connector_sdk.connector_identity import connector_version
|
|
9
10
|
from agent_connector_sdk.mcp.tool_surface import register_tool_surface
|
|
10
11
|
from fastmcp import FastMCP
|
|
11
12
|
from fastmcp.utilities.logging import get_logger
|
|
@@ -14,7 +15,7 @@ from onetrust_api.api._operation_manifest import OPERATIONS
|
|
|
14
15
|
from onetrust_api.api_client import Api
|
|
15
16
|
from onetrust_api.auth import get_client
|
|
16
17
|
|
|
17
|
-
__version__ = "
|
|
18
|
+
__version__ = connector_version("onetrust_api")
|
|
18
19
|
|
|
19
20
|
# Redirect logging to stderr to prevent MCP stdout corruption
|
|
20
21
|
logger = get_logger(name="onetrust_mcp")
|
|
@@ -122,16 +123,16 @@ def register_ingest_tools(mcp: FastMCP):
|
|
|
122
123
|
return {"listed": len(records), "ingested": nodes}
|
|
123
124
|
|
|
124
125
|
|
|
125
|
-
def get_mcp_instance() -> tuple[Any, Any, Any, Any]:
|
|
126
|
+
def get_mcp_instance(*, command_args=None) -> tuple[Any, Any, Any, Any]:
|
|
126
127
|
"""Initialize and return the OneTrust Api MCP instance, args, and middlewares."""
|
|
127
128
|
load_config()
|
|
128
129
|
|
|
129
|
-
args, mcp
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
instructions="OneTrust Api MCP Server",
|
|
133
|
-
)
|
|
130
|
+
args, mcp = build_server("onetrust_api", command_args=command_args)
|
|
131
|
+
return mcp, args, list(mcp.middleware), vars(mcp)["_onetrust_registered_tags"]
|
|
132
|
+
|
|
134
133
|
|
|
134
|
+
def register_server_surface(mcp: FastMCP) -> list[str]:
|
|
135
|
+
"""Reuse the manifest-backed surface, prompts and ingest tools in order."""
|
|
135
136
|
# One central call selects the surface per MCP_TOOL_MODE: condensed gates each
|
|
136
137
|
# generated TOOL_REGISTRY domain via setting("<TAG>TOOL", True); verbose adds
|
|
137
138
|
# the fully-typed 1:1 tools sourced from the OpenAPI manifest (OPERATIONS).
|
|
@@ -149,10 +150,7 @@ def get_mcp_instance() -> tuple[Any, Any, Any, Any]:
|
|
|
149
150
|
register_prompts(mcp)
|
|
150
151
|
register_ingest_tools(mcp)
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
mcp.add_middleware(mw)
|
|
154
|
-
|
|
155
|
-
return mcp, args, middlewares, registered_tags
|
|
153
|
+
return registered_tags
|
|
156
154
|
|
|
157
155
|
|
|
158
156
|
def mcp_server():
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: onetrust-api
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.4
|
|
4
4
|
Summary: OneTrust API + MCP Server + A2A Agent — 100% API coverage
|
|
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.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist:
|
|
15
|
+
Requires-Dist: scion-sdk[mcp]<1.0.0,>=0.5.6
|
|
16
16
|
Requires-Dist: python-dotenv>=1.2.4
|
|
17
17
|
Requires-Dist: requests>=2.34.2
|
|
18
18
|
Provides-Extra: mcp
|
|
19
|
-
Requires-Dist:
|
|
19
|
+
Requires-Dist: scion-sdk[mcp]<1.0.0,>=0.5.6; extra == "mcp"
|
|
20
20
|
Provides-Extra: all
|
|
21
21
|
Requires-Dist: onetrust-api[mcp]>=1.3.0; extra == "all"
|
|
22
22
|
Provides-Extra: test
|
|
@@ -49,7 +49,7 @@ Dynamic: license-file
|
|
|
49
49
|

|
|
50
50
|

|
|
51
51
|
|
|
52
|
-
*Version: 1.3.
|
|
52
|
+
*Version: 1.3.4*
|
|
53
53
|
|
|
54
54
|
## Overview
|
|
55
55
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
scion-sdk[mcp]<1.0.0,>=0.5.6
|
|
2
2
|
python-dotenv>=1.2.4
|
|
3
3
|
requests>=2.34.2
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ requests>=2.34.2
|
|
|
6
6
|
onetrust-api[mcp]>=1.3.0
|
|
7
7
|
|
|
8
8
|
[mcp]
|
|
9
|
-
|
|
9
|
+
scion-sdk[mcp]<1.0.0,>=0.5.6
|
|
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 = "onetrust-api"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.4"
|
|
8
8
|
description = "OneTrust API + MCP Server + A2A Agent — 100% API coverage"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
|
|
11
11
|
requires-python = ">=3.12"
|
|
12
|
-
dependencies = [ "
|
|
12
|
+
dependencies = [ "scion-sdk[mcp]>=0.5.6,<1.0.0", "python-dotenv>=1.2.4", "requests>=2.34.2",]
|
|
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 = [ "
|
|
21
|
+
mcp = [ "scion-sdk[mcp]>=0.5.6,<1.0.0",]
|
|
22
22
|
all = [ "onetrust-api[mcp]>=1.3.0",]
|
|
23
23
|
test = [
|
|
24
24
|
"pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
|
|
@@ -26,18 +26,12 @@ test = [
|
|
|
26
26
|
[project.scripts]
|
|
27
27
|
onetrust-mcp = "onetrust_api.mcp_server:mcp_server"
|
|
28
28
|
|
|
29
|
-
[project.entry-points."agent_connector_sdk.skill_providers"]
|
|
30
|
-
onetrust-api = "onetrust_api.skills"
|
|
31
|
-
|
|
32
|
-
[project.entry-points."agent_connector_sdk.ontology_providers"]
|
|
33
|
-
onetrust-api = "onetrust_api.ontology"
|
|
34
|
-
|
|
35
29
|
[project.entry-points."agent_connector_sdk.prompt_providers"]
|
|
36
30
|
onetrust-api = "onetrust_api.prompts"
|
|
37
31
|
|
|
38
32
|
# The one declared connector identity: the fleet name (SDK-CONNECTOR-CONTROL-R071).
|
|
39
33
|
[project.entry-points."agent_connector_sdk.connector"]
|
|
40
|
-
onetrust-mcp = "onetrust_api"
|
|
34
|
+
onetrust-mcp = "onetrust_api:connector"
|
|
41
35
|
|
|
42
36
|
[tool.uv.workspace]
|
|
43
37
|
members = ["."]
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"""CONN-ONETRUST-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 = "onetrust_api"
|
|
13
|
+
ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
|
|
14
|
+
|
|
15
|
+
pytestmark = pytest.mark.spec("CONN-ONETRUST-API-CONNECTOR-CONTENT-R001")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _server():
|
|
19
|
+
from unittest.mock import patch
|
|
20
|
+
|
|
21
|
+
from fastmcp import FastMCP
|
|
22
|
+
|
|
23
|
+
module = importlib.import_module("onetrust_api.mcp_server")
|
|
24
|
+
with patch(
|
|
25
|
+
"sys.argv", ["connector", "--transport", "stdio", "--auth-type", "none"]
|
|
26
|
+
):
|
|
27
|
+
result = module.get_mcp_instance()
|
|
28
|
+
if isinstance(result, FastMCP):
|
|
29
|
+
return result
|
|
30
|
+
return next(value for value in result if isinstance(value, FastMCP))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
async def _listings():
|
|
34
|
+
from importlib.metadata import version
|
|
35
|
+
|
|
36
|
+
async with Client(_server(), mode="legacy") as client:
|
|
37
|
+
assert client.initialize_result is not None
|
|
38
|
+
assert client.initialize_result.server_info.version == version("onetrust-api")
|
|
39
|
+
resources = {str(r.uri) for r in await client.list_resources()}
|
|
40
|
+
prompts = {p.name for p in await client.list_prompts()}
|
|
41
|
+
for uri in resources:
|
|
42
|
+
if uri.startswith(("ontology://", "shapes://")):
|
|
43
|
+
directory = ROOT / "ontology"
|
|
44
|
+
if uri.startswith("shapes://"):
|
|
45
|
+
directory = directory / "shapes"
|
|
46
|
+
actual = await client.read_resource(uri)
|
|
47
|
+
assert (
|
|
48
|
+
actual[0].text.encode()
|
|
49
|
+
== (directory / uri.rsplit("/", 1)[-1]).read_bytes()
|
|
50
|
+
)
|
|
51
|
+
return resources, prompts
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def test_default_content_surfaces() -> None:
|
|
55
|
+
resources, prompts = asyncio.run(_listings())
|
|
56
|
+
if list(ROOT.glob("skills/*/SKILL.md")):
|
|
57
|
+
assert any(u.startswith("skill://") for u in resources)
|
|
58
|
+
if list(ROOT.glob("ontology/*.ttl")):
|
|
59
|
+
assert any(u.startswith("ontology://onetrust-mcp/") for u in resources)
|
|
60
|
+
for path in ROOT.glob("prompts/*.json"):
|
|
61
|
+
if not path.name.startswith("_"):
|
|
62
|
+
assert path.stem in prompts
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@pytest.fixture(autouse=True)
|
|
66
|
+
def _no_outbound_network(monkeypatch):
|
|
67
|
+
import socket
|
|
68
|
+
|
|
69
|
+
def refuse(*_args, **_kwargs):
|
|
70
|
+
raise AssertionError("content publication must not contact an external system")
|
|
71
|
+
|
|
72
|
+
monkeypatch.setenv("MCP_FLEET_REGISTRATION", "false")
|
|
73
|
+
monkeypatch.setattr(socket.socket, "connect", refuse)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_sdk_floor_supports_content_identity_and_current_pack_protocol() -> None:
|
|
77
|
+
import tomllib
|
|
78
|
+
|
|
79
|
+
from packaging.requirements import Requirement
|
|
80
|
+
|
|
81
|
+
project = tomllib.loads((ROOT.parent / "pyproject.toml").read_text())["project"]
|
|
82
|
+
declared = list(project.get("dependencies", []))
|
|
83
|
+
for extra in project.get("optional-dependencies", {}).values():
|
|
84
|
+
declared.extend(extra)
|
|
85
|
+
sdk = [Requirement(value) for value in declared if value.startswith("scion-sdk")]
|
|
86
|
+
assert sdk
|
|
87
|
+
for requirement in sdk:
|
|
88
|
+
assert requirement.specifier.contains("0.5.6")
|
|
89
|
+
assert not requirement.specifier.contains("0.5.5")
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def test_production_pack_binds_packaged_ontology_and_shapes():
|
|
93
|
+
import hashlib
|
|
94
|
+
from importlib.metadata import version
|
|
95
|
+
|
|
96
|
+
from agent_connector_sdk.artifacts.pack import build_content_pack
|
|
97
|
+
from agent_connector_sdk.artifacts.resources import ResourceArtifactKind
|
|
98
|
+
from agent_connector_sdk.ports.session import TransportEndpoint
|
|
99
|
+
from agent_connector_sdk.transports.mcp import McpTransport
|
|
100
|
+
|
|
101
|
+
async def capture():
|
|
102
|
+
async with McpTransport().session(
|
|
103
|
+
TransportEndpoint(in_process=_server())
|
|
104
|
+
) as session:
|
|
105
|
+
return await build_content_pack(
|
|
106
|
+
session, connector="onetrust-mcp", kinds=(ResourceArtifactKind(),)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
pack = asyncio.run(capture())
|
|
110
|
+
assert pack.server_package_version == version("onetrust-api")
|
|
111
|
+
entries = {str(entry.uri): entry for entry in pack.archive.entries}
|
|
112
|
+
assert "connector://resources" in entries
|
|
113
|
+
for path in ROOT.glob("ontology/**/*.ttl"):
|
|
114
|
+
scheme = "shapes" if path.parent.name == "shapes" else "ontology"
|
|
115
|
+
uri = f"{scheme}://onetrust-mcp/{path.name}"
|
|
116
|
+
assert entries[uri].body.sha256 == hashlib.sha256(path.read_bytes()).hexdigest()
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def test_canonical_and_legacy_routes_preserve_the_full_tool_surface():
|
|
120
|
+
from agent_connector_sdk.connector import build_server
|
|
121
|
+
|
|
122
|
+
async def capture():
|
|
123
|
+
_, canonical = build_server(
|
|
124
|
+
PACKAGE, command_args=["--transport", "stdio", "--auth-type", "none"]
|
|
125
|
+
)
|
|
126
|
+
async with (
|
|
127
|
+
Client(_server()) as legacy_client,
|
|
128
|
+
Client(canonical) as canonical_client,
|
|
129
|
+
):
|
|
130
|
+
legacy = {
|
|
131
|
+
tool.name: tool.model_dump(mode="json")
|
|
132
|
+
for tool in await legacy_client.list_tools()
|
|
133
|
+
}
|
|
134
|
+
declared = {
|
|
135
|
+
tool.name: tool.model_dump(mode="json")
|
|
136
|
+
for tool in await canonical_client.list_tools()
|
|
137
|
+
}
|
|
138
|
+
assert len(legacy) == 601
|
|
139
|
+
assert declared == legacy
|
|
140
|
+
|
|
141
|
+
asyncio.run(capture())
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def test_legacy_cli_configuration_file_still_controls_host_and_port(
|
|
145
|
+
tmp_path, monkeypatch
|
|
146
|
+
):
|
|
147
|
+
import json
|
|
148
|
+
|
|
149
|
+
from onetrust_api.mcp_server import get_mcp_instance
|
|
150
|
+
|
|
151
|
+
config = tmp_path / "connector.json"
|
|
152
|
+
config.write_text(json.dumps({"HOST": "127.0.0.1", "PORT": 9187}))
|
|
153
|
+
monkeypatch.delenv("HOST", raising=False)
|
|
154
|
+
monkeypatch.delenv("PORT", raising=False)
|
|
155
|
+
monkeypatch.setenv("CONNECTOR_CONFIG_FILE", str(config))
|
|
156
|
+
_, args, _, tags = get_mcp_instance(
|
|
157
|
+
command_args=["--transport", "stdio", "--auth-type", "none"]
|
|
158
|
+
)
|
|
159
|
+
assert (args.host, args.port) == ("127.0.0.1", 9187)
|
|
160
|
+
assert tags == [
|
|
161
|
+
"access_management",
|
|
162
|
+
"ai_governance",
|
|
163
|
+
"assessments",
|
|
164
|
+
"audit_management",
|
|
165
|
+
"bulk_export",
|
|
166
|
+
"cmp",
|
|
167
|
+
"compliance_automation",
|
|
168
|
+
"consent_interfaces",
|
|
169
|
+
"consent_receipts",
|
|
170
|
+
"cookie_consent",
|
|
171
|
+
"cookie_consent_legacy",
|
|
172
|
+
"cookie_domain_data",
|
|
173
|
+
"cross_device_consent",
|
|
174
|
+
"data_catalog",
|
|
175
|
+
"data_discovery",
|
|
176
|
+
"data_discovery_worker",
|
|
177
|
+
"data_mapping",
|
|
178
|
+
"data_mapping_legacy",
|
|
179
|
+
"documents",
|
|
180
|
+
"dsar",
|
|
181
|
+
"esg",
|
|
182
|
+
"incidents",
|
|
183
|
+
"integrations",
|
|
184
|
+
"inventory",
|
|
185
|
+
"issues_management",
|
|
186
|
+
"it_risk_management",
|
|
187
|
+
"mobile_app_consent",
|
|
188
|
+
"object_manager",
|
|
189
|
+
"policy_management",
|
|
190
|
+
"privacy_notices",
|
|
191
|
+
"task_management",
|
|
192
|
+
"tprm",
|
|
193
|
+
"training",
|
|
194
|
+
"universal_consent",
|
|
195
|
+
"user_provisioning",
|
|
196
|
+
"custom_api",
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def test_each_server_registers_existing_ingest_tools_once(monkeypatch):
|
|
201
|
+
from agent_connector_sdk.connector import build_server
|
|
202
|
+
|
|
203
|
+
module = importlib.import_module("onetrust_api.mcp_server")
|
|
204
|
+
calls = []
|
|
205
|
+
original = module.register_ingest_tools
|
|
206
|
+
|
|
207
|
+
def track(server):
|
|
208
|
+
calls.append(server)
|
|
209
|
+
return original(server)
|
|
210
|
+
|
|
211
|
+
monkeypatch.setattr(module, "register_ingest_tools", track)
|
|
212
|
+
legacy = _server()
|
|
213
|
+
_, canonical = build_server(
|
|
214
|
+
PACKAGE, command_args=["--transport", "stdio", "--auth-type", "none"]
|
|
215
|
+
)
|
|
216
|
+
assert calls == [legacy, canonical]
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def test_sdk_loader_preserves_explicit_source_mapping_and_resource_contracts():
|
|
220
|
+
from agent_connector_sdk.ingest.live_declaration import load_declaration
|
|
221
|
+
|
|
222
|
+
from onetrust_api import connector_sources as declared
|
|
223
|
+
|
|
224
|
+
actual = load_declaration(PACKAGE)
|
|
225
|
+
assert actual.connector == "onetrust-mcp"
|
|
226
|
+
assert (
|
|
227
|
+
len(actual.sources),
|
|
228
|
+
len(actual.schema_mappings),
|
|
229
|
+
len(actual.resources),
|
|
230
|
+
) == (2, 8, 8)
|
|
231
|
+
sources = {item.source_id: item for item in actual.sources}
|
|
232
|
+
for item in declared.SOURCES:
|
|
233
|
+
for entry in item["connector_sources"]:
|
|
234
|
+
source = sources[entry["source_id"]]
|
|
235
|
+
assert source.tools == (entry["tool"],)
|
|
236
|
+
for field, value in entry.items():
|
|
237
|
+
if field not in {"tool", "mapping"}:
|
|
238
|
+
assert getattr(source, field) == value
|
|
239
|
+
assert set(actual.schema_mappings) == set(declared.SCHEMA_MAPPINGS)
|
|
240
|
+
for name, mapping in declared.SCHEMA_MAPPINGS.items():
|
|
241
|
+
assert actual.schema_mappings[name].fields == mapping["fields"]
|
|
242
|
+
assert actual.schema_mappings[name].ontology_class == mapping.get(
|
|
243
|
+
"ontology_class"
|
|
244
|
+
)
|
|
245
|
+
resources = {item.name: item for item in actual.resources}
|
|
246
|
+
for resource in declared.RESOURCES:
|
|
247
|
+
for field, value in resource.items():
|
|
248
|
+
assert getattr(resources[resource["name"]], field) == value
|
|
@@ -35,7 +35,7 @@ def _call_connectors(path: Path) -> list[str]:
|
|
|
35
35
|
def test_connector_name_is_the_fleet_name() -> None:
|
|
36
36
|
pyproject = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
|
|
37
37
|
assert pyproject["project"]["entry-points"]["agent_connector_sdk.connector"] == {
|
|
38
|
-
FLEET: "onetrust_api"
|
|
38
|
+
FLEET: "onetrust_api:connector"
|
|
39
39
|
}
|
|
40
40
|
assert connector_name("onetrust_api") == FLEET
|
|
41
41
|
for module in sorted(PACKAGE.glob("*.py")):
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""Keep docs pushes separate from guarded package publication."""
|
|
2
|
+
|
|
3
|
+
from fnmatch import fnmatchcase
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
import yaml
|
|
8
|
+
|
|
9
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _workflow(name):
|
|
13
|
+
return yaml.safe_load((ROOT / ".github/workflows" / name).read_text())
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _push_matches(workflow, ref):
|
|
17
|
+
# PyYAML's YAML 1.1 reader represents the Actions "on" key as True.
|
|
18
|
+
push = workflow[True]["push"]
|
|
19
|
+
kind, name = ref.removeprefix("refs/").split("/", 1)
|
|
20
|
+
filters = push.get({"heads": "branches", "tags": "tags"}[kind], [])
|
|
21
|
+
return any(fnmatchcase(name, pattern) for pattern in filters)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.mark.parametrize(
|
|
25
|
+
"ref, expected",
|
|
26
|
+
[
|
|
27
|
+
("refs/heads/main", True),
|
|
28
|
+
("refs/heads/docs-update", False),
|
|
29
|
+
("refs/tags/v2.1.0", False),
|
|
30
|
+
],
|
|
31
|
+
)
|
|
32
|
+
def test_only_main_starts_package_publication(ref, expected):
|
|
33
|
+
assert _push_matches(_workflow("pipeline.yml"), ref) is expected
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_each_package_publisher_uses_the_shared_pipelines():
|
|
37
|
+
jobs = _workflow("pipeline.yml")["jobs"]
|
|
38
|
+
assert set(jobs) == {"publish-pypi"}
|
|
39
|
+
assert jobs["publish-pypi"]["uses"].endswith("/python_pipeline.yml@main")
|
|
40
|
+
assert _workflow("pipeline.yml")[True]["push"]["paths-ignore"] == [
|
|
41
|
+
"docker/Dockerfile",
|
|
42
|
+
".bumpversion.cfg",
|
|
43
|
+
"specs/**/status.json",
|
|
44
|
+
]
|
|
45
|
+
container = _workflow("container-release.yml")
|
|
46
|
+
assert container[True]["push"] == {
|
|
47
|
+
"branches": ["main"],
|
|
48
|
+
"paths": ["docker/Dockerfile"],
|
|
49
|
+
}
|
|
50
|
+
assert container["jobs"]["publish-docker"]["needs"] == "verify-public-wheel"
|
|
51
|
+
assert container["jobs"]["publish-docker"]["uses"].endswith(
|
|
52
|
+
"/container_pipeline.yml@main"
|
|
53
|
+
)
|
|
54
|
+
for publisher in (jobs["publish-pypi"], container["jobs"]["publish-docker"]):
|
|
55
|
+
assert "if" not in publisher
|
|
56
|
+
assert not publisher.get("continue-on-error", False)
|
|
57
|
+
guard = container["jobs"]["verify-public-wheel"]["steps"][-1]
|
|
58
|
+
assert guard["with"] == {
|
|
59
|
+
"mode": "published-wheel",
|
|
60
|
+
"distribution": "onetrust-api",
|
|
61
|
+
"module": "onetrust_api",
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@pytest.mark.parametrize(
|
|
66
|
+
"path, expected",
|
|
67
|
+
[
|
|
68
|
+
("docker/Dockerfile", False),
|
|
69
|
+
(".bumpversion.cfg", False),
|
|
70
|
+
("specs/sdk/status.json", False),
|
|
71
|
+
("onetrust_api/specs/openapi.json", True),
|
|
72
|
+
("pyproject.toml", True),
|
|
73
|
+
("uv.lock", True),
|
|
74
|
+
("onetrust_api/mcp_server.py", True),
|
|
75
|
+
("README.md", True),
|
|
76
|
+
(".github/workflows/pipeline.yml", True),
|
|
77
|
+
],
|
|
78
|
+
)
|
|
79
|
+
def test_package_publication_skips_only_container_pin_refresh(path, expected):
|
|
80
|
+
ignores = _workflow("pipeline.yml")[True]["push"]["paths-ignore"]
|
|
81
|
+
assert (not any(fnmatchcase(path, pattern) for pattern in ignores)) is expected
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
[agent_connector_sdk.connector]
|
|
2
|
-
onetrust-mcp = onetrust_api
|
|
3
|
-
|
|
4
|
-
[agent_connector_sdk.ontology_providers]
|
|
5
|
-
onetrust-api = onetrust_api.ontology
|
|
6
|
-
|
|
7
|
-
[agent_connector_sdk.prompt_providers]
|
|
8
|
-
onetrust-api = onetrust_api.prompts
|
|
9
|
-
|
|
10
|
-
[agent_connector_sdk.skill_providers]
|
|
11
|
-
onetrust-api = onetrust_api.skills
|
|
12
|
-
|
|
13
|
-
[console_scripts]
|
|
14
|
-
onetrust-mcp = onetrust_api.mcp_server:mcp_server
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"""CONN-ONETRUST-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 = "onetrust_api"
|
|
13
|
-
ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
|
|
14
|
-
|
|
15
|
-
pytestmark = pytest.mark.spec("CONN-ONETRUST-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('onetrust-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://onetrust-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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|