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
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
"""Add link tables for location_batch and agency_batch

Revision ID: 7c4049508bfc
Revises: dff1085d1c3d
Create Date: 2025-10-09 20:46:30.013715

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa

from src.util.alembic_helpers import batch_id_column, location_id_column, created_at_column, agency_id_column

# revision identifiers, used by Alembic.
revision: str = '7c4049508bfc'
down_revision: Union[str, None] = 'dff1085d1c3d'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None





def upgrade() -> None:

Check warning on line 25 in alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py#L25 <103>

Missing docstring in public function
Raw output
./alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py:25:1: D103 Missing docstring in public function

Check failure on line 25 in alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py#L25 <303>

too many blank lines (5)
Raw output
./alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py:25:1: E303 too many blank lines (5)
_create_link_location_batches_table()
_create_link_agency_batches_table()

def _create_link_location_batches_table():
op.create_table(
"link_location_batches",
batch_id_column(),
location_id_column(),
created_at_column(),
sa.PrimaryKeyConstraint(
'batch_id',
'location_id',
name='link_location_batches_pk'
)
)


def _create_link_agency_batches_table():
op.create_table(
"link_agency_batches",
batch_id_column(),
agency_id_column(),
created_at_column(),
sa.PrimaryKeyConstraint(
'batch_id',
'agency_id',
name='link_agency_batches_pk'
)
)


def downgrade() -> None:

Check warning on line 57 in alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py#L57 <103>

Missing docstring in public function
Raw output
./alembic/versions/2025_10_09_2046-7c4049508bfc_add_link_tables_for_location_batch_and_.py:57:1: D103 Missing docstring in public function
pass
6 changes: 5 additions & 1 deletion src/collectors/impl/auto_googler/auto_googler.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@
and processing them for source collection

"""
def __init__(self, search_config: SearchConfig, google_searcher: GoogleSearcher):
def __init__(

Check warning on line 12 in src/collectors/impl/auto_googler/auto_googler.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/auto_googler.py#L12 <107>

Missing docstring in __init__
Raw output
./src/collectors/impl/auto_googler/auto_googler.py:12:1: D107 Missing docstring in __init__
self,
search_config: SearchConfig,
google_searcher: GoogleSearcher
):
self.search_config = search_config
self.google_searcher = google_searcher
self.data: dict[str, list[GoogleSearchQueryResultsInnerDTO]] = {
Expand Down
36 changes: 33 additions & 3 deletions src/collectors/impl/auto_googler/collector.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from typing import Any

Check warning on line 1 in src/collectors/impl/auto_googler/collector.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/collector.py#L1 <100>

Missing docstring in public module
Raw output
./src/collectors/impl/auto_googler/collector.py:1:1: D100 Missing docstring in public module

from src.collectors.impl.auto_googler.queries.agency import AutoGooglerAddAgencyQueryBuilder
from src.collectors.impl.auto_googler.queries.location import AutoGooglerAddLocationQueryBuilder
from src.collectors.impl.base import AsyncCollectorBase
from src.collectors.enums import CollectorType
from src.core.env_var_manager import EnvVarManager
Expand All @@ -8,6 +11,7 @@
from src.collectors.impl.auto_googler.dtos.input import AutoGooglerInputDTO
from src.collectors.impl.auto_googler.searcher import GoogleSearcher
from src.collectors.impl.auto_googler.dtos.config import SearchConfig
from src.db.models.impl.link.agency_batch.sqlalchemy import LinkAgencyBatch

Check warning on line 14 in src/collectors/impl/auto_googler/collector.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/collector.py#L14 <401>

'src.db.models.impl.link.agency_batch.sqlalchemy.LinkAgencyBatch' imported but unused
Raw output
./src/collectors/impl/auto_googler/collector.py:14:1: F401 'src.db.models.impl.link.agency_batch.sqlalchemy.LinkAgencyBatch' imported but unused
from src.util.helper_functions import base_model_list_dump


Expand All @@ -17,11 +21,37 @@

async def run_to_completion(self) -> AutoGoogler:
dto: AutoGooglerInputDTO = self.dto

queries: list[str] = dto.queries.copy()

if dto.agency_id is not None:

agency_name: str = await self.adb_client.run_query_builder(
AutoGooglerAddAgencyQueryBuilder(
batch_id=self.batch_id,
agency_id=dto.agency_id,
)
)

# Add to all queries
queries = [f"{query} {agency_name}" for query in queries]

if dto.location_id is not None:
location_name: str = await self.adb_client.run_query_builder(
AutoGooglerAddLocationQueryBuilder(
batch_id=self.batch_id,
location_id=dto.location_id,
)
)

# Add to all queries
queries = [f"{query} {location_name}" for query in queries]

env_var_manager = EnvVarManager.get()
auto_googler = AutoGoogler(
search_config=SearchConfig(
urls_per_result=dto.urls_per_result,
queries=dto.queries,
queries=queries,
),
google_searcher=GoogleSearcher(
api_key=env_var_manager.google_api_key,
Expand All @@ -34,9 +64,9 @@

async def run_implementation(self) -> None:

auto_googler = await self.run_to_completion()
auto_googler: AutoGoogler = await self.run_to_completion()

inner_data = []
inner_data: list[dict[str, Any]] = []
for query in auto_googler.search_config.queries:
query_results: list[AutoGooglerInnerOutputDTO] = auto_googler.data[query]
inner_data.append({
Expand Down
8 changes: 8 additions & 0 deletions src/collectors/impl/auto_googler/dtos/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,11 @@ class AutoGooglerInputDTO(BaseModel):
min_length=1,
max_length=100
)
agency_id: int | None = Field(
description="ID of the agency to search for. Optional.",
default=None
)
location_id: int | None = Field(
description="ID of the location to search for. Optional.",
default=None
)
Empty file.
36 changes: 36 additions & 0 deletions src/collectors/impl/auto_googler/queries/agency.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from sqlalchemy import select

Check warning on line 1 in src/collectors/impl/auto_googler/queries/agency.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/agency.py#L1 <100>

Missing docstring in public module
Raw output
./src/collectors/impl/auto_googler/queries/agency.py:1:1: D100 Missing docstring in public module
from sqlalchemy.ext.asyncio import AsyncSession

from src.db.models.impl.agency.sqlalchemy import Agency
from src.db.models.impl.link.agency_batch.sqlalchemy import LinkAgencyBatch
from src.db.queries.base.builder import QueryBuilderBase

from src.db.helpers.session import session_helper as sh

class AutoGooglerAddAgencyQueryBuilder(QueryBuilderBase):

Check warning on line 10 in src/collectors/impl/auto_googler/queries/agency.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/agency.py#L10 <101>

Missing docstring in public class
Raw output
./src/collectors/impl/auto_googler/queries/agency.py:10:1: D101 Missing docstring in public class

def __init__(

Check warning on line 12 in src/collectors/impl/auto_googler/queries/agency.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/agency.py#L12 <107>

Missing docstring in __init__
Raw output
./src/collectors/impl/auto_googler/queries/agency.py:12:1: D107 Missing docstring in __init__
self,
batch_id: int,
agency_id: int,
):
super().__init__()
self.batch_id = batch_id
self.agency_id = agency_id

async def run(self, session: AsyncSession) -> str:
"""Add link and return agency name."""

link = LinkAgencyBatch(
batch_id=self.batch_id,
agency_id=self.agency_id
)
session.add(link)

query = (
select(
Agency.name
)
)

return await sh.scalar(session, query=query)

Check warning on line 36 in src/collectors/impl/auto_googler/queries/agency.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/agency.py#L36 <292>

no newline at end of file
Raw output
./src/collectors/impl/auto_googler/queries/agency.py:36:53: W292 no newline at end of file
39 changes: 39 additions & 0 deletions src/collectors/impl/auto_googler/queries/location.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from sqlalchemy import select

Check warning on line 1 in src/collectors/impl/auto_googler/queries/location.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/location.py#L1 <100>

Missing docstring in public module
Raw output
./src/collectors/impl/auto_googler/queries/location.py:1:1: D100 Missing docstring in public module
from sqlalchemy.ext.asyncio import AsyncSession

from src.db.models.impl.link.location_batch.sqlalchemy import LinkLocationBatch
from src.db.models.views.location_expanded import LocationExpandedView
from src.db.queries.base.builder import QueryBuilderBase

from src.db.helpers.session import session_helper as sh

class AutoGooglerAddLocationQueryBuilder(QueryBuilderBase):

Check warning on line 10 in src/collectors/impl/auto_googler/queries/location.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/location.py#L10 <101>

Missing docstring in public class
Raw output
./src/collectors/impl/auto_googler/queries/location.py:10:1: D101 Missing docstring in public class

def __init__(

Check warning on line 12 in src/collectors/impl/auto_googler/queries/location.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/collectors/impl/auto_googler/queries/location.py#L12 <107>

Missing docstring in __init__
Raw output
./src/collectors/impl/auto_googler/queries/location.py:12:1: D107 Missing docstring in __init__
self,
batch_id: int,
location_id: int
):
super().__init__()
self.batch_id = batch_id
self.location_id = location_id

async def run(self, session: AsyncSession) -> str:
"""Add link and return location name."""

link = LinkLocationBatch(
batch_id=self.batch_id,
location_id=self.location_id
)
session.add(link)

query = (
select(
LocationExpandedView.full_display_name
)
.where(
LocationExpandedView.id == self.location_id
)
)

return await sh.scalar(session, query=query)
6 changes: 3 additions & 3 deletions src/core/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,9 @@ async def get_batch_logs(self, batch_id: int) -> GetBatchLogsResponse:

# region Collector
async def initiate_collector(
self,
collector_type: CollectorType,
user_id: int,
self,
collector_type: CollectorType,
user_id: int,
dto: BaseModel | None = None,
) -> CollectorStartInfo:
"""
Expand Down
Empty file.
20 changes: 20 additions & 0 deletions src/db/models/impl/link/agency_batch/sqlalchemy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from sqlalchemy import PrimaryKeyConstraint

Check warning on line 1 in src/db/models/impl/link/agency_batch/sqlalchemy.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/db/models/impl/link/agency_batch/sqlalchemy.py#L1 <100>

Missing docstring in public module
Raw output
./src/db/models/impl/link/agency_batch/sqlalchemy.py:1:1: D100 Missing docstring in public module

from src.db.models.mixins import CreatedAtMixin, LocationDependentMixin, AgencyDependentMixin, BatchDependentMixin

Check warning on line 3 in src/db/models/impl/link/agency_batch/sqlalchemy.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/db/models/impl/link/agency_batch/sqlalchemy.py#L3 <401>

'src.db.models.mixins.LocationDependentMixin' imported but unused
Raw output
./src/db/models/impl/link/agency_batch/sqlalchemy.py:3:1: F401 'src.db.models.mixins.LocationDependentMixin' imported but unused
from src.db.models.templates_.base import Base


class LinkAgencyBatch(

Check warning on line 7 in src/db/models/impl/link/agency_batch/sqlalchemy.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/db/models/impl/link/agency_batch/sqlalchemy.py#L7 <101>

Missing docstring in public class
Raw output
./src/db/models/impl/link/agency_batch/sqlalchemy.py:7:1: D101 Missing docstring in public class
Base,
CreatedAtMixin,
BatchDependentMixin,
AgencyDependentMixin,
):
__tablename__ = "link_agency_batches"
__table_args__ = (
PrimaryKeyConstraint(
'batch_id',
'agency_id',
name='link_agency_batches_pk'
),
)
Empty file.
21 changes: 21 additions & 0 deletions src/db/models/impl/link/location_batch/sqlalchemy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from sqlalchemy import PrimaryKeyConstraint

Check warning on line 1 in src/db/models/impl/link/location_batch/sqlalchemy.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/db/models/impl/link/location_batch/sqlalchemy.py#L1 <100>

Missing docstring in public module
Raw output
./src/db/models/impl/link/location_batch/sqlalchemy.py:1:1: D100 Missing docstring in public module

from src.db.models.mixins import LocationDependentMixin, BatchDependentMixin, CreatedAtMixin
from src.db.models.templates_.base import Base


class LinkLocationBatch(

Check warning on line 7 in src/db/models/impl/link/location_batch/sqlalchemy.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/db/models/impl/link/location_batch/sqlalchemy.py#L7 <101>

Missing docstring in public class
Raw output
./src/db/models/impl/link/location_batch/sqlalchemy.py:7:1: D101 Missing docstring in public class
Base,
LocationDependentMixin,
BatchDependentMixin,
CreatedAtMixin
):

__tablename__ = "link_location_batches"
__table_args__ = (
PrimaryKeyConstraint(
'batch_id',
'location_id',
name='link_location_batches_pk'
),
)

Check warning on line 21 in src/db/models/impl/link/location_batch/sqlalchemy.py

View workflow job for this annotation

GitHub Actions / flake8

[flake8] src/db/models/impl/link/location_batch/sqlalchemy.py#L21 <292>

no newline at end of file
Raw output
./src/db/models/impl/link/location_batch/sqlalchemy.py:21:6: W292 no newline at end of file