Утилита для управления метаданными в markdown-файлах с автоматическим контролем версий и определением автора
Project description
metadata-py
metadata-py — это CLI-утилита для автоматического управления блоками метаданных в markdown-файлах. Она позволяет добавлять, обновлять и удалять метаданные, автоматически определять автора, вести контроль версий по семантическим правилам и массово обрабатывать файлы с учётом игнорирования по паттернам.
Основные возможности
- Автоматическое управление метаданными: Добавление, обновление и удаление блоков метаданных в markdown-файлах
- Семантическое версионирование: Автоматическое увеличение версий на основе типа изменений (major/minor/patch)
- Автоматическое определение автора: Умное определение автора из Git, переменных окружения или системной информации
- Массовая обработка: Обработка всех markdown-файлов в директории с поддержкой паттернов игнорирования
- Отчёты: Генерация подробных отчётов о состоянии метаданных в проекте
- Dry-run режим: Предварительный просмотр изменений без их применения
Установка.
pip install metadata-py
Быстрый старт
# Обработка всех markdown-файлов в текущей директории
metadata-py update
# Обработка конкретного файла
metadata-py update README.md
# Предварительный просмотр изменений
metadata-py update --dry-run
# Генерация отчёта
metadata-py report
Команды
update
Обновление метаданных в markdown-файлах.
# Базовое использование
metadata-py update [файлы...]
# Опции
--verbose, -v # Подробный вывод
--set KEY=VALUE # Установка значений метаданных
--remove, -r # Удаление метаданных
--overwrite, -o # Полная перезапись метаданных
--dry-run, -n # Предварительный просмотр
--ignore PATTERN # Игнорирование по паттерну
--ignore-file FILE # Файл с паттернами игнорирования
--exclude-root # Исключить файлы из корня
--no-auto-author # Отключить автоопределение автора
--yes, -y # Пропустить подтверждения
Примеры:
# Обновить все файлы с автоопределением автора
metadata-py update
# Установить конкретного автора и версию
metadata-py update --set author="John Doe" --set version="2.0.0"
# Удалить метаданные из файла
metadata-py update --remove README.md
# Игнорировать определённые файлы
metadata-py update --ignore "drafts/*" --ignore "*.draft.md"
report
Генерация отчёта о состоянии метаданных в проекте.
metadata-py report
Пример вывода:
# Markdown Files Metadata Report
Generated on: 2025-08-04 07:45:17
Project directory: /path/to/project
## Summary
- Total markdown files: 7
- Files with metadata: 7
- Files without metadata: 0
- Coverage: 100.0%
## Authors
Total authors: 3
- John Doe: 4 files
- Jane Smith: 2 files
- Bot User: 1 files
## Version Distribution
- v1.0.0: 5 files
- v2.0.0: 2 files
init-mdignore
Создание файла .mdignore с настройками по умолчанию.
metadata-py init-mdignore [--force]
Семантическое версионирование
Система автоматически определяет тип изменений и увеличивает версию:
- Major версия (X.0.0): Изменения заголовков первого уровня (
# Заголовок) - Minor версия (0.X.0): Изменения подзаголовков (
## Подзаголовок,### Подзаголовок) - Patch версия (0.0.X): Изменения содержимого без изменения структуры заголовков
Автоматическое определение автора
Скрипт определяет автора в следующем порядке приоритета:
-
Git информация:
- Автор последнего коммита для конкретного файла
- Настройки Git репозитория (
user.nameиuser.email)
-
Переменные окружения:
AUTHOR_NAMEGIT_AUTHOR_NAMEUSERUSERNAME
-
Системная информация:
- Владелец файла в файловой системе
- Текущий пользователь системы
Формат метаданных
Метаданные добавляются в конец markdown-файла в виде HTML-комментария:
<!-- METADATA
{
"created_at": "2025-08-04 04:09:00",
"updated_at": "2025-08-04 07:21:12",
"author": "John Doe <john@example.com>",
"version": "1.1.0",
"_fingerprint": "{\"content_hash\": \"...\", \"headers_hash\": \"...\"}"
}
-->
Поля метаданных
- created_at: Дата и время создания метаданных
- updated_at: Дата и время последнего обновления
- author: Автор файла
- version: Версия документа (семантическое версионирование)
- _fingerprint: Цифровой отпечаток для отслеживания изменений
Игнорирование файлов
Создайте файл .mdignore для исключения файлов из обработки:
# Комментарии начинаются с #
*.draft.md
drafts/
temp/
node_modules/
Поддерживаются glob-паттерны:
*— любые символы?— один символ**— рекурсивный поиск в поддиректориях
Интеграция в процессы
CI/CD
# .github/workflows/docs.yml
name: Update Documentation Metadata
on:
push:
paths:
- '**/*.md'
jobs:
update-metadata:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install metadata-py
run: pip install metadata-py
- name: Update metadata
run: metadata-py update --yes
- name: Commit changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add -A
git diff --staged --quiet || git commit -m "Update documentation metadata"
git push
Pre-commit Hook
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: metadata-py
name: Update markdown metadata
entry: metadata-py update --yes
language: system
files: \.md$
Публикация в PYPI
https://pypi.org/project/metadata-py/
git add .
git commit -m "Bump version to 1.1.0 and update workflow"
git tag -a v1.1.0 -m "Version 1.1.0"
git push origin v1.1.0
Требования
- Python 3.6+
- Стандартные библиотеки Python
Лицензия
MIT License
Поддержка
Для сообщения об ошибках и предложений используйте GitHub Issues.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file metadata_py-2.0.0.tar.gz.
File metadata
- Download URL: metadata_py-2.0.0.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a3ac3fb29640f2225d5cfe660d21161aa062aaf4f01527f6e861f90accd1e65
|
|
| MD5 |
76b9861d5500540ab6772af4f3ad90a4
|
|
| BLAKE2b-256 |
d2da156a49500059c3529daa41802cdb943e70d989b03d5af74c9e22200f782b
|
File details
Details for the file metadata_py-2.0.0-py3-none-any.whl.
File metadata
- Download URL: metadata_py-2.0.0-py3-none-any.whl
- Upload date:
- Size: 20.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6c8720277a76ec532163502a823cbd86632fd847cc4e0e69433a41efbd75fdd
|
|
| MD5 |
b905eac5d8e405d5b8389f7e90da750f
|
|
| BLAKE2b-256 |
6035200b4065eb2536f2a3dd5545985bb7a8f57611c80db5d7e52ead99270f66
|