2828from .model .data_types import SqlJsonType , SqlVariableCharacterType
2929from .model .id_types import LocalId , QualifiedId , SupportsQualifiedId
3030from .python_types import dataclass_to_code , module_to_code
31+ from .util .typing import override
3132
3233D = TypeVar ("D" , bound = DataclassInstance )
3334E = TypeVar ("E" , bound = enum .Enum )
@@ -515,6 +516,12 @@ async def close(self) -> None: ...
515516
516517
517518class RecordTransformer :
519+ @abc .abstractmethod
520+ def is_identity (self ) -> bool :
521+ "True if the transformer does nothing."
522+
523+ ...
524+
518525 @abc .abstractmethod
519526 async def get (self , records : Iterable [RecordType ]) -> Optional [Callable [[Any ], Any ]]:
520527 """
@@ -537,6 +544,10 @@ def __init__(
537544 ) -> None :
538545 self .fn = fn
539546
547+ @override
548+ def is_identity (self ) -> bool :
549+ return self .fn is None
550+
540551 async def get (self , records : Iterable [RecordType ]) -> Optional [Callable [[Any ], Any ]]:
541552 return self .fn
542553
@@ -559,6 +570,10 @@ def __init__(
559570 self .generator = generator
560571 self .index = index
561572
573+ @override
574+ def is_identity (self ) -> bool :
575+ return False
576+
562577 async def _merge_lookup_table (self , values : set [str ]) -> dict [str , int ]:
563578 "Merges new values into a lookup table and returns the entire updated table."
564579
@@ -747,7 +762,7 @@ def to_data_source(records: RecordSource) -> DataSource:
747762
748763 if isinstance (records , Iterable ):
749764 return IterableDataSource (records )
750- elif isinstance (records , AsyncIterable ):
765+ elif isinstance (records , AsyncIterable ): # pyright: ignore[reportUnnecessaryIsInstance]
751766 return AsyncIterableDataSource (records )
752767 else :
753768 raise TypeError ("expected: `Iterable` or `AsyncIterable` of records" )
@@ -1084,7 +1099,7 @@ async def _generate_records(
10841099 transformer = self ._get_transformer (table , generator , index , field_type , field_name )
10851100 transformers .append (transformer )
10861101
1087- if all (transformer is None for transformer in transformers ):
1102+ if all (transformer . is_identity () for transformer in transformers ):
10881103 if len (indices ) == len (field_types ):
10891104 return source
10901105 else :
@@ -1194,7 +1209,7 @@ def _module_or_list(module: Optional[types.ModuleType], modules: Optional[list[t
11941209 raise TypeError ("disallowed: both parameters `module` and `modules`" )
11951210
11961211 if modules is not None :
1197- if not isinstance (modules , list ):
1212+ if not isinstance (modules , list ): # pyright: ignore[reportUnnecessaryIsInstance]
11981213 raise TypeError ("expected: list of modules for parameter `modules`" )
11991214 entity_modules = modules
12001215 elif module is not None :
0 commit comments