An interactive terminal-based survey/questionnaire module with tab-based navigation
Project description
promptabs - Interactive Terminal Survey Module
A Python module for creating interactive terminal-based surveys with tab navigation and arrow key support.
Features
- Tab-based Navigation: Use left/right arrow keys to navigate between questions
- Arrow Key Selection: Use up/down arrow keys to select answer options
- Colorized Output: Beautiful terminal UI with ANSI colors
- Easy Integration: Simple API for creating surveys
- Response Collection: Automatically collects user responses in a dictionary
- Submit/Review Tab: Review answers before submitting with validation
- Required Field Validation: Prevent submission if required questions are unanswered
- Optional Questions: Support both required and optional questions
Installation
pip install -e .
Quick Start
from promptabs import Survey, Question
# Create questions
questions = [
Question(
id="q1",
title="What is your favorite programming language?",
options=["Python", "JavaScript", "Go", "Rust"],
description="Select one option"
),
Question(
id="q2",
title="Which OS do you use?",
options=["macOS", "Linux", "Windows"]
),
]
# Run the survey
survey = Survey(questions)
responses = survey.run()
# Access responses
print(responses)
# Output: {"q1": "Python", "q2": "Linux"}
API Documentation
Question
Data class representing a single survey question.
@dataclass
class Question:
id: str # Unique question identifier
title: str # Question title/text
options: List[str] # Available answer options
description: str = "" # Optional question description
required: bool = True # Whether question must be answered
Survey
Main class for managing and running surveys.
survey = Survey(questions: List[Question])
# Run the survey and get responses
responses: Dict[str, str] = survey.run()
Keyboard Controls
The tabs form a circular navigation ring - you can navigate freely between any tabs!
Navigation
- Left Arrow (←): Move to previous tab (wraps from Q1 to Submit)
- Right Arrow (→): Move to next tab (wraps from Submit to Q1)
On Question Tabs
- Up/Down arrows: Select answer options
- Enter: Confirm selection and move to next question
- Esc / Ctrl+C: Cancel survey
On Submit/Review Tab
- Up/Down arrows: Select between Submit and Cancel buttons
- Enter: Submit survey (only if all required questions answered)
- Esc / Ctrl+C: Cancel survey
Example Navigation:
Q1 ← → Q2 ← → Q3 ← → Submit
↑_______________________________↓
(pressing ← on Q1 goes to Submit)
(pressing → on Submit goes to Q1)
Architecture
- question.py: Question data model
- terminal.py: Terminal rendering and UI components
- input_handler.py: Raw keyboard input handling
- survey.py: Main survey conductor and interaction logic
Example Output
☑ Version Storage ☐ Build System ☐ Package Format →
Version Storage Question
Select your preferred approach
❯ Unified version.txt
Platform-specific
Hybrid approach
Other
Use ↑↓ to select · ← → to navigate tabs · Enter to confirm · Esc to cancel
Requirements
- Python 3.10+
- Unix-like terminal (macOS, Linux) or Windows with compatible terminal
License
MIT
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 promptabs-0.3.1.tar.gz.
File metadata
- Download URL: promptabs-0.3.1.tar.gz
- Upload date:
- Size: 57.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c328bec4ac292f52bb3464598120f24a1aa85ce85bfac278943eab6578704d99
|
|
| MD5 |
b36f27ca39fc3f28b203d41ef8839eed
|
|
| BLAKE2b-256 |
b1422453ce89a400998d3114e5696a2f2ac618583becc275d486f2f599806e59
|
File details
Details for the file promptabs-0.3.1-py3-none-any.whl.
File metadata
- Download URL: promptabs-0.3.1-py3-none-any.whl
- Upload date:
- Size: 17.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1fb8c98cfc7cb051f5b0c33777b81ff54eccfcb22f51ce5a99caf4b6650fff6
|
|
| MD5 |
4a619250ec20212a34fb783421425806
|
|
| BLAKE2b-256 |
61f5b42e30d76dbde1e49371735966ecc70b8d3edad009c14d4a31238b3b4467
|