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
1 change: 1 addition & 0 deletions src/api/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
from src.external.url_request.core import URLRequestInterface
from environs import Env


@asynccontextmanager
async def lifespan(app: FastAPI):
env_var_manager = EnvVarManager.get()
Expand Down
29 changes: 29 additions & 0 deletions src/core/tasks/url/operators/submit_approved/queries/cte.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from sqlalchemy import CTE, select, exists

Check warning on line 1 in src/core/tasks/url/operators/submit_approved/queries/cte.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/core/tasks/url/operators/submit_approved/queries/cte.py#L1 <100>

Missing docstring in public module
Raw output
./src/core/tasks/url/operators/submit_approved/queries/cte.py:1:1: D100 Missing docstring in public module

Check warning on line 1 in src/core/tasks/url/operators/submit_approved/queries/cte.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/core/tasks/url/operators/submit_approved/queries/cte.py#L1 <401>

'sqlalchemy.CTE' imported but unused
Raw output
./src/core/tasks/url/operators/submit_approved/queries/cte.py:1:1: F401 'sqlalchemy.CTE' imported but unused
from sqlalchemy.orm import aliased

from src.collectors.enums import URLStatus
from src.db.models.impl.flag.url_validated.enums import URLValidatedType
from src.db.models.impl.flag.url_validated.sqlalchemy import FlagURLValidated
from src.db.models.impl.url.core.sqlalchemy import URL
from src.db.models.impl.url.data_source.sqlalchemy import URLDataSource

VALIDATED_URLS_WITHOUT_DS_SQ =(

Check failure on line 10 in src/core/tasks/url/operators/submit_approved/queries/cte.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/core/tasks/url/operators/submit_approved/queries/cte.py#L10 <225>

missing whitespace around operator
Raw output
./src/core/tasks/url/operators/submit_approved/queries/cte.py:10:31: E225 missing whitespace around operator
select(URL)
.join(
FlagURLValidated,
FlagURLValidated.url_id == URL.id
)
.where(
URL.status == URLStatus.OK,
FlagURLValidated.type == URLValidatedType.DATA_SOURCE,
~exists().where(
URLDataSource.url_id == URL.id
)
)
.subquery()
)

VALIDATED_URLS_WITHOUT_DS_ALIAS = aliased(
URL,
VALIDATED_URLS_WITHOUT_DS_SQ
)

Check warning on line 29 in src/core/tasks/url/operators/submit_approved/queries/cte.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/core/tasks/url/operators/submit_approved/queries/cte.py#L29 <292>

no newline at end of file
Raw output
./src/core/tasks/url/operators/submit_approved/queries/cte.py:29:2: W292 no newline at end of file
11 changes: 5 additions & 6 deletions src/core/tasks/url/operators/submit_approved/queries/get.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from sqlalchemy.orm import selectinload

from src.collectors.enums import URLStatus
from src.core.tasks.url.operators.submit_approved.queries.cte import VALIDATED_URLS_WITHOUT_DS_ALIAS
from src.core.tasks.url.operators.submit_approved.tdo import SubmitApprovedURLTDO
from src.db.models.impl.flag.url_validated.enums import URLValidatedType
from src.db.models.impl.flag.url_validated.sqlalchemy import FlagURLValidated
Expand Down Expand Up @@ -30,13 +31,11 @@ async def _process_results(self, urls):
@staticmethod
async def _build_query():
query = (
select(URL)
.join(FlagURLValidated, FlagURLValidated.url_id == URL.id)
.where(FlagURLValidated.type == URLValidatedType.DATA_SOURCE)
select(VALIDATED_URLS_WITHOUT_DS_ALIAS)
.options(
selectinload(URL.optional_data_source_metadata),
selectinload(URL.confirmed_agencies),
selectinload(URL.reviewing_user)
selectinload(VALIDATED_URLS_WITHOUT_DS_ALIAS.optional_data_source_metadata),
selectinload(VALIDATED_URLS_WITHOUT_DS_ALIAS.confirmed_agencies),
selectinload(VALIDATED_URLS_WITHOUT_DS_ALIAS.reviewing_user)
).limit(100)
)
return query
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

from src.collectors.enums import URLStatus
from src.db.models.impl.flag.url_validated.enums import URLValidatedType
from src.db.models.impl.flag.url_validated.sqlalchemy import FlagURLValidated
from src.core.tasks.url.operators.submit_approved.queries.cte import VALIDATED_URLS_WITHOUT_DS_ALIAS
from src.db.helpers.session import session_helper as sh
from src.db.models.impl.url.core.sqlalchemy import URL
from src.db.queries.base.builder import QueryBuilderBase

Expand All @@ -12,15 +11,8 @@

async def run(self, session: AsyncSession) -> bool:
query = (
select(URL)
.join(
FlagURLValidated,
FlagURLValidated.url_id == URL.id
)
.where(
FlagURLValidated.type == URLValidatedType.DATA_SOURCE
)
select(VALIDATED_URLS_WITHOUT_DS_ALIAS)
.limit(1)
)
urls = await session.execute(query)
urls = urls.scalars().all()
return len(urls) > 0
url: URL | None = await sh.one_or_none(session, query=query)
return url is not None

Check warning on line 18 in src/core/tasks/url/operators/submit_approved/queries/has_validated.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/core/tasks/url/operators/submit_approved/queries/has_validated.py#L18 <292>

no newline at end of file
Raw output
./src/core/tasks/url/operators/submit_approved/queries/has_validated.py:18:31: W292 no newline at end of file
3 changes: 2 additions & 1 deletion src/db/models/impl/batch/sqlalchemy.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class Batch(WithIDBase):
back_populates="batch",
overlaps="url"
)
# missings = relationship("Missing", back_populates="batch") # Not in active use
# These relationships exist but are never referenced by their attributes
# missings = relationship("Missing", back_populates="batch")
logs = relationship("Log", back_populates="batch")
duplicates = relationship("Duplicate", back_populates="batch")
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ async def test_submit_approved_url_task(
# Check Task has been marked as completed
assert run_info.outcome == TaskOperatorOutcome.SUCCESS, run_info.message

# Check Task Operator no longer meets pre-requisites
assert not await operator.meets_task_prerequisites()

# Get URLs
urls: list[URL] = await db_data_creator.adb_client.get_all(URL, order_by_attribute="id")
url_1: URL = urls[0]
Expand Down
8 changes: 6 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@
import os
from contextlib import contextmanager
from typing import Any, Generator, AsyncGenerator
from unittest.mock import AsyncMock

import pytest
import pytest_asyncio
from aiohttp import ClientSession
from alembic.config import Config
from pdap_access_manager import AccessManager
from sqlalchemy import create_engine, inspect, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker

from src.core.env_var_manager import EnvVarManager
# Below are to prevent import errors
from src.db.models.impl.missing import Missing # noqa: F401
from src.db.models.impl.log.sqlalchemy import Log # noqa: F401
from src.db.models.impl.task.error import TaskError # noqa: F401
from src.db.models.impl.url.checked_for_duplicate import URLCheckedForDuplicate # noqa: F401
from src.db.models.impl.url.probed_for_404 import URLProbedFor404 # noqa: F401
from src.db.client.async_ import AsyncDatabaseClient
from src.db.client.sync import DatabaseClient
from src.db.helpers.connect import get_postgres_connection_string
Expand Down