Skip to content

Commit 6c7827e

Browse files
authoredDec 18, 2023
Merge pull request #2683 from jamshale/feat/1487
Return 404 when schema not found
2 parents d04e4ce + a5aa218 commit 6c7827e

File tree

5 files changed

+40
-18
lines changed

5 files changed

+40
-18
lines changed
 

Diff for: ‎aries_cloudagent/anoncreds/default/legacy_indy/registry.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
"""Legacy Indy Registry."""
2-
from asyncio import shield
32
import json
43
import logging
54
import re
5+
from asyncio import shield
66
from typing import List, Optional, Pattern, Sequence, Tuple
77

8+
from base58 import alphabet
9+
810
from ....cache.base import BaseCache
911
from ....config.injection_context import InjectionContext
1012
from ....core.profile import Profile
@@ -40,14 +42,14 @@
4042
GetCredDefResult,
4143
)
4244
from ...models.anoncreds_revocation import (
43-
GetRevRegDefResult,
4445
GetRevListResult,
45-
RevRegDef,
46-
RevRegDefResult,
47-
RevRegDefState,
46+
GetRevRegDefResult,
4847
RevList,
4948
RevListResult,
5049
RevListState,
50+
RevRegDef,
51+
RevRegDefResult,
52+
RevRegDefState,
5153
RevRegDefValue,
5254
)
5355
from ...models.anoncreds_schema import (
@@ -56,7 +58,6 @@
5658
SchemaResult,
5759
SchemaState,
5860
)
59-
from base58 import alphabet
6061

6162
LOGGER = logging.getLogger(__name__)
6263

@@ -158,7 +159,7 @@ async def get_schema(self, profile: Profile, schema_id: str) -> GetSchemaResult:
158159
schema = await ledger.get_schema(schema_id)
159160
if schema is None:
160161
raise AnonCredsObjectNotFound(
161-
f"Credential definition not found: {schema_id}",
162+
f"Schema not found: {schema_id}",
162163
{"ledger_id": ledger_id},
163164
)
164165

Diff for: ‎aries_cloudagent/anoncreds/routes.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Anoncreds admin routes."""
2-
from asyncio import shield
32
import logging
3+
from asyncio import shield
44

55
from aiohttp import web
66
from aiohttp_apispec import (
@@ -21,13 +21,13 @@
2121
from ..revocation_anoncreds.manager import RevocationManager, RevocationManagerError
2222
from ..revocation_anoncreds.routes import (
2323
PublishRevocationsSchema,
24-
RevRegIdMatchInfoSchema,
2524
RevocationModuleResponseSchema,
2625
RevokeRequestSchema,
26+
RevRegIdMatchInfoSchema,
2727
TxnOrPublishRevocationsResultSchema,
2828
)
2929
from ..storage.error import StorageError, StorageNotFoundError
30-
from .base import AnonCredsRegistrationError
30+
from .base import AnonCredsObjectNotFound, AnonCredsRegistrationError
3131
from .issuer import AnonCredsIssuer, AnonCredsIssuerError
3232
from .models.anoncreds_cred_def import CredDefResultSchema, GetCredDefResultSchema
3333
from .models.anoncreds_revocation import RevListResultSchema, RevRegDefResultSchema
@@ -186,9 +186,11 @@ async def schema_get(request: web.BaseRequest):
186186
context: AdminRequestContext = request["context"]
187187
anoncreds_registry = context.inject(AnonCredsRegistry)
188188
schema_id = request.match_info["schemaId"]
189-
result = await anoncreds_registry.get_schema(context.profile, schema_id)
190-
191-
return web.json_response(result.serialize())
189+
try:
190+
schema = await anoncreds_registry.get_schema(context.profile, schema_id)
191+
return web.json_response(schema.serialize())
192+
except AnonCredsObjectNotFound:
193+
raise web.HTTPNotFound(reason=f"Schema not found: {schema_id}")
192194

193195

194196
class SchemasQueryStringSchema(OpenAPISchema):

Diff for: ‎aries_cloudagent/anoncreds/tests/test_routes.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from asynctest import TestCase as AsyncTestCase
66

77
from aries_cloudagent.admin.request_context import AdminRequestContext
8+
from aries_cloudagent.anoncreds.base import AnonCredsObjectNotFound
89
from aries_cloudagent.anoncreds.issuer import AnonCredsIssuer
910
from aries_cloudagent.anoncreds.revocation import AnonCredsRevocation
1011
from aries_cloudagent.anoncreds.revocation_setup import DefaultRevocationSetup
@@ -95,16 +96,27 @@ async def test_get_schema(self):
9596
self.request.match_info = {"schemaId": "schema_id"}
9697
self.context.inject = mock.Mock(
9798
return_value=mock.MagicMock(
98-
get_schema=mock.CoroutineMock(return_value=MockSchema("schemaId"))
99+
get_schema=mock.CoroutineMock(
100+
side_effect=[
101+
MockSchema("schemaId"),
102+
AnonCredsObjectNotFound("test"),
103+
]
104+
)
99105
)
100106
)
101107
result = await test_module.schema_get(self.request)
102108
assert json.loads(result.body)["schema_id"] == "schemaId"
103109

110+
# missing schema_id
104111
self.request.match_info = {}
105112
with self.assertRaises(KeyError):
106113
await test_module.schema_get(self.request)
107114

115+
# schema not found
116+
self.request.match_info = {"schemaId": "schema_id"}
117+
with self.assertRaises(web.HTTPNotFound):
118+
await test_module.schema_get(self.request)
119+
108120
@mock.patch.object(
109121
AnonCredsIssuer,
110122
"get_created_schemas",

Diff for: ‎aries_cloudagent/messaging/schemas/routes.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
request_schema,
1313
response_schema,
1414
)
15-
1615
from marshmallow import fields
1716
from marshmallow.validate import Regexp
1817

@@ -397,6 +396,8 @@ async def schemas_get_schema(request: web.BaseRequest):
397396
async with ledger:
398397
try:
399398
schema = await ledger.get_schema(schema_id)
399+
if not schema:
400+
raise web.HTTPNotFound(reason=f"Schema not found: {schema_id}")
400401
except LedgerError as err:
401402
raise web.HTTPBadRequest(reason=err.roll_up) from err
402403

Diff for: ‎aries_cloudagent/messaging/schemas/tests/test_routes.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from unittest import IsolatedAsyncioTestCase
2+
23
from aries_cloudagent.tests import mock
34

45
from ....admin.request_context import AdminRequestContext
6+
from ....connections.models.conn_record import ConnRecord
57
from ....core.in_memory import InMemoryProfile
68
from ....indy.issuer import IndyIssuer
79
from ....ledger.base import BaseLedger
@@ -11,10 +13,7 @@
1113
from ....multitenant.base import BaseMultitenantManager
1214
from ....multitenant.manager import MultitenantManager
1315
from ....storage.base import BaseStorage
14-
1516
from .. import routes as test_module
16-
from ....connections.models.conn_record import ConnRecord
17-
1817

1918
SCHEMA_ID = "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0"
2019

@@ -304,6 +303,9 @@ async def test_created(self):
304303
mock_response.assert_called_once_with({"schema_ids": [SCHEMA_ID]})
305304

306305
async def test_get_schema(self):
306+
self.ledger.get_schema = mock.CoroutineMock(
307+
side_effect=[{"schema": "def", "signed_txn": "..."}, None]
308+
)
307309
self.profile_injector.bind_instance(
308310
IndyLedgerRequestsExecutor,
309311
mock.MagicMock(
@@ -323,6 +325,10 @@ async def test_get_schema(self):
323325
}
324326
)
325327

328+
# test schema not found
329+
with self.assertRaises(test_module.web.HTTPNotFound):
330+
await test_module.schemas_get_schema(self.request)
331+
326332
async def test_get_schema_multitenant(self):
327333
self.profile_injector.bind_instance(
328334
BaseMultitenantManager,

0 commit comments

Comments
 (0)
Please sign in to comment.