Skip to main content

A simple and efficient todo list API built with FastAPI

Project description

Todo API

A robust FastAPI-based todo list API with comprehensive CRUD operations, automatic timestamp tracking, and complete data validation.

Features

  • Add todo items with title and optional description
  • Mark items as completed with automatic completion timestamps
  • Remove items from the list
  • View active todos with creation and modification dates
  • View completed todos with completion dates
  • Update existing todos (title, description, status)

Project Structure

todo-api/
├── pyproject.toml                    # Project metadata and dependencies
├── README.md                         # Project documentation
├── test_api.py                       # API testing script
├── tests/                            # Test suite
└── src/
    └── fastapi_todo_list/
        ├── __init__.py              # Package initialization
        ├── main.py                  # FastAPI application and API endpoints
        ├── database.py              # Database setup and models
        ├── schemas.py               # Pydantic models for request/response
        ├── crud.py                  # Database operations
        └── config.py                # Configuration settings

Technology Stack

  • FastAPI: Modern, fast web framework for building APIs
  • SQLAlchemy: SQL toolkit and ORM
  • Pydantic: Data validation using Python type annotations
  • SQLite: Lightweight database for development
  • Uvicorn: ASGI web server implementation
  • Pytest: Testing framework

Installation and Setup

  1. Install the package in development mode:

    pip install -e .
    
  2. Run the application:

    uvicorn src.fastapi_todo_list.main:app --reload
    
  3. Access the API documentation:

    • Interactive docs: http://localhost:8000/docs
    • ReDoc: http://localhost:8000/redoc

API Endpoints

  • GET / - Welcome message with endpoint overview
  • GET /todos - Get all active todos
  • GET /todos/completed - Get completed todos
  • GET /todos/all - Get all todos
  • GET /todos/{id} - Get specific todo
  • POST /todos - Create new todo
  • PUT /todos/{id} - Update existing todo
  • DELETE /todos/{id} - Delete todo

Testing

Run the test suite:

python -m pytest tests/

Run API tests:

python test_api.py
  1. Access the API:
    • API: http://localhost:8000
    • Interactive docs: http://localhost:8000/docs
    • ReDoc: http://localhost:8000/redoc

API Endpoints

Overview

  • GET / - Welcome message with endpoint overview

Todo Operations

  • GET /todos - Get all active (incomplete) todos
  • GET /todos/completed - Get all completed todos
  • GET /todos/all - Get all todos regardless of status
  • GET /todos/{id} - Get a specific todo by ID
  • POST /todos - Create a new todo
  • PUT /todos/{id} - Update an existing todo
  • DELETE /todos/{id} - Delete a todo

Building & Distribution

Build the Package

# Install build tools
pip install build twine

# Build the package
python -m build

This creates distribution files in the dist/ directory:

  • fastapi_todo_list-1.0.0-py3-none-any.whl (wheel)
  • fastapi_todo_list-1.0.0.tar.gz (source distribution)

Publish to Feed

Option 1: PyPI (Public Registry)

# Test PyPI (recommended first)
twine upload --repository testpypi dist/*

# Production PyPI  
twine upload dist/*

Option 2: GitHub Packages

# Configure GitHub token first
# Then upload to GitHub Packages
twine upload --repository-url https://upload.pypi.org/legacy/ dist/*

Option 3: GitHub Releases

# Manual upload to: https://github.com/amalieshi/amalie_projects/releases
# Or use GitHub CLI:
gh release create v1.0.0 dist/* --title "FastAPI Todo List v1.0.0"

Option 4: Private Feed/Repository

# Azure DevOps, JFrog Artifactory, Nexus, etc.
twine upload --repository-url https://your-private-feed-url dist/*

Your GitHub Repository Feed URLs:

  • Releases: https://github.com/amalieshi/amalie_projects/releases
  • Repository: https://github.com/amalieshi/amalie_projects.git
  • Package Directory: python/web-frameworks/fastapi/

Development Tools

The project includes configuration for development tools:

# Code formatting with black
black src/

# Type checking with mypy
mypy src/

# Linting with flake8
flake8 src/

# Run tests
pytest

Usage Examples

Create a new todo

curl -X POST "http://localhost:8000/todos" \
     -H "Content-Type: application/json" \
     -d '{"title": "Buy groceries", "description": "Milk, bread, and eggs"}'

Get all active todos

curl "http://localhost:8000/todos"

Mark a todo as completed

curl -X PUT "http://localhost:8000/todos/1" \
     -H "Content-Type: application/json" \
     -d '{"completed": true}'

Get completed todos

curl "http://localhost:8000/todos/completed"

Delete a todo

curl -X DELETE "http://localhost:8000/todos/1"

Data Model

Each todo item contains:

  • id: Unique identifier (auto-generated)
  • title: Todo title (required)
  • description: Optional description
  • completed: Boolean completion status
  • created_at: Creation timestamp
  • updated_at: Last modification timestamp
  • completed_at: Completion timestamp (null if not completed)

Database

The application uses SQLite with SQLAlchemy ORM for data persistence. The database file (todos.db) is created automatically when the application starts.

Interactive Documentation

FastAPI automatically generates interactive API documentation:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

These interfaces allow you to test all endpoints directly from your browser.

Development

To extend the application:

  1. Add new database models in database.py
  2. Create corresponding Pydantic schemas in schemas.py
  3. Implement CRUD operations in crud.py
  4. Add new endpoints in main.py

Technologies Used

  • FastAPI: Modern, fast web framework for building APIs
  • SQLAlchemy: SQL toolkit and ORM
  • Pydantic: Data validation using Python type hints
  • SQLite: Lightweight database engine
  • Uvicorn: ASGI server for running the application

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

todolist_fastapi-1.0.5.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

todolist_fastapi-1.0.5-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file todolist_fastapi-1.0.5.tar.gz.

File metadata

  • Download URL: todolist_fastapi-1.0.5.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for todolist_fastapi-1.0.5.tar.gz
Algorithm Hash digest
SHA256 59450a69aa09e95f009988e4a44d518e56a9aa7d9dbb4d8eb1ebd87fcb00a613
MD5 7f1f0d8632e27e4fcbed31b778053c65
BLAKE2b-256 e9f8257fda346b657f818bb7e8604544f6661b796b9c0bc067c68f8efb55187c

See more details on using hashes here.

Provenance

The following attestation bundles were made for todolist_fastapi-1.0.5.tar.gz:

Publisher: publish-fastapi-todo.yml on amalieshi/amalie_projects

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file todolist_fastapi-1.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for todolist_fastapi-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 bc8a21d03f3204b9e3fb7ffeb9d81f413291baee806fa0aaa539086561cf6658
MD5 ab943201f402ceb3f1d34196c2ddbec4
BLAKE2b-256 c8e25083ee67547952eef06702b0f21b518bdc7ff22e9672ffe998ea5f4b8b9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for todolist_fastapi-1.0.5-py3-none-any.whl:

Publisher: publish-fastapi-todo.yml on amalieshi/amalie_projects

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page