A structured, practice-driven repository documenting my journey toward becoming a Python Backend Engineer.
- About
- Repository Structure
- Learning Roadmap
- Recent updates
- Notes
- Exercises
- Tooling
- Quality Gates
- Development
- Learning Philosophy
- Current Focus
- Long-Term Goal
- License
This repository documents my journey toward becoming a Python Backend Engineer.
The objective is not only to learn Python syntax but also to build production-quality backend applications using modern engineering practices.
Every lesson includes:
- 📖 Notes
- 💻 Practical exercises
- 🧪 Pytest test cases
- 🔍 Code reviews
- 🛠️ Static type checking
- ✅ Best practices
learning-lab/
│
├── .github/
│ └── workflows/
│
├── python_fundamentals/
│ ├── exercises/
│ ├── notes/
│ └── tests/
│
├── pyproject.toml
├── uv.lock
└── README.md
- Functions & Validation
- *args & **kwargs
- Decorators
- Context Managers
- contextlib
- Type Hints
- Dataclasses
- Inventory Mini Project
- Pytest Basics
- TypedDict
- OOP Fundamentals
- Pydantic Basics
- Advanced Pydantic – EmailStr &
field_validator - Advanced Pydantic –
computed_field,model_validate, runtime parsing
- Nested Models (Pydantic)
- File Handling
- Logging
- SQLite
- SQL
- SQLAlchemy 2.0
- Alembic
- FastAPI
- Authentication
- Docker
- PostgreSQL
- GitHub Actions (workflows & CI hardening)
- Testing with Fixtures
- Dependency Injection
- Clean Architecture
- Completed focused work on Advanced Pydantic features: computed_field, model_validate and improving examples to be type-checker friendly.
- Fixed CI type-check failures (mypy/pyright) across example exercises by:
- Using
model_validate({...})when intentionally providing string inputs or extra fields in examples. - Removing unused
# type: ignorecomments. - Calling
computed_fielddescriptors (e.g.product.subtotal()) so static analyzers infer correct return types.
- Using
- Merged fixes in PR #29: #29
| Day | Topic | Status |
|---|---|---|
| 01 | Functions & Validation | ✅ |
| 02 | *args & **kwargs | ✅ |
| 03 | Decorators | ✅ |
| 04 | Context Managers | ✅ |
| 05 | contextlib | ✅ |
| 06 | Type Hints | ✅ |
| 07 | Dataclasses | ✅ |
| 08 | Inventory Manager | ✅ |
| 09 | Pytest Basics | ✅ |
| 10 | TypedDict | ✅ |
| 11 | OOP Fundamentals | ✅ |
| 12 | Pydantic Basics | ✅ |
| 13 | Advanced Pydantic – EmailStr & field_validator |
✅ |
| 24 | Advanced Pydantic – computed_field & Decimal |
✅ |
| 25 | Date & DateTime (Pydantic parsing) | ✅ |
| 26 | model_dump() & Serialization | ✅ |
Current exercises include:
- Pricing Calculator
- Inventory Manager
- Context Managers
- Decorators
- Product Manager (OOP)
- Pydantic Basics
- Email Validation
- Custom Field Validators
- User Validation
| Tool | Purpose |
|---|---|
| Python 3.12+ | Programming Language |
| uv | Package & Environment Management |
| Ruff | Linter & Formatter |
| MyPy | Static Type Checking |
| Pytest | Testing Framework |
| Pydantic | Runtime Data Validation |
| pre-commit | Git Hooks |
Every change must pass the following quality checks before being committed.
uv run ruff check .
uv run ruff format --check .
uv run mypy .
uv run pytest -v
uv run pre-commit run --all-filesInstall dependencies
uv syncRun all quality checks
uv run pre-commit run --all-filesRun tests
uv run pytest -vRun MyPy
uv run mypy .Run Ruff
uv run ruff check .Check formatting
uv run ruff format --check .Automatically fix lint issues
uv run ruff check . --fixEvery lesson follows the same engineering workflow.
Learn
↓
Understand
↓
Practice
↓
Exercise
↓
Write Notes
↓
Code Review
↓
Ruff
↓
MyPy
↓
Pytest
↓
pre-commit
↓
Git Commit
↓
Push
Currently learning:
- Advanced Pydantic (computed_field, model_validate)
- Runtime Validation & parsing
- Static typing compatibility with Pydantic examples
Next milestone:
- Nested Models
- FastAPI Request Validation
Build production-ready backend applications using:
- FastAPI
- SQLAlchemy 2.0
- PostgreSQL
- Docker
- GitHub Actions
- Clean Architecture
- Dependency Injection
- Automated Testing
This repository is maintained for educational purposes and continuous backend engineering practice.