mirror of
https://github.com/dtomlinson91/tembo.git
synced 2025-12-22 08:25:44 +00:00
updating typing
This commit is contained in:
@@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
from abc import ABCMeta, abstractmethod
|
||||
import pathlib
|
||||
import re
|
||||
from typing import Tuple
|
||||
|
||||
import jinja2
|
||||
import pendulum
|
||||
@@ -19,9 +20,8 @@ class PageCreator:
|
||||
filename: str,
|
||||
extension: str,
|
||||
name: str,
|
||||
user_input: tuple[str, ...] | None,
|
||||
user_input: Tuple[str, ...] | Tuple[()],
|
||||
template_filename: str | None = None,
|
||||
dry_run: bool = False
|
||||
) -> Page:
|
||||
raise NotImplementedError
|
||||
|
||||
@@ -76,7 +76,7 @@ class ScopedPageCreator(PageCreator):
|
||||
filename: str,
|
||||
extension: str,
|
||||
name: str,
|
||||
user_input: tuple[str, ...] | None,
|
||||
user_input: Tuple[str, ...] | Tuple[()],
|
||||
template_filename: str | None = None,
|
||||
) -> Page:
|
||||
self.base_path = base_path
|
||||
@@ -101,7 +101,10 @@ class ScopedPageCreator(PageCreator):
|
||||
return ScopedPage(path, template_contents)
|
||||
|
||||
def _substitute_tokens(
|
||||
self, tokenified_string: str, user_input: tuple[str, ...] | None, name: str
|
||||
self,
|
||||
tokenified_string: str,
|
||||
user_input: Tuple[str, ...] | Tuple[()],
|
||||
name: str,
|
||||
) -> str:
|
||||
# for a tokened string, substitute input, name and date tokens
|
||||
tokenified_string = self.__substitute_input_tokens(
|
||||
@@ -121,11 +124,11 @@ class ScopedPageCreator(PageCreator):
|
||||
|
||||
@staticmethod
|
||||
def __substitute_input_tokens(
|
||||
tokenified_string: str, user_input: tuple[str, ...] | None
|
||||
tokenified_string: str, user_input: Tuple[str, ...] | Tuple[()]
|
||||
) -> str:
|
||||
# find {inputN} tokens in string
|
||||
input_extraction = re.findall(r"(\{input\d*\})", tokenified_string)
|
||||
if user_input is None:
|
||||
if len(user_input) == 0:
|
||||
# if there's no user input, but the regex matches, raise error
|
||||
if len(input_extraction) > 0:
|
||||
logger.critical(
|
||||
@@ -137,7 +140,11 @@ class ScopedPageCreator(PageCreator):
|
||||
# if there aren't any tokens in the string, return the string
|
||||
return tokenified_string
|
||||
# if there is user input, check the number of tokens match the number passed in
|
||||
if len(input_extraction) > 0 and len(input_extraction) != len(user_input):
|
||||
if (
|
||||
len(input_extraction) > 0
|
||||
and len(input_extraction) != len(user_input)
|
||||
and len(user_input) > 0
|
||||
):
|
||||
# if there are input matches and they don't equal the number of input
|
||||
# tokens, raise error
|
||||
logger.critical(
|
||||
@@ -148,8 +155,11 @@ class ScopedPageCreator(PageCreator):
|
||||
raise SystemExit(1)
|
||||
# if the length of both the input matches and the number of tokens match then
|
||||
# substitute each token with the user's input
|
||||
for extracted_input, input_value in zip(input_extraction, user_input):
|
||||
tokenified_string = tokenified_string.replace(extracted_input, input_value)
|
||||
if len(user_input) > 0:
|
||||
for extracted_input, input_value in zip(input_extraction, user_input):
|
||||
tokenified_string = tokenified_string.replace(
|
||||
extracted_input, input_value
|
||||
)
|
||||
return tokenified_string
|
||||
|
||||
@staticmethod
|
||||
@@ -170,7 +180,7 @@ class ScopedPageCreator(PageCreator):
|
||||
|
||||
class Page(metaclass=ABCMeta):
|
||||
@abstractmethod
|
||||
def __init__(self, path: pathlib.Path, page_content: str, dry_run: bool) -> None:
|
||||
def __init__(self, path: pathlib.Path, page_content: str) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
@@ -189,12 +199,12 @@ class ScopedPage(Page):
|
||||
return f"ScopedPage({self.path})"
|
||||
|
||||
def save_to_disk(self, dry_run: bool = False) -> None:
|
||||
scoped_note_file = pathlib.Path(self.path)
|
||||
# create the parent directories
|
||||
scoped_note_file.parents[0].mkdir(parents=True, exist_ok=True)
|
||||
if dry_run:
|
||||
logger.info("%s will be created", self.path)
|
||||
raise SystemExit(0)
|
||||
# create the parent directories
|
||||
scoped_note_file = pathlib.Path(self.path)
|
||||
scoped_note_file.parents[0].mkdir(parents=True, exist_ok=True)
|
||||
if not scoped_note_file.exists():
|
||||
with scoped_note_file.open("w", encoding="utf-8") as scoped_page:
|
||||
scoped_page.write(self.page_content)
|
||||
@@ -264,7 +274,7 @@ if __name__ == "__main__":
|
||||
"scratchpad.md.tpl",
|
||||
)
|
||||
print(test_page_with_template)
|
||||
test_page_with_template.save_to_disk()
|
||||
test_page_with_template.save_to_disk(False)
|
||||
# print(
|
||||
# c.create_page(
|
||||
# "~/tembo",
|
||||
|
||||
Reference in New Issue
Block a user