Skip to content

Proposed project structure (please review / discuss) #76

@Polichinel

Description

@Polichinel

Proposed directory structure + separation-of-concerns model for views-pipeline-core.

This is not a final decision — asking for alignment + input before locking this in as our reference structure.


Core structural principles

1) Managers (managers/)

  • Orchestrate multiple modules
  • Handle high-level workflows
  • Coordinate across parts of the system
  • Manage config + state
  • Example: MappingManager coordinates data handlers + visualization modules + path utils

2) Modules in dedicated dirs

  • Pure business logic
  • Single responsibility
  • No orchestration of other modules
  • Reusable + testable in isolation
  • Example: visualization/maps/interactive.py only generates Plotly maps

3) Core vs Infrastructure

  • core/ — domain objects, no external deps
  • All other dirs — implementation details/infra

4) Separation of concerns

concern dir
file/storage i/o io/
data manipulation / validation data/
visualization logic visualization/
orchestration managers/
external services integrations/

Proposed layout

views-pipeline-core/
├── README.md
├── pyproject.toml
├── .gitignore
│
├── .github/
│   └── workflows/
│
├── documentation/
│   ├── README.md
│   └── ADRs/
│
├── tests/
│   ├── unit/
│   │   ├── test_data/
│   │   ├── test_models/
│   │   ├── test_ensembles/
│   │   └── test_managers/
│   ├── integration/
│   └── fixtures/
│
└── views_pipeline_core/
    ├── __init__.py
    │
    ├── core/
    │   ├── __init__.py
    │   └── exceptions.py
    │
    ├── data/
    │   ├── __init__.py
    │   ├── loaders.py
    │   ├── datasets.py
    │   ├── validators.py
    │   └── transformers.py
    │
    ├── io/
    │   ├── __init__.py
    │   ├── files.py
    │   ├── storage.py
    │   └── serialization.py
    │
    ├── managers/
    │   ├── __init__.py
    │   ├── datastore.py
    │   ├── model.py
    │   ├── ensemble.py
    │   ├── logging.py
    │   └── mapping.py
    │
    ├── visualization/
    │   ├── __init__.py
    │   ├── maps/
    │   │   ├── __init__.py
    │   │   ├── interactive.py
    │   │   ├── static.py
    │   └── reports/
    │       ├── __init__.py
    │       ├── utils.py
    │       └── templates/
    │
    ├── modeling/
    │   ├── __init__.py
    │   ├── training.py
    │   ├── evaluation.py
    │   ├── prediction.py
    │   ├── drift.py
    │   └── catalogs/
    │       ├── __init__.py
    │       └── registry.py
    │
    ├── ensembles/
    │   ├── __init__.py
    │   ├── aggregation.py
    │   ├── reconciliation.py
    │   └── validators.py
    │
    ├── integrations/
    │   ├── __init__.py
    │   ├── wandb/
    │   │   ├── __init__.py
    │   │   └── client.py
    │   └── appwrite/
    │       ├── __init__.py
    │       └── client.py
    │
    ├── cli/
    │   ├── __init__.py
    │   ├── commands/
    │   └── utils.py
    │
    ├── assets/
    │   ├── shapefiles/
    │   │   ├── country/
    │   │   └── priogrid/
    │   └── templates/
    │
    ├── configs/
    │   ├── __init__.py
    │   └── schemas/
    │
    └── utils/
        ├── __init__.py
        ├── validation.py
        └── decorators.py

Discussion prompt

Request:
→ Are we aligned on this as the baseline structure before we start migrating modules?

Specifically looking for:

  • objections
  • missing categories
  • any “cross-cutting” logic placement concerns (e.g. caching)
  • naming tweaks

If no blocking objections, I propose we mark this as “accepted baseline” and file sub-issues for refactoring of views_pipeline_core into this shape.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions