class AutoMapperIfRegExDataType(AutoMapperDataTypeBase, Generic[_TAutoMapperDataType]): """ If check returns value if the checks passes else when_not """ def __init__( self, column: AutoMapperColumnOrColumnLikeType, check: Union[str, List[str]], value: _TAutoMapperDataType, else_: Optional[_TAutoMapperDataType] = None, ): super().__init__() self.column: AutoMapperColumnOrColumnLikeType = column self.check: Union[str, List[str]] = check self.value: AutoMapperDataTypeBase = ( value if isinstance(value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value)) if else_: self.else_: AutoMapperDataTypeBase = ( cast(AutoMapperDataTypeBase, else_) if isinstance( value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value)) else: self.else_ = AutoMapperDataTypeLiteral(None) def include_null_properties(self, include_null_properties: bool) -> None: self.value.include_null_properties( include_null_properties=include_null_properties) def get_column_spec(self, source_df: Optional[DataFrame], current_column: Optional[Column]) -> Column: # rlike takes a string and not a column if isinstance(self.check, list): value: str = self.check[0] column_spec = when( self.column.get_column_spec( source_df=source_df, current_column=current_column).rlike(value), self.value.get_column_spec(source_df=source_df, current_column=current_column), ).otherwise( self.else_.get_column_spec(source_df=source_df, current_column=current_column)) else: value = self.check column_spec = when( self.column.get_column_spec( source_df=source_df, current_column=current_column).rlike(value), self.value.get_column_spec(source_df=source_df, current_column=current_column), ).otherwise( self.else_.get_column_spec(source_df=source_df, current_column=current_column)) return column_spec
class AutoMapperIfNotNullDataType(AutoMapperDataTypeBase, Generic[_TAutoMapperDataType]): """ If check returns null then return null else return value """ def __init__( self, check: AutoMapperColumnOrColumnLikeType, value: _TAutoMapperDataType, when_null: Optional[Union[AutoMapperTextLikeBase, _TAutoMapperDataType]] = None, ): super().__init__() self.check: AutoMapperColumnOrColumnLikeType = check self.value: AutoMapperDataTypeBase = ( value if isinstance(value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value=value)) if when_null: self.when_null: AutoMapperDataTypeBase = ( cast(AutoMapperDataTypeBase, when_null) if isinstance( value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value=value)) else: self.when_null = AutoMapperDataTypeLiteral(None) def include_null_properties(self, include_null_properties: bool) -> None: self.value.include_null_properties( include_null_properties=include_null_properties) def get_column_spec( self, source_df: Optional[DataFrame], current_column: Optional[Column], parent_columns: Optional[List[Column]], ) -> Column: column_spec = when( self.check.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ).isNull(), self.when_null.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ), ).otherwise( self.value.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, )) return column_spec @property def children( self, ) -> Union[AutoMapperDataTypeBase, List[AutoMapperDataTypeBase]]: return [c for c in [self.value, self.when_null] if c is not None]
class AutoMapperIfNotNullOrEmptyDataType( AutoMapperDataTypeBase, Generic[_TAutoMapperDataType] ): """ If check returns null then return null else return value """ def __init__( self, check: AutoMapperColumnOrColumnLikeType, value: _TAutoMapperDataType, when_null_or_empty: Optional[_TAutoMapperDataType] = None, ): super().__init__() self.check: AutoMapperColumnOrColumnLikeType = check self.value: AutoMapperDataTypeBase = ( value if isinstance(value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value) ) if when_null_or_empty: self.when_null: AutoMapperDataTypeBase = ( cast(AutoMapperDataTypeBase, when_null_or_empty) if isinstance(value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value) ) else: self.when_null = AutoMapperDataTypeLiteral(None) def include_null_properties(self, include_null_properties: bool) -> None: self.value.include_null_properties( include_null_properties=include_null_properties ) def get_column_spec( self, source_df: Optional[DataFrame], current_column: Optional[Column] ) -> Column: column_spec = when( self.check.get_column_spec( source_df=source_df, current_column=current_column ).isNull() | self.check.get_column_spec( source_df=source_df, current_column=current_column ).eqNullSafe(""), self.when_null.get_column_spec( source_df=source_df, current_column=current_column ), ).otherwise( self.value.get_column_spec( source_df=source_df, current_column=current_column ) ) return column_spec
class AutoMapperIfDataType(AutoMapperDataTypeBase, Generic[_TAutoMapperDataType]): """ If check returns value if the checks passes else when_not """ @property def children( self ) -> Union[AutoMapperDataTypeBase, List[AutoMapperDataTypeBase]]: return self.value def __init__( self, column: AutoMapperColumnOrColumnLikeType, check: Union[AutoMapperAnyDataType, List[AutoMapperAnyDataType]], value: _TAutoMapperDataType, else_: Optional[_TAutoMapperDataType] = None, ): super().__init__() self.column: AutoMapperColumnOrColumnLikeType = column if isinstance(check, list): self.check: Union[AutoMapperDataTypeBase, List[AutoMapperDataTypeBase]] = [ a if isinstance(a, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value( value=a) for a in check ] else: self.check = (check if isinstance(check, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value=check)) self.value: AutoMapperDataTypeBase = ( value if isinstance(value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value=value)) if else_: self.else_: AutoMapperDataTypeBase = ( cast(AutoMapperDataTypeBase, else_) if isinstance( value, AutoMapperDataTypeBase) else AutoMapperValueParser.parse_value(value=value)) else: self.else_ = AutoMapperDataTypeLiteral(None) def include_null_properties(self, include_null_properties: bool) -> None: self.value.include_null_properties( include_null_properties=include_null_properties) def get_column_spec( self, source_df: Optional[DataFrame], current_column: Optional[Column], parent_columns: Optional[List[Column]], ) -> Column: if isinstance(self.check, list): column_spec = when( self.column.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ).isin(*[ c.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ) for c in self.check ]), self.value.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ), ).otherwise( self.else_.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, )) else: column_spec = when( self.column.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ).eqNullSafe( self.check.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, )), self.value.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, ), ).otherwise( self.else_.get_column_spec( source_df=source_df, current_column=current_column, parent_columns=parent_columns, )) return column_spec