From 9e2ee759273d7aea415f8c59951fd17a8955bcf7 Mon Sep 17 00:00:00 2001 From: Lars Noack Date: Thu, 10 Apr 2025 13:56:28 +0200 Subject: [PATCH] feat: added copying static --- .gitignore | 4 ++- .vscode/settings.json | 5 +++ src/static/assets/foo.bar | 1 + src/static/style.css | 66 +++++++++++++++++++++++++++++++++++++++ stsg/__main__.py | 17 +++++----- stsg/build.py | 41 ++++++++++++++++++++++++ stsg/config.py | 6 +++- 7 files changed, 131 insertions(+), 9 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/static/assets/foo.bar create mode 100644 src/static/style.css create mode 100644 stsg/build.py diff --git a/.gitignore b/.gitignore index 1800114..961b463 100644 --- a/.gitignore +++ b/.gitignore @@ -171,4 +171,6 @@ cython_debug/ .ruff_cache/ # PyPI configuration file -.pypirc \ No newline at end of file +.pypirc + +dist \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..819f874 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "stsg" + ] +} \ No newline at end of file diff --git a/src/static/assets/foo.bar b/src/static/assets/foo.bar new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/src/static/assets/foo.bar @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/src/static/style.css b/src/static/style.css new file mode 100644 index 0000000..5d8f994 --- /dev/null +++ b/src/static/style.css @@ -0,0 +1,66 @@ +/* styles.css */ + +/* Reset some default styles */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* Body styles */ +body { + font-family: Arial, sans-serif; + line-height: 1.6; + background-color: #f5f5f5; + color: #333; + padding: 20px; +} + +/* Header styles */ +header { + background-color: #4a90e2; + color: white; + padding: 20px 0; + text-align: center; + border-radius: 8px; +} + +/* Navigation */ +nav ul { + list-style: none; + display: flex; + justify-content: center; + padding: 10px 0; +} + +nav ul li { + margin: 0 15px; +} + +nav ul li a { + text-decoration: none; + color: white; + font-weight: bold; +} + +/* Main content */ +main { + margin: 20px 0; +} + +/* Section styling */ +section { + margin-bottom: 20px; + padding: 20px; + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); +} + +/* Footer styles */ +footer { + text-align: center; + margin-top: 40px; + padding: 10px; + color: #777; +} diff --git a/stsg/__main__.py b/stsg/__main__.py index 322cc62..e3b90e9 100644 --- a/stsg/__main__.py +++ b/stsg/__main__.py @@ -6,13 +6,14 @@ import os import subprocess from .config import SOURCE_DIRECTORY, CODE_DIRECTORY +from .build import build as complete_build - +logging.basicConfig(level=logging.INFO) logger = logging.getLogger("stsg") def build(): - print("building changed") + complete_build() class MarkdownChangeHandler(FileSystemEventHandler): @@ -26,10 +27,12 @@ class MarkdownChangeHandler(FileSystemEventHandler): logger.info("%s changed, building", event.src_path) build() - + class PythonChangeHandler(FileSystemEventHandler): def __init__(self, command): + self.logger = logging.getLogger("stsg.hot_reload") + self.env = os.environ.copy() self.env["IS_CHILD"] = "true" @@ -37,11 +40,11 @@ class PythonChangeHandler(FileSystemEventHandler): self.process = self.start_process() def start_process(self): - print("[hot reload] Starting process...") + self.logger.info("Starting process...") return subprocess.Popen(self.command, env=self.env) def restart_process(self): - print("[hot reload] Restarting process...") + self.logger.info("Restarting process...") self.process.kill() self.process = self.start_process() @@ -54,7 +57,7 @@ class PythonChangeHandler(FileSystemEventHandler): return if event.src_path.endswith(".py"): - print(f"[hot reload] Detected change: {event.src_path}") + self.logger.info(f"Detected change: {event.src_path}") self.restart_process() def stop_process(self): @@ -84,7 +87,7 @@ def hot_reload(): return observer = Observer() - observer.schedule(PythonChangeHandler(["stsg_build_on_change"]), path=CODE_DIRECTORY, recursive=True) + observer.schedule(PythonChangeHandler(["stsg_dev"]), path=CODE_DIRECTORY, recursive=True) observer.start() try: diff --git a/stsg/build.py b/stsg/build.py new file mode 100644 index 0000000..97858a0 --- /dev/null +++ b/stsg/build.py @@ -0,0 +1,41 @@ +import logging +import shutil +from pathlib import Path +import os + +from .config import SOURCE_DIRECTORY, DIST_DIRECTORY, STATIC_DIRECTORY + + +logger = logging.getLogger("stsg.build") + + +def copy_static(): + src = str(Path(SOURCE_DIRECTORY, STATIC_DIRECTORY)) + dst = str(Path(DIST_DIRECTORY, STATIC_DIRECTORY)) + + if not os.path.exists(src): + logger.warn("The static folder '%s' wasn't defined.", src) + return + + logger.info("copying static files from '%s' to '%r'", src, dst) + + os.makedirs(dst, exist_ok=True) + + for root, dirs, files in os.walk(src): + # Compute relative path from the source root + rel_path = os.path.relpath(root, src) + dest_dir = os.path.join(dst, rel_path) + + os.makedirs(dest_dir, exist_ok=True) + + for file in files: + src_file = os.path.join(root, file) + dest_file = os.path.join(dest_dir, file) + shutil.copy2(src_file, dest_file) + + print(src, dst) + + +def build(): + logger.info("building static page") + copy_static() diff --git a/stsg/config.py b/stsg/config.py index 1fcc883..9c70174 100644 --- a/stsg/config.py +++ b/stsg/config.py @@ -1,5 +1,9 @@ SOURCE_DIRECTORY = "src" +DIST_DIRECTORY = "dist" -# for development +# relative to SOURCE_DIRECTORY / DIST_DIRECTORY +STATIC_DIRECTORY = "static" + +# FOR DEVELOPMENT CODE_DIRECTORY = "stsg"