feat: project bootstrap and structure
Sprint 1 initialization: - Project directory structure (portfolio_app/, tests/, dbt/, data/, scripts/) - CLAUDE.md with AI assistant context - pyproject.toml with all dependencies - docker-compose.yml for PostgreSQL 16 + PostGIS - Makefile with standard targets - Pre-commit configuration (ruff, mypy) - Environment template (.env.example) - Error handling foundation (PortfolioError hierarchy) - Test configuration (conftest.py, pytest config) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
3
portfolio_app/__init__.py
Normal file
3
portfolio_app/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""Analytics Portfolio Application."""
|
||||
|
||||
__version__ = "0.1.0"
|
||||
0
portfolio_app/assets/.gitkeep
Normal file
0
portfolio_app/assets/.gitkeep
Normal file
0
portfolio_app/components/.gitkeep
Normal file
0
portfolio_app/components/.gitkeep
Normal file
5
portfolio_app/errors/__init__.py
Normal file
5
portfolio_app/errors/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
"""Error handling for the portfolio application."""
|
||||
|
||||
from .exceptions import LoadError, ParseError, PortfolioError, ValidationError
|
||||
|
||||
__all__ = ["PortfolioError", "ParseError", "ValidationError", "LoadError"]
|
||||
17
portfolio_app/errors/exceptions.py
Normal file
17
portfolio_app/errors/exceptions.py
Normal file
@@ -0,0 +1,17 @@
|
||||
"""Custom exceptions for the portfolio application."""
|
||||
|
||||
|
||||
class PortfolioError(Exception):
|
||||
"""Base exception for all portfolio errors."""
|
||||
|
||||
|
||||
class ParseError(PortfolioError):
|
||||
"""PDF/CSV parsing failed."""
|
||||
|
||||
|
||||
class ValidationError(PortfolioError):
|
||||
"""Pydantic or business rule validation failed."""
|
||||
|
||||
|
||||
class LoadError(PortfolioError):
|
||||
"""Database load operation failed."""
|
||||
0
portfolio_app/figures/.gitkeep
Normal file
0
portfolio_app/figures/.gitkeep
Normal file
1
portfolio_app/pages/__init__.py
Normal file
1
portfolio_app/pages/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Dash pages."""
|
||||
1
portfolio_app/pages/toronto/__init__.py
Normal file
1
portfolio_app/pages/toronto/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Toronto Housing Dashboard page."""
|
||||
1
portfolio_app/pages/toronto/callbacks/__init__.py
Normal file
1
portfolio_app/pages/toronto/callbacks/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Toronto dashboard callbacks."""
|
||||
1
portfolio_app/toronto/__init__.py
Normal file
1
portfolio_app/toronto/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Toronto housing data logic."""
|
||||
1
portfolio_app/toronto/loaders/__init__.py
Normal file
1
portfolio_app/toronto/loaders/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Database loaders for Toronto housing data."""
|
||||
1
portfolio_app/toronto/models/__init__.py
Normal file
1
portfolio_app/toronto/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""SQLAlchemy models for Toronto housing data."""
|
||||
1
portfolio_app/toronto/parsers/__init__.py
Normal file
1
portfolio_app/toronto/parsers/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Data parsers for Toronto housing data sources."""
|
||||
1
portfolio_app/toronto/schemas/__init__.py
Normal file
1
portfolio_app/toronto/schemas/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Pydantic schemas for Toronto housing data validation."""
|
||||
Reference in New Issue
Block a user