diff --git a/mobilizon_reshare/cli/commands/list/list_event.py b/mobilizon_reshare/cli/commands/list/list_event.py index 6276cc2..84d1551 100644 --- a/mobilizon_reshare/cli/commands/list/list_event.py +++ b/mobilizon_reshare/cli/commands/list/list_event.py @@ -10,8 +10,8 @@ from mobilizon_reshare.dataclasses.event import ( get_all_mobilizon_events, get_published_events, get_mobilizon_events_with_status, + get_mobilizon_events_without_publications, ) -from mobilizon_reshare.dataclasses.to_split import events_without_publications from mobilizon_reshare.event.event_selection_strategies import select_unpublished_events status_to_color = { @@ -38,7 +38,9 @@ def pretty(event: MobilizonEvent): async def list_unpublished_events(frm: Arrow = None, to: Arrow = None): return select_unpublished_events( list(await get_published_events(from_date=frm, to_date=to)), - list(await events_without_publications(from_date=frm, to_date=to)), + list( + await get_mobilizon_events_without_publications(from_date=frm, to_date=to) + ), ) diff --git a/mobilizon_reshare/dataclasses/event.py b/mobilizon_reshare/dataclasses/event.py index 2c68d9b..ec13bc7 100644 --- a/mobilizon_reshare/dataclasses/event.py +++ b/mobilizon_reshare/dataclasses/event.py @@ -12,7 +12,11 @@ from mobilizon_reshare.dataclasses.event_publication_status import ( _compute_event_status, ) from mobilizon_reshare.models.event import Event -from mobilizon_reshare.storage.query.read import get_all_events, get_event +from mobilizon_reshare.storage.query.read import ( + get_all_events, + get_event, + get_events_without_publications, +) @dataclass @@ -140,3 +144,14 @@ async def get_mobilizon_events_with_status( _MobilizonEvent.from_model, filter(_filter_event_with_status, await get_all_events(from_date, to_date)), ) + + +async def get_mobilizon_events_without_publications( + from_date: Optional[Arrow] = None, to_date: Optional[Arrow] = None, +) -> list[_MobilizonEvent]: + return [ + _MobilizonEvent.from_model(event) + for event in await get_events_without_publications( + from_date=from_date, to_date=to_date + ) + ] diff --git a/mobilizon_reshare/dataclasses/to_split.py b/mobilizon_reshare/dataclasses/to_split.py deleted file mode 100644 index 9258571..0000000 --- a/mobilizon_reshare/dataclasses/to_split.py +++ /dev/null @@ -1,38 +0,0 @@ -from typing import Optional -from uuid import UUID - -from arrow import Arrow -from tortoise.exceptions import DoesNotExist -from tortoise.transactions import atomic - -from mobilizon_reshare.dataclasses import MobilizonEvent, EventPublication -from mobilizon_reshare.models.event import Event -from mobilizon_reshare.models.publication import Publication -from mobilizon_reshare.storage.query.read import ( - prefetch_event_relations, - _add_date_window, - prefetch_publication_relations, -) - - -async def events_without_publications( - from_date: Optional[Arrow] = None, to_date: Optional[Arrow] = None, -) -> list[MobilizonEvent]: - query = Event.filter(publications__id=None) - events = await prefetch_event_relations( - _add_date_window(query, "begin_datetime", from_date, to_date) - ) - return [MobilizonEvent.from_model(event) for event in events] - - -@atomic() -async def get_publication(publication_id: UUID): - try: - publication = await prefetch_publication_relations( - Publication.get(id=publication_id).first() - ) - return EventPublication.from_orm( - event=MobilizonEvent.from_model(publication.event), model=publication - ) - except DoesNotExist: - return None diff --git a/mobilizon_reshare/main/publish.py b/mobilizon_reshare/main/publish.py index 33dc0bb..d6fa7d6 100644 --- a/mobilizon_reshare/main/publish.py +++ b/mobilizon_reshare/main/publish.py @@ -3,12 +3,14 @@ from typing import Optional, Iterator from mobilizon_reshare.config.command import CommandConfig from mobilizon_reshare.dataclasses import MobilizonEvent -from mobilizon_reshare.dataclasses.event import get_published_events +from mobilizon_reshare.dataclasses.event import ( + get_published_events, + get_mobilizon_events_without_publications, +) from mobilizon_reshare.dataclasses.publication import ( _EventPublication, build_publications_for_event, ) -from mobilizon_reshare.dataclasses.to_split import events_without_publications from mobilizon_reshare.event.event_selection_strategies import select_event_to_publish from mobilizon_reshare.publishers import get_active_publishers from mobilizon_reshare.publishers.coordinators.event_publishing.dry_run import ( @@ -70,7 +72,7 @@ async def select_and_publish( :return: """ if unpublished_events is None: - unpublished_events = await events_without_publications() + unpublished_events = await get_mobilizon_events_without_publications() event = select_event_to_publish( list(await get_published_events()), unpublished_events, diff --git a/mobilizon_reshare/storage/query/read.py b/mobilizon_reshare/storage/query/read.py index e5e2f27..120bd6d 100644 --- a/mobilizon_reshare/storage/query/read.py +++ b/mobilizon_reshare/storage/query/read.py @@ -89,3 +89,12 @@ async def get_event(event_mobilizon_id: UUID) -> Event: raise EventNotFound(f"No event with mobilizon_id {event_mobilizon_id} found.") return events[0] + + +async def get_events_without_publications( + from_date: Optional[Arrow] = None, to_date: Optional[Arrow] = None, +) -> list[Event]: + query = Event.filter(publications__id=None) + return await prefetch_event_relations( + _add_date_window(query, "begin_datetime", from_date, to_date) + ) diff --git a/mobilizon_reshare/storage/query/write.py b/mobilizon_reshare/storage/query/write.py index 27449c8..5781d92 100644 --- a/mobilizon_reshare/storage/query/write.py +++ b/mobilizon_reshare/storage/query/write.py @@ -5,7 +5,9 @@ import arrow from tortoise.transactions import atomic from mobilizon_reshare.dataclasses import MobilizonEvent -from mobilizon_reshare.dataclasses.to_split import events_without_publications +from mobilizon_reshare.dataclasses.event import ( + get_mobilizon_events_without_publications, +) from mobilizon_reshare.models.event import Event from mobilizon_reshare.models.publication import Publication from mobilizon_reshare.models.publisher import Publisher @@ -82,7 +84,7 @@ async def create_unpublished_events( await event.to_model(db_id=event_model.id).save(force_update=True) # Or it's known and unchanged, in which case we do nothing. - return await events_without_publications() + return await get_mobilizon_events_without_publications() @atomic() diff --git a/tests/commands/test_pull.py b/tests/commands/test_pull.py index 414b6ec..91c4e84 100644 --- a/tests/commands/test_pull.py +++ b/tests/commands/test_pull.py @@ -2,8 +2,10 @@ from logging import DEBUG, INFO import pytest -from mobilizon_reshare.dataclasses.event import get_all_mobilizon_events -from mobilizon_reshare.dataclasses.to_split import events_without_publications +from mobilizon_reshare.dataclasses.event import ( + get_all_mobilizon_events, + get_mobilizon_events_without_publications, +) from mobilizon_reshare.main.pull import pull from mobilizon_reshare.main.start import start from tests.commands.conftest import ( @@ -72,7 +74,7 @@ async def test_pull( assert ( f"There are now {len(expected_result)} unpublished events." in caplog.text ) - assert expected_result == await events_without_publications() + assert expected_result == await get_mobilizon_events_without_publications() @pytest.mark.asyncio @@ -111,7 +113,7 @@ async def test_pull_start( with caplog.at_level(INFO): assert await pull() == expected_pull assert expected_pull == await get_all_mobilizon_events() - assert expected_pull == await events_without_publications() + assert expected_pull == await get_mobilizon_events_without_publications() report = await start(command_config) assert report.successful @@ -125,7 +127,8 @@ async def test_pull_start( event.mobilizon_id for event in await get_all_mobilizon_events() ) assert (pull_ids - publish_ids) == set( - event.mobilizon_id for event in await events_without_publications() + event.mobilizon_id + for event in await get_mobilizon_events_without_publications() ) @@ -189,7 +192,10 @@ async def test_multiple_pull( assert await pull() assert f"There are now {len(expected_first)} unpublished events." in caplog.text assert expected_first == await get_all_mobilizon_events() - assert await events_without_publications() == await get_all_mobilizon_events() + assert ( + await get_mobilizon_events_without_publications() + == await get_all_mobilizon_events() + ) # I clean the message collector message_collector.data = [] @@ -202,4 +208,7 @@ async def test_multiple_pull( assert set(event.mobilizon_id for event in expected_last) == set( event.mobilizon_id for event in await get_all_mobilizon_events() ) - assert await events_without_publications() == await get_all_mobilizon_events() + assert ( + await get_mobilizon_events_without_publications() + == await get_all_mobilizon_events() + ) diff --git a/tests/storage/test_query.py b/tests/storage/test_query.py index ed3bfe1..617d681 100644 --- a/tests/storage/test_query.py +++ b/tests/storage/test_query.py @@ -7,9 +7,9 @@ from mobilizon_reshare.dataclasses.event import ( _EventPublicationStatus, get_published_events, get_mobilizon_events_with_status, + get_mobilizon_events_without_publications, ) from mobilizon_reshare.dataclasses.publication import build_publications_for_event -from mobilizon_reshare.dataclasses.to_split import events_without_publications from mobilizon_reshare.models.publication import PublicationStatus from mobilizon_reshare.storage.query.read import publications_with_status from tests import today @@ -148,7 +148,7 @@ async def test_event_with_status_window( ) async def test_events_without_publications(spec, expected_events, generate_models): await generate_models(spec) - unpublished_events = list(await events_without_publications()) + unpublished_events = list(await get_mobilizon_events_without_publications()) assert len(unpublished_events) == len(expected_events) assert unpublished_events == expected_events