banizelia / taxi-trip-service

REST API для управления данными поездок на такси, включая возможность фильтрации поездок, экспорта данных в Excel и работы с избранными поездками.
0 stars 1 forks source link

Встреча 2024-11-16 #3

Open eshcherbakov opened 3 hours ago

eshcherbakov commented 3 hours ago

Чеклист

eshcherbakov commented 2 hours ago
#!/usr/bin/env python3

import os
from pathlib import Path
from datetime import datetime

def create_prompt_dir(prompt_dir: Path):
    """Создаёт директорию для промптов, если она не существует."""
    prompt_dir.mkdir(parents=True, exist_ok=True)
    print(f"Директория '{prompt_dir}' создана или уже существует.")

def update_gitignore(gitignore_path: Path, prompt_dir: Path):
    """Добавляет директорию промптов в .gitignore, если её там нет."""
    prompt_entry = f"{prompt_dir}/"

    if not gitignore_path.exists():
        # Создаём .gitignore и добавляем директорию промптов
        gitignore_path.write_text(f"{prompt_entry}\n", encoding='utf-8')
        print(f"Создан .gitignore с записью '{prompt_entry}'.")
    else:
        # Читаем существующий .gitignore
        with gitignore_path.open('r', encoding='utf-8') as f:
            lines = f.read().splitlines()

        if prompt_entry not in lines:
            # Добавляем директорию промптов в .gitignore
            with gitignore_path.open('a', encoding='utf-8') as f:
                f.write(f"{prompt_entry}\n")
            print(f"Добавлена запись '{prompt_entry}' в .gitignore.")
        else:
            print(f"Запись '{prompt_entry}' уже существует в .gitignore.")

def generate_log_filename(prompt_dir: Path) -> Path:
    """Генерирует имя выходного файла с текущей датой и временем."""
    now = datetime.now()
    filename = f"prompt-{now.strftime('%Y%m%d')}-{now.strftime('%H%M%S')}.log"
    return prompt_dir / filename

def should_exclude(file_path: Path, prompt_dir: Path, output_file: Path) -> bool:
    """Проверяет, следует ли исключить файл из обработки."""
    excluded_files = {"setup.py", ".gitignore"}
    if file_path.name in excluded_files:
        return True
    if prompt_dir in file_path.parents:
        return True
    if file_path.resolve() == output_file.resolve():
        return True
    return False

def concatenate_files(output_file: Path, current_dir: Path, prompt_dir: Path):
    """Обходит все файлы и объединяет их содержимое в выходной файл."""
    with output_file.open('w', encoding='utf-8') as outfile:
        for file_path in current_dir.rglob('*'):
            if file_path.is_file() and not should_exclude(file_path, prompt_dir, output_file):
                print(f"Обработка: {file_path}")
                outfile.write(f"=== Содержимое {file_path} ===\n")
                try:
                    outfile.write(file_path.read_text(encoding='utf-8'))
                except Exception as e:
                    print(f"Ошибка при чтении {file_path}: {e}")
                outfile.write("\n\n")
    print(f"Файлы объединены в '{output_file}'.")

def main():
    # Определяем пути
    current_dir = Path('.').resolve()
    prompt_dir = current_dir / ".prompt"
    gitignore_path = current_dir / ".gitignore"

    # Шаг 1: Создаём директорию для промптов
    create_prompt_dir(prompt_dir)

    # Шаг 2: Обновляем .gitignore
    update_gitignore(gitignore_path, prompt_dir)

    # Шаг 3: Генерируем имя выходного файла
    output_file = generate_log_filename(prompt_dir)
    print(f"Имя выходного файла: '{output_file}'.")

    # Шаг 4: Объединяем файлы
    concatenate_files(output_file, current_dir, prompt_dir)

if __name__ == "__main__":
    main()