Source code for pandera_catalog.reader

"""Read generated catalog views as pandas DataFrames."""

from __future__ import annotations

import pandas as pd
from sqlalchemy import text

from .catalog import PanderaCatalog


[docs] class CatalogViewReader: """Query generated SQL views from a catalog backend.""" _VIEW_NAMES = { "schema_catalog": "v_schema_catalog", "schema_columns": "v_schema_columns", "schema_checks": "v_schema_checks", "projection_steps": "v_projection_steps", "metadata_lookup": "v_metadata_lookup", } def __init__(self, catalog: PanderaCatalog) -> None: self.catalog = catalog
[docs] def read_view(self, view_name: str) -> pd.DataFrame: """Return a DataFrame for a named generated view.""" backend = self._require_backend() if view_name not in self._VIEW_NAMES.values(): raise KeyError(f"Unknown catalog view: {view_name!r}") with backend.engine.connect() as conn: return pd.read_sql_query(text(f"SELECT * FROM {view_name}"), conn)
def read_schema_catalog(self) -> pd.DataFrame: return self.read_view(self._VIEW_NAMES["schema_catalog"]) def read_schema_columns(self) -> pd.DataFrame: return self.read_view(self._VIEW_NAMES["schema_columns"]) def read_schema_checks(self) -> pd.DataFrame: return self.read_view(self._VIEW_NAMES["schema_checks"]) def read_projection_steps(self) -> pd.DataFrame: return self.read_view(self._VIEW_NAMES["projection_steps"]) def read_metadata_lookup(self) -> pd.DataFrame: return self.read_view(self._VIEW_NAMES["metadata_lookup"]) def _require_backend(self): backend = self.catalog.backend if backend is None: raise RuntimeError( "CatalogViewReader requires a PanderaCatalog configured with a SQL backend." ) backend.initialize() return backend