# interrogatio
![Python versions](https://img.shields.io/pypi/pyversions/interrogatio.svg) [![PyPi Status](https://img.shields.io/pypi/v/interrogatio.svg)](https://pypi.org/project/interrogatio/) ![Read the Docs](https://img.shields.io/readthedocs/interrogatio) [![Build Status](https://img.shields.io/github/workflow/status/ffaraone/interrogatio/Build%20interrogatio)](https://github.com/ffaraone/interrogatio/actions) [![codecov](https://codecov.io/gh/ffaraone/interrogatio/branch/master/graph/badge.svg)](https://codecov.io/gh/ffaraone/interrogatio)
A python library to prompt users for inputs in a terminal application.
## What is interrogatio
`interrogatio` is a python 3.8+ library based on the [python-prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) and inspired by [PyInquirer](https://github.com/CITGuru/PyInquirer/) that help CLI developers to ask users for inputs.
Questions can be rendered onto the terminal prompt or as curses-like dialogs.
## Documentation
[`interrogatio` documentation](https://interrogatio.readthedocs.io/en/latest/) is hosted on _Read the Docs_.
## Getting started
### Requirements
`interrogatio` depends on the python-prompt-toolkit library and its dependencies.
### Installation
#### Using pip
```
$ pip install interrogatio
```
#### Extra dependencies
If you want to use the shell command with yml files you can install the yml dependency:
```
$ pip install interrogatio[yml]
```
### Basic usage
`interrogatio` needs a list of questions to prompt the user for answers.
Each question is a python dictionary with at least the following keys:
* **name**: it has to be unique within the list of questions. It represents the variable name;
* **type**: the type of question;
* **message**: the text of the prompt.
Optionally you should specify:
* a **default**: a default value;
* a **validators**: a list of children of Validator class
* a **values**: a list of tuples (value, label) to provide a list of choices
for the ``selectone`` or ``selectmany`` question types.
`interrogatio` can run into two modes: dialog and prompt.
#### Dialog mode
![Dialog mode showcase](docs/showcase/dialogus.gif)
```
from interrogatio import dialogus
questions = [
{
'name': 'name',
'type': 'input',
'message': "What's your name ?",
'description': 'Please enter your full name. This field is required.',
'validators': [{'name': 'required'}],
},
{
'name': 'birth_date',
'type': 'date',
'message': "What's your birth date ?",
'description': 'Enter your birth date.',
},
{
'name': 'nationality',
'type': 'selectone',
'message': "What's your nationality ?",
'description': 'Please choose one from the list.',
'validators': [{'name': 'required'}],
'values': [
('IT', 'Italian'),
('ES', 'Spanish'),
('US', 'American'),
('UK', 'English'),
],
},
{
'name': 'languages',
'type': 'selectmany',
'message': "What are your favorite programming languages ?",
'description': 'Please choose your favorites from the list.',
'values': [
('py', 'Python'),
('rb', 'Ruby'),
('js', 'Javascript'),
('go', 'Golang'),
('rs', 'Rust'),
('c', 'C'),
('cpp', 'C++'),
('java', 'Java'),
],
},
]
intro = """<blue>Welcome to <b><i>interrogatio 2.0</i></b>!
This is the second major release of interrogatio with nice improvements.</blue>
<b>What's new</b>
<b>----------</b>
* Curses-like dialog experience had been completely rewritten.
* New questions handlers for dates, date ranges and masked inputs.
* Validators are now based on the <u>validators</u> library.
"""
answers = dialogus(questions, 'interrogatio showcase', intro=intro, summary=True)
```
#### Prompt mode
![Prompt mode showcase](docs/showcase/interrogatio.gif)
```
from interrogatio import interrogatio
questions = [
{
'name': 'name',
'type': 'input',
'message': "What's your name ?",
'description': 'Please enter your full name. This field is required.',
'validators': [{'name': 'required'}],
},
{
'name': 'birth_date',
'type': 'date',
'message': "What's your birth date ?",
'description': 'Enter your birth date.',
},
{
'name': 'nationality',
'type': 'selectone',
'message': "What's your nationality ?",
'description': 'Please choose one from the list.',
'validators': [{'name': 'required'}],
'values': [
('IT', 'Italian'),
('ES', 'Spanish'),
('US', 'American'),
('UK', 'English'),
],
},
{
'name': 'languages',
'type': 'selectmany',
'message': "What are your favorite programming languages ?",
'description': 'Please choose your favorites from the list.',
'values': [
('py', 'Python'),
('rb', 'Ruby'),
('js', 'Javascript'),
('go', 'Golang'),
('rs', 'Rust'),
('c', 'C'),
('cpp', 'C++'),
('java', 'Java'),
],
},
]
answers = interrogatio(questions)
```
### Contributing
If you want to contribute to the project, you can submit bugs, feature requests or fork the github repository and submit your pull request.
### License
`interrogatio` is released under the [BSD 3-Clause "New" or "Revised" License](https://opensource.org/licenses/BSD-3-Clause>).
Raw data
{
"_id": null,
"home_page": "https://github.com/ffaraone/interrogatio",
"name": "interrogatio",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "Francesco Faraone",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/a9/d0/71bcff650e74354d3c10c4e15bf8dd97daa3b4ff9e73bb14285346225320/interrogatio-2.3.1.tar.gz",
"platform": null,
"description": "#\u00a0interrogatio\n\n![Python versions](https://img.shields.io/pypi/pyversions/interrogatio.svg) [![PyPi Status](https://img.shields.io/pypi/v/interrogatio.svg)](https://pypi.org/project/interrogatio/) ![Read the Docs](https://img.shields.io/readthedocs/interrogatio) [![Build Status](https://img.shields.io/github/workflow/status/ffaraone/interrogatio/Build%20interrogatio)](https://github.com/ffaraone/interrogatio/actions) [![codecov](https://codecov.io/gh/ffaraone/interrogatio/branch/master/graph/badge.svg)](https://codecov.io/gh/ffaraone/interrogatio)\n\n\nA python library to prompt users for inputs in a terminal application.\n\n\n## What is interrogatio\n\n`interrogatio` is a python 3.8+ library based on the [python-prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) and inspired by [PyInquirer](https://github.com/CITGuru/PyInquirer/) that help CLI developers to ask users for inputs.\n\nQuestions can be rendered onto the terminal prompt or as curses-like dialogs.\n\n\n## Documentation\n\n[`interrogatio` documentation](https://interrogatio.readthedocs.io/en/latest/) is hosted on _Read the Docs_.\n\n\n\n## Getting started\n\n\n### Requirements\n\n`interrogatio` depends on the python-prompt-toolkit library and its dependencies.\n\n### Installation\n\n\n#### Using pip\n\n\n```\n$ pip install interrogatio\n```\n\n\n#### Extra dependencies\n\nIf you want to use the shell command with yml files you can install the yml dependency:\n\n```\n$ pip install interrogatio[yml]\n```\n\n\n### Basic usage\n\n`interrogatio` needs a list of questions to prompt the user for answers.\n\nEach question is a python dictionary with at least the following keys:\n\n* **name**: it has to be unique within the list of questions. It represents the variable name;\n* **type**: the type of question;\n* **message**: the text of the prompt.\n\nOptionally you should specify:\n \n* a **default**: a default value;\n* a **validators**: a list of children of Validator class\n* a **values**: a list of tuples (value, label) to provide a list of choices \n for the ``selectone`` or ``selectmany`` question types.\n\n\n`interrogatio` can run into two modes: dialog and prompt.\n\n#### Dialog mode\n\n![Dialog mode showcase](docs/showcase/dialogus.gif)\n\n```\nfrom interrogatio import dialogus\n\nquestions = [\n {\n 'name': 'name',\n 'type': 'input',\n 'message': \"What's your name ?\",\n 'description': 'Please enter your full name. This field is required.',\n 'validators': [{'name': 'required'}],\n },\n {\n 'name': 'birth_date',\n 'type': 'date',\n 'message': \"What's your birth date ?\",\n 'description': 'Enter your birth date.',\n },\n {\n 'name': 'nationality',\n 'type': 'selectone',\n 'message': \"What's your nationality ?\",\n 'description': 'Please choose one from the list.',\n 'validators': [{'name': 'required'}],\n 'values': [\n ('IT', 'Italian'),\n ('ES', 'Spanish'),\n ('US', 'American'),\n ('UK', 'English'),\n ],\n },\n {\n 'name': 'languages',\n 'type': 'selectmany',\n 'message': \"What are your favorite programming languages ?\",\n 'description': 'Please choose your favorites from the list.',\n 'values': [\n ('py', 'Python'),\n ('rb', 'Ruby'),\n ('js', 'Javascript'),\n ('go', 'Golang'),\n ('rs', 'Rust'),\n ('c', 'C'),\n ('cpp', 'C++'),\n ('java', 'Java'),\n ],\n },\n]\n\nintro = \"\"\"<blue>Welcome to <b><i>interrogatio 2.0</i></b>!\n\nThis is the second major release of interrogatio with nice improvements.</blue>\n\n<b>What's new</b>\n<b>----------</b>\n\n* Curses-like dialog experience had been completely rewritten.\n* New questions handlers for dates, date ranges and masked inputs.\n* Validators are now based on the <u>validators</u> library.\n\"\"\"\n\n\nanswers = dialogus(questions, 'interrogatio showcase', intro=intro, summary=True)\n```\n\n#### Prompt mode\n\n![Prompt mode showcase](docs/showcase/interrogatio.gif)\n\n```\nfrom interrogatio import interrogatio\n\nquestions = [\n {\n 'name': 'name',\n 'type': 'input',\n 'message': \"What's your name ?\",\n 'description': 'Please enter your full name. This field is required.',\n 'validators': [{'name': 'required'}],\n },\n {\n 'name': 'birth_date',\n 'type': 'date',\n 'message': \"What's your birth date ?\",\n 'description': 'Enter your birth date.',\n },\n {\n 'name': 'nationality',\n 'type': 'selectone',\n 'message': \"What's your nationality ?\",\n 'description': 'Please choose one from the list.',\n 'validators': [{'name': 'required'}],\n 'values': [\n ('IT', 'Italian'),\n ('ES', 'Spanish'),\n ('US', 'American'),\n ('UK', 'English'),\n ],\n },\n {\n 'name': 'languages',\n 'type': 'selectmany',\n 'message': \"What are your favorite programming languages ?\",\n 'description': 'Please choose your favorites from the list.',\n 'values': [\n ('py', 'Python'),\n ('rb', 'Ruby'),\n ('js', 'Javascript'),\n ('go', 'Golang'),\n ('rs', 'Rust'),\n ('c', 'C'),\n ('cpp', 'C++'),\n ('java', 'Java'),\n ],\n },\n]\n\n\nanswers = interrogatio(questions)\n```\n\n### Contributing\n\nIf you want to contribute to the project, you can submit bugs, feature requests or fork the github repository and submit your pull request.\n\n\n### License\n\n`interrogatio` is released under the [BSD 3-Clause \"New\" or \"Revised\" License](https://opensource.org/licenses/BSD-3-Clause>).\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Prompting library for terminals.",
"version": "2.3.1",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "03c12be176be9ad3cc13d0c93d9259e8",
"sha256": "d145cbc83a5192c82e7f43bf2febcb939da40c2450e2591a4cb5d8d67c2bf956"
},
"downloads": -1,
"filename": "interrogatio-2.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "03c12be176be9ad3cc13d0c93d9259e8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 26806,
"upload_time": "2022-12-07T11:16:02",
"upload_time_iso_8601": "2022-12-07T11:16:02.558547Z",
"url": "https://files.pythonhosted.org/packages/fa/8f/a34e8ded202c756f43eafd2fb37ebeb93b4a7fdd24110985a3274d2254b4/interrogatio-2.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "60e9ddcb111e064f94ae09c32519ee09",
"sha256": "195d89070592bb2c5e5361e531139ea61ffa220634074090d2a385903d804a15"
},
"downloads": -1,
"filename": "interrogatio-2.3.1.tar.gz",
"has_sig": false,
"md5_digest": "60e9ddcb111e064f94ae09c32519ee09",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 22467,
"upload_time": "2022-12-07T11:16:04",
"upload_time_iso_8601": "2022-12-07T11:16:04.315154Z",
"url": "https://files.pythonhosted.org/packages/a9/d0/71bcff650e74354d3c10c4e15bf8dd97daa3b4ff9e73bb14285346225320/interrogatio-2.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-12-07 11:16:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "ffaraone",
"github_project": "interrogatio",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "interrogatio"
}