Skip to main content

Petrovich

Склонение русских имён, фамилий и отчеств по падежам. Python 3.12 и новее. Библиотека использует общие правила Petrovich и работает без сети и без дополнительных runtime-зависимостей.

Новая реализация разрабатывается в petrovich_2. Ветка legacy/1.x сохраняет исходный код на момент начала миграции; master и существующие теги не изменены. Новая версия — 3.0.0. Прежняя версия 2.0.1 для Python 3.6+ остаётся в PyPI.

Установка

Из рабочей копии ветки petrovich_2:

python -m pip install .

После публикации стабильной версии в PyPI:

python -m pip install 'petrovich>=3,<4'

Для старого приложения на Python 2 закрепите petrovich==1.0.0, для прежней реализации на Python 3.6+ — petrovich==2.0.1. См. миграцию и процесс разработки.

Использование

from petrovich import Petrovich, Case, Gender

p = Petrovich()
print(p.lastname("Алексеев", Case.GENITIVE, Gender.MALE))  # Алексеева
print(p.firstname("Анна-Мария", Case.DATIVE, Gender.FEMALE))  # Анне-Марии
print(p.middlename("Васильевич", Case.INSTRUMENTAL))  # Васильевичем

Методы firstname, lastname, middlename принимают имя в именительном падеже, целевой Case и необязательный Gender. Поддерживаются GENITIVE, DATIVE, ACCUSATIVE, INSTRUMENTAL, PREPOSITIONAL и NOMINATIVE. Gender.MALE и Gender.FEMALE задают род явно; общие правила ANDROGYNOUS применяются к обоим родам. Без рода используется эвристика порядка правил; это не полноценное определение пола. Для неоднозначных имён задавайте род явно.

Пробелы и дефисы сохраняются, исключения применяются к каждому компоненту. Слова в верхнем регистре остаются в верхнем регистре. Неизвестные слова возвращаются без изменения, если подходящих правил нет. Пустое значение вызывает ValueError, значение не строкового типа — TypeError.

Правила и CLI

В wheel и sdist включён проверенный снимок правил; Git submodule не нужен. По умолчанию загрузка локальная. Источник и SHA-256 снимка записаны в src/petrovich/data/PROVENANCE.json, лицензия — рядом.

petrovich rules validate
petrovich rules update --output ./rules.json --ref master
petrovich rules validate ./rules.json
petrovich inflect lastname Алексеев --case genitive --gender male
petrovich inflect firstname Пётр --case dative --rules ./rules.json

Для воспроизводимого обновления укажите SHA коммита вместо master. Без --ref используется зафиксированный в библиотеке коммит. Возможны --url https://.../rules.json, --sha256 HEX и --timeout 30. --ref и --url взаимоисключающие. Размер документа ограничен 2 MiB. CLI возвращает 0 при успехе, 1 при ошибке загрузки/валидации и 2 при неверных аргументах. Эквивалентная точка входа: python -m petrovich.

Обновление проверяет документ до атомарной замены файла. Ошибка сети, JSON, контрольной суммы или записи оставляет прежний файл на месте. Пакет в site-packages автоматически не изменяется. Чтобы использовать обновление:

p = Petrovich(rules_path="./rules.json")

Созданный экземпляр хранит неизменяемый снимок правил. После обновления файла создайте новый экземпляр. Конкурентные обновления одного файла координирует приложение: действует последнее завершённое обновление.

Асинхронный ввод-вывод

import asyncio
from petrovich import Petrovich, Case
from petrovich.rules import aupdate_rules


async def main():
    await aupdate_rules("./rules.json")
    p = await Petrovich.create("./rules.json")
    print(p.firstname("Павел", Case.GENITIVE))


asyncio.run(main())

aload_rules, aupdate_rules и Petrovich.create выносят файловый и сетевой ввод-вывод в рабочий поток через asyncio.to_thread. Отмена coroutine не прерывает операцию потока: обновление может завершиться после отмены. Склонение — короткая синхронная операция без ввода-вывода. Для больших пакетов данных приложение может использовать asyncio.to_thread или пул процессов.

Разработка

python -m pip install -e '.[dev]'
python -m pytest --cov=petrovich --cov-branch
ruff check .
ruff format --check .
mypy
python -m build
python -m twine check --strict dist/*

GitHub Actions проверяет Python 3.12, 3.13 и 3.14, собирает wheel/sdist и публикует защищённые релизные теги в PyPI через Trusted Publishing. Также сохранена конфигурация GitLab CI. Настройка доступа и Git flow описаны в docs/development.md.

Лицензия кода и правил — MIT.

Metadata

Release files for Petrovich 3.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Petrovich 3.0.0
File Size Uploaded
petrovich-3.0.0.tar.gz 26.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Petrovich 3.0.0
File Interpreter ABI Platform
petrovich-3.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.9 kB

Release files / petrovich-3.0.0.tar.gz

Download URL petrovich-3.0.0.tar.gz
Size 26.4 kB
Tags Source
SHA-256 checksum
How to use checksums
53b24abaad77a0c694f3293bc6e14d65ea4ef5286619ffa0dfc5e38afbe74e50
BLAKE2b-256 checksum
How to use checksums
efa022be8078a0d268b08c2db2930dac75778c6011e590ac6639447faef702f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / petrovich-3.0.0-py3-none-any.whl

Download URL petrovich-3.0.0-py3-none-any.whl
Size 13.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
951f48fac01f91e2d8bdd0655fcb13295c0852a0b68f835698da6e3dbccbab31
BLAKE2b-256 checksum
How to use checksums
56ec72ac3af6c30ba85283b24d28ff32061c8460c228fb429c5083b70fcf63c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.0.0 This release

2 release files

2.0.1

1 release file

1.0.0

1 release file

0.1.3

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page