def _read_database_sheet_to_df()

in backend/bms_app/source_db/parsers.py [0:0]


    def _read_database_sheet_to_df(cls, wb):
        """Read and validate 'Database Servers' sheet."""
        if cls.DATABASE_SERVERS_SHEET not in wb.sheet_names:
            raise MigvisorFileDataError(
                f'No {cls.DATABASE_SERVERS_SHEET} sheet found'
            )

        df = wb.parse(cls.DATABASE_SERVERS_SHEET, header=None)

        header_row_index = cls._find_header_row_index(df)

        if header_row_index is None:  # might be 0 which is OK
            raise MigvisorFileDataError('Headers row not found')

        # set correct headers
        df.columns = df.iloc[header_row_index]
        df.columns.name = None
        # drop empty rows before headers
        df = df[header_row_index + 1:]

        # drop completely empty rows if present
        df.dropna(how='all', inplace=True)

        if df.empty:
            raise MigvisorFileDataError('No database found')

        return df