mirror of
https://github.com/khoaliber/LetterFeed.git
synced 2026-03-02 13:18:27 +00:00
use received_at for ingesting emails and feed generation (#22)
* use received_at for ingesting emails and feed generation * fix test
This commit is contained in:
@@ -29,9 +29,16 @@ def get_entries_by_newsletter(
|
|||||||
logger.debug(
|
logger.debug(
|
||||||
f"Querying entries for newsletter_id={newsletter_id}, skip={skip}, limit={limit}"
|
f"Querying entries for newsletter_id={newsletter_id}, skip={skip}, limit={limit}"
|
||||||
)
|
)
|
||||||
query = db.query(Entry).filter(Entry.newsletter_id == newsletter_id).offset(skip)
|
query = (
|
||||||
|
db.query(Entry)
|
||||||
|
.order_by(Entry.received_at.desc())
|
||||||
|
.filter(Entry.newsletter_id == newsletter_id)
|
||||||
|
.offset(skip)
|
||||||
|
)
|
||||||
|
|
||||||
if limit is not None:
|
if limit is not None:
|
||||||
query = query.limit(limit)
|
query = query.limit(limit)
|
||||||
|
|
||||||
return query.all()
|
return query.all()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class EntryBase(BaseModel):
|
|||||||
subject: str
|
subject: str
|
||||||
body: str
|
body: str
|
||||||
message_id: str
|
message_id: str
|
||||||
|
received_at: datetime.datetime | None = None
|
||||||
|
|
||||||
|
|
||||||
class EntryCreate(EntryBase):
|
class EntryCreate(EntryBase):
|
||||||
|
|||||||
@@ -199,6 +199,8 @@ def _process_single_email(
|
|||||||
|
|
||||||
subject = str(make_header(decode_header(msg["Subject"])))
|
subject = str(make_header(decode_header(msg["Subject"])))
|
||||||
body = _get_email_body(msg)
|
body = _get_email_body(msg)
|
||||||
|
date_str = msg["Date"]
|
||||||
|
received_at = email.utils.parsedate_to_datetime(date_str) if date_str else None
|
||||||
|
|
||||||
if newsletter.extract_content:
|
if newsletter.extract_content:
|
||||||
cleaned_data = _extract_and_clean_html(body)
|
cleaned_data = _extract_and_clean_html(body)
|
||||||
@@ -206,7 +208,9 @@ def _process_single_email(
|
|||||||
# so we only override the body.
|
# so we only override the body.
|
||||||
body = cleaned_data["body"]
|
body = cleaned_data["body"]
|
||||||
|
|
||||||
entry_schema = EntryCreate(subject=subject, body=body, message_id=message_id)
|
entry_schema = EntryCreate(
|
||||||
|
subject=subject, body=body, message_id=message_id, received_at=received_at
|
||||||
|
)
|
||||||
new_entry = create_entry(db, entry_schema, newsletter.id)
|
new_entry = create_entry(db, entry_schema, newsletter.id)
|
||||||
|
|
||||||
if not new_entry:
|
if not new_entry:
|
||||||
|
|||||||
@@ -41,11 +41,14 @@ def _add_entries_to_feed(
|
|||||||
else entry.subject
|
else entry.subject
|
||||||
)
|
)
|
||||||
fe.content(entry.body, type="html")
|
fe.content(entry.body, type="html")
|
||||||
|
|
||||||
if entry.received_at.tzinfo is None:
|
if entry.received_at.tzinfo is None:
|
||||||
timezone_aware_received_at = entry.received_at.replace(tzinfo=tz.tzutc())
|
timezone_aware_received_at = entry.received_at.replace(tzinfo=tz.tzutc())
|
||||||
fe.published(timezone_aware_received_at)
|
fe.published(timezone_aware_received_at)
|
||||||
|
fe.updated(timezone_aware_received_at)
|
||||||
else:
|
else:
|
||||||
fe.published(entry.received_at)
|
fe.published(entry.received_at)
|
||||||
|
fe.updated(entry.received_at)
|
||||||
|
|
||||||
|
|
||||||
def generate_feed(db: Session, feed_identifier: str):
|
def generate_feed(db: Session, feed_identifier: str):
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ def test_get_entries_by_newsletter(db_session: Session):
|
|||||||
)
|
)
|
||||||
entries = get_entries_by_newsletter(db_session, newsletter.id)
|
entries = get_entries_by_newsletter(db_session, newsletter.id)
|
||||||
assert len(entries) == 2
|
assert len(entries) == 2
|
||||||
assert entries[0].subject == "Entry 1"
|
assert entries[0].subject == "Entry 2"
|
||||||
|
|
||||||
|
|
||||||
def test_update_newsletter(db_session: Session):
|
def test_update_newsletter(db_session: Session):
|
||||||
|
|||||||
Reference in New Issue
Block a user