Пример #1
0
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
Пример #2
0
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
Пример #4
0
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