def _validate_sqlalchemy( self, actual_column_type, expected_types_list, execution_engine ): # Our goal is to be as explicit as possible. We will match the dialect # if that is possible. If there is no dialect available, we *will* # match against a top-level SqlAlchemy type. # # This is intended to be a conservative approach. # # In particular, we *exclude* types that would be valid under an ORM # such as "float" for postgresql with this approach if expected_types_list is None: success = True else: types = [] type_module = _get_dialect_type_module(execution_engine=execution_engine) for type_ in expected_types_list: try: type_class = getattr(type_module, type_) types.append(type_class) except AttributeError: logger.debug("Unrecognized type: %s" % type_) if len(types) == 0: logger.warning( "No recognized sqlalchemy types in type_list for current dialect." ) types = tuple(types) success = isinstance(actual_column_type, types) return { "success": success, "result": {"observed_value": type(actual_column_type).__name__}, }
def _validate_sqlalchemy(self, actual_column_type, expected_types_list, execution_engine): # Our goal is to be as explicit as possible. We will match the dialect # if that is possible. If there is no dialect available, we *will* # match against a top-level SqlAlchemy type. # # This is intended to be a conservative approach. # # In particular, we *exclude* types that would be valid under an ORM # such as "float" for postgresql with this approach if expected_types_list is None: success = True else: types = [] type_module = _get_dialect_type_module( execution_engine=execution_engine) for type_ in expected_types_list: try: if type_module.__name__ == "pyathena.sqlalchemy_athena": potential_type = get_pyathena_potential_type( type_module, type_) # In the case of the PyAthena dialect we need to verify that # the type returned is indeed a type and not an instance. if not inspect.isclass(potential_type): real_type = type(potential_type) else: real_type = potential_type types.append(real_type) else: potential_type = getattr(type_module, type_) types.append(potential_type) except AttributeError: logger.debug(f"Unrecognized type: {type_}") if len(types) == 0: logger.warning( "No recognized sqlalchemy types in type_list for current dialect." ) types = tuple(types) success = isinstance(actual_column_type, types) return { "success": success, "result": { "observed_value": type(actual_column_type).__name__ }, }