Quick Start#

[1]:
from simpletype.api import (
    Integer,
    TinyInteger,
    SmallInteger,
    BigInteger,
    Float,
    Double,
    Decimal,
    String,
    Binary,
    Bool,
    Null,
    Datetime,
    Set,
    List,
    Struct,
    json_type_to_simple_type,
)
from rich import print as rprint
[2]:
simple_schema = {
    "a_int": Integer(),
    "a_float": Float(),
    "a_str": String(),
    "a_binary": Binary(),
    "a_bool": Bool(),
    "a_null": Null(),
    "a_int_set": Set(itype=Integer()),
    "a_str_list": List(itype=String()),
    "a_struct_list": List(
        itype=Struct(
            fields={
                "a_int": Integer(),
                "a_str": String(),
            }
        )
    ),
    "a_struct": Struct(
        fields={
            "a_int": Integer(),
            "a_str": String(),
        }
    ),
}
rprint(simple_schema)
{
    'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False),
    'a_float': Float(default_for_null=Sentinel('NOTHING'), precision=Sentinel('NOTHING'), required=False),
    'a_str': String(default_for_null='', required=False),
    'a_binary': Binary(default_for_null=b'', required=False),
    'a_bool': Bool(default_for_null=Sentinel('NOTHING'), required=False),
    'a_null': Null(default_for_null=None, required=False),
    'a_int_set': Set(
        itype=Integer(default_for_null=Sentinel('NOTHING'), required=False),
        default_for_null=[],
        required=False
    ),
    'a_str_list': List(itype=String(default_for_null='', required=False), default_for_null=[], required=False),
    'a_struct_list': List(
        itype=Struct(
            fields={
                'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False),
                'a_str': String(default_for_null='', required=False)
            },
            required=False
        ),
        default_for_null=[],
        required=False
    ),
    'a_struct': Struct(
        fields={
            'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False),
            'a_str': String(default_for_null='', required=False)
        },
        required=False
    )
}
[3]:
simple_schema_json = {
    k: v.to_dict() for k, v in simple_schema.items()
}
rprint(simple_schema_json)
{
    'a_int': {'type': 'int', 'required': False},
    'a_float': {'type': 'float', 'required': False},
    'a_str': {'type': 'str', 'default_for_null': '', 'required': False},
    'a_binary': {'type': 'bin', 'default_for_null': b'', 'required': False},
    'a_bool': {'type': 'bool', 'required': False},
    'a_null': {'type': 'null', 'default_for_null': None, 'required': False},
    'a_int_set': {
        'type': 'set',
        'itype': {'type': 'int', 'required': False},
        'default_for_null': [],
        'required': False
    },
    'a_str_list': {
        'type': 'list',
        'itype': {'type': 'str', 'default_for_null': '', 'required': False},
        'default_for_null': [],
        'required': False
    },
    'a_struct_list': {
        'type': 'list',
        'itype': {
            'type': 'struct',
            'fields': {
                'a_int': {'type': 'int', 'required': False},
                'a_str': {'type': 'str', 'default_for_null': '', 'required': False}
            },
            'required': False
        },
        'default_for_null': [],
        'required': False
    },
    'a_struct': {
        'type': 'struct',
        'fields': {
            'a_int': {'type': 'int', 'required': False},
            'a_str': {'type': 'str', 'default_for_null': '', 'required': False}
        },
        'required': False
    }
}
[4]:
simple_schema_1 = {
    k: json_type_to_simple_type(v) for k, v in simple_schema_json.items()
}
rprint(simple_schema_1)
{
    'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False),
    'a_float': Float(default_for_null=Sentinel('NOTHING'), precision=Sentinel('NOTHING'), required=False),
    'a_str': String(default_for_null='', required=False),
    'a_binary': Binary(default_for_null=b'', required=False),
    'a_bool': Bool(default_for_null=Sentinel('NOTHING'), required=False),
    'a_null': Null(default_for_null=None, required=False),
    'a_int_set': Set(
        itype=Integer(default_for_null=Sentinel('NOTHING'), required=False),
        default_for_null=[],
        required=False
    ),
    'a_str_list': List(itype=String(default_for_null='', required=False), default_for_null=[], required=False),
    'a_struct_list': List(
        itype=Struct(
            fields={
                'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False),
                'a_str': String(default_for_null='', required=False)
            },
            required=False
        ),
        default_for_null=[],
        required=False
    ),
    'a_struct': Struct(
        fields={
            'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False),
            'a_str': String(default_for_null='', required=False)
        },
        required=False
    )
}
[5]:
polars_schema = {
    k: v.to_polars() for k, v in simple_schema.items()
}
rprint(polars_schema)
{
    'a_int': Int32,
    'a_float': Float32,
    'a_str': String,
    'a_binary': Binary,
    'a_bool': Boolean,
    'a_null': Null,
    'a_int_set': List(Int32),
    'a_str_list': List(String),
    'a_struct_list': List(Struct({'a_int': Int32, 'a_str': String})),
    'a_struct': Struct({'a_int': Int32, 'a_str': String})
}
[6]:
glue_schema = {
    k: v.to_glue() for k, v in simple_schema.items()
}
rprint(glue_schema)
{
    'a_int': 'bigint',
    'a_float': 'float',
    'a_str': 'string',
    'a_binary': 'binary',
    'a_bool': 'boolean',
    'a_null': 'string',
    'a_int_set': 'array<bigint>',
    'a_str_list': 'array<string>',
    'a_struct_list': 'array<struct<a_int:bigint,a_str:string>>',
    'a_struct': 'struct<a_int:bigint,a_str:string>'
}
[7]:
glue_schema = {
    k: v.to_spark_string() for k, v in simple_schema.items()
}
rprint(glue_schema)
{
    'a_int': 'bigint',
    'a_float': 'float',
    'a_str': 'string',
    'a_binary': 'binary',
    'a_bool': 'boolean',
    'a_null': 'null',
    'a_int_set': {'type': 'array', 'elementType': 'bigint'},
    'a_str_list': {'type': 'array', 'elementType': 'string', 'containsNull': True},
    'a_struct_list': {
        'type': 'array',
        'elementType': {
            'type': 'struct',
            'fields': [
                {'name': 'a_int', 'type': 'bigint', 'nullable': True, 'metadata': {}},
                {'name': 'a_str', 'type': 'string', 'nullable': True, 'metadata': {}}
            ]
        },
        'containsNull': True
    },
    'a_struct': {
        'type': 'struct',
        'fields': [
            {'name': 'a_int', 'type': 'bigint', 'nullable': True, 'metadata': {}},
            {'name': 'a_str', 'type': 'string', 'nullable': True, 'metadata': {}}
        ]
    }
}
[8]:
dynamodb_json_polars_schema = {
    k: v.to_dynamodb_json_polars() for k, v in simple_schema.items()
}
rprint(dynamodb_json_polars_schema)
{
    'a_int': Struct({'N': String}),
    'a_float': Struct({'N': String}),
    'a_str': Struct({'S': String}),
    'a_binary': Struct({'B': String}),
    'a_bool': Struct({'BOOL': Boolean}),
    'a_null': Struct({'NULL': Boolean}),
    'a_int_set': Struct({'NS': List(String)}),
    'a_str_list': Struct({'L': List(Struct({'S': String}))}),
    'a_struct_list': Struct({'L': List(Struct({'M': Struct({'a_int': Struct({'N': String}), 'a_str': Struct({'S':
String})})}))}),
    'a_struct': Struct({'M': Struct({'a_int': Struct({'N': String}), 'a_str': Struct({'S': String})})})
}
[ ]: