Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/api/endpoints/metrics/dtos/get/urls/aggregated/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from pydantic import BaseModel

from src.core.enums import RecordType
from src.db.models.impl.flag.url_validated.enums import URLType
from src.db.models.views.url_status.enums import URLStatusViewEnum

Expand All @@ -13,4 +14,5 @@ class GetMetricsURLsAggregatedResponseDTO(BaseModel):
count_urls_total: int
count_urls_status: dict[URLStatusViewEnum, int]
count_urls_type: dict[URLType, int]
count_urls_record_type: dict[RecordType, int]
oldest_pending_url: GetMetricsURLValidatedOldestPendingURL | None
6 changes: 6 additions & 0 deletions src/api/endpoints/metrics/urls/aggregated/query/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
from src.api.endpoints.metrics.urls.aggregated.query.subqueries.all import ALL_SUBQUERY
from src.api.endpoints.metrics.urls.aggregated.query.subqueries.oldest_pending_url import \
GetOldestPendingURLQueryBuilder
from src.api.endpoints.metrics.urls.aggregated.query.subqueries.record_type import GetURLRecordTypeCountQueryBuilder
from src.api.endpoints.metrics.urls.aggregated.query.subqueries.status import GetURLStatusCountQueryBuilder
from src.api.endpoints.metrics.urls.aggregated.query.subqueries.url_type import GetURLTypeCountQueryBuilder
from src.core.enums import RecordType
from src.db.helpers.session import session_helper as sh
from src.db.models.impl.flag.url_validated.enums import URLType
from src.db.models.views.url_status.enums import URLStatusViewEnum
Expand All @@ -26,9 +28,13 @@ async def run(self, session: AsyncSession) -> GetMetricsURLsAggregatedResponseDT
validated_counts: dict[URLType, int] = \
await GetURLTypeCountQueryBuilder().run(session=session)

record_type_counts: dict[RecordType, int] = \
await GetURLRecordTypeCountQueryBuilder().run(session=session)

return GetMetricsURLsAggregatedResponseDTO(
count_urls_total=await sh.scalar(session, query=ALL_SUBQUERY),
oldest_pending_url=oldest_pending_url,
count_urls_status=status_counts,
count_urls_type=validated_counts,
count_urls_record_type=record_type_counts,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from typing import Sequence

Check warning on line 1 in src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py#L1 <100>

Missing docstring in public module
Raw output
./src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py:1:1: D100 Missing docstring in public module

from sqlalchemy import select, func, RowMapping
from sqlalchemy.ext.asyncio import AsyncSession

from src.core.enums import RecordType
from src.db.helpers.session import session_helper as sh
from src.db.models.impl.url.record_type.sqlalchemy import URLRecordType
from src.db.queries.base.builder import QueryBuilderBase


class GetURLRecordTypeCountQueryBuilder(QueryBuilderBase):

Check warning on line 12 in src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py#L12 <101>

Missing docstring in public class
Raw output
./src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py:12:1: D101 Missing docstring in public class

async def run(

Check warning on line 14 in src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py#L14 <102>

Missing docstring in public method
Raw output
./src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py:14:1: D102 Missing docstring in public method
self,
session: AsyncSession
) -> dict[RecordType, int]:
query = (
select(
URLRecordType.record_type,
func.count(URLRecordType.url_id).label("count")
)
.group_by(
URLRecordType.record_type
)
)

mappings: Sequence[RowMapping] = await sh.mappings(session, query=query)

return {
mapping["record_type"]: mapping["count"]
for mapping in mappings
}

Check warning on line 33 in src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py#L33 <292>

no newline at end of file
Raw output
./src/api/endpoints/metrics/urls/aggregated/query/subqueries/record_type.py:33:10: W292 no newline at end of file