1
0

Tests of markdown functionality

This commit is contained in:
Jon Michael Aanes 2024-11-03 23:49:35 +01:00
parent 0050570cfb
commit 352caa0fdd
Signed by: Jmaa
SSH Key Fingerprint: SHA256:Ab0GfHGCblESJx7JRE4fj4bFy/KRpeLhi41y4pF3sNA
5 changed files with 80 additions and 43 deletions

View File

@ -43,7 +43,6 @@ purposes, but it shouldn't be too difficult to adjust the formatting code.
import dataclasses import dataclasses
import datetime import datetime
import logging import logging
import re
from collections.abc import Iterable, Iterator from collections.abc import Iterable, Iterator
from ._version import __version__ from ._version import __version__
@ -68,47 +67,6 @@ def datetime_sent(
return naive return naive
def format_message_as_citation(out: list[str], msg: Message) -> None:
out.append(f'{msg.sent_at.date()} {msg.sent_at.time()} [[{msg.sender}]]:')
out.append('\n')
for line in msg.text.split('\n'):
line = re.sub(r'(<[\w ]+>)', r'`\1`', line)
line = re.sub(r'(\$\$\$)', r'`\1`', line)
out.append(f'> {line}\n')
del line
out.append('\n')
def format_message_as_table(out: list[str], msg: Message) -> None:
out.append(f'| {msg.sent_at} | [[{msg.sender}]] | ')
for line in msg.text.split('\n'):
out.append(f'{line}')
del line
out.append('|\n')
def format_messages(messages: list[Message], title: str) -> str:
out = ['# ', title, '\n\n']
as_table = False
for msg_idx, msg in enumerate(messages):
if msg_idx == 0 or messages[msg_idx - 1].sent_at.date() != msg.sent_at.date():
out.append('---\n')
out.append(f'## [[{msg.sent_at.date()}]]\n\n')
if as_table:
out.append('| sent at | sender | text |\n')
out.append('| ------- | ------ | ---- |\n')
if as_table:
format_message_as_table(out, msg)
else:
format_message_as_citation(out, msg)
del msg
return ''.join(out)
MSG_ADJACENTCY_DIST = datetime.timedelta(minutes=2) MSG_ADJACENTCY_DIST = datetime.timedelta(minutes=2)

View File

@ -6,12 +6,12 @@ from pathlib import Path
from . import ( from . import (
filter_useless_messages, filter_useless_messages,
format_messages,
libpurple, libpurple,
merge_adjacent_messages, merge_adjacent_messages,
synctech_sms, synctech_sms,
) )
from .data import MYSELF, Message from .data import MYSELF, Message
from .markdown import format_messages
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,6 +1,8 @@
import dataclasses import dataclasses
import datetime import datetime
__all__ = ['MYSELF', 'Message']
MYSELF = 'MYSELF' MYSELF = 'MYSELF'

View File

@ -0,0 +1,48 @@
import re
from .data import Message
def normalize_line(line: str) -> str:
line = re.sub(r'(<[\w ]+>)', r'`\1`', line)
line = re.sub(r'(\$\$\$)', r'`\1`', line)
return line.strip()
def format_message_as_citation(out: list[str], msg: Message) -> None:
out.append(f'{msg.sent_at.date()} {msg.sent_at.time()} [[{msg.sender}]]:')
out.append('\n')
for line in msg.text.strip().split('\n'):
out.append(f'> {normalize_line(line)}\n')
del line
out.append('\n')
def format_message_as_table(out: list[str], msg: Message) -> None:
out.append(f'| {msg.sent_at} | [[{msg.sender}]] | ')
for line in msg.text.split('\n'):
out.append(f'{line}')
del line
out.append('|\n')
def format_messages(messages: list[Message], title: str) -> str:
out = ['# ', title, '\n\n']
as_table = False
for msg_idx, msg in enumerate(messages):
if msg_idx == 0 or messages[msg_idx - 1].sent_at.date() != msg.sent_at.date():
out.append('---\n')
out.append(f'## [[{msg.sent_at.date()}]]\n\n')
if as_table:
out.append('| sent at | sender | text |\n')
out.append('| ------- | ------ | ---- |\n')
if as_table:
format_message_as_table(out, msg)
else:
format_message_as_citation(out, msg)
del msg
return ''.join(out)

View File

@ -0,0 +1,29 @@
import datetime
from libpurple_to_markdown.markdown import format_messages
from libpurple_to_markdown.data import Message
NOW = datetime.datetime.fromtimestamp(1_000_000_000, tz=datetime.UTC)
TEXT_1 = 'Hello \nWorld \n '
EXPECTED_1='''# Test
---
## [[2001-09-09]]
2001-09-09 01:46:40 [[Test Sender]]:
> Hello
> World
2001-09-09 01:46:40 [[Test Sender]]:
> Hello
> World
'''
def test_whitespace_at_end_of_line():
msg = Message(NOW, 'Test Sender', TEXT_1, 'Test Chat')
result = format_messages([msg, msg], title='Test')
assert result == EXPECTED_1