A simple, menu-driven console application for managing tasks with in-memory storage. This application allows users to add, view, update, mark as complete, and delete tasks through an interactive menu interface.
- Add Tasks: Create new tasks with titles and optional descriptions
- View Task List: Display all tasks with ID, title, and completion status
- Update Tasks: Modify existing task titles or descriptions
- Mark Complete: Toggle task completion status (Complete/Incomplete)
- Delete Tasks: Remove tasks from the system
- In-Memory Storage: All data is stored in memory (no persistent storage)
- Input Validation: Comprehensive validation for all user inputs
- Python 3.11 or higher
- Clone the repository
- Navigate to the project directory
- No additional dependencies required (uses Python standard library only)
To run the application:
python -m src.cli.console_appOnce the application starts, you'll see the main menu with the following options:
- Add Task: Create a new task with a title (required) and optional description
- View Task List: Display all tasks with their ID, title, and completion status
- Update Task: Modify an existing task's title or description
- Mark Task as Complete: Toggle a task's completion status by its ID
- Delete Task: Remove a task from the system by its ID
- Exit: Quit the application
- Task titles must be between 1-100 characters
- Task descriptions can be up to 500 characters (optional)
- Task IDs are assigned sequentially and never reused after deletion
- All inputs are validated to prevent errors
src/
├── models/
│ └── task.py # Task entity with validation
├── services/
│ └── task_manager.py # Core business logic for task operations
├── cli/
│ └── console_app.py # Menu-driven console interface
└── lib/
└── exceptions.py # Custom exceptions for error handling
tests/
├── unit/
│ ├── test_task.py
│ ├── test_task_manager.py
│ └── test_console_app.py
└── integration/
└── test_end_to_end.py
To run the tests:
python -m pytest tests/The application includes comprehensive unit and integration tests with 100% coverage.
- All data is stored in memory only - tasks are lost when the application exits
- Task IDs are never reused and continue incrementing even after deletion
- The application validates all inputs according to the defined constraints
- Error messages will be displayed for invalid operations
This project is licensed under the MIT License.