Skip to content

Commit

Permalink
refactor: move more logic to status_handler, add more test cases, and…
Browse files Browse the repository at this point in the history
… bump lib versions

Signed-off-by: Ivan Wei <[email protected]>
  • Loading branch information
weiiv committed Feb 21, 2025
1 parent 9c56d63 commit 31426d2
Show file tree
Hide file tree
Showing 9 changed files with 190 additions and 171 deletions.
107 changes: 39 additions & 68 deletions status_list/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 9 additions & 6 deletions status_list/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,29 +1,32 @@
[tool.poetry]
name = "status_list"
version = "0.1.0"
description = ""
authors = []
description = "Status List plugin for ACA-Py"
authors = [
"Ivan Wei <[email protected]>"
]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.12"
bitarray = "^3.0.0"

# Define ACA-Py as an optional/extra dependency so it can be
# explicitly installed with the plugin if desired.
acapy-agent = { version = "~1.2.1", optional = true }
acapy-agent = { version = "~1.2.2", optional = true }

[tool.poetry.extras]
aca-py = ["acapy-agent"]

[tool.poetry.group.dev.dependencies]
ruff = "^0.9.3"
ruff = "^0.9.5"
pytest = "^8.3.3"
pytest-asyncio = "^0.25.0"
pytest-asyncio = "^0.25.3"
pytest-cov = "^5.0.0"
pytest-ruff = "^0.4.1"

[tool.poetry.group.integration.dependencies]
aries-askar = { version = "~0.3.2" }
aries-askar = { version = "~0.4.3" }
indy-credx = { version = "~1.1.1" }
indy-vdr = { version = "~0.4.1" }
python3-indy = { version = "^1.11.1" }
Expand Down
69 changes: 6 additions & 63 deletions status_list/status_list/v1_0/controllers/status_list_cred.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,8 @@
from aiohttp import web
from aiohttp_apispec import docs, request_schema, response_schema, match_info_schema
from marshmallow import fields
from bitarray import bitarray

from ..models import StatusListDef, StatusListShard, StatusListCred

from .. import status_handler

LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -70,32 +68,9 @@ async def get_status_list_cred(request: web.BaseRequest):
try:
context: AdminRequestContext = request["context"]
async with context.profile.session() as session:
tag_filter = {
"definition_id": definition_id,
"credential_id": credential_id,
}
record = await StatusListCred.retrieve_by_tag_filter(session, tag_filter)
list_number = record.list_number
entry_index = record.list_index

definition = await StatusListDef.retrieve_by_id(session, definition_id)
shard_number = entry_index // definition.shard_size
shard_index = entry_index % definition.shard_size
tag_filter = {
"definition_id": definition_id,
"list_number": str(list_number),
"shard_number": str(shard_number),
}
shard = await StatusListShard.retrieve_by_tag_filter(session, tag_filter)
bit_index = shard_index * definition.status_size
result = {
"list": definition.list_number,
"index": entry_index,
"status": shard.status_bits[
bit_index : bit_index + definition.status_size
].to01(),
"assigned": not shard.mask_bits[shard_index],
}
result = await status_handler.get_status_list_entry(
session, definition_id, credential_id
)
LOGGER.debug(f"Retrieved status list entry {result}.")

except StorageNotFoundError as err:
Expand Down Expand Up @@ -141,41 +116,9 @@ async def update_status_list_cred(request: web.BaseRequest):
try:
context: AdminRequestContext = request["context"]
async with context.profile.session() as session:
tag_filter = {
"definition_id": definition_id,
"credential_id": credential_id,
}
record = await StatusListCred.retrieve_by_tag_filter(session, tag_filter)
list_number = record.list_number
entry_index = record.list_index

definition = await StatusListDef.retrieve_by_id(session, definition_id)
shard_number = entry_index // definition.shard_size
shard_index = entry_index % definition.shard_size
tag_filter = {
"definition_id": definition_id,
"list_number": str(list_number),
"shard_number": str(shard_number),
}
shard = await StatusListShard.retrieve_by_tag_filter(
session, tag_filter, for_update=True
)
bit_index = shard_index * definition.status_size
status_bits = shard.status_bits
status_bits[bit_index : bit_index + definition.status_size] = bitarray(
bitstring
result = await status_handler.update_status_list_entry(
session, definition_id, credential_id, bitstring
)
shard.status_bits = status_bits
await shard.save(session, reason="Update status list entry.")

result = {
"list": definition.list_number,
"index": entry_index,
"status": shard.status_bits[
bit_index : bit_index + definition.status_size
].to01(),
"assigned": not shard.mask_bits[shard_index],
}
LOGGER.debug(f"Updated status list entry {result}.")

except StorageNotFoundError as err:
Expand Down
Loading

0 comments on commit 31426d2

Please sign in to comment.