Seo - korekta plus nowe obrazki og
This commit is contained in:
95
astro.py
Normal file
95
astro.py
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
|
||||
def iter_astro_files(root: Path) -> list[Path]:
|
||||
"""Zwraca listę plików .astro w root (rekursywnie), posortowaną stabilnie."""
|
||||
files = [p for p in root.rglob("*.astro") if p.is_file()]
|
||||
# sortowanie po ścieżce względnej dla powtarzalności
|
||||
files.sort(key=lambda p: str(p.as_posix()).lower())
|
||||
return files
|
||||
|
||||
|
||||
def read_text_fallback(p: Path) -> str:
|
||||
"""
|
||||
Czyta plik jako tekst:
|
||||
- najpierw UTF-8
|
||||
- jeśli się nie da, to z BOM/latin-1 jako awaryjne (bez crasha)
|
||||
"""
|
||||
try:
|
||||
return p.read_text(encoding="utf-8")
|
||||
except UnicodeDecodeError:
|
||||
# Spróbuj UTF-8 z BOM
|
||||
try:
|
||||
return p.read_text(encoding="utf-8-sig")
|
||||
except UnicodeDecodeError:
|
||||
# Ostatecznie: latin-1 (nie idealne, ale nie przerwie działania)
|
||||
return p.read_text(encoding="latin-1")
|
||||
|
||||
|
||||
def build_output(pages_dir: Path, files: list[Path]) -> str:
|
||||
rel_root = pages_dir.parent.parent # zwykle ./src -> parent parent? NIEPEWNE, więc liczymy inaczej
|
||||
# lepiej: relatywnie do katalogu projektu (cwd)
|
||||
cwd = Path.cwd()
|
||||
|
||||
lines: list[str] = []
|
||||
lines.append(f"ASTRO DUMP (root: {pages_dir.resolve()})")
|
||||
lines.append(f"Found files: {len(files)}")
|
||||
lines.append("=" * 80)
|
||||
lines.append("")
|
||||
|
||||
for f in files:
|
||||
rel = f.relative_to(cwd) if f.is_relative_to(cwd) else f
|
||||
content = read_text_fallback(f)
|
||||
|
||||
lines.append(f"FILE: {rel.as_posix()}")
|
||||
lines.append("-" * 80)
|
||||
lines.append(content.rstrip("\n"))
|
||||
lines.append("")
|
||||
lines.append("=" * 80)
|
||||
lines.append("")
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Zrzuca wszystkie pliki .astro z ./src/pages do jednego pliku txt (ścieżka + zawartość)."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--pages",
|
||||
default="src/pages",
|
||||
help="Ścieżka do katalogu pages (domyślnie: src/pages)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--out",
|
||||
default="astro-pages-dump.txt",
|
||||
help="Plik wyjściowy (domyślnie: astro-pages-dump.txt)",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
pages_dir = Path(args.pages).resolve()
|
||||
out_file = Path(args.out).resolve()
|
||||
|
||||
if not pages_dir.exists() or not pages_dir.is_dir():
|
||||
print(f"[ERR] Nie znaleziono katalogu: {pages_dir}", file=sys.stderr)
|
||||
return 2
|
||||
|
||||
files = iter_astro_files(pages_dir)
|
||||
|
||||
dump = build_output(pages_dir, files)
|
||||
|
||||
out_file.write_text(dump, encoding="utf-8")
|
||||
print(f"[OK] Zapisano: {out_file} (files: {len(files)})")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user