in src/databao_context_engine/project/datasource_discovery.py [0:0]
def discover_datasources(project_dir: Path) -> list[DatasourceDescriptor]:
"""
Scan the project's src/ directory and return all discovered sources.
Rules:
- Each first-level directory under src/ is treated as a main_type
- Unsupported or unreadable entries are skipped.
- The returned list is sorted by directory and then filename
"""
src = get_source_dir(project_dir)
if not src.exists() or not src.is_dir():
raise ValueError(f"src directory does not exist in {project_dir}")
datasources: list[DatasourceDescriptor] = []
for main_dir in sorted((p for p in src.iterdir() if p.is_dir()), key=lambda p: p.name.lower()):
for path in sorted((p for p in main_dir.iterdir() if _is_datasource_file(p)), key=lambda p: p.name.lower()):
datasource = load_datasource_descriptor(path)
if datasource is not None:
datasources.append(datasource)
return datasources