def _load_token_database(db, domain: Pattern[str]) -> tokens.Database: """Loads a Database from a database object, ELF, CSV, or binary database.""" if db is None: return tokens.Database() if isinstance(db, tokens.Database): return db if isinstance(db, elf_reader.Elf): return _database_from_elf(db, domain) # If it's a str, it might be a path. Check if it's an ELF or CSV. if isinstance(db, (str, Path)): if not os.path.exists(db): raise FileNotFoundError( f'"{db}" is not a path to a token database') # Read the path as an ELF file. with open(db, 'rb') as fd: if elf_reader.compatible_file(fd): return _database_from_elf(fd, domain) # Read the path as a packed binary or CSV file. return tokens.DatabaseFile(db) # Assume that it's a file object and check if it's an ELF. if elf_reader.compatible_file(db): return _database_from_elf(db, domain) # Read the database as CSV or packed binary from a file object's path. if hasattr(db, 'name') and os.path.exists(db.name): return tokens.DatabaseFile(db.name) # Read CSV directly from the file object. return tokens.Database(tokens.parse_csv(db))
def read_db_from_csv(csv_str: str) -> tokens.Database: with io.StringIO(csv_str) as csv_db: return tokens.Database(tokens.parse_csv(csv_db))