from __future__ import annotations from jinja2 import Environment, FileSystemLoader import markdown import os from path import Path from typing import TYPE_CHECKING if TYPE_CHECKING: from bulk_page import Page from picture import Picture env = Environment(loader=FileSystemLoader('src/templates')) page_template = env.get_template('bulk_page.jinja') class BulkPage(): def __init__(self, path: Path, name: str, pictures: list[Picture] = None, prev: Page|None = None, next: Page|None = None): self.name: str = name self._path: Path = path self._pictures: list[Picture] = pictures or [] self._exif: Path = Path(self._path, "exif.txt") self._readme: Path = Path(self._path, "readme.md") self._raw: Path = Path(self._path, name + ".NEF") self.html: Path = Path(self._path, "page.html") self.prev: Page = prev self.next: Page = next if (not self._readme.exist()): self._readme.touch() def add_picture(self, picture: Picture) -> None: self._pictures.append(picture) def get_pictures(self) -> list[Picture]: return self._pictures def _to_html(self) -> str|None: html_rendered = page_template.render(page=self) return html_rendered def create(self) -> Path: with open(self.html.get_absolute_path(), "w") as f: f.write(self._to_html()) def render_readme(self) -> str|None: if not self._readme.exist(): return None with open(self._readme.get_absolute_path(), 'r') as f: text = f.read() if len(text) == 0: return None html = markdown.markdown(text) return html def _gen_exif(self): if self._raw.exist(): if os.system(f"exiftool {self._raw.get_absolute_path()} > {self._exif.get_absolute_path()} 2>/dev/null") == 0: return 0 os.remove(self._exif.get_absolute_path()) return 1 def get_exif(self) -> Path | None: if not self._exif.exist(): if (self._gen_exif()): return None return self._exif def render_exif(self): if not self.get_exif(): return None with open(self._exif.get_absolute_path()) as f: return f.read() def get_raw(self): return self._raw