Skip to main content

Утилита для управления метаданными в 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): Изменения содержимого без изменения структуры заголовков

Автоматическое определение автора

Скрипт определяет автора в следующем порядке приоритета:

  1. Git информация:

    • Автор последнего коммита для конкретного файла
    • Настройки Git репозитория (user.name и user.email)
  2. Переменные окружения:

    • AUTHOR_NAME
    • GIT_AUTHOR_NAME
    • USER
    • USERNAME
  3. Системная информация:

    • Владелец файла в файловой системе
    • Текущий пользователь системы

Формат метаданных

Метаданные добавляются в конец 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

metadata_py-2.0.0.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metadata_py-2.0.0-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

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

Hashes for metadata_py-2.0.0.tar.gz
Algorithm Hash digest
SHA256 1a3ac3fb29640f2225d5cfe660d21161aa062aaf4f01527f6e861f90accd1e65
MD5 76b9861d5500540ab6772af4f3ad90a4
BLAKE2b-256 d2da156a49500059c3529daa41802cdb943e70d989b03d5af74c9e22200f782b

See more details on using hashes here.

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

Hashes for metadata_py-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c6c8720277a76ec532163502a823cbd86632fd847cc4e0e69433a41efbd75fdd
MD5 b905eac5d8e405d5b8389f7e90da750f
BLAKE2b-256 6035200b4065eb2536f2a3dd5545985bb7a8f57611c80db5d7e52ead99270f66

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page