Ejemplo n.º 1
0
 def create_column(column_dict, table):
     name = column_dict["name"]
     type_ = column_dict["type"]
     available_attrs = [
         "autoincrement",
         "default",
         "doc",
         "key",
         "index",
         "info",
         "nullable",
         "onupdate",
         "primary_key",
         "server_default",
         "server_onupdate",
         "quote",
         "unique",
         "system",
         "comment",
     ]
     column_extras = {k: v for k, v in column_dict.items() if k in available_attrs}
     column = Column(name, type_, **column_extras)
     column.constraints = column_dict["constraints"]
     column.foreign_keys = column_dict["foreign_keys"]
     column.is_literal = column_dict["is_literal"]
     column.table = table
     return column
Ejemplo n.º 2
0
def ge_suite_to_sqla_columns(suite: str) -> dict:
    expectations = suite["expectations"]

    table_name = suite["expectation_suite_name"].split(".")[0]
    column_names = get_column_names(expectations)

    sqla_columns = []
    for column_name in column_names:
        column = Column(name=column_name)

        all_columns_type_expectations = filter(
            lambda x: x["expectation_type"] ==
            "expect_column_values_to_be_of_type", expectations)
        column_type_expectations = filter(
            lambda x: x["kwargs"]["column"] == column_name,
            all_columns_type_expectations)
        ge_type = list(column_type_expectations)[0]["kwargs"]["type_"]
        kwargs = {}

        if ge_type == "str":
            all_columns_length_expectations = filter(
                lambda x: x["expectation_type"] ==
                "expect_column_value_lengths_to_be_between", expectations)
            column_length_expectations = list(
                filter(lambda x: x["kwargs"]["column"] == column_name,
                       all_columns_length_expectations))

            if len(column_length_expectations) == 1:
                length = column_length_expectations[0]["kwargs"]["max_value"]
            else:
                length = 100

            kwargs = {"length": length}

        column.type = ge_to_sqla_types(ge_type, **kwargs)

        if column_name == "id" or column_name.endswith("_id"):
            column.primary_key = True

        if column_name.endswith(
                "_id") and column_name.split("_")[0] != table_name:
            foreign_table = column_name.split("_")[0]
            column.foreign_keys = [ForeignKey(f"{foreign_table}.id")]

        sqla_columns.append(column)

    return sqla_columns