Metadata-Version: 2.4
Name: scparser
Version: 0.1.2
Summary: Extend argparse with flexible subcommand parser inheritance
Author-email: MagIlyasDOMA <magilyas.doma.09@list.ru>
License: MIT
Project-URL: Homepage, https://github.com/MagIlyasDOMA/scparser
Project-URL: Repository, https://github.com/MagIlyasDOMA/scparser.git
Project-URL: Issues, https://github.com/MagIlyasDOMA/scparser/issues
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.9
Description-Content-Type: text/markdown

<a id="doc_en"></a>
# scparser
#### [Документация на русском](#doc_ru)

Extend `argparse` with flexible subcommand parser inheritance.

## Features
- Create subcommands that inherit from existing parsers
- Reuse parser configurations across multiple subcommands
- Clean, intuitive API extending standard `argparse`

## Installation
```bash
pip install scparser
```

## Quick Start
```python
from scparser import SubcommandsParser
import argparse

# Create base parser with common options
base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument('--verbose', '-v', action='store_true')

# Create main parser
parser = SubcommandsParser()
subparsers = parser.add_subparsers(dest='command', required=True)

# Add subcommands that inherit from base_parser
start_cmd = subparsers.add_parser('start', parser=base_parser, help='Start service')
start_cmd.add_argument('service', help='Service name')

stop_cmd = subparsers.add_parser('stop', parser=base_parser, help='Stop service')
stop_cmd.add_argument('service', help='Service name')

# Parse arguments
args = parser.parse_args(['--verbose', 'start', 'web'])
print(f"Command: {args.command}, Verbose: {args.verbose}, Service: {args.service}")
```

## API Reference
### `SubcommandsParser`
Subclass of `argparse.ArgumentParser` that enables parser inheritance for subcommands.

### `SubcommandsAction`
Custom action that handles subcommand registration with parser inheritance.

## Usage with custom parsers
```python
import argparse
from scparser import SubcommandsParser

# Use parser class instead of instance
class MyBaseParser(argparse.ArgumentParser):
    def __init__(self):
        super().__init__(add_help=False)
        self.add_argument('--config', required=True)

parser = SubcommandsParser()
subparsers = parser.add_subparsers()
subparsers.add_parser('run', parser=MyBaseParser, help='Run command')
```

## Requirements
- Python 3.9 or higher

## License
MIT

## Contributing
Issues and pull requests are welcome!

---

<a id="doc_ru"></a>
# scparser
#### [English documentation](#doc_en)

Расширение `argparse` с гибким наследованием парсеров для подкоманд.

## Возможности
- Создание подкоманд, которые наследуют существующие парсеры
- Повторное использование конфигураций парсеров для нескольких подкоманд
- Чистый, интуитивно понятный API, расширяющий стандартный `argparse`

## Установка
```bash
pip install scparser
```

## Быстрый старт
```python
from scparser import SubcommandsParser
import argparse

# Создание базового парсера с общими опциями
base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument('--verbose', '-v', action='store_true')

# Создание главного парсера
parser = SubcommandsParser()
subparsers = parser.add_subparsers(dest='command', required=True)

# Добавление подкоманд, наследующих base_parser
start_cmd = subparsers.add_parser('start', parser=base_parser, help='Запустить сервис')
start_cmd.add_argument('service', help='Название сервиса')

stop_cmd = subparsers.add_parser('stop', parser=base_parser, help='Остановить сервис')
stop_cmd.add_argument('service', help='Название сервиса')

# Разбор аргументов
args = parser.parse_args(['--verbose', 'start', 'web'])
print(f"Команда: {args.command}, Подробно: {args.verbose}, Сервис: {args.service}")
```

## Справочник по API
### `SubcommandsParser`
Подкласс `argparse.ArgumentParser`, обеспечивающий наследование парсеров для подкоманд.

### `SubcommandsAction`
Пользовательское действие, обрабатывающее регистрацию подкоманд с наследованием парсеров.

## Использование с пользовательскими парсерами
```python
import argparse
from scparser import SubcommandsParser

# Использование класса парсера вместо экземпляра
class MyBaseParser(argparse.ArgumentParser):
    def __init__(self):
        super().__init__(add_help=False)
        self.add_argument('--config', required=True)

parser = SubcommandsParser()
subparsers = parser.add_subparsers()
subparsers.add_parser('run', parser=MyBaseParser, help='Выполнить команду')
```

## Требования
- Python 3.9 или выше

## Лицензия
MIT

## Участие в разработке
Приветствуются вопросы и pull request'ы!
