Skip to content

Commit

Permalink
Fix: Last mypy error + refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
1yam committed Sep 12, 2023
1 parent 6beec2a commit 4e6332a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 24 deletions.
28 changes: 16 additions & 12 deletions src/aleph/web/controllers/aggregates.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,19 @@ async def address_aggregate(request: web.Request) -> web.Response:
)
)

if not aggregates:
return web.HTTPNotFound(text="No aggregate found for this address")
if not aggregates:
return web.HTTPNotFound(text="No aggregate found for this address")

output = {
"address": address,
"data": {result[0]: result[1] for result in aggregates},
"data": {},
}
info = {}
if query_params.with_info:
for result in aggregates:
info: Dict = {}
data: Dict = {}

for result in aggregates:
data[result[0]] = result[1]
if query_params.with_info:
(
aggregate_key,
content,
Expand All @@ -89,13 +92,14 @@ async def address_aggregate(request: web.Request) -> web.Response:
created = created.isoformat()
if isinstance(last_updated, dt.datetime):
last_updated = last_updated.isoformat()

info[aggregate_key] = {
"created": created,
"last_updated": last_updated,
"original_item_hash": original_item_hash,
"last_update_item_hash": last_update_item_hash,
"created": str(created),
"last_updated": str(last_updated),
"original_item_hash": str(original_item_hash),
"last_update_item_hash": str(last_update_item_hash),
}
output["info"] = info

output["data"] = data
output["info"] = info

return web.json_response(output)
29 changes: 17 additions & 12 deletions tests/api/test_aggregates.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ def make_uri(address: str) -> str:


async def get_aggregates(
api_client, address: str, with_info: str, **params
api_client, address: str, with_info: bool, **params
) -> aiohttp.ClientResponse:
params["with_info"] = with_info
params["with_info"] = str(with_info)
return await api_client.get(make_uri(address), params=params)


async def get_aggregates_expect_success(
api_client, address: str, with_info: str, **params
api_client, address: str, with_info: bool, **params
):
response = await get_aggregates(api_client, address, with_info, **params)
assert response.status == 200, await response.text()
Expand All @@ -52,7 +52,7 @@ async def test_get_aggregates_no_update(
assert fixture_aggregate_messages # To avoid unused parameter warnings

address = ADDRESS_2
aggregates = await get_aggregates_expect_success(ccn_api_client, address, "False")
aggregates = await get_aggregates_expect_success(ccn_api_client, address, False)

assert aggregates["address"] == address
assert aggregates["data"] == EXPECTED_AGGREGATES[address]
Expand All @@ -68,14 +68,17 @@ async def test_get_aggregates(
assert fixture_aggregate_messages # To avoid unused parameter warnings

address = ADDRESS_1
aggregates = await get_aggregates_expect_success(ccn_api_client, address, "True")
aggregates = await get_aggregates_expect_success(ccn_api_client, address, True)

assert address == aggregates["address"]
assert aggregates["data"]["test_key"] == {"a": 1, "b": 2}
assert aggregates["data"]["test_target"] == {"a": 1, "b": 2}
assert aggregates["data"]["test_reference"] == {"a": 1, "b": 2, "c": 3, "d": 4}
assert aggregates["info"]["test_reference"] is not None
print(aggregates)
assert aggregates["info"]["test_reference"]
assert (
aggregates["info"]["test_reference"]["original_item_hash"]
== fixture_aggregate_messages[1].item_hash
)


@pytest.mark.asyncio
Expand All @@ -90,15 +93,15 @@ async def test_get_aggregates_filter_by_key(

address, key = ADDRESS_1, "test_target"
aggregates = await get_aggregates_expect_success(
ccn_api_client, address=address, keys=key, with_info="False"
ccn_api_client, address=address, keys=key, with_info=False
)
assert aggregates["address"] == address
assert aggregates["data"][key] == EXPECTED_AGGREGATES[address][key]

# Multiple keys
address, keys = ADDRESS_1, ["test_target", "test_reference"]
aggregates = await get_aggregates_expect_success(
ccn_api_client, address=address, keys=",".join(keys), with_info="False"
ccn_api_client, address=address, keys=",".join(keys), with_info=False
)
assert aggregates["address"] == address
for key in keys:
Expand All @@ -121,7 +124,7 @@ async def test_get_aggregates_limit(

address, key = ADDRESS_1, "test_reference"
aggregates = await get_aggregates_expect_success(
ccn_api_client, address=address, keys=key, limit=1, with_info="False"
ccn_api_client, address=address, keys=key, limit=1, with_info=False
)
assert aggregates["address"] == address
assert aggregates["data"][key] == {"c": 3, "d": 4}
Expand All @@ -138,7 +141,7 @@ async def test_get_aggregates_invalid_address(

invalid_address = "unknown"

response = await get_aggregates(ccn_api_client, invalid_address, "False")
response = await get_aggregates(ccn_api_client, invalid_address, False)
assert response.status == 404


Expand All @@ -152,7 +155,9 @@ async def test_get_aggregates_invalid_params(
assert fixture_aggregate_messages # To avoid unused parameter warnings

# A string as limit
response = await get_aggregates(ccn_api_client, ADDRESS_1, limit="abc", with_info="False")
response = await get_aggregates(
ccn_api_client, ADDRESS_1, limit="abc", with_info=False
)
assert response.status == 422
assert response.content_type == "application/json"

Expand Down

0 comments on commit 4e6332a

Please sign in to comment.