From b424523d145b0e2cafd646f623be71a906c0f85f Mon Sep 17 00:00:00 2001 From: jamshale Date: Wed, 2 Oct 2024 10:14:47 -0700 Subject: [PATCH] Change aries_cloudagent references to acapy_agent Signed-off-by: jamshale --- .github/workflows/create-release-pr.yaml | 24 ++--- .github/workflows/create-release.yaml | 8 +- DOCSITE.md | 2 +- MAINTAINERS.md | 91 +++++++------------ README.md | 16 ++-- .../basicmessage_storage/v1_0/__init__.py | 14 ++- .../basicmessage_storage/v1_0/models.py | 8 +- .../basicmessage_storage/v1_0/routes.py | 34 ++++--- .../v1_0/tests/test_init.py | 4 +- .../v1_0/tests/test_models.py | 2 +- .../v1_0/tests/test_routes.py | 8 +- basicmessage_storage/pyproject.toml | 33 +++---- .../connection_update/v1_0/__init__.py | 8 +- .../connection_update/v1_0/routes.py | 22 ++--- .../connection_update/v1_0/tests/test_init.py | 8 +- .../v1_0/tests/test_routes.py | 8 +- connection_update/poetry.lock | 4 +- connection_update/pyproject.toml | 33 +++---- .../v1_0/handlers/handler.py | 7 +- .../v1_0/manager.py | 4 +- .../v1_0/message_types.py | 2 +- .../v1_0/messages/set_device_info.py | 12 +-- .../v1_0/models.py | 6 +- .../v1_0/routes.py | 16 ++-- .../v1_0/tests/test_manager.py | 6 +- .../v1_0/tests/test_routes.py | 12 +-- firebase_push_notifications/pyproject.toml | 6 +- .../kafka_events/v1_0/kafka_queue/config.py | 8 +- .../v1_0/kafka_queue/events/__init__.py | 8 +- .../kafka_events/v1_0/kafka_queue/inbound.py | 6 +- .../kafka_events/v1_0/kafka_queue/outbound.py | 8 +- .../v1_0/kafka_queue/tests/test_config.py | 3 +- kafka_events/pyproject.toml | 36 ++++---- .../multitenant_provider/v1_0/__init__.py | 14 +-- .../multitenant_provider/v1_0/manager.py | 20 ++-- .../multitenant_provider/v1_0/models.py | 8 +- .../multitenant_provider/v1_0/provider.py | 10 +- .../multitenant_provider/v1_0/routes.py | 18 ++-- .../v1_0/tests/test_init.py | 8 +- .../v1_0/tests/test_manager.py | 8 +- .../v1_0/tests/test_models.py | 4 +- .../v1_0/tests/test_provider.py | 6 +- .../v1_0/tests/test_routes.py | 8 +- multitenant_provider/pyproject.toml | 33 +++---- oid4vc/jwt_vc_json/cred_processor.py | 6 +- oid4vc/jwt_vc_json/tests/conftest.py | 4 +- .../jwt_vc_json/tests/test_cred_processor.py | 6 +- oid4vc/mso_mdoc/__init__.py | 3 +- oid4vc/mso_mdoc/cred_processor.py | 6 +- oid4vc/mso_mdoc/mdoc/issuer.py | 16 ++-- oid4vc/mso_mdoc/mdoc/verifier.py | 17 ++-- oid4vc/mso_mdoc/routes.py | 14 +-- oid4vc/mso_mdoc/tests/conftest.py | 3 +- oid4vc/mso_mdoc/tests/mso/test_issuer.py | 4 +- oid4vc/mso_mdoc/tests/test_x509.py | 7 +- oid4vc/oid4vc/__init__.py | 18 ++-- oid4vc/oid4vc/config.py | 4 +- oid4vc/oid4vc/cred_processor.py | 6 +- oid4vc/oid4vc/jwk.py | 5 +- oid4vc/oid4vc/jwk_resolver.py | 8 +- oid4vc/oid4vc/jwt.py | 17 ++-- oid4vc/oid4vc/models/exchange.py | 6 +- oid4vc/oid4vc/models/presentation.py | 5 +- .../oid4vc/models/presentation_definition.py | 3 +- oid4vc/oid4vc/models/request.py | 3 +- oid4vc/oid4vc/models/supported_cred.py | 2 +- oid4vc/oid4vc/oid4vci_server.py | 12 +-- oid4vc/oid4vc/pex.py | 19 ++-- oid4vc/oid4vc/public_routes.py | 58 +++++------- oid4vc/oid4vc/routes.py | 45 +++++---- oid4vc/oid4vc/tests/conftest.py | 2 +- oid4vc/oid4vc/tests/models/test_exchange.py | 2 +- .../tests/models/test_supported_cred.py | 2 +- oid4vc/oid4vc/tests/routes/conftest.py | 12 +-- oid4vc/oid4vc/tests/routes/test_admin.py | 2 +- .../oid4vc/tests/routes/test_public_routes.py | 4 +- oid4vc/pyproject.toml | 61 +++++++------ oid4vc/sd_jwt_vc/__init__.py | 5 +- oid4vc/sd_jwt_vc/cred_processor.py | 22 ++--- plugin_globals/pyproject.toml | 32 ++++--- redis_events/integration/pyproject.toml | 2 +- redis_events/pyproject.toml | 6 +- .../v1_0/redis_queue/events/__init__.py | 10 +- .../redis_events/v1_0/redis_queue/inbound.py | 13 +-- .../redis_events/v1_0/redis_queue/outbound.py | 9 +- .../v1_0/redis_queue/tests/test_events.py | 78 ++++++++-------- .../v1_0/redis_queue/tests/test_inbound.py | 8 +- .../v1_0/redis_queue/tests/test_outbound.py | 8 +- repo_manager.py | 55 ++++++----- rpc/pyproject.toml | 33 +++---- rpc/rpc/v1_0/handlers.py | 6 +- rpc/rpc/v1_0/message_types.py | 2 +- rpc/rpc/v1_0/messages.py | 2 +- rpc/rpc/v1_0/models.py | 10 +- rpc/rpc/v1_0/routes.py | 26 +++--- rpc/rpc/v1_0/tests/test_routes.py | 12 +-- rpc/rpc/v1_0/tests/test_schemas.py | 2 +- setupDocs.sh | 6 +- 98 files changed, 638 insertions(+), 695 deletions(-) diff --git a/.github/workflows/create-release-pr.yaml b/.github/workflows/create-release-pr.yaml index 11dab536a..c0158ee82 100644 --- a/.github/workflows/create-release-pr.yaml +++ b/.github/workflows/create-release-pr.yaml @@ -51,23 +51,23 @@ jobs: run: pipx install poetry id: setup-poetry #---------------------------------------------- - # Get the latest version of aries-cloudagent from pypi + # Get the latest version of acapy-agent from pypi #---------------------------------------------- - - name: Get latest aries-cloudagent version + - name: Get latest acapy-agent version id: current_available_version run: | - remote_version=$(pip index versions aries-cloudagent) + remote_version=$(pip index versions acapy-agent) version=$(grep -oP '(?<=Available versions: ).*?(?=,)' <<< "$remote_version") echo current_available_version=$version >> $GITHUB_OUTPUT echo "Remote version = $version" #---------------------------------------------- # Check the latest version from plugins_global lock file #---------------------------------------------- - - name: Get global aries-cloudagent version from plugins repo + - name: Get global acapy-agent version from plugins repo id: current_global_version run: | cd plugin_globals - lock_version=$(grep -A1 'name = "aries-cloudagent"' poetry.lock | grep -v 'name = "aries-cloudagent"') + lock_version=$(grep -A1 'name = "acapy-agent"' poetry.lock | grep -v 'name = "acapy-agent"') version=$(grep -oP '(?<=").*?(?=")' <<< "$lock_version") echo current_global_version=$version >> $GITHUB_OUTPUT echo "Global version = $version" @@ -79,10 +79,10 @@ jobs: run: | echo "Re-Release manually requested. Skipping upgrade available check." #---------------------------------------------- - # Check if aries-cloudagent upgrade available + # Check if acapy-agent upgrade available # If the global version is greater than or equal to the remote version, exit #---------------------------------------------- - - name: Check if aries-cloudagent upgrade available + - name: Check if acapy-agent upgrade available id: upgrade_available if: github.event.inputs.re_release != 'true' run: | @@ -97,13 +97,13 @@ jobs: } if [ $(sem_version $current_global_version) -ge $(sem_version $current_available_version) ]; then - echo "Version of aries-cloudagent is up to date" + echo "Version of acapy-agent is up to date" exit 0 fi echo available=true >> $GITHUB_OUTPUT - echo "Detected aries-cloudagent upgrade available..." + echo "Detected acapy-agent upgrade available..." #---------------------------------------------- - # Update global aries-cloudagent version in lock file + # Update global acapy-agent version in lock file #---------------------------------------------- - name: Update global acapy version if: ${{ steps.upgrade_available.outputs.available == 'true' && github.event.inputs.re_release != 'true'}} @@ -111,7 +111,7 @@ jobs: python repo_manager.py 3 echo "Update global acapy version" #---------------------------------------------- - # Update all plugins with aries-cloudagent and global and local dependencies + # Update all plugins with acapy-agent and global and local dependencies #---------------------------------------------- - name: Run global updates if: ${{ steps.upgrade_available.outputs.available == 'true' && github.event.inputs.re_release != 'true'}} @@ -398,7 +398,7 @@ jobs: committer: Release Bot token: ${{ secrets.GITHUB_TOKEN }} commit-message: "Release v${{ steps.prepare_pr.outputs.tag_version }} Upgrades" - title: "Release for aries-cloudagent v${{ steps.prepare_pr.outputs.tag_version }}" + title: "Release for acapy-agent v${{ steps.prepare_pr.outputs.tag_version }}" body: "${{ steps.prepare_pr.outputs.pr_body }}" branch: "release-v${{ steps.prepare_pr.outputs.tag_version }}" base: "main" diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml index 4173e2a1a..5f38daf78 100644 --- a/.github/workflows/create-release.yaml +++ b/.github/workflows/create-release.yaml @@ -32,11 +32,11 @@ jobs: #---------------------------------------------- # Check the latest version from plugins_global lock file #---------------------------------------------- - - name: Get global aries-cloudagent version from plugins repo + - name: Get global acapy-agent version from plugins repo id: current_global_version run: | cd plugin_globals - lock_version=$(grep -A1 'name = "aries-cloudagent"' poetry.lock | grep -v 'name = "aries-cloudagent"') + lock_version=$(grep -A1 'name = "acapy-agent"' poetry.lock | grep -v 'name = "acapy-agent"') version=$(grep -oP '(?<=").*?(?=")' <<< "$lock_version") echo current_global_version=$version >> $GITHUB_OUTPUT echo "Global version = $version" @@ -68,7 +68,7 @@ jobs: # Check if the lock file is rooted if [[ $file == *"/poetry.lock"* ]] && [[ "$number_of_slashes" == 1 ]]; then changes="$(git diff ${{ github.event.before }} ${{ github.event.after }} $file)" - lock_version=$(echo "$changes" | grep -A1 'name = "aries-cloudagent"' | head -n 2 | tail -n 1 | awk '{print $3}' | tr -d '"') + lock_version=$(echo "$changes" | grep -A1 'name = "acapy-agent"' | head -n 2 | tail -n 1 | awk '{print $3}' | tr -d '"') echo "File = $file" echo "Old Version = $lock_version" echo "Global Version = $current_global_version" @@ -98,7 +98,7 @@ jobs: echo ${{ steps.should_create_release.outputs.should_create_release }} # Get the latest version - remote_version=$(pip index versions aries-cloudagent) + remote_version=$(pip index versions acapy-agent) version=$(grep -oP '(?<=Available versions: ).*?(?=,)' <<< "$remote_version") # Set the git config diff --git a/DOCSITE.md b/DOCSITE.md index ae69d8199..b068e0135 100644 --- a/DOCSITE.md +++ b/DOCSITE.md @@ -1,6 +1,6 @@ # ACA-Py Plugins Documentation -The documentation site for the ACA-Py plugins can be found at: [https://hyperledger.github.io/aries-acapy-plugins](https://hyperledger.github.io/aries-acapy-plugins). +The documentation site for the ACA-Py plugins can be found at: [https://openwallet-foundation.github.io/acapy-plugins](https://openwallet-foundation.github.io/acapy-plugins). ## Managing the Documentation Site diff --git a/MAINTAINERS.md b/MAINTAINERS.md index a76d8be18..245b421a1 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -2,40 +2,14 @@ ## Maintainer Scopes, GitHub Roles and GitHub Teams -Maintainers are assigned the following scopes in this repository: - -| Scope | Definition | GitHub Role | GitHub Team | -| ---------- | ------------------------ | ----------- | ------------------------------------ | -| Admin | | Admin | [aries-admins] | -| Maintainer | The GitHub Maintain role | Maintain | [aries-cloudagent-python committers] | -| Triage | The GitHub Triage role | Triage | [aries triage] | -| Read | The GitHub Read role | Read | [Aries Contributors] | - -[aries-admins]: https://github.com/orgs/hyperledger/teams/aries-admins -[aries-cloudagent-python committers]: https://github.com/orgs/hyperledger/teams/aries-cloudagent-python-committers -[aries triage]: https://github.com/orgs/hyperledger/teams/aries-triage -[Aries Contributors]: https://github.com/orgs/hyperledger/teams/aries-contributors - -## Active Maintainers - - - -| GitHub ID | Name | Scope | LFID | Discord ID | Email | Company Affiliation | -| --------------- | ---------------- | ---------- | ---- | ---------- | ----- | ------------------- | -| amanji | Akiff Manji | Maintainer | | | | BC Gov | -| andrewwhitehead | Andrew Whitehead | Maintainer | | | | BC Gov | -| chumbert | Clement Humbert | Maintainer | | | | SICPA | -| dbluhm | Daniel Bluhm | | | | | Indicio PBC | -| dhh1128 | Daniel Hardman | Maintainer | | | | Provenant | -| ianco | Ian Costanzo | | | | | Anonymous Systems | -| jamshale | Jamie Hale | Maintainer | | | | BC Gov | -| Jsyro | Jason Syrotuck | | | | | BC Gov | -| shaangill025 | Shaanjot Gill | | | | | BC Gov | -| swcurran | Stephen Curran | Maintainer | | | | BC Gov | -| TelegramSam | Sam Curren | Maintainer | | | | Indicio PBC | -| TimoGlastra | Timo Glastra | | | | | Animo Solutions | -| WadeBarnes | Wade Barnes | Maintainer | | | | BC Gov | -| usingtechnology | Jason Sherman | | | | | BC Gov | +The Maintainers of this repo, defined as GitHub users with escalated privileges +in the repo, are managed in the Hyperledger "governance" repo's [access-control.yaml](https://github.com/hyperledger/governance/blob/main/access-control.yaml) file. Consult that to see: + +- What teams have escalated privileges to this repository. +- What GitHub roles those teams have in the repository. +- Who are the members of each of those teams. + +The actions covered below for [becoming](#becoming-a-maintainer) and [removing](#removing-maintainers) are made manifest through PRs to that file. ## The Duties of a Maintainer @@ -56,8 +30,8 @@ Maintainers are expected to perform the following duties for this repository. Th give guidance and encouragement to those wanting to contribute to the product, and those wanting to become maintainers. - Contribute to the product via GitHub Pull Requests. - Monitor requests from the Hyperledger Technical Oversight Committee about the - contents and management of Hyperledger repositories, such as branch handling, - required files in repositories and so on. +contents and management of Hyperledger repositories, such as branch handling, +required files in repositories and so on. - Contribute to the Hyperledger Project's Quarterly Report. ## Becoming a Maintainer @@ -69,18 +43,18 @@ occur, roughly in order. - The proposed maintainer establishes their reputation in the community, including authoring five (5) significant merged pull requests, and expresses an interest in becoming a maintainer for the repository. -- A PR is created to update this file to add the proposed maintainer to the list of active maintainers. -- The PR is authored by an existing maintainer or has a comment on the PR from an existing maintainer supporting the proposal. -- The PR is authored by the proposed maintainer or has a comment on the PR from the proposed maintainer confirming their interest in being a maintainer. - - The PR or comment from the proposed maintainer must include their +- An issue is created to add the proposed maintainer to the list of active maintainers. +- The issue is authored by an existing maintainer or has a comment on the PR from an existing maintainer supporting the proposal. +- The issue is authored by the proposed maintainer or has a comment on the issue from the proposed maintainer confirming their interest in being a maintainer. + - The issue or comment from the proposed maintainer must include their willingness to be a long-term (more than 6 month) maintainer. -- Once the PR and necessary comments have been received, an approval timeframe begins. -- The PR **MUST** be communicated on all appropriate communication channels, including relevant community calls, chat channels and mailing lists. Comments of support from the community are welcome. -- The PR is merged and the proposed maintainer becomes a maintainer if either: - - Two weeks have passed since at least three (3) Maintainer PR approvals have been recorded, OR - - An absolute majority of maintainers have approved the PR. -- If the PR does not get the requisite PR approvals, it may be closed. -- Once the add maintainer PR has been merged, any necessary updates to the GitHub Teams are made. +- Once the issue and necessary comments have been received, an approval timeframe begins. +- The issue **MUST** be communicated on all appropriate communication channels, including relevant community calls, chat channels and mailing lists. Comments of support from the community are welcome. +- The issue is approved and the proposed maintainer becomes a maintainer if either: + - Two weeks have passed since at least three (3) Maintainer issue approvals have been recorded, OR + - An absolute majority of maintainers have approved the issue. +- If the issue does not get the requisite approvals, it may be closed. +- Once the add maintainer issue has been approved, the necessary updates to the GitHub Teams are made via a PR to the Hyperledger "governance" repo's [access-control.yaml](https://github.com/hyperledger/governance/blob/main/access-control.yaml) file. ## Removing Maintainers @@ -99,17 +73,18 @@ maintainer to emeritus status. This can occur in the following situations: - Other circumstances at the discretion of the other Maintainers. The process to move a maintainer from active to emeritus status is comparable to the process for adding a maintainer, outlined above. In the case of voluntary -resignation, the Pull Request can be merged following a maintainer PR approval. If the removal is for any other reason, the following steps **SHOULD** be followed: - -- A PR is created to update this file to move the maintainer to the list of emeritus maintainers. -- The PR is authored by, or has a comment supporting the proposal from, an existing maintainer or Hyperledger GitHub organization administrator. -- Once the PR and necessary comments have been received, the approval timeframe begins. -- The PR **MAY** be communicated on appropriate communication channels, including relevant community calls, chat channels and mailing lists. -- The PR is merged and the maintainer transitions to maintainer emeritus if: - - The PR is approved by the maintainer to be transitioned, OR - - Two weeks have passed since at least three (3) Maintainer PR approvals have been recorded, OR - - An absolute majority of maintainers have approved the PR. -- If the PR does not get the requisite PR approvals, it may be closed. +resignation, the Pull Request can be merged following a maintainer issue approval. If the removal is for any other reason, the following steps **SHOULD** be followed: + +- An issue is created to move the maintainer to the list of emeritus maintainers. +- The issue is authored by, or has a comment supporting the proposal from, an existing maintainer or Hyperledger GitHub organization administrator. +- Once the issue and necessary comments have been received, the approval timeframe begins. +- The issue **MAY** be communicated on appropriate communication channels, including relevant community calls, chat channels and mailing lists. +- The issue is approved and the maintainer transitions to maintainer emeritus if: + - The issue is approved by the maintainer to be transitioned, OR + - Two weeks have passed since at least three (3) Maintainer issue approvals have been recorded, OR + - An absolute majority of maintainers have approved the issue. +- If the issue does not get the requisite approvals, it may be closed. +- Once the remove maintainer issue has been approved, the necessary updates to the GitHub Teams are made via a PR to the Hyperledger "governance" repo's [access-control.yaml](https://github.com/hyperledger/governance/blob/main/access-control.yaml) file. Returning to active status from emeritus status uses the same steps as adding a new maintainer. Note that the emeritus maintainer already has the 5 required diff --git a/README.md b/README.md index 87d936d7a..19a8f90a0 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This repository contains approved and tested plugins for [Aries Cloud Agent Python] (ACA-Py). This is to encourage collaboration and sharing of useful features not directly included in ACA-Py. -[Aries Cloud Agent Python]: https://github.com/hyperledger/aries-cloudagent-python +[A Cloud Agent Python]: https://github.com/openwallet-foundation/acapy ## Developer Notes @@ -62,11 +62,11 @@ with at least a `Description` and `Configuration` section. ## Build and Run Each plugin (that is not a [Lite Plugin](#lite-plugins)) **MUST** include a -Dockerfile (such as [Dockerfile](https://github.com/hyperledger/aries-acapy-plugins/blob/main/basicmessage_storage/docker/Dockerfile)) to +Dockerfile (such as [Dockerfile](https://github.com/openwallet-foundation/acapy-plugins/blob/main/basicmessage_storage/docker/Dockerfile)) to run integration tests. This image is not intended for production as it copies the plugin source and loads its dependencies (including ACA-Py) along with a simplistic ACA-Py configuration file, (such as -[default.yml](https://github.com/hyperledger/aries-acapy-plugins/blob/main/basicmessage_storage/docker/default.yml)). +[default.yml](https://github.com/openwallet-foundation/acapy-plugins/blob/main/basicmessage_storage/docker/default.yml)). ## Run and Debug @@ -75,7 +75,7 @@ and set breakpoints for debug (see `launch.json`). To run your ACA-Py code in debug mode, go to the `Run and Debug` view, select "Run/Debug Plugin" and click `Start Debugging (F5)`. Using the `default.yml` for -the plugin (such as [default.yml](https://github.com/hyperledger/aries-acapy-plugins/blob/main/basicmessage_storage/docker/default.yml)), +the plugin (such as [default.yml](https://github.com/openwallet-foundation/acapy-plugins/blob/main/basicmessage_storage/docker/default.yml)), your agent swagger is available at http://localhost:3001/api/doc. ## Testing @@ -94,7 +94,7 @@ For the plugin to be accepted into this repo it must have adequate testing. created for your plugin after running the updater script. Plugins that don't have integrations must be flagged as being a [Lite Plugin](#lite-plugins). - An Integration `README` (such as [integration - tests](https://github.com/hyperledger/aries-acapy-plugins/blob/main/basicmessage_storage/integration/README.md)) **SHOULD** describe the + tests](https://github.com/openwallet-foundation/acapy-plugins/blob/main/basicmessage_storage/integration/README.md)) **SHOULD** describe the set of integration tests. When you generate a new plugin, you should have everything you need to start integration testing and a sample test will be provided. @@ -109,13 +109,13 @@ Example Dockerfile: ```yaml -FROM ghcr.io/hyperledger/aries-cloudagent-python:py3.9-0.11.0 +FROM ghcr.io/openwallet-foundation/acapy:py3.12-1.0.1 USER root # install plugins as binaries -RUN pip install git+https://github.com/hyperledger/aries-acapy-plugins@main#subdirectory=basicmessage_storage -RUN pip install git+https://github.com/hyperledger/aries-acapy-plugins@main#subdirectory=connection_update +RUN pip install git+https://github.com/openwallet-foundation/acapy-plugins@main#subdirectory=basicmessage_storage +RUN pip install git+https://github.com/openwallet-foundation/acapy-plugins@main#subdirectory=connection_update USER $user COPY ./configs configs diff --git a/basicmessage_storage/basicmessage_storage/v1_0/__init__.py b/basicmessage_storage/basicmessage_storage/v1_0/__init__.py index 0700a1ce2..0efe411fe 100644 --- a/basicmessage_storage/basicmessage_storage/v1_0/__init__.py +++ b/basicmessage_storage/basicmessage_storage/v1_0/__init__.py @@ -1,11 +1,11 @@ import logging import re -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.event_bus import Event, EventBus -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.core.protocol_registry import ProtocolRegistry -from aries_cloudagent.multitenant.admin.routes import ( +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.event_bus import Event, EventBus +from acapy_agent.core.profile import Profile +from acapy_agent.core.protocol_registry import ProtocolRegistry +from acapy_agent.multitenant.admin.routes import ( ACAPY_LIFECYCLE_CONFIG_FLAG_ARGS_MAP, ) @@ -30,9 +30,7 @@ async def setup(context: InjectionContext): # acapy should create a separate map for plugin settings # add subwallet config, acapy will accept any child under basicmessage-storage # but will get filtered with `.config.get_config` - ACAPY_LIFECYCLE_CONFIG_FLAG_ARGS_MAP["basicmessage-storage"] = ( - "basicmessage_storage" - ) + ACAPY_LIFECYCLE_CONFIG_FLAG_ARGS_MAP["basicmessage-storage"] = "basicmessage_storage" event_bus.subscribe(BASIC_MESSAGE_EVENT_PATTERN, basic_message_event_handler) LOGGER.info("< basicmessage_storage plugin setup.") diff --git a/basicmessage_storage/basicmessage_storage/v1_0/models.py b/basicmessage_storage/basicmessage_storage/v1_0/models.py index a5705f7b8..7a9758476 100644 --- a/basicmessage_storage/basicmessage_storage/v1_0/models.py +++ b/basicmessage_storage/basicmessage_storage/v1_0/models.py @@ -1,12 +1,12 @@ """Basic Messages Storage Model classes and schemas.""" -from aries_cloudagent.core.profile import ProfileSession -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema -from aries_cloudagent.messaging.valid import ( +from acapy_agent.core.profile import ProfileSession +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema +from acapy_agent.messaging.valid import ( INDY_ISO8601_DATETIME_EXAMPLE, INDY_ISO8601_DATETIME_VALIDATE, ) -from aries_cloudagent.storage.base import BaseStorage +from acapy_agent.storage.base import BaseStorage from marshmallow import fields diff --git a/basicmessage_storage/basicmessage_storage/v1_0/routes.py b/basicmessage_storage/basicmessage_storage/v1_0/routes.py index 92a51ffd2..5a93037a5 100644 --- a/basicmessage_storage/basicmessage_storage/v1_0/routes.py +++ b/basicmessage_storage/basicmessage_storage/v1_0/routes.py @@ -4,6 +4,21 @@ import logging import uuid +from acapy_agent.admin.decorators.auth import tenant_authentication +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.messaging.models.base import BaseModelError +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.messaging.util import str_to_epoch, time_now +from acapy_agent.messaging.valid import UUID4_EXAMPLE +from acapy_agent.multitenant.error import WalletKeyMissingError +from acapy_agent.protocols.basicmessage.v1_0.message_types import SPEC_URI +from acapy_agent.protocols.basicmessage.v1_0.routes import ( + BasicConnIdMatchInfoSchema, + BasicMessageModuleResponseSchema, + SendMessageSchema, + connections_send_message, +) +from acapy_agent.storage.error import StorageError, StorageNotFoundError from aiohttp import web from aiohttp_apispec import ( docs, @@ -12,21 +27,6 @@ request_schema, response_schema, ) -from aries_cloudagent.admin.decorators.auth import tenant_authentication -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.messaging.models.base import BaseModelError -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.messaging.util import str_to_epoch, time_now -from aries_cloudagent.messaging.valid import UUID4_EXAMPLE -from aries_cloudagent.multitenant.error import WalletKeyMissingError -from aries_cloudagent.protocols.basicmessage.v1_0.message_types import SPEC_URI -from aries_cloudagent.protocols.basicmessage.v1_0.routes import ( - BasicConnIdMatchInfoSchema, - BasicMessageModuleResponseSchema, - SendMessageSchema, - connections_send_message, -) -from aries_cloudagent.storage.error import StorageError, StorageNotFoundError from marshmallow import fields, validate from .config import get_config @@ -209,9 +209,7 @@ async def delete_message(request: web.BaseRequest): message_id = request.match_info["message_id"] try: async with profile.session() as session: - record = await BasicMessageRecord.retrieve_by_message_id( - session, message_id - ) + record = await BasicMessageRecord.retrieve_by_message_id(session, message_id) await record.delete_record(session) except StorageNotFoundError as err: diff --git a/basicmessage_storage/basicmessage_storage/v1_0/tests/test_init.py b/basicmessage_storage/basicmessage_storage/v1_0/tests/test_init.py index e6c80f07d..f4f7b62c3 100644 --- a/basicmessage_storage/basicmessage_storage/v1_0/tests/test_init.py +++ b/basicmessage_storage/basicmessage_storage/v1_0/tests/test_init.py @@ -1,8 +1,8 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import MagicMock, Mock, patch -from aries_cloudagent.core.event_bus import Event -from aries_cloudagent.core.in_memory import InMemoryProfile +from acapy_agent.core.event_bus import Event +from acapy_agent.core.in_memory import InMemoryProfile from pydantic import BaseModel import basicmessage_storage.v1_0 as test_module diff --git a/basicmessage_storage/basicmessage_storage/v1_0/tests/test_models.py b/basicmessage_storage/basicmessage_storage/v1_0/tests/test_models.py index a2e0fb623..124757408 100644 --- a/basicmessage_storage/basicmessage_storage/v1_0/tests/test_models.py +++ b/basicmessage_storage/basicmessage_storage/v1_0/tests/test_models.py @@ -1,7 +1,7 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import patch -from aries_cloudagent.core.in_memory import InMemoryProfile +from acapy_agent.core.in_memory import InMemoryProfile from ..models import BasicMessageRecord diff --git a/basicmessage_storage/basicmessage_storage/v1_0/tests/test_routes.py b/basicmessage_storage/basicmessage_storage/v1_0/tests/test_routes.py index 4dbfd86ac..84295098b 100644 --- a/basicmessage_storage/basicmessage_storage/v1_0/tests/test_routes.py +++ b/basicmessage_storage/basicmessage_storage/v1_0/tests/test_routes.py @@ -2,9 +2,9 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import AsyncMock, MagicMock, Mock, patch -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.protocols.basicmessage.v1_0 import routes as base_module -from aries_cloudagent.core.in_memory.profile import InMemoryProfile +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.in_memory.profile import InMemoryProfile +from acapy_agent.protocols.basicmessage.v1_0 import routes as base_module from basicmessage_storage.v1_0.models import BasicMessageRecord @@ -32,7 +32,7 @@ async def asyncSetUp(self) -> None: match_info={}, query={}, __getitem__=lambda _, k: self.request_dict[k], - headers={"x-api-key": "admin_api_key"} + headers={"x-api-key": "admin_api_key"}, ) self.test_conn_id = "connection-id" diff --git a/basicmessage_storage/pyproject.toml b/basicmessage_storage/pyproject.toml index 154e69057..48af09625 100644 --- a/basicmessage_storage/pyproject.toml +++ b/basicmessage_storage/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "basicmessage_storage" version = "0.1.0" -description = " (Supported aries-cloudagent version: 1.0.0) " +description = " (Supported acapy-agent version: 1.0.0) " authors = ["Jason Sherman "] [tool.poetry.dependencies] @@ -9,11 +9,11 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } mergedeep = "^1.3.4" [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" @@ -36,8 +36,18 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now @@ -59,19 +69,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -82,4 +84,3 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] build-backend = "poetry.core.masonry.api" - diff --git a/connection_update/connection_update/v1_0/__init__.py b/connection_update/connection_update/v1_0/__init__.py index 78145756f..02e5feb88 100644 --- a/connection_update/connection_update/v1_0/__init__.py +++ b/connection_update/connection_update/v1_0/__init__.py @@ -1,9 +1,9 @@ import logging -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.event_bus import EventBus -from aries_cloudagent.core.plugin_registry import PluginRegistry -from aries_cloudagent.core.protocol_registry import ProtocolRegistry +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.event_bus import EventBus +from acapy_agent.core.plugin_registry import PluginRegistry +from acapy_agent.core.protocol_registry import ProtocolRegistry LOGGER = logging.getLogger(__name__) diff --git a/connection_update/connection_update/v1_0/routes.py b/connection_update/connection_update/v1_0/routes.py index 53c9e8fa0..d254275fc 100644 --- a/connection_update/connection_update/v1_0/routes.py +++ b/connection_update/connection_update/v1_0/routes.py @@ -3,17 +3,17 @@ import functools import logging -from aiohttp import web -from aiohttp_apispec import docs, match_info_schema, request_schema, response_schema -from aries_cloudagent.admin.decorators.auth import tenant_authentication -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.connections.models.conn_record import ConnRecord, ConnRecordSchema -from aries_cloudagent.messaging.models.base import BaseModelError -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.protocols.connections.v1_0.routes import ( +from acapy_agent.admin.decorators.auth import tenant_authentication +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.connections.models.conn_record import ConnRecord, ConnRecordSchema +from acapy_agent.messaging.models.base import BaseModelError +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.protocols.connections.v1_0.routes import ( ConnectionsConnIdMatchInfoSchema, ) -from aries_cloudagent.storage.error import StorageError, StorageNotFoundError +from acapy_agent.storage.error import StorageError, StorageNotFoundError +from aiohttp import web +from aiohttp_apispec import docs, match_info_schema, request_schema, response_schema from marshmallow import fields LOGGER = logging.getLogger(__name__) @@ -69,9 +69,7 @@ async def connections_update(request: web.BaseRequest): profile = context.profile async with profile.session() as session: - record = await ConnRecord.retrieve_by_id( - session, connection_id, for_update=True - ) + record = await ConnRecord.retrieve_by_id(session, connection_id, for_update=True) if alias: record.alias = alias await record.save(session, reason="Update connection alias") diff --git a/connection_update/connection_update/v1_0/tests/test_init.py b/connection_update/connection_update/v1_0/tests/test_init.py index 35770db9b..5757a5431 100644 --- a/connection_update/connection_update/v1_0/tests/test_init.py +++ b/connection_update/connection_update/v1_0/tests/test_init.py @@ -1,10 +1,10 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import MagicMock, Mock -from aries_cloudagent.core.event_bus import EventBus -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.core.plugin_registry import PluginRegistry -from aries_cloudagent.core.protocol_registry import ProtocolRegistry +from acapy_agent.core.event_bus import EventBus +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.core.plugin_registry import PluginRegistry +from acapy_agent.core.protocol_registry import ProtocolRegistry from .. import setup diff --git a/connection_update/connection_update/v1_0/tests/test_routes.py b/connection_update/connection_update/v1_0/tests/test_routes.py index 9fbd5964d..fa84be9ec 100644 --- a/connection_update/connection_update/v1_0/tests/test_routes.py +++ b/connection_update/connection_update/v1_0/tests/test_routes.py @@ -1,9 +1,9 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import AsyncMock, MagicMock, patch -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.connections.models.conn_record import ConnRecord -from aries_cloudagent.core.in_memory.profile import InMemoryProfile +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.connections.models.conn_record import ConnRecord +from acapy_agent.core.in_memory.profile import InMemoryProfile from .. import routes as test_module @@ -27,7 +27,7 @@ async def asyncSetUp(self) -> None: match_info={}, query={}, __getitem__=lambda _, k: self.request_dict[k], - headers={"x-api-key": "admin_api_key"} + headers={"x-api-key": "admin_api_key"}, ) self.test_conn_id = "connection-id" diff --git a/connection_update/poetry.lock b/connection_update/poetry.lock index c2d47a1eb..f0f2a2dd5 100644 --- a/connection_update/poetry.lock +++ b/connection_update/poetry.lock @@ -229,7 +229,7 @@ files = [ cached-property = ">=1.5.2,<1.6.0" [[package]] -name = "aries-cloudagent" +name = "acapy-agent" version = "1.0.0" description = "Hyperledger Aries Cloud Agent Python (ACA-Py) is a foundation for building decentralized identity applications and services running in non-mobile environments." optional = true @@ -2521,7 +2521,7 @@ idna = ">=2.0" multidict = ">=4.0" [extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [metadata] lock-version = "2.0" diff --git a/connection_update/pyproject.toml b/connection_update/pyproject.toml index 0ce25298c..655f81e3a 100644 --- a/connection_update/pyproject.toml +++ b/connection_update/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "connection_update" version = "0.1.0" -description = " (Supported aries-cloudagent version: 1.0.0) " +description = " (Supported acapy-agent version: 1.0.0) " authors = ["Jason Sherman "] [tool.poetry.dependencies] @@ -9,10 +9,10 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" @@ -35,8 +35,18 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now @@ -58,19 +68,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -81,4 +83,3 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] build-backend = "poetry.core.masonry.api" - diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/handlers/handler.py b/firebase_push_notifications/firebase_push_notifications/v1_0/handlers/handler.py index 0bc352b4a..8e87e5b78 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/handlers/handler.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/handlers/handler.py @@ -2,7 +2,7 @@ import logging -from aries_cloudagent.messaging.base_handler import ( +from acapy_agent.messaging.base_handler import ( BaseHandler, BaseResponder, RequestContext, @@ -31,8 +31,5 @@ async def handle(self, context: RequestContext, responder: BaseResponder): await save_device_token(context.profile, device_token, connection_id) await responder.send_reply( - SetDeviceInfo( - device_token=device_token, - device_platform=device_platform - ) + SetDeviceInfo(device_token=device_token, device_platform=device_platform) ) diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/manager.py b/firebase_push_notifications/firebase_push_notifications/v1_0/manager.py index e8d82751c..83781f467 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/manager.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/manager.py @@ -7,8 +7,8 @@ import google.auth.transport.requests import requests -from aries_cloudagent.messaging.util import datetime_now, time_now -from aries_cloudagent.storage.base import StorageNotFoundError +from acapy_agent.messaging.util import datetime_now, time_now +from acapy_agent.storage.base import StorageNotFoundError from dateutil import parser from google.oauth2 import service_account diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/message_types.py b/firebase_push_notifications/firebase_push_notifications/v1_0/message_types.py index bf35ddcc2..8e98307f4 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/message_types.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/message_types.py @@ -1,6 +1,6 @@ """Message type identifiers for push-notifications-fcm v1.0.""" -from aries_cloudagent.protocols.didcomm_prefix import DIDCommPrefix +from acapy_agent.protocols.didcomm_prefix import DIDCommPrefix ARIES_PROTOCOL = "push-notifications-fcm/1.0" SET_DEVICE_INFO = f"{ARIES_PROTOCOL}/set-device-info" diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/messages/set_device_info.py b/firebase_push_notifications/firebase_push_notifications/v1_0/messages/set_device_info.py index 353184584..81b0f88df 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/messages/set_device_info.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/messages/set_device_info.py @@ -1,6 +1,6 @@ """Message type for setting device info.""" -from aries_cloudagent.messaging.agent_message import AgentMessage, AgentMessageSchema +from acapy_agent.messaging.agent_message import AgentMessage, AgentMessageSchema from marshmallow import EXCLUDE, fields from ..message_types import PROTOCOL_PACKAGE, SET_DEVICE_INFO @@ -19,11 +19,7 @@ class Meta: schema_class = "SetDeviceInfoSchema" def __init__( - self, - *, - device_token: str = None, - device_platform: str = "Unknown", - **kwargs + self, *, device_token: str = None, device_platform: str = "Unknown", **kwargs ): """Initialize set device info message.""" super().__init__(**kwargs) @@ -48,7 +44,5 @@ class Meta: ) device_platform = fields.Str( - required=True, - description="Platform of the device", - example="Android" + required=True, description="Platform of the device", example="Android" ) diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/models.py b/firebase_push_notifications/firebase_push_notifications/v1_0/models.py index 8fcfcfd24..13ca39134 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/models.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/models.py @@ -1,8 +1,8 @@ """Model for Firebase Push Notifications.""" -from aries_cloudagent.core.profile import ProfileSession -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema -from aries_cloudagent.messaging.valid import INDY_ISO8601_DATETIME_VALIDATE +from acapy_agent.core.profile import ProfileSession +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema +from acapy_agent.messaging.valid import INDY_ISO8601_DATETIME_VALIDATE from marshmallow import fields diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/routes.py b/firebase_push_notifications/firebase_push_notifications/v1_0/routes.py index 937309fd4..88be985f7 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/routes.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/routes.py @@ -3,16 +3,16 @@ import logging import re +from acapy_agent.admin.decorators.auth import tenant_authentication +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.connections.models.conn_record import ConnRecord +from acapy_agent.core.event_bus import Event, EventBus +from acapy_agent.core.profile import Profile +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.messaging.valid import UUIDFour +from acapy_agent.storage.error import StorageNotFoundError from aiohttp import web from aiohttp_apispec import docs, match_info_schema, request_schema, response_schema -from aries_cloudagent.admin.decorators.auth import tenant_authentication -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.connections.models.conn_record import ConnRecord -from aries_cloudagent.core.event_bus import Event, EventBus -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.messaging.valid import UUIDFour -from aries_cloudagent.storage.error import StorageNotFoundError from marshmallow import fields from .constants import FORWARDING_EVENT diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_manager.py b/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_manager.py index fc19292bd..fd98eac0a 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_manager.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_manager.py @@ -5,9 +5,9 @@ from unittest.mock import Mock, patch import pytest -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.messaging.util import datetime_now, datetime_to_str -from aries_cloudagent.storage.base import StorageNotFoundError +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.messaging.util import datetime_now, datetime_to_str +from acapy_agent.storage.base import StorageNotFoundError from .. import manager as test_module from ..constants import MAX_SEND_RATE_MINUTES diff --git a/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_routes.py b/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_routes.py index 0c3c416ba..950aa08c2 100644 --- a/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_routes.py +++ b/firebase_push_notifications/firebase_push_notifications/v1_0/tests/test_routes.py @@ -1,12 +1,12 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import MagicMock, patch +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.connections.models.conn_record import ConnRecord +from acapy_agent.core.event_bus import MockEventBus +from acapy_agent.core.in_memory.profile import InMemoryProfile +from acapy_agent.storage.error import StorageNotFoundError from aiohttp import web -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.connections.models.conn_record import ConnRecord -from aries_cloudagent.core.event_bus import MockEventBus -from aries_cloudagent.core.in_memory.profile import InMemoryProfile -from aries_cloudagent.storage.error import StorageNotFoundError from .. import routes as test_module @@ -27,7 +27,7 @@ async def asyncSetUp(self) -> None: match_info={}, query={}, __getitem__=lambda _, k: self.request_dict[k], - headers={"x-api-key": "admin_api_key"} + headers={"x-api-key": "admin_api_key"}, ) async def test_register_events_subscribes_to_event_bus(self): diff --git a/firebase_push_notifications/pyproject.toml b/firebase_push_notifications/pyproject.toml index 52ebbd4d1..1132f9d12 100644 --- a/firebase_push_notifications/pyproject.toml +++ b/firebase_push_notifications/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "firebase_push_notifications" version = "0.1.0" -description = " (Supported aries-cloudagent version: 1.0.0) " +description = " (Supported acapy-agent version: 1.0.0) " authors = [] [tool.poetry.dependencies] @@ -9,14 +9,14 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } marshmallow = "^3.20.1" google-auth = "^2.33.0" google-api-python-client = "^2.147.0" requests = "^2.31.0" [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" diff --git a/kafka_events/kafka_events/v1_0/kafka_queue/config.py b/kafka_events/kafka_events/v1_0/kafka_queue/config.py index e3ffcbdec..8d383153a 100644 --- a/kafka_events/kafka_events/v1_0/kafka_queue/config.py +++ b/kafka_events/kafka_events/v1_0/kafka_queue/config.py @@ -4,9 +4,9 @@ from abc import ABC, abstractmethod from typing import List, Mapping, Optional, Union -from aries_cloudagent.config.base import BaseSettings -from aries_cloudagent.config.plugin_settings import PluginSettings -from aries_cloudagent.config.settings import Settings +from acapy_agent.config.base import BaseSettings +from acapy_agent.config.plugin_settings import PluginSettings +from acapy_agent.config.settings import Settings from pydantic import BaseModel, Extra LOGGER = logging.getLogger(__name__) @@ -173,4 +173,4 @@ def get_config(root_settings: BaseSettings) -> KafkaConfig: LOGGER.debug("Returning config: %s", config.json(indent=2)) LOGGER.debug("Returning config(aliases): %s", config.json(by_alias=True, indent=2)) - return config \ No newline at end of file + return config diff --git a/kafka_events/kafka_events/v1_0/kafka_queue/events/__init__.py b/kafka_events/kafka_events/v1_0/kafka_queue/events/__init__.py index e8d329d54..e5dc16db6 100644 --- a/kafka_events/kafka_events/v1_0/kafka_queue/events/__init__.py +++ b/kafka_events/kafka_events/v1_0/kafka_queue/events/__init__.py @@ -7,11 +7,11 @@ from string import Template from typing import Optional, cast +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.event_bus import Event, EventBus, EventWithMetadata +from acapy_agent.core.profile import Profile +from acapy_agent.core.util import SHUTDOWN_EVENT_PATTERN, STARTUP_EVENT_PATTERN from aiokafka import AIOKafkaProducer -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.event_bus import Event, EventBus, EventWithMetadata -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.core.util import SHUTDOWN_EVENT_PATTERN, STARTUP_EVENT_PATTERN from ..config import EventsConfig, get_config diff --git a/kafka_events/kafka_events/v1_0/kafka_queue/inbound.py b/kafka_events/kafka_events/v1_0/kafka_queue/inbound.py index 8ea4b04a3..88746a921 100644 --- a/kafka_events/kafka_events/v1_0/kafka_queue/inbound.py +++ b/kafka_events/kafka_events/v1_0/kafka_queue/inbound.py @@ -7,11 +7,11 @@ from json import JSONDecodeError from typing import cast +from acapy_agent.messaging.error import MessageParseError +from acapy_agent.transport.error import RecipientKeysError, WireFormatParseError +from acapy_agent.transport.inbound.base import BaseInboundTransport from aiokafka import AIOKafkaConsumer from aiokafka.structs import ConsumerRecord -from aries_cloudagent.messaging.error import MessageParseError -from aries_cloudagent.transport.error import RecipientKeysError, WireFormatParseError -from aries_cloudagent.transport.inbound.base import BaseInboundTransport from .config import InboundConfig, get_config diff --git a/kafka_events/kafka_events/v1_0/kafka_queue/outbound.py b/kafka_events/kafka_events/v1_0/kafka_queue/outbound.py index 0589831bc..7664fe383 100644 --- a/kafka_events/kafka_events/v1_0/kafka_queue/outbound.py +++ b/kafka_events/kafka_events/v1_0/kafka_queue/outbound.py @@ -6,14 +6,14 @@ import ssl from typing import List, Optional, Union -from aiokafka.producer.producer import AIOKafkaProducer -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.transport.outbound.base import ( +from acapy_agent.core.profile import Profile +from acapy_agent.transport.outbound.base import ( BaseOutboundTransport, BaseWireFormat, OutboundTransportError, ) -from aries_cloudagent.transport.outbound.manager import QueuedOutboundMessage +from acapy_agent.transport.outbound.manager import QueuedOutboundMessage +from aiokafka.producer.producer import AIOKafkaProducer from .config import OutboundConfig, get_config diff --git a/kafka_events/kafka_events/v1_0/kafka_queue/tests/test_config.py b/kafka_events/kafka_events/v1_0/kafka_queue/tests/test_config.py index 6b20108a6..be740f27c 100644 --- a/kafka_events/kafka_events/v1_0/kafka_queue/tests/test_config.py +++ b/kafka_events/kafka_events/v1_0/kafka_queue/tests/test_config.py @@ -1,4 +1,5 @@ -from aries_cloudagent.config.settings import Settings +from acapy_agent.config.settings import Settings + from kafka_queue import config from kafka_queue.config import EventsConfig, InboundConfig, OutboundConfig diff --git a/kafka_events/pyproject.toml b/kafka_events/pyproject.toml index be6296127..690df8970 100644 --- a/kafka_events/pyproject.toml +++ b/kafka_events/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "kafka_queue" version = "0.1.0" -description = "ACA-Py Event to Kafka Bridge (Supported aries-cloudagent version: 0.12.2) " +description = "ACA-Py Event to Kafka Bridge (Supported acapy-agent version: 0.12.2) " authors = ["Daniel Bluhm "] [tool.poetry.dependencies] @@ -9,13 +9,13 @@ python = "^3.9" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = ">=0.10.3, < 1.0.0", optional = true } +acapy-agent = { version = ">=0.10.3, < 1.0.0", optional = true } aiokafka = "^0.11.0" ecdsa = "^0.16.1" pydantic = "^1.10.15" [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" @@ -42,12 +42,23 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now - "D417", "C901", + "D417", + "C901", ] [tool.ruff.per-file-ignores] @@ -65,19 +76,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -88,4 +91,3 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] build-backend = "poetry.core.masonry.api" - diff --git a/multitenant_provider/multitenant_provider/v1_0/__init__.py b/multitenant_provider/multitenant_provider/v1_0/__init__.py index 28753f052..99f005a90 100644 --- a/multitenant_provider/multitenant_provider/v1_0/__init__.py +++ b/multitenant_provider/multitenant_provider/v1_0/__init__.py @@ -1,12 +1,12 @@ import logging -from aries_cloudagent.admin.base_server import BaseAdminServer -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.event_bus import Event, EventBus -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.core.protocol_registry import ProtocolRegistry -from aries_cloudagent.core.util import STARTUP_EVENT_PATTERN -from aries_cloudagent.multitenant.base import BaseMultitenantManager +from acapy_agent.admin.base_server import BaseAdminServer +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.event_bus import Event, EventBus +from acapy_agent.core.profile import Profile +from acapy_agent.core.protocol_registry import ProtocolRegistry +from acapy_agent.core.util import STARTUP_EVENT_PATTERN +from acapy_agent.multitenant.base import BaseMultitenantManager from .config import MultitenantProviderConfig, get_config from .provider import CustomMultitenantManagerProvider diff --git a/multitenant_provider/multitenant_provider/v1_0/manager.py b/multitenant_provider/multitenant_provider/v1_0/manager.py index b9f9a5b2c..cfebcd733 100644 --- a/multitenant_provider/multitenant_provider/v1_0/manager.py +++ b/multitenant_provider/multitenant_provider/v1_0/manager.py @@ -5,18 +5,18 @@ import bcrypt import jwt -from aries_cloudagent.askar.profile import AskarProfile -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.error import BaseError -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.multitenant.base import MultitenantManagerError -from aries_cloudagent.multitenant.error import WalletKeyMissingError -from aries_cloudagent.multitenant.manager import MultitenantManager -from aries_cloudagent.multitenant.single_wallet_askar_manager import ( +from acapy_agent.askar.profile import AskarProfile +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.error import BaseError +from acapy_agent.core.profile import Profile +from acapy_agent.multitenant.base import MultitenantManagerError +from acapy_agent.multitenant.error import WalletKeyMissingError +from acapy_agent.multitenant.manager import MultitenantManager +from acapy_agent.multitenant.single_wallet_askar_manager import ( SingleWalletAskarMultitenantManager, ) -from aries_cloudagent.storage.error import StorageError -from aries_cloudagent.wallet.models.wallet_record import WalletRecord +from acapy_agent.storage.error import StorageError +from acapy_agent.wallet.models.wallet_record import WalletRecord from .config import MultitenantProviderConfig from .models import WalletTokenRecord diff --git a/multitenant_provider/multitenant_provider/v1_0/models.py b/multitenant_provider/multitenant_provider/v1_0/models.py index 5b2e85f63..421e6bbee 100644 --- a/multitenant_provider/multitenant_provider/v1_0/models.py +++ b/multitenant_provider/multitenant_provider/v1_0/models.py @@ -2,10 +2,10 @@ from typing import List, Optional -from aries_cloudagent.core.profile import ProfileSession -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema -from aries_cloudagent.messaging.valid import UUIDFour -from aries_cloudagent.storage.error import StorageDuplicateError, StorageNotFoundError +from acapy_agent.core.profile import ProfileSession +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema +from acapy_agent.messaging.valid import UUIDFour +from acapy_agent.storage.error import StorageDuplicateError, StorageNotFoundError from marshmallow import fields from marshmallow.utils import EXCLUDE diff --git a/multitenant_provider/multitenant_provider/v1_0/provider.py b/multitenant_provider/multitenant_provider/v1_0/provider.py index 925a63ad7..b27fb96d3 100644 --- a/multitenant_provider/multitenant_provider/v1_0/provider.py +++ b/multitenant_provider/multitenant_provider/v1_0/provider.py @@ -2,11 +2,11 @@ import logging -from aries_cloudagent.config.base import InjectionError -from aries_cloudagent.config.injector import BaseInjector -from aries_cloudagent.config.settings import BaseSettings -from aries_cloudagent.multitenant.manager_provider import MultitenantManagerProvider -from aries_cloudagent.utils.classloader import ClassLoader, ClassNotFoundError +from acapy_agent.config.base import InjectionError +from acapy_agent.config.injector import BaseInjector +from acapy_agent.config.settings import BaseSettings +from acapy_agent.multitenant.manager_provider import MultitenantManagerProvider +from acapy_agent.utils.classloader import ClassLoader, ClassNotFoundError from .config import MultitenantProviderConfig diff --git a/multitenant_provider/multitenant_provider/v1_0/routes.py b/multitenant_provider/multitenant_provider/v1_0/routes.py index 157f13e70..b2e195bed 100644 --- a/multitenant_provider/multitenant_provider/v1_0/routes.py +++ b/multitenant_provider/multitenant_provider/v1_0/routes.py @@ -2,21 +2,21 @@ import logging -from aiohttp import web -from aiohttp_apispec import docs, request_schema, response_schema -from aries_cloudagent.admin.decorators.auth import admin_authentication -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.multitenant.admin.routes import ( +from acapy_agent.admin.decorators.auth import admin_authentication +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.multitenant.admin.routes import ( CreateWalletRequestSchema, CreateWalletResponseSchema, CreateWalletTokenRequestSchema, CreateWalletTokenResponseSchema, wallet_create, ) -from aries_cloudagent.multitenant.base import BaseMultitenantManager -from aries_cloudagent.multitenant.error import WalletKeyMissingError -from aries_cloudagent.storage.error import StorageNotFoundError -from aries_cloudagent.wallet.models.wallet_record import WalletRecord +from acapy_agent.multitenant.base import BaseMultitenantManager +from acapy_agent.multitenant.error import WalletKeyMissingError +from acapy_agent.storage.error import StorageNotFoundError +from acapy_agent.wallet.models.wallet_record import WalletRecord +from aiohttp import web +from aiohttp_apispec import docs, request_schema, response_schema from marshmallow import ValidationError, validates_schema from .config import MultitenantProviderConfig diff --git a/multitenant_provider/multitenant_provider/v1_0/tests/test_init.py b/multitenant_provider/multitenant_provider/v1_0/tests/test_init.py index ed794601b..b83606f39 100644 --- a/multitenant_provider/multitenant_provider/v1_0/tests/test_init.py +++ b/multitenant_provider/multitenant_provider/v1_0/tests/test_init.py @@ -1,10 +1,10 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import MagicMock, Mock -from aries_cloudagent.core.event_bus import Event, EventBus -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.core.protocol_registry import ProtocolRegistry -from aries_cloudagent.multitenant.base import BaseMultitenantManager +from acapy_agent.core.event_bus import Event, EventBus +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.core.protocol_registry import ProtocolRegistry +from acapy_agent.multitenant.base import BaseMultitenantManager from .. import on_startup, setup diff --git a/multitenant_provider/multitenant_provider/v1_0/tests/test_manager.py b/multitenant_provider/multitenant_provider/v1_0/tests/test_manager.py index 271df3f3a..6a5daee7d 100644 --- a/multitenant_provider/multitenant_provider/v1_0/tests/test_manager.py +++ b/multitenant_provider/multitenant_provider/v1_0/tests/test_manager.py @@ -4,10 +4,10 @@ import bcrypt import jwt -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.multitenant.error import WalletKeyMissingError -from aries_cloudagent.storage.error import StorageError -from aries_cloudagent.wallet.models.wallet_record import WalletRecord +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.multitenant.error import WalletKeyMissingError +from acapy_agent.storage.error import StorageError +from acapy_agent.wallet.models.wallet_record import WalletRecord from multitenant_provider.v1_0.config import ( MultitenantProviderConfig, diff --git a/multitenant_provider/multitenant_provider/v1_0/tests/test_models.py b/multitenant_provider/multitenant_provider/v1_0/tests/test_models.py index 0de1a9b48..3675c3094 100644 --- a/multitenant_provider/multitenant_provider/v1_0/tests/test_models.py +++ b/multitenant_provider/multitenant_provider/v1_0/tests/test_models.py @@ -1,8 +1,8 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import patch -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.storage.error import StorageDuplicateError, StorageNotFoundError +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.storage.error import StorageDuplicateError, StorageNotFoundError from ..models import WalletTokenRecord diff --git a/multitenant_provider/multitenant_provider/v1_0/tests/test_provider.py b/multitenant_provider/multitenant_provider/v1_0/tests/test_provider.py index e90cddde4..0a1193f7c 100644 --- a/multitenant_provider/multitenant_provider/v1_0/tests/test_provider.py +++ b/multitenant_provider/multitenant_provider/v1_0/tests/test_provider.py @@ -1,9 +1,9 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import Mock, patch -from aries_cloudagent.config.base import InjectionError -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.utils.classloader import ClassLoader, ClassNotFoundError +from acapy_agent.config.base import InjectionError +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.utils.classloader import ClassLoader, ClassNotFoundError from multitenant_provider.v1_0.config import MultitenantProviderConfig diff --git a/multitenant_provider/multitenant_provider/v1_0/tests/test_routes.py b/multitenant_provider/multitenant_provider/v1_0/tests/test_routes.py index 5de03d0ee..88f1fffa5 100644 --- a/multitenant_provider/multitenant_provider/v1_0/tests/test_routes.py +++ b/multitenant_provider/multitenant_provider/v1_0/tests/test_routes.py @@ -2,11 +2,11 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import AsyncMock, MagicMock, Mock, patch +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.multitenant.base import BaseMultitenantManager +from acapy_agent.wallet.models.wallet_record import WalletRecord from aiohttp import web -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.multitenant.base import BaseMultitenantManager -from aries_cloudagent.wallet.models.wallet_record import WalletRecord from .. import routes as test_module from ..config import MultitenantProviderConfig diff --git a/multitenant_provider/pyproject.toml b/multitenant_provider/pyproject.toml index 91308c012..95c403158 100644 --- a/multitenant_provider/pyproject.toml +++ b/multitenant_provider/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "multitenant_provider" version = "0.1.0" -description = " (Supported aries-cloudagent version: 1.0.0) " +description = " (Supported acapy-agent version: 1.0.0) " authors = ["Jason Sherman "] [tool.poetry.dependencies] @@ -9,13 +9,13 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } bcrypt = "^4.1.3" mergedeep = "^1.3.4" python-dateutil = "^2.8.2" [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.5" @@ -38,8 +38,18 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now @@ -61,19 +71,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -84,4 +86,3 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] build-backend = "poetry.core.masonry.api" - diff --git a/oid4vc/jwt_vc_json/cred_processor.py b/oid4vc/jwt_vc_json/cred_processor.py index 799c48cf0..476e013e1 100644 --- a/oid4vc/jwt_vc_json/cred_processor.py +++ b/oid4vc/jwt_vc_json/cred_processor.py @@ -2,11 +2,11 @@ import datetime import logging -from typing import Any import uuid +from typing import Any -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.profile import Profile +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.profile import Profile from pydid import DIDUrl from oid4vc.cred_processor import ( diff --git a/oid4vc/jwt_vc_json/tests/conftest.py b/oid4vc/jwt_vc_json/tests/conftest.py index e8c4207a4..a98032228 100644 --- a/oid4vc/jwt_vc_json/tests/conftest.py +++ b/oid4vc/jwt_vc_json/tests/conftest.py @@ -1,7 +1,7 @@ -import pytest from unittest.mock import MagicMock -from aries_cloudagent.admin.request_context import AdminRequestContext +import pytest +from acapy_agent.admin.request_context import AdminRequestContext from oid4vc.models.exchange import OID4VCIExchangeRecord from oid4vc.models.supported_cred import SupportedCredential diff --git a/oid4vc/jwt_vc_json/tests/test_cred_processor.py b/oid4vc/jwt_vc_json/tests/test_cred_processor.py index 6f623573e..7c006c4b1 100644 --- a/oid4vc/jwt_vc_json/tests/test_cred_processor.py +++ b/oid4vc/jwt_vc_json/tests/test_cred_processor.py @@ -1,13 +1,13 @@ from typing import Any + import pytest -from aries_cloudagent.admin.request_context import AdminRequestContext +from acapy_agent.admin.request_context import AdminRequestContext +from jwt_vc_json.cred_processor import CredProcessor from oid4vc.models.exchange import OID4VCIExchangeRecord from oid4vc.models.supported_cred import SupportedCredential from oid4vc.public_routes import PopResult -from jwt_vc_json.cred_processor import CredProcessor - class TestCredentialProcessor: """Tests for CredentialProcessor.""" diff --git a/oid4vc/mso_mdoc/__init__.py b/oid4vc/mso_mdoc/__init__.py index 9805d4713..4e653d6a6 100644 --- a/oid4vc/mso_mdoc/__init__.py +++ b/oid4vc/mso_mdoc/__init__.py @@ -2,7 +2,8 @@ from importlib.util import find_spec -from aries_cloudagent.config.injection_context import InjectionContext +from acapy_agent.config.injection_context import InjectionContext + from mso_mdoc.cred_processor import MsoMdocCredProcessor from oid4vc.cred_processor import CredProcessors diff --git a/oid4vc/mso_mdoc/cred_processor.py b/oid4vc/mso_mdoc/cred_processor.py index f30259837..a6cc9f5e2 100644 --- a/oid4vc/mso_mdoc/cred_processor.py +++ b/oid4vc/mso_mdoc/cred_processor.py @@ -1,16 +1,16 @@ """Issue a mso_mdoc credential.""" -import logging import json +import logging import re from typing import Any -from aries_cloudagent.admin.request_context import AdminRequestContext +from acapy_agent.admin.request_context import AdminRequestContext +from oid4vc.cred_processor import CredProcessorError, Issuer from oid4vc.models.exchange import OID4VCIExchangeRecord from oid4vc.models.supported_cred import SupportedCredential from oid4vc.pop_result import PopResult -from oid4vc.cred_processor import CredProcessorError, Issuer from .mdoc import mso_mdoc_sign diff --git a/oid4vc/mso_mdoc/mdoc/issuer.py b/oid4vc/mso_mdoc/mdoc/issuer.py index 0b6554b7b..f63c0836b 100644 --- a/oid4vc/mso_mdoc/mdoc/issuer.py +++ b/oid4vc/mso_mdoc/mdoc/issuer.py @@ -1,20 +1,20 @@ """Operations supporting mso_mdoc issuance.""" -import os import json import logging -import cbor2 +import os from binascii import hexlify -from pycose.keys import CoseKey -from pydid import DIDUrl from typing import Any, Mapping, Optional -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.wallet.default_verification_key_strategy import ( +import cbor2 +from acapy_agent.core.profile import Profile +from acapy_agent.wallet.base import BaseWallet +from acapy_agent.wallet.default_verification_key_strategy import ( BaseVerificationKeyStrategy, ) -from aries_cloudagent.wallet.base import BaseWallet -from aries_cloudagent.wallet.util import b64_to_bytes, bytes_to_b64 +from acapy_agent.wallet.util import b64_to_bytes, bytes_to_b64 +from pycose.keys import CoseKey +from pydid import DIDUrl from ..mso import MsoIssuer from ..x509 import selfsigned_x509cert diff --git a/oid4vc/mso_mdoc/mdoc/verifier.py b/oid4vc/mso_mdoc/mdoc/verifier.py index 003594014..826b0b14f 100644 --- a/oid4vc/mso_mdoc/mdoc/verifier.py +++ b/oid4vc/mso_mdoc/mdoc/verifier.py @@ -4,17 +4,18 @@ import re from binascii import unhexlify from typing import Any, Mapping -from marshmallow import fields -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.messaging.models.base import BaseModel, BaseModelSchema -from aries_cloudagent.wallet.error import WalletNotFoundError -from aries_cloudagent.wallet.base import BaseWallet -from aries_cloudagent.wallet.util import bytes_to_b58 + import cbor2 +from acapy_agent.core.profile import Profile +from acapy_agent.messaging.models.base import BaseModel, BaseModelSchema +from acapy_agent.wallet.base import BaseWallet +from acapy_agent.wallet.error import WalletNotFoundError +from acapy_agent.wallet.util import bytes_to_b58 from cbor_diag import cbor2diag -from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat -from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePublicKey +from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey +from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat +from marshmallow import fields from ..mso import MsoVerifier diff --git a/oid4vc/mso_mdoc/routes.py b/oid4vc/mso_mdoc/routes.py index 72ae8734d..6e5574cdb 100644 --- a/oid4vc/mso_mdoc/routes.py +++ b/oid4vc/mso_mdoc/routes.py @@ -2,20 +2,20 @@ import logging -from aiohttp import web -from aiohttp_apispec import docs, request_schema, response_schema -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.messaging.jsonld.error import ( +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.messaging.jsonld.error import ( BadJWSHeaderError, InvalidVerificationMethod, ) -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.messaging.valid import ( +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.messaging.valid import ( GENERIC_DID_EXAMPLE, GENERIC_DID_VALIDATE, Uri, ) -from aries_cloudagent.resolver.base import ResolverError +from acapy_agent.resolver.base import ResolverError +from aiohttp import web +from aiohttp_apispec import docs, request_schema, response_schema from marshmallow import fields from .mdoc import mso_mdoc_sign, mso_mdoc_verify diff --git a/oid4vc/mso_mdoc/tests/conftest.py b/oid4vc/mso_mdoc/tests/conftest.py index b3c7119fc..d02a89839 100644 --- a/oid4vc/mso_mdoc/tests/conftest.py +++ b/oid4vc/mso_mdoc/tests/conftest.py @@ -1,6 +1,5 @@ import pytest - -from aries_cloudagent.admin.request_context import AdminRequestContext +from acapy_agent.admin.request_context import AdminRequestContext from oid4vc.models.exchange import OID4VCIExchangeRecord from oid4vc.models.supported_cred import SupportedCredential diff --git a/oid4vc/mso_mdoc/tests/mso/test_issuer.py b/oid4vc/mso_mdoc/tests/mso/test_issuer.py index 7745d3004..8d30671a5 100644 --- a/oid4vc/mso_mdoc/tests/mso/test_issuer.py +++ b/oid4vc/mso_mdoc/tests/mso/test_issuer.py @@ -1,8 +1,8 @@ import os -from pycose.keys import CoseKey from binascii import hexlify -from aries_cloudagent.wallet.util import b64_to_bytes +from acapy_agent.wallet.util import b64_to_bytes +from pycose.keys import CoseKey from ...mso import MsoIssuer from ...x509 import selfsigned_x509cert diff --git a/oid4vc/mso_mdoc/tests/test_x509.py b/oid4vc/mso_mdoc/tests/test_x509.py index 26c00d65a..53e5a0dee 100644 --- a/oid4vc/mso_mdoc/tests/test_x509.py +++ b/oid4vc/mso_mdoc/tests/test_x509.py @@ -1,9 +1,8 @@ -import pytest - import os -from pycose.keys import CoseKey -from aries_cloudagent.wallet.util import b64_to_bytes +import pytest +from acapy_agent.wallet.util import b64_to_bytes +from pycose.keys import CoseKey from ..x509 import selfsigned_x509cert diff --git a/oid4vc/oid4vc/__init__.py b/oid4vc/oid4vc/__init__.py index 65d9ac39b..e1959c199 100644 --- a/oid4vc/oid4vc/__init__.py +++ b/oid4vc/oid4vc/__init__.py @@ -2,21 +2,19 @@ import logging -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.event_bus import Event, EventBus -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.wallet.did_method import DIDMethods -from aries_cloudagent.wallet.key_type import KeyTypes - -from aries_cloudagent.core.util import SHUTDOWN_EVENT_PATTERN, STARTUP_EVENT_PATTERN -from aries_cloudagent.resolver.did_resolver import DIDResolver +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.event_bus import Event, EventBus +from acapy_agent.core.profile import Profile +from acapy_agent.core.util import SHUTDOWN_EVENT_PATTERN, STARTUP_EVENT_PATTERN +from acapy_agent.resolver.did_resolver import DIDResolver +from acapy_agent.wallet.did_method import DIDMethods +from acapy_agent.wallet.key_type import KeyTypes from jwt_vc_json.cred_processor import JwtVcJsonCredProcessor from oid4vc.cred_processor import CredProcessors -from .jwk import DID_JWK, P256 - from .config import Config +from .jwk import DID_JWK, P256 from .jwk_resolver import JwkResolver from .oid4vci_server import Oid4vciServer diff --git a/oid4vc/oid4vc/config.py b/oid4vc/oid4vc/config.py index e2e4c5e54..0c29d1966 100644 --- a/oid4vc/oid4vc/config.py +++ b/oid4vc/oid4vc/config.py @@ -3,8 +3,8 @@ from dataclasses import dataclass from os import getenv -from aries_cloudagent.config.base import BaseSettings -from aries_cloudagent.config.settings import Settings +from acapy_agent.config.base import BaseSettings +from acapy_agent.config.settings import Settings class ConfigError(ValueError): diff --git a/oid4vc/oid4vc/cred_processor.py b/oid4vc/oid4vc/cred_processor.py index 53e9fc516..ddf21eb72 100644 --- a/oid4vc/oid4vc/cred_processor.py +++ b/oid4vc/oid4vc/cred_processor.py @@ -3,9 +3,9 @@ from dataclasses import dataclass from typing import Any, Mapping, Optional, Protocol -from aries_cloudagent.core.error import BaseError -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.profile import Profile +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.error import BaseError +from acapy_agent.core.profile import Profile from .models.exchange import OID4VCIExchangeRecord from .models.supported_cred import SupportedCredential diff --git a/oid4vc/oid4vc/jwk.py b/oid4vc/oid4vc/jwk.py index f177074c2..64d6405a9 100644 --- a/oid4vc/oid4vc/jwk.py +++ b/oid4vc/oid4vc/jwk.py @@ -1,8 +1,7 @@ """did:jwk DID method.""" -from aries_cloudagent.wallet.did_method import DIDMethod -from aries_cloudagent.wallet.key_type import ED25519, KeyType - +from acapy_agent.wallet.did_method import DIDMethod +from acapy_agent.wallet.key_type import ED25519, KeyType P256: KeyType = KeyType("p256", "p256-pub", b"\x12\x00") diff --git a/oid4vc/oid4vc/jwk_resolver.py b/oid4vc/oid4vc/jwk_resolver.py index 86e998a1f..11816d536 100644 --- a/oid4vc/oid4vc/jwk_resolver.py +++ b/oid4vc/oid4vc/jwk_resolver.py @@ -3,10 +3,10 @@ import re from typing import Optional, Pattern, Sequence, Text -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.resolver.base import BaseDIDResolver, ResolverError, ResolverType -from aries_cloudagent.wallet.jwt import b64_to_dict +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.profile import Profile +from acapy_agent.resolver.base import BaseDIDResolver, ResolverError, ResolverType +from acapy_agent.wallet.jwt import b64_to_dict # TODO Contribute this to ACA-Py core diff --git a/oid4vc/oid4vc/jwt.py b/oid4vc/oid4vc/jwt.py index 41c4562ab..eaafe8531 100644 --- a/oid4vc/oid4vc/jwt.py +++ b/oid4vc/oid4vc/jwt.py @@ -3,26 +3,27 @@ from dataclasses import dataclass from typing import Any, Dict, Mapping, Optional -from aries_askar import Key, KeyAlg -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.resolver.did_resolver import DIDResolver, DIDUrl -from aries_cloudagent.wallet.base import BaseWallet -from aries_cloudagent.wallet.jwt import ( +from acapy_agent.core.profile import Profile +from acapy_agent.resolver.did_resolver import DIDResolver, DIDUrl +from acapy_agent.wallet.base import BaseWallet +from acapy_agent.wallet.jwt import ( BadJWSHeaderError, BaseVerificationKeyStrategy, dict_to_b64, did_lookup_name, nym_to_did, ) -from aries_cloudagent.wallet.jwt import b64_to_bytes, b64_to_dict -from aries_cloudagent.wallet.key_type import ED25519 -from aries_cloudagent.wallet.util import b58_to_bytes, bytes_to_b64 +from acapy_agent.wallet.key_type import ED25519 +from acapy_agent.wallet.util import b58_to_bytes, bytes_to_b64 +from aries_askar import Key, KeyAlg from oid4vc.jwk import P256 + @dataclass class JWTVerifyResult: """JWT Verification Result.""" + def __init__( self, headers: Mapping[str, Any], diff --git a/oid4vc/oid4vc/models/exchange.py b/oid4vc/oid4vc/models/exchange.py index 6bb69896b..5c61a3a45 100644 --- a/oid4vc/oid4vc/models/exchange.py +++ b/oid4vc/oid4vc/models/exchange.py @@ -2,12 +2,12 @@ from typing import Any, Dict, Optional -from aries_cloudagent.core.profile import ProfileSession -from aries_cloudagent.messaging.models.base_record import ( +from acapy_agent.core.profile import ProfileSession +from acapy_agent.messaging.models.base_record import ( BaseExchangeRecord, BaseRecordSchema, ) -from aries_cloudagent.messaging.valid import Uri +from acapy_agent.messaging.valid import Uri from marshmallow import fields diff --git a/oid4vc/oid4vc/models/presentation.py b/oid4vc/oid4vc/models/presentation.py index 61c66838b..6fb8214e5 100644 --- a/oid4vc/oid4vc/models/presentation.py +++ b/oid4vc/oid4vc/models/presentation.py @@ -1,8 +1,9 @@ """Presentation model for OID4VP.""" from typing import Any, Dict, List, Optional -from aries_cloudagent.core.profile import ProfileSession -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema + +from acapy_agent.core.profile import ProfileSession +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema from marshmallow import fields diff --git a/oid4vc/oid4vc/models/presentation_definition.py b/oid4vc/oid4vc/models/presentation_definition.py index befc792ab..09c4b9225 100644 --- a/oid4vc/oid4vc/models/presentation_definition.py +++ b/oid4vc/oid4vc/models/presentation_definition.py @@ -1,7 +1,8 @@ """Presentation definition model for OID4VP.""" from typing import Any, Dict, Optional -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema + +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema from marshmallow import fields diff --git a/oid4vc/oid4vc/models/request.py b/oid4vc/oid4vc/models/request.py index e26a6bb0a..df09a1155 100644 --- a/oid4vc/oid4vc/models/request.py +++ b/oid4vc/oid4vc/models/request.py @@ -1,7 +1,8 @@ """Request model for OID4VP.""" from typing import Any, Dict, Optional -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema + +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema from marshmallow import fields diff --git a/oid4vc/oid4vc/models/supported_cred.py b/oid4vc/oid4vc/models/supported_cred.py index 3ec001fe9..8248259e5 100644 --- a/oid4vc/oid4vc/models/supported_cred.py +++ b/oid4vc/oid4vc/models/supported_cred.py @@ -2,7 +2,7 @@ from typing import Dict, List, Optional -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema from marshmallow import fields diff --git a/oid4vc/oid4vc/oid4vci_server.py b/oid4vc/oid4vc/oid4vci_server.py index 001835911..6e8dc6867 100644 --- a/oid4vc/oid4vc/oid4vci_server.py +++ b/oid4vc/oid4vc/oid4vci_server.py @@ -3,14 +3,14 @@ import logging import aiohttp_cors +from acapy_agent.admin.base_server import BaseAdminServer +from acapy_agent.admin.error import AdminSetupError +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.admin.server import debug_middleware, ready_middleware +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.profile import Profile from aiohttp import web from aiohttp_apispec import setup_aiohttp_apispec, validation_middleware -from aries_cloudagent.admin.base_server import BaseAdminServer -from aries_cloudagent.admin.error import AdminSetupError -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.admin.server import debug_middleware, ready_middleware -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.profile import Profile from .public_routes import register as public_routes_register diff --git a/oid4vc/oid4vc/pex.py b/oid4vc/oid4vc/pex.py index db867faf2..8dc69479a 100644 --- a/oid4vc/oid4vc/pex.py +++ b/oid4vc/oid4vc/pex.py @@ -3,18 +3,23 @@ from dataclasses import dataclass, field from typing import Any, Dict, List, Mapping, Optional, Sequence, Union -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.messaging.models.base import BaseModel, BaseModelSchema -from aries_cloudagent.messaging.valid import UUID4_EXAMPLE -from aries_cloudagent.protocols.present_proof.dif.pres_exch import ( - PresentationDefinition, +import jsonpath_ng as jsonpath +from acapy_agent.core.profile import Profile +from acapy_agent.messaging.models.base import BaseModel, BaseModelSchema +from acapy_agent.messaging.valid import UUID4_EXAMPLE +from acapy_agent.protocols.present_proof.dif.pres_exch import ( DIFField, InputDescriptors, + PresentationDefinition, +) +from acapy_agent.protocols.present_proof.dif.pres_exch import ( InputDescriptorMapping as InnerInDescMapping, +) +from acapy_agent.protocols.present_proof.dif.pres_exch import ( InputDescriptorMappingSchema as InnerInDescMappingSchema, ) -from jsonpath_ng import DatumInContext as Matched, JSONPath -import jsonpath_ng as jsonpath +from jsonpath_ng import DatumInContext as Matched +from jsonpath_ng import JSONPath from jsonschema import Draft7Validator, ValidationError from marshmallow import EXCLUDE, fields diff --git a/oid4vc/oid4vc/public_routes.py b/oid4vc/oid4vc/public_routes.py index 18c8f9c5e..34b31ce42 100644 --- a/oid4vc/oid4vc/public_routes.py +++ b/oid4vc/oid4vc/public_routes.py @@ -3,11 +3,26 @@ import datetime import json import logging -from secrets import token_urlsafe import time -from typing import Any, Dict, List, Optional import uuid +from secrets import token_urlsafe +from typing import Any, Dict, List, Optional +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.profile import Profile, ProfileSession +from acapy_agent.messaging.models.base import BaseModelError +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.protocols.present_proof.dif.pres_exch import ( + PresentationDefinition, +) +from acapy_agent.storage.base import BaseStorage, StorageRecord +from acapy_agent.storage.error import StorageError, StorageNotFoundError +from acapy_agent.wallet.base import BaseWallet, WalletError +from acapy_agent.wallet.did_info import DIDInfo +from acapy_agent.wallet.error import WalletNotFoundError +from acapy_agent.wallet.jwt import JWTVerifyResult, b64_to_dict +from acapy_agent.wallet.key_type import ED25519 +from acapy_agent.wallet.util import b64_to_bytes, bytes_to_b64 from aiohttp import web from aiohttp_apispec import ( docs, @@ -17,28 +32,9 @@ response_schema, ) from aries_askar import Key, KeyAlg - -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.profile import Profile, ProfileSession -from aries_cloudagent.messaging.models.base import BaseModelError -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.storage.base import BaseStorage, StorageRecord -from aries_cloudagent.storage.error import StorageError, StorageNotFoundError -from aries_cloudagent.wallet.base import BaseWallet, WalletError -from aries_cloudagent.wallet.did_info import DIDInfo -from aries_cloudagent.wallet.error import WalletNotFoundError -from aries_cloudagent.wallet.jwt import JWTVerifyResult, b64_to_dict -from aries_cloudagent.wallet.key_type import ED25519 -from aries_cloudagent.wallet.util import bytes_to_b64 -from aries_cloudagent.wallet.util import b64_to_bytes -from aries_cloudagent.protocols.present_proof.dif.pres_exch import ( - PresentationDefinition, -) - from base58 import b58decode from marshmallow import fields - from oid4vc.jwk import DID_JWK from oid4vc.jwt import jwt_sign, jwt_verify, key_material_for_kid from oid4vc.models.presentation import OID4VPPresentation @@ -75,9 +71,7 @@ class CredentialIssuerMetadataSchema(OpenAPISchema): ) authorization_server = fields.Str( required=False, - metadata={ - "description": "The authorization server endpoint. Currently ignored." - }, + metadata={"description": "The authorization server endpoint. Currently ignored."}, ) batch_credential_endpoint = fields.Str( required=False, @@ -209,9 +203,7 @@ async def check_token( return result -async def handle_proof_of_posession( - profile: Profile, proof: Dict[str, Any], nonce: str -): +async def handle_proof_of_posession(profile: Profile, proof: Dict[str, Any], nonce: str): """Handle proof of posession.""" encoded_headers, encoded_payload, encoded_signature = proof["jwt"].split(".", 3) headers = b64_to_dict(encoded_headers) @@ -317,9 +309,7 @@ async def issue_cred(request: web.Request): if "proof" not in body: raise web.HTTPBadRequest(reason=f"proof is required for {supported.format}") - pop = await handle_proof_of_posession( - context.profile, body["proof"], ex_record.nonce - ) + pop = await handle_proof_of_posession(context.profile, body["proof"], ex_record.nonce) if not pop.verified: raise web.HTTPBadRequest(reason="Invalid proof") @@ -537,9 +527,7 @@ async def verify_presentation( processors = profile.inject(CredProcessors) if not submission.descriptor_maps: - raise web.HTTPBadRequest( - reason="Descriptor map of submission must not be empty" - ) + raise web.HTTPBadRequest(reason="Descriptor map of submission must not be empty") # TODO: Support longer descriptor map arrays if len(submission.descriptor_maps) != 1: @@ -550,9 +538,7 @@ async def verify_presentation( verifier = processors.pres_verifier_for_format(submission.descriptor_maps[0].fmt) LOGGER.debug("VERIFIER: %s", verifier) - vp_result = await verifier.verify_presentation( - profile=profile, presentation=vp_token - ) + vp_result = await verifier.verify_presentation(profile=profile, presentation=vp_token) async with profile.session() as session: pres_def_entry = await OID4VPPresDef.retrieve_by_id( diff --git a/oid4vc/oid4vc/routes.py b/oid4vc/oid4vc/routes.py index bd9314b35..6a11a1a47 100644 --- a/oid4vc/oid4vc/routes.py +++ b/oid4vc/oid4vc/routes.py @@ -4,7 +4,27 @@ import logging import secrets from typing import Any, Dict +from urllib.parse import quote +from acapy_agent.admin.decorators.auth import tenant_authentication +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.askar.profile import AskarProfileSession +from acapy_agent.messaging.models.base import BaseModelError +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.messaging.valid import ( + GENERIC_DID_EXAMPLE, + GENERIC_DID_VALIDATE, + Uri, +) +from acapy_agent.storage.error import StorageError, StorageNotFoundError +from acapy_agent.wallet.base import BaseWallet +from acapy_agent.wallet.default_verification_key_strategy import ( + BaseVerificationKeyStrategy, +) +from acapy_agent.wallet.did_info import DIDInfo +from acapy_agent.wallet.jwt import nym_to_did +from acapy_agent.wallet.key_type import KeyTypes +from acapy_agent.wallet.util import bytes_to_b64 from aiohttp import web from aiohttp_apispec import ( docs, @@ -13,28 +33,7 @@ request_schema, response_schema, ) -from aries_cloudagent.admin.decorators.auth import tenant_authentication -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.messaging.models.base import BaseModelError -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.messaging.valid import ( - GENERIC_DID_EXAMPLE, - GENERIC_DID_VALIDATE, - Uri, -) -from aries_cloudagent.storage.error import StorageError, StorageNotFoundError -from aries_cloudagent.wallet.default_verification_key_strategy import ( - BaseVerificationKeyStrategy, -) -from aries_cloudagent.wallet.jwt import nym_to_did -from aries_cloudagent.wallet.base import BaseWallet -from aries_cloudagent.wallet.key_type import KeyTypes -from aries_cloudagent.askar.profile import AskarProfileSession -from aries_cloudagent.wallet.util import bytes_to_b64 -from aries_cloudagent.wallet.did_info import DIDInfo - from aries_askar import Key, KeyAlg - from marshmallow import fields from marshmallow.validate import OneOf @@ -48,8 +47,6 @@ from .models.exchange import OID4VCIExchangeRecord, OID4VCIExchangeRecordSchema from .models.supported_cred import SupportedCredential, SupportedCredentialSchema -from urllib.parse import quote - VCI_SPEC_URI = ( "https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0-11.html" ) @@ -505,7 +502,7 @@ class JwtSupportedCredCreateRequestSchema(OpenAPISchema): required=True, metadata={ "description": "List of credential types supported.", - "example": ["VerifiableCredential", "UniversityDegreeCredential"] + "example": ["VerifiableCredential", "UniversityDegreeCredential"], }, ) credential_subject = fields.Dict( diff --git a/oid4vc/oid4vc/tests/conftest.py b/oid4vc/oid4vc/tests/conftest.py index 6ee06ac5b..9c70ac85a 100644 --- a/oid4vc/oid4vc/tests/conftest.py +++ b/oid4vc/oid4vc/tests/conftest.py @@ -1,5 +1,5 @@ import pytest -from aries_cloudagent.core.in_memory import InMemoryProfile +from acapy_agent.core.in_memory import InMemoryProfile @pytest.fixture diff --git a/oid4vc/oid4vc/tests/models/test_exchange.py b/oid4vc/oid4vc/tests/models/test_exchange.py index b5e86915a..633499a0c 100644 --- a/oid4vc/oid4vc/tests/models/test_exchange.py +++ b/oid4vc/oid4vc/tests/models/test_exchange.py @@ -1,5 +1,5 @@ import pytest -from aries_cloudagent.core.profile import Profile +from acapy_agent.core.profile import Profile from oid4vc.models.exchange import OID4VCIExchangeRecord diff --git a/oid4vc/oid4vc/tests/models/test_supported_cred.py b/oid4vc/oid4vc/tests/models/test_supported_cred.py index 968c18ba1..1578cad88 100644 --- a/oid4vc/oid4vc/tests/models/test_supported_cred.py +++ b/oid4vc/oid4vc/tests/models/test_supported_cred.py @@ -1,5 +1,5 @@ import pytest -from aries_cloudagent.core.profile import Profile +from acapy_agent.core.profile import Profile from oid4vc.models.supported_cred import SupportedCredential diff --git a/oid4vc/oid4vc/tests/routes/conftest.py b/oid4vc/oid4vc/tests/routes/conftest.py index 95c487f26..dcd949fe3 100644 --- a/oid4vc/oid4vc/tests/routes/conftest.py +++ b/oid4vc/oid4vc/tests/routes/conftest.py @@ -1,14 +1,14 @@ from unittest.mock import MagicMock -from aries_cloudagent.core.profile import Profile import pytest -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.resolver.did_resolver import DIDResolver +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.core.profile import Profile +from acapy_agent.resolver.did_resolver import DIDResolver -from oid4vc.jwk_resolver import JwkResolver -from oid4vc.cred_processor import CredProcessors from jwt_vc_json import JwtVcJsonCredProcessor +from oid4vc.cred_processor import CredProcessors +from oid4vc.jwk_resolver import JwkResolver @pytest.fixture diff --git a/oid4vc/oid4vc/tests/routes/test_admin.py b/oid4vc/oid4vc/tests/routes/test_admin.py index 3bcf5a98b..316e532cb 100644 --- a/oid4vc/oid4vc/tests/routes/test_admin.py +++ b/oid4vc/oid4vc/tests/routes/test_admin.py @@ -1,7 +1,7 @@ from unittest.mock import AsyncMock, MagicMock import pytest -from aries_cloudagent.admin.request_context import AdminRequestContext +from acapy_agent.admin.request_context import AdminRequestContext from oid4vc import routes as test_module from oid4vc.models.supported_cred import SupportedCredential diff --git a/oid4vc/oid4vc/tests/routes/test_public_routes.py b/oid4vc/oid4vc/tests/routes/test_public_routes.py index a88e2cfb2..05b213eb8 100644 --- a/oid4vc/oid4vc/tests/routes/test_public_routes.py +++ b/oid4vc/oid4vc/tests/routes/test_public_routes.py @@ -1,9 +1,9 @@ from unittest.mock import patch import pytest +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.profile import Profile from aiohttp import web -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.profile import Profile from oid4vc import public_routes as test_module diff --git a/oid4vc/pyproject.toml b/oid4vc/pyproject.toml index fc7e78d0e..055e37175 100644 --- a/oid4vc/pyproject.toml +++ b/oid4vc/pyproject.toml @@ -1,20 +1,20 @@ [tool.poetry] name = "oid4vc" version = "0.1.0" -description = "OpenID for Verifiable Credentials plugin for acapy. (Supported aries-cloudagent version: 1.0.0)" +description = "OpenID for Verifiable Credentials plugin for acapy. (Supported acapy-agent version: 1.0.0)" authors = [ - "Adam Burdett ", - "Char Howland ", - "Daniel Bluhm ", - "Micah Peltier ", - "Colton Wolkins " + "Adam Burdett ", + "Char Howland ", + "Daniel Bluhm ", + "Micah Peltier ", + "Colton Wolkins ", ] readme = "README.md" packages = [ - { include = "oid4vc" }, - { include = "jwt_vc_json" }, - { include = "sd_jwt_vc" }, - { include = "mso_mdoc" }, + { include = "oid4vc" }, + { include = "jwt_vc_json" }, + { include = "sd_jwt_vc" }, + { include = "mso_mdoc" }, ] [tool.poetry.dependencies] @@ -22,21 +22,21 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } aiohttp = "^3.9.5" aries-askar = "~0.3.0" aiohttp-cors = "^0.7.0" marshmallow = "^3.20.1" jsonschema = "^4.23.0" jsonpath = "^0.82.2" -cbor2 = {version = "~5", optional = true} -cbor-diag = {version = "*", optional = true} -cwt = {version = "~2", optional = true} -pycose = {version = "~1", optional = true} -jsonpointer = {version = "^3.0.0", optional = true} +cbor2 = { version = "~5", optional = true } +cbor-diag = { version = "*", optional = true } +cwt = { version = "~2", optional = true } +pycose = { version = "~1", optional = true } +jsonpointer = { version = "^3.0.0", optional = true } [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] mso_mdoc = ["cbor2", "cbor-diag", "cwt", "pycose"] sd_jwt = ["jsonpointer"] @@ -61,8 +61,18 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now @@ -84,19 +94,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -107,4 +109,3 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] build-backend = "poetry.core.masonry.api" - diff --git a/oid4vc/sd_jwt_vc/__init__.py b/oid4vc/sd_jwt_vc/__init__.py index d3044100d..05895f3bd 100644 --- a/oid4vc/sd_jwt_vc/__init__.py +++ b/oid4vc/sd_jwt_vc/__init__.py @@ -2,9 +2,10 @@ from importlib.util import find_spec -from aries_cloudagent.config.injection_context import InjectionContext -from sd_jwt_vc.cred_processor import SdJwtCredIssueProcessor +from acapy_agent.config.injection_context import InjectionContext + from oid4vc.cred_processor import CredProcessors +from sd_jwt_vc.cred_processor import SdJwtCredIssueProcessor jsonpointer = find_spec("jsonpointer") if not jsonpointer: diff --git a/oid4vc/sd_jwt_vc/cred_processor.py b/oid4vc/sd_jwt_vc/cred_processor.py index b2071c640..35e10b38d 100644 --- a/oid4vc/sd_jwt_vc/cred_processor.py +++ b/oid4vc/sd_jwt_vc/cred_processor.py @@ -1,24 +1,22 @@ """Issue an SD-JWT credential.""" -from copy import deepcopy -from dataclasses import dataclass import json import logging import re import time +from copy import deepcopy +from dataclasses import dataclass from typing import Any, Dict, List, Optional, Union -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.wallet.jwt import JWTVerifyResult -from aries_cloudagent.wallet.util import bytes_to_b64 - +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.profile import Profile +from acapy_agent.wallet.jwt import JWTVerifyResult +from acapy_agent.wallet.util import bytes_to_b64 from jsonpointer import EndOfList, JsonPointer, JsonPointerException from pydid import DIDUrl from sd_jwt.issuer import SDJWTIssuer, SDObj from sd_jwt.verifier import KB_DIGEST_KEY, SDJWTVerifier - from oid4vc.cred_processor import ( CredProcessorError, CredVerifier, @@ -120,9 +118,7 @@ async def issue( except SDJWTError as error: raise CredProcessorError("Could not sign SD-JWT VC") from error - def validate_credential_subject( - self, supported: SupportedCredential, subject: dict - ): + def validate_credential_subject(self, supported: SupportedCredential, subject: dict): """Validate the credential subject.""" vc_additional = supported.vc_additional_data assert vc_additional @@ -210,9 +206,7 @@ async def verify_presentation( # TODO: This is a little hacky return VerifyResult(result.verified, presentation) - async def verify_credential( - self, profile: Profile, credential: Any - ) -> VerifyResult: + async def verify_credential(self, profile: Profile, credential: Any) -> VerifyResult: """Verify signature over credential.""" # TODO: Can we optimize this? since we end up doing this twice in a row diff --git a/plugin_globals/pyproject.toml b/plugin_globals/pyproject.toml index 1eaec84e1..3d10ecf0f 100644 --- a/plugin_globals/pyproject.toml +++ b/plugin_globals/pyproject.toml @@ -9,10 +9,10 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" @@ -35,8 +35,18 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now @@ -58,19 +68,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -80,4 +82,4 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] -build-backend = "poetry.core.masonry.api" \ No newline at end of file +build-backend = "poetry.core.masonry.api" diff --git a/redis_events/integration/pyproject.toml b/redis_events/integration/pyproject.toml index 937b07bd7..9ae1b2f4f 100644 --- a/redis_events/integration/pyproject.toml +++ b/redis_events/integration/pyproject.toml @@ -10,7 +10,7 @@ pytest = "^8.2.2" pytest-asyncio = "~0.23.7" requests = "^2.32.0" aiohttp = "^3.9.5" -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } fastapi-slim = "^0.115.0" nest-asyncio = "^1.5.5" redis = "^5.1.1" diff --git a/redis_events/pyproject.toml b/redis_events/pyproject.toml index 5b1929899..9814d027c 100644 --- a/redis_events/pyproject.toml +++ b/redis_events/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "redis_events" version = "0.1.0" -description = "ACA-PY persisted events using Redis (Supported aries-cloudagent version: 1.0.0) " +description = "ACA-PY persisted events using Redis (Supported acapy-agent version: 1.0.0) " authors = ["Shaanjot Gill "] [tool.poetry.dependencies] @@ -9,7 +9,7 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } aiohttp = "^3.9.5" fastapi-slim = "^0.115.0" nest-asyncio = "^1.5.5" @@ -18,7 +18,7 @@ uvicorn = "^0.30.1" pydantic = "^2.7.0" [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" diff --git a/redis_events/redis_events/v1_0/redis_queue/events/__init__.py b/redis_events/redis_events/v1_0/redis_queue/events/__init__.py index 10cf2892a..ab86e2ee1 100755 --- a/redis_events/redis_events/v1_0/redis_queue/events/__init__.py +++ b/redis_events/redis_events/v1_0/redis_queue/events/__init__.py @@ -7,11 +7,11 @@ from string import Template from typing import Any, Optional, cast -from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.core.event_bus import Event, EventBus, EventWithMetadata -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.core.util import SHUTDOWN_EVENT_PATTERN, STARTUP_EVENT_PATTERN -from aries_cloudagent.transport.error import TransportError +from acapy_agent.config.injection_context import InjectionContext +from acapy_agent.core.event_bus import Event, EventBus, EventWithMetadata +from acapy_agent.core.profile import Profile +from acapy_agent.core.util import SHUTDOWN_EVENT_PATTERN, STARTUP_EVENT_PATTERN +from acapy_agent.transport.error import TransportError from redis.asyncio import RedisCluster from redis.exceptions import RedisClusterException, RedisError diff --git a/redis_events/redis_events/v1_0/redis_queue/inbound.py b/redis_events/redis_events/v1_0/redis_queue/inbound.py index 1975ecf7d..58411a901 100755 --- a/redis_events/redis_events/v1_0/redis_queue/inbound.py +++ b/redis_events/redis_events/v1_0/redis_queue/inbound.py @@ -8,13 +8,13 @@ from typing import cast from uuid import uuid4 -from aries_cloudagent.messaging.error import MessageParseError -from aries_cloudagent.transport.error import WireFormatParseError -from aries_cloudagent.transport.inbound.base import ( +from acapy_agent.messaging.error import MessageParseError +from acapy_agent.transport.error import WireFormatParseError +from acapy_agent.transport.inbound.base import ( BaseInboundTransport, InboundTransportError, ) -from aries_cloudagent.transport.wire_format import ( +from acapy_agent.transport.wire_format import ( DIDCOMM_V0_MIME_TYPE, DIDCOMM_V1_MIME_TYPE, ) @@ -123,10 +123,7 @@ async def start(self): enc_uid_recip_key_count = await self.redis.hget( "uid_recip_key_pending_msg_count", uid_recip_key ) - if ( - enc_uid_recip_key_count - and int(enc_uid_recip_key_count.decode()) >= 1 - ): + if enc_uid_recip_key_count and int(enc_uid_recip_key_count.decode()) >= 1: await self.redis.hset( "uid_recip_key_pending_msg_count", uid_recip_key, diff --git a/redis_events/redis_events/v1_0/redis_queue/outbound.py b/redis_events/redis_events/v1_0/redis_queue/outbound.py index e70694770..c5d198117 100755 --- a/redis_events/redis_events/v1_0/redis_queue/outbound.py +++ b/redis_events/redis_events/v1_0/redis_queue/outbound.py @@ -4,13 +4,13 @@ import json import logging -from aries_cloudagent.core.profile import Profile -from aries_cloudagent.transport.outbound.base import ( +from acapy_agent.core.profile import Profile +from acapy_agent.transport.outbound.base import ( BaseOutboundTransport, OutboundTransportError, QueuedOutboundMessage, ) -from aries_cloudagent.transport.wire_format import ( +from acapy_agent.transport.wire_format import ( DIDCOMM_V0_MIME_TYPE, DIDCOMM_V1_MIME_TYPE, ) @@ -38,8 +38,7 @@ def __init__( """Initialize base queue type.""" super().__init__(**kwargs) self.outbound_config = ( - get_config(root_profile.context.settings).outbound - or OutboundConfig.default() + get_config(root_profile.context.settings).outbound or OutboundConfig.default() ) LOGGER.info( "Setting up redis outbound queue with configuration: %s", diff --git a/redis_events/redis_events/v1_0/redis_queue/tests/test_events.py b/redis_events/redis_events/v1_0/redis_queue/tests/test_events.py index 9861f5522..9fca8755e 100755 --- a/redis_events/redis_events/v1_0/redis_queue/tests/test_events.py +++ b/redis_events/redis_events/v1_0/redis_queue/tests/test_events.py @@ -3,14 +3,14 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import AsyncMock, MagicMock, patch +from acapy_agent.connections.models.connection_target import ConnectionTarget +from acapy_agent.core.event_bus import Event, EventWithMetadata, MockEventBus +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.transport.error import TransportError +from acapy_agent.transport.outbound.message import OutboundMessage +from aiohttp.test_utils import unused_port from redis import asyncio as redis_asyncio from redis import exceptions as redis_exceptions -from aiohttp.test_utils import unused_port -from aries_cloudagent.connections.models.connection_target import ConnectionTarget -from aries_cloudagent.core.event_bus import Event, EventWithMetadata, MockEventBus -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.transport.error import TransportError -from aries_cloudagent.transport.outbound.message import OutboundMessage from redis.asyncio import RedisCluster from .. import events as test_module @@ -75,9 +75,11 @@ class TestRedisEvents(IsolatedAsyncioTestCase): async def asyncSetUp(self): self.port = unused_port() self.session = None - self.profile = InMemoryProfile.test_profile({ - "plugin_config": SETTINGS["plugin_config"], - }) + self.profile = InMemoryProfile.test_profile( + { + "plugin_config": SETTINGS["plugin_config"], + } + ) async def test_setup(self): context = MagicMock( @@ -114,11 +116,13 @@ async def test_on_shutddown(self): await on_shutdown(self.profile, test_event) async def test_handle_event(self): - self.profile = InMemoryProfile.test_profile({ - "plugin_config": SETTINGS["plugin_config"], - "emit_new_didcomm_mime_type": True, - "wallet.id": "test_wallet_id", - }) + self.profile = InMemoryProfile.test_profile( + { + "plugin_config": SETTINGS["plugin_config"], + "emit_new_didcomm_mime_type": True, + "wallet.id": "test_wallet_id", + } + ) self.profile.context.injector.bind_instance( RedisCluster, MagicMock( @@ -165,9 +169,7 @@ async def test_handle_event(self): to_session_only=False, ), metadata=MagicMock( - pattern=MagicMock( - pattern="acapy::outbound-message::queued_for_delivery" - ) + pattern=MagicMock(pattern="acapy::outbound-message::queued_for_delivery") ), ) await handle_event(self.profile, real_event_with_metadata) @@ -179,9 +181,7 @@ async def test_handle_event(self): {"@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/basicmessage/1.0/message", "@id": "99bf771c-93e4-4482-8ab9-45080927f67c", "content": "test", "sent_time": "2022-09-01T20:15:23.719131Z"} - """.encode( - "utf-8" - ), + """.encode("utf-8"), endpoint="", payload="{}", reply_session_id="", @@ -202,27 +202,25 @@ async def test_handle_event(self): to_session_only=False, ), metadata=MagicMock( - pattern=MagicMock( - pattern="acapy::outbound-message::queued_for_delivery" - ) + pattern=MagicMock(pattern="acapy::outbound-message::queued_for_delivery") ), ) await handle_event(self.profile, real_event_with_metadata) async def test_handle_event_deliver_webhook(self): test_settings = deepcopy(SETTINGS) - test_settings["plugin_config"]["redis_queue"]["event"] = { - "deliver_webhook": True - } - self.profile = InMemoryProfile.test_profile({ - "plugin_config": test_settings["plugin_config"], - "emit_new_didcomm_mime_type": True, - "wallet.id": "test_wallet_id", - "admin.webhook_urls": [ - "http://0.0.0.0:9000#test_api_key_a", - "ws://0.0.0.0:9001", - ] - }) + test_settings["plugin_config"]["redis_queue"]["event"] = {"deliver_webhook": True} + self.profile = InMemoryProfile.test_profile( + { + "plugin_config": test_settings["plugin_config"], + "emit_new_didcomm_mime_type": True, + "wallet.id": "test_wallet_id", + "admin.webhook_urls": [ + "http://0.0.0.0:9000#test_api_key_a", + "ws://0.0.0.0:9001", + ], + } + ) self.profile.context.injector.bind_instance( RedisCluster, MagicMock( @@ -242,10 +240,12 @@ async def test_handle_event_deliver_webhook(self): await handle_event(self.profile, test_event_with_metadata) async def test_handle_event_x(self): - self.profile = InMemoryProfile.test_profile({ - "plugin_config": SETTINGS["plugin_config"], - "emit_new_didcomm_mime_type": False, - }) + self.profile = InMemoryProfile.test_profile( + { + "plugin_config": SETTINGS["plugin_config"], + "emit_new_didcomm_mime_type": False, + } + ) with patch.object( test_module, "redis_setup", diff --git a/redis_events/redis_events/v1_0/redis_queue/tests/test_inbound.py b/redis_events/redis_events/v1_0/redis_queue/tests/test_inbound.py index 3af6daac4..d6fd8b6b5 100755 --- a/redis_events/redis_events/v1_0/redis_queue/tests/test_inbound.py +++ b/redis_events/redis_events/v1_0/redis_queue/tests/test_inbound.py @@ -4,9 +4,9 @@ from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch import redis +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.messaging.error import MessageParseError from aiohttp.test_utils import unused_port -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.messaging.error import MessageParseError from .. import inbound as test_inbound from ..inbound import RedisInboundTransport @@ -146,9 +146,7 @@ async def test_init_no_bind_instance(self): MessageParseError, ] ), - profile=MagicMock( - settings={"emit_new_didcomm_mime_type": True} - ), + profile=MagicMock(settings={"emit_new_didcomm_mime_type": True}), ) ), root_profile=self.profile, diff --git a/redis_events/redis_events/v1_0/redis_queue/tests/test_outbound.py b/redis_events/redis_events/v1_0/redis_queue/tests/test_outbound.py index 40e6d3cc3..47227987b 100755 --- a/redis_events/redis_events/v1_0/redis_queue/tests/test_outbound.py +++ b/redis_events/redis_events/v1_0/redis_queue/tests/test_outbound.py @@ -6,14 +6,14 @@ from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch import redis -from aiohttp.test_utils import unused_port -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.transport.outbound.base import ( +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.transport.outbound.base import ( ConnectionTarget, OutboundMessage, QueuedOutboundMessage, ) -from aries_cloudagent.transport.wire_format import BaseWireFormat +from acapy_agent.transport.wire_format import BaseWireFormat +from aiohttp.test_utils import unused_port from .. import config as test_config from .. import outbound as test_outbound diff --git a/repo_manager.py b/repo_manager.py index 5b833a507..a5d1f8e39 100644 --- a/repo_manager.py +++ b/repo_manager.py @@ -211,9 +211,7 @@ def process_main_config_sections( i, content, output, - global_sections[ - ManagedPoetrySections(content[i].strip()).name - ], + global_sections[ManagedPoetrySections(content[i].strip()).name], content[i], ) else: @@ -270,9 +268,7 @@ def process_integration_config_sections( i, content, output, - global_sections[ - ManagedPoetrySections(content[i].strip()).name - ], + global_sections[ManagedPoetrySections(content[i].strip()).name], content[i], ) else: @@ -288,14 +284,16 @@ def replace_global_sections(name: str) -> None: global_sections, plugin_sections = get_and_combine_main_poetry_sections(name) process_main_config_sections(name, plugin_sections, global_sections) if is_plugin_directory(name, True): - global_sections, plugin_sections = get_and_combine_integration_poetry_sections(name) + global_sections, plugin_sections = get_and_combine_integration_poetry_sections( + name + ) process_integration_config_sections(name, plugin_sections, global_sections) def is_plugin_directory(plugin_name: str, exclude_lite_plugins: bool = False) -> bool: # If there is a directory which is not a plugin it should be ignored here if exclude_lite_plugins: - lite_plugins = Path('lite_plugins').read_text().splitlines() + lite_plugins = Path("lite_plugins").read_text().splitlines() return ( os.path.isdir(plugin_name) and plugin_name != GLOBAL_PLUGIN_DIR @@ -307,7 +305,7 @@ def is_plugin_directory(plugin_name: str, exclude_lite_plugins: bool = False) -> and plugin_name != GLOBAL_PLUGIN_DIR and not plugin_name.startswith(".") ) - + def update_all_poetry_locks(): for root, _, files in os.walk("."): @@ -315,7 +313,8 @@ def update_all_poetry_locks(): print(f"Updating poetry.lock in {root}") subprocess.run(["poetry", "lock"], cwd=root) -def upgrade_library_in_all_plugins(library: str = None): + +def upgrade_library_in_all_plugins(library: str = None): for root, _, files in os.walk("."): if "poetry.lock" in files: with open(f"{root}/poetry.lock", "r") as file: @@ -327,13 +326,12 @@ def upgrade_library_in_all_plugins(library: str = None): def main(arg_1=None, arg_2=None): - options = """ What would you like to do? (1) Create a new plugin (2) Update all plugin common poetry sections (3) Upgrade plugin_global dependencies - (4) Update plugins description with supported aries-cloudagent version + (4) Update plugins description with supported acapy-agent version (5) Get the plugins that upgraded since last release (6) Update all poetry.lock files (7) Upgrade a specific library in all plugins @@ -389,17 +387,17 @@ def main(arg_1=None, arg_2=None): print(msg) os.system("cd plugin_globals && poetry lock") - # Update plugins description with supported aries-cloudagent version + # Update plugins description with supported acapy-agent version elif selection == "4": """ - 1. Update the description of each plugin with the supported aries-cloudagent version. + 1. Update the description of each plugin with the supported acapy-agent version. 2. Output text for the release notes in markdown form. """ - # Get the aries-cloudagent version from the global poetry.lock file + # Get the acapy-agent version from the global poetry.lock file with open("./plugin_globals/poetry.lock", "r") as file: for line in file: - if 'name = "aries-cloudagent"' in line: + if 'name = "acapy-agent"' in line: next_line = next(file, None) global_version = re.findall(r'"([^"]*)"', next_line) break @@ -411,10 +409,10 @@ def main(arg_1=None, arg_2=None): print("| --- | --- |") for plugin_name in sorted(os.listdir("./")): if is_plugin_directory(plugin_name): - # Plugin specific aries-cloudagent version + # Plugin specific acapy-agent version with open(f"./{plugin_name}/poetry.lock", "r") as file: for line in file: - if 'name = "aries-cloudagent"' in line: + if 'name = "acapy-agent"' in line: next_line = next(file, None) version = re.findall(r'"([^"]*)"', next_line) break @@ -429,27 +427,27 @@ def main(arg_1=None, arg_2=None): description_line = line break - # Replace the description with the supported aries-cloudagent version at the end - if description[0].find("Supported aries-cloudagent version") != -1: + # Replace the description with the supported acapy-agent version at the end + if description[0].find("Supported acapy-agent version") != -1: description[0] = description[0].split( - " (Supported aries-cloudagent version" + " (Supported acapy-agent version" )[0] filedata = filedata.replace( description_line, - f'description = "{description[0]} (Supported aries-cloudagent version: {version[0]}) "', + f'description = "{description[0]} (Supported acapy-agent version: {version[0]}) "', ) with open(f"./{plugin_name}/pyproject.toml", "w") as file: file.write(filedata) print(f"|{plugin_name} | {version[0]}|") - + print("\n") elif selection == "5": """ Extract the plugins from the RELEASES.md and determine which plugins which can be - upgraded or are new based off of the global aries-cloudagent version. + upgraded or are new based off of the global acapy-agent version. """ # All the plugins. Used to determine which plugins are new. @@ -457,10 +455,10 @@ def main(arg_1=None, arg_2=None): plugin for plugin in os.listdir("./") if is_plugin_directory(plugin) ] - # Get the aries-cloudagent version from the global poetry.lock file + # Get the acapy-agent version from the global poetry.lock file with open("./plugin_globals/poetry.lock", "r") as file: for line in file: - if 'name = "aries-cloudagent"' in line: + if 'name = "acapy-agent"' in line: next_line = next(file, None) global_version = re.findall(r'"([^"]*)"', next_line) break @@ -475,8 +473,7 @@ def main(arg_1=None, arg_2=None): line = next(file) while "### Plugins Upgraded" not in line: if ( - line - != "| Plugin Name | Supported ACA-Py Release |\n" + line != "| Plugin Name | Supported ACA-Py Release |\n" and line != "| --- | --- |\n" ): last_releases.append(line.strip()) @@ -493,7 +490,7 @@ def main(arg_1=None, arg_2=None): split_item = item.split("|") if len(split_item) > 1: released_plugins.append(split_item[1].strip()) - + if split_item[2].strip() == global_version[0]: plugins_on_old_release.append(split_item[1].strip()) diff --git a/rpc/pyproject.toml b/rpc/pyproject.toml index e2f181414..3f9bc7552 100644 --- a/rpc/pyproject.toml +++ b/rpc/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "rpc" version = "0.1.0" -description = " (Supported aries-cloudagent version: 1.0.0) " +description = " (Supported acapy-agent version: 1.0.0) " authors = [] [tool.poetry.dependencies] @@ -9,10 +9,10 @@ python = "^3.12" # Define ACA-Py as an optional/extra dependancy so it can be # explicitly installed with the plugin if desired. -aries-cloudagent = { version = "~1.0.0", optional = true } +acapy-agent = { version = "~1.0.0", optional = true } [tool.poetry.extras] -aca-py = ["aries-cloudagent"] +aca-py = ["acapy-agent"] [tool.poetry.dev-dependencies] ruff = "^0.6.9" @@ -35,8 +35,18 @@ line-length = 90 select = ["E", "F", "C", "D"] ignore = [ # Google Python Doc Style - "D203", "D204", "D213", "D215", "D400", "D401", "D404", "D406", "D407", - "D408", "D409", "D413", + "D203", + "D204", + "D213", + "D215", + "D400", + "D401", + "D404", + "D406", + "D407", + "D408", + "D409", + "D413", "D202", # Allow blank line after docstring "D104", # Don't require docstring in public package # Things that we should fix, but are too much work right now @@ -58,19 +68,11 @@ junit_family = "xunit1" asyncio_mode = "auto" [tool.coverage.run] -omit = [ - "*/tests/*", - "docker/*", - "integration/*", - "*/definition.py" -] +omit = ["*/tests/*", "docker/*", "integration/*", "*/definition.py"] data_file = ".test-reports/.coverage" [tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "@abstract" -] +exclude_lines = ["pragma: no cover", "@abstract"] precision = 2 skip_covered = true show_missing = true @@ -81,4 +83,3 @@ output = ".test-reports/coverage.xml" [build-system] requires = ["setuptools", "poetry-core>=1.2"] build-backend = "poetry.core.masonry.api" - diff --git a/rpc/rpc/v1_0/handlers.py b/rpc/rpc/v1_0/handlers.py index dcdc7c1cc..430b2fab5 100644 --- a/rpc/rpc/v1_0/handlers.py +++ b/rpc/rpc/v1_0/handlers.py @@ -2,13 +2,13 @@ import json -from aries_cloudagent.messaging.base_handler import ( +from acapy_agent.messaging.base_handler import ( BaseHandler, BaseResponder, RequestContext, ) -from aries_cloudagent.storage.base import BaseStorage -from aries_cloudagent.storage.record import StorageRecord +from acapy_agent.storage.base import BaseStorage +from acapy_agent.storage.record import StorageRecord from rpc.v1_0.messages import DRPCRequestMessage, DRPCResponseMessage from rpc.v1_0.models import DRPCRecord diff --git a/rpc/rpc/v1_0/message_types.py b/rpc/rpc/v1_0/message_types.py index 06c630e0a..486f21a71 100644 --- a/rpc/rpc/v1_0/message_types.py +++ b/rpc/rpc/v1_0/message_types.py @@ -1,6 +1,6 @@ """Message types for DIDComm RPC v1.0.""" -from aries_cloudagent.protocols.didcomm_prefix import DIDCommPrefix +from acapy_agent.protocols.didcomm_prefix import DIDCommPrefix # Message types DRPC_REQUEST = "drpc/1.0/request" diff --git a/rpc/rpc/v1_0/messages.py b/rpc/rpc/v1_0/messages.py index 1dc3aae33..8efd4d7fe 100644 --- a/rpc/rpc/v1_0/messages.py +++ b/rpc/rpc/v1_0/messages.py @@ -1,6 +1,6 @@ """Agent Messages for DIDComm RPC v1.0.""" -from aries_cloudagent.messaging.agent_message import AgentMessage, AgentMessageSchema +from acapy_agent.messaging.agent_message import AgentMessage, AgentMessageSchema from marshmallow import ValidationError, pre_dump from rpc.v1_0.message_types import DRPC_REQUEST, DRPC_RESPONSE, PROTOCOL_PACKAGE diff --git a/rpc/rpc/v1_0/models.py b/rpc/rpc/v1_0/models.py index 5c9b0fecd..a74b849d7 100644 --- a/rpc/rpc/v1_0/models.py +++ b/rpc/rpc/v1_0/models.py @@ -2,9 +2,9 @@ from typing import Any, List, Mapping, Optional, Union -from aries_cloudagent.core.profile import ProfileSession -from aries_cloudagent.messaging.models.base import BaseModel, BaseModelSchema -from aries_cloudagent.messaging.models.base_record import BaseRecord, BaseRecordSchema +from acapy_agent.core.profile import ProfileSession +from acapy_agent.messaging.models.base import BaseModel, BaseModelSchema +from acapy_agent.messaging.models.base_record import BaseRecord, BaseRecordSchema from marshmallow import ValidationError, fields, validate, validates_schema RPC_REQUEST_EXAMPLE = { @@ -362,6 +362,4 @@ def validate_state_completed(self, data, **kwargs): data.get("state") == DRPCRecord.STATE_COMPLETED and data.get("response") is None ): - raise ValidationError( - "RPC response cannot be null if state is 'completed'." - ) + raise ValidationError("RPC response cannot be null if state is 'completed'.") diff --git a/rpc/rpc/v1_0/routes.py b/rpc/rpc/v1_0/routes.py index 9bbaaab53..63a2ecc12 100644 --- a/rpc/rpc/v1_0/routes.py +++ b/rpc/rpc/v1_0/routes.py @@ -3,6 +3,19 @@ import json import logging +from acapy_agent.admin.decorators.auth import tenant_authentication +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.connections.models.conn_record import ConnRecord +from acapy_agent.messaging.models.base import ( + BaseModel, + BaseModelError, + BaseModelSchema, +) +from acapy_agent.messaging.models.base_record import match_post_filter +from acapy_agent.messaging.models.openapi import OpenAPISchema +from acapy_agent.messaging.valid import UUID4_EXAMPLE +from acapy_agent.storage.base import BaseStorage, StorageRecord +from acapy_agent.storage.error import StorageError, StorageNotFoundError from aiohttp import web from aiohttp_apispec import ( docs, @@ -11,19 +24,6 @@ querystring_schema, response_schema, ) -from aries_cloudagent.admin.decorators.auth import tenant_authentication -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.connections.models.conn_record import ConnRecord -from aries_cloudagent.messaging.models.base import ( - BaseModel, - BaseModelError, - BaseModelSchema, -) -from aries_cloudagent.messaging.models.base_record import match_post_filter -from aries_cloudagent.messaging.models.openapi import OpenAPISchema -from aries_cloudagent.messaging.valid import UUID4_EXAMPLE -from aries_cloudagent.storage.base import BaseStorage, StorageRecord -from aries_cloudagent.storage.error import StorageError, StorageNotFoundError from marshmallow import fields, validate from rpc.v1_0.messages import ( diff --git a/rpc/rpc/v1_0/tests/test_routes.py b/rpc/rpc/v1_0/tests/test_routes.py index bd99bc71d..fe34149fc 100644 --- a/rpc/rpc/v1_0/tests/test_routes.py +++ b/rpc/rpc/v1_0/tests/test_routes.py @@ -2,12 +2,12 @@ from unittest import IsolatedAsyncioTestCase from unittest.mock import AsyncMock, MagicMock, patch +from acapy_agent.admin.request_context import AdminRequestContext +from acapy_agent.core.in_memory import InMemoryProfile +from acapy_agent.messaging.models.base import BaseModelError +from acapy_agent.storage.error import StorageError, StorageNotFoundError +from acapy_agent.storage.record import StorageRecord from aiohttp import web -from aries_cloudagent.admin.request_context import AdminRequestContext -from aries_cloudagent.core.in_memory import InMemoryProfile -from aries_cloudagent.messaging.models.base import BaseModelError -from aries_cloudagent.storage.error import StorageError, StorageNotFoundError -from aries_cloudagent.storage.record import StorageRecord import rpc.v1_0.routes as test_module from rpc.v1_0.models import DRPCRecord, DRPCRecordSchema @@ -62,7 +62,7 @@ async def asyncSetUp(self): match_info={}, query={}, __getitem__=lambda _, key: self.request_dict[key], - headers={"x-api-key": "admin_api_key"} + headers={"x-api-key": "admin_api_key"}, ) async def test_get_empty_drpc_record_list(self): diff --git a/rpc/rpc/v1_0/tests/test_schemas.py b/rpc/rpc/v1_0/tests/test_schemas.py index 9463d109d..b7c5362e8 100644 --- a/rpc/rpc/v1_0/tests/test_schemas.py +++ b/rpc/rpc/v1_0/tests/test_schemas.py @@ -1,5 +1,5 @@ import pytest -from aries_cloudagent.messaging.valid import UUID4_EXAMPLE +from acapy_agent.messaging.valid import UUID4_EXAMPLE from marshmallow import ValidationError from rpc.v1_0.messages import DRPCRequestMessageSchema, DRPCResponseMessageSchema diff --git a/setupDocs.sh b/setupDocs.sh index 345ab0800..81772ee41 100755 --- a/setupDocs.sh +++ b/setupDocs.sh @@ -16,9 +16,9 @@ cp LICENSE docs/LICENSE.md # Generate the main part of the mkdocs.yml file cat <<-EOF >${MKDOCS} -site_name: Hyperledger Aries Cloud Agent Python Plugins -repo_name: hyperledger/aries-acapy-plugins -repo_url: https://github.com/hyperledger/aries-acapy-plugins +site_name: A Cloud Agent Python Plugins +repo_name: openwallet-foundation/acapy-plugins +repo_url: https://github.com/openwallet-foundation/acapy-plugins theme: name: material logo: https://raw.githubusercontent.com/hyperledger/aries-acapy-docs/main/assets/Hyperledger_Aries_Logo_White.png