split failed_publications

This commit is contained in:
Simone Robutti 2022-12-09 17:46:18 +01:00
parent f8aef7309c
commit a136c3d362
5 changed files with 33 additions and 31 deletions

View File

@ -12,7 +12,7 @@ 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
from mobilizon_reshare.storage.query.read import get_all_events, get_event
@dataclass
@ -96,6 +96,10 @@ class _MobilizonEvent:
kwargs.update({"id": db_id})
return Event(**kwargs)
@classmethod
async def retrieve(cls, mobilizon_id):
return cls.from_model(await get_event(mobilizon_id))
async def get_all_mobilizon_events(
from_date: Optional[Arrow] = None, to_date: Optional[Arrow] = None,

View File

@ -1,4 +1,5 @@
from dataclasses import dataclass
from functools import partial
from typing import List, Iterator
from uuid import UUID
@ -10,6 +11,7 @@ from mobilizon_reshare.publishers.abstract import (
AbstractPlatform,
AbstractEventFormatter,
)
from mobilizon_reshare.storage.query.read import get_event
@dataclass
@ -47,3 +49,13 @@ async def build_publications_for_event(
) -> list[_EventPublication]:
publication_models = await event.to_model().build_publications(publishers)
return [_EventPublication.from_orm(m, event) for m in publication_models]
async def get_failed_publications_for_event(
event: _MobilizonEvent,
) -> List[_EventPublication]:
event_model = await get_event(event.mobilizon_id)
failed_publications = await event_model.get_failed_publications()
return list(
map(partial(_EventPublication.from_orm, event=event), failed_publications)
)

View File

@ -1,4 +1,3 @@
from functools import partial
from typing import Optional
from uuid import UUID
@ -8,7 +7,7 @@ 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, PublicationStatus
from mobilizon_reshare.models.publication import Publication
from mobilizon_reshare.models.publisher import Publisher
from mobilizon_reshare.storage.query.exceptions import EventNotFound
from mobilizon_reshare.storage.query.read import (
@ -52,25 +51,3 @@ async def is_known(event: MobilizonEvent) -> bool:
return True
except EventNotFound:
return False
@atomic()
async def get_failed_publications_for_event(
event_mobilizon_id: UUID,
) -> list[EventPublication]:
event = await get_event(event_mobilizon_id)
failed_publications = list(
filter(
lambda publications: publications.status == PublicationStatus.FAILED,
event.publications,
)
)
for p in failed_publications:
await p.fetch_related("publisher")
mobilizon_event = MobilizonEvent.from_model(event)
return list(
map(
partial(EventPublication.from_orm, event=mobilizon_event),
failed_publications,
)
)

View File

@ -2,10 +2,9 @@ import logging
from typing import Optional
from uuid import UUID
from mobilizon_reshare.dataclasses.to_split import (
get_publication,
get_failed_publications_for_event,
)
from mobilizon_reshare.dataclasses import MobilizonEvent
from mobilizon_reshare.dataclasses.publication import get_failed_publications_for_event
from mobilizon_reshare.dataclasses.to_split import get_publication
from mobilizon_reshare.main.publish import publish_publications
from mobilizon_reshare.publishers.coordinators.event_publishing.publish import (
PublisherCoordinatorReport,
@ -16,8 +15,8 @@ logger = logging.getLogger(__name__)
async def retry_event_publications(event_id) -> Optional[PublisherCoordinatorReport]:
failed_publications = await get_failed_publications_for_event(event_id)
event = await MobilizonEvent.retrieve(event_id)
failed_publications = await get_failed_publications_for_event(event)
if not failed_publications:
logger.info("No failed publications found.")
return

View File

@ -2,6 +2,7 @@ from typing import Iterator
from tortoise import fields
from tortoise.models import Model
from tortoise.transactions import atomic
from mobilizon_reshare.models import WithPydantic
from mobilizon_reshare.models.publication import PublicationStatus, Publication
@ -49,3 +50,12 @@ class Event(Model, WithPydantic):
return [
await self.build_publication_by_publisher_name(name) for name in publishers
]
@atomic()
async def get_failed_publications(self,) -> list[Publication]:
return list(
filter(
lambda publications: publications.status == PublicationStatus.FAILED,
self.publications,
)
)