95 lines
3.2 KiB
Python
95 lines
3.2 KiB
Python
import os
|
|
import re
|
|
from typing import Callable
|
|
|
|
from herotools.logger import logger
|
|
from herotools.md5 import file_md5
|
|
from herotools.texttools import name_fix
|
|
|
|
|
|
def _example_set_file(site_name: str, path: str, md5: str) -> None:
|
|
# Placeholder for actual implementation
|
|
logger.debug(f"set_file : site_name={site_name[:20]:<20} {path}")
|
|
|
|
|
|
def _example_set_img(site_name: str, path: str, md5: str) -> None:
|
|
# Placeholder for actual implementation
|
|
logger.debug(f"set_img : site_name={site_name[:20]:<20} {path}")
|
|
|
|
|
|
def _example_set_markdown(
|
|
site_name: str, path: str, md5: str, content: str
|
|
) -> None:
|
|
# Placeholder for actual implementation
|
|
logger.debug(f"set_markdown : site_name={site_name[:20]:<20} {path}")
|
|
|
|
|
|
def _example_set_site(site_name: str, path: str) -> None:
|
|
# Placeholder for actual implementation
|
|
logger.info(f"set_site : site_name={site_name[:20]:<20} {path}")
|
|
|
|
|
|
def _site_process_action(
|
|
site_name: str,
|
|
site_path: str,
|
|
set_file: Callable[[str, str, str], None],
|
|
set_img: Callable[[str, str, str], None],
|
|
set_markdown: Callable[[str, str, str, str], None],
|
|
) -> None:
|
|
logger.debug(f"site process: {site_path[:60]:<60} -> {site_name}")
|
|
for root, _, files in os.walk(site_path):
|
|
for file in files:
|
|
file_path = os.path.join(root, file)
|
|
file_path_rel = os.path.relpath(file_path, site_path)
|
|
file_name = os.path.basename(file)
|
|
# print(file_name)
|
|
mymd5 = file_md5(file_path)
|
|
if file.lower().endswith(".md"):
|
|
with open(file_path, "r", encoding="utf-8") as f:
|
|
content = f.read()
|
|
set_markdown(site_name, file_path_rel, mymd5, content)
|
|
elif file_name in [".collection", ".site", ".done"]:
|
|
continue
|
|
elif re.search(
|
|
r"\.(jpg|jpeg|png|gif|bmp|tiff|webp)$", file, re.IGNORECASE
|
|
):
|
|
set_img(site_name, file_path_rel, mymd5)
|
|
else:
|
|
set_file(site_name, file_path_rel, mymd5)
|
|
|
|
|
|
def process(
|
|
path: str,
|
|
set_site: Callable[[str, str], None],
|
|
set_file: Callable[[str, str, str], None],
|
|
set_img: Callable[[str, str, str], None],
|
|
set_markdown: Callable[[str, str, str, str], None],
|
|
) -> None:
|
|
"""
|
|
walk over directory and apply set_file(), set_img() and set_markdown()
|
|
"""
|
|
path = os.path.abspath(os.path.expanduser(path))
|
|
logger.info(f"sites process: {path}")
|
|
for root, dirs, files in os.walk(path):
|
|
if ".site" in files or ".collection" in files:
|
|
site_name = name_fix(os.path.basename(root))
|
|
set_site(site_name, root)
|
|
_site_process_action(
|
|
site_name, root, set_file, set_img, set_markdown
|
|
)
|
|
# Prevent the os.walk from going deeper into subdirectories
|
|
dirs[:] = []
|
|
|
|
|
|
if __name__ == "__main__":
|
|
mypath = "~/code/git.threefold.info/projectmycelium/info_projectmycelium/collections"
|
|
|
|
# logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
process(
|
|
mypath,
|
|
_example_set_site,
|
|
_example_set_file,
|
|
_example_set_img,
|
|
_example_set_markdown,
|
|
)
|