mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 19:01:39 -04:00
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
import datetime
|
|
import json
|
|
import pathlib
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
|
|
from modules.archive.lib import archive_strftime
|
|
from modules.archive.models import Archive, Domain
|
|
from wrolpi.dates import local_timezone
|
|
|
|
|
|
@pytest.fixture
|
|
def archive_directory(test_directory) -> pathlib.Path:
|
|
path = test_directory / 'archive'
|
|
path.mkdir()
|
|
return path
|
|
|
|
|
|
@pytest.fixture
|
|
def archive_factory(test_session, archive_directory):
|
|
def time_generator():
|
|
timestamp = datetime.datetime(2000, 1, 1, 0, 0, 0)
|
|
while True:
|
|
timestamp += datetime.timedelta(seconds=1)
|
|
yield timestamp
|
|
|
|
now = time_generator()
|
|
|
|
def _(domain: str = None, url: str = None, title: str = 'NA', contents: str = None) -> Archive:
|
|
if domain:
|
|
assert '/' not in domain
|
|
|
|
title = title or str(uuid4())
|
|
url = url or f'https://example.com/{title}'
|
|
domain_dir = domain or title
|
|
domain_dir = archive_directory / domain_dir
|
|
domain_dir.mkdir(exist_ok=True)
|
|
|
|
archive_datetime = local_timezone(next(now))
|
|
timestamp = archive_strftime(archive_datetime)
|
|
|
|
singlefile_path = domain_dir / f'{timestamp}_{title}.html'
|
|
screenshot_path = domain_dir / f'{timestamp}_{title}.png'
|
|
readability_path = domain_dir / f'{timestamp}_{title}.readability.html'
|
|
readability_txt_path = domain_dir / f'{timestamp}_{title}.readability.txt'
|
|
readability_json_path = domain_dir / f'{timestamp}_{title}.readability.json'
|
|
|
|
with readability_json_path.open('wt') as fh:
|
|
json.dump({'url': url}, fh)
|
|
|
|
if domain:
|
|
domain = test_session.query(Domain).filter_by(domain=domain).one_or_none()
|
|
|
|
if not domain:
|
|
domain = Domain(
|
|
domain=domain_dir.name,
|
|
directory=domain_dir,
|
|
)
|
|
test_session.add(domain)
|
|
test_session.flush([domain])
|
|
|
|
archive = Archive(
|
|
readability_json_path=readability_json_path,
|
|
readability_path=readability_path,
|
|
readability_txt_path=readability_txt_path,
|
|
screenshot_path=screenshot_path,
|
|
singlefile_path=singlefile_path,
|
|
title=title,
|
|
url=url,
|
|
domain_id=domain.id,
|
|
contents=contents,
|
|
archive_datetime=archive_datetime,
|
|
)
|
|
test_session.add(archive)
|
|
|
|
test_session.commit()
|
|
|
|
for path in archive.my_paths():
|
|
path.touch()
|
|
|
|
return archive
|
|
|
|
return _
|