from awsglue.utils import iteritems as iteritems
from typing import Any

basestring = str
unicode = str

class DataType:
    properties: Any = ...
    def __init__(self, properties: Any = ...) -> None: ...
    def __eq__(self, other: Any) -> Any: ...
    def __hash__(self) -> Any: ...
    @classmethod
    def typeName(cls): ...
    def jsonValue(self): ...

class AtomicType(DataType):
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class BinaryType(AtomicType): ...
class BooleanType(AtomicType): ...
class ByteType(AtomicType): ...
class DateType(AtomicType): ...

class DecimalType(AtomicType):
    precision: Any = ...
    scale: Any = ...
    def __init__(
        self, precision: int = ..., scale: int = ..., properties: Any = ...
    ) -> None: ...
    def jsonValue(self): ...

class DoubleType(AtomicType): ...

class EnumType(AtomicType):
    options: Any = ...
    def __init__(self, options: Any, properties: Any = ...) -> None: ...
    def jsonValue(self) -> None: ...

class FloatType(AtomicType): ...

class IntegerType(AtomicType):
    @classmethod
    def typeName(cls): ...

class LongType(AtomicType): ...
class NullType(AtomicType): ...
class ShortType(AtomicType): ...
class StringType(AtomicType): ...
class TimestampType(AtomicType): ...
class UnknownType(AtomicType): ...

class ArrayType(DataType):
    elementType: Any = ...
    def __init__(self, elementType: Any = ..., properties: Any = ...) -> None: ...
    def jsonValue(self): ...
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class SetType(DataType):
    elementType: Any = ...
    def __init__(self, elementType: Any = ..., properties: Any = ...) -> None: ...
    def jsonValue(self): ...
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class ChoiceType(DataType):
    choices: Any = ...
    def __init__(self, choices: Any = ..., properties: Any = ...) -> None: ...
    def add(self, new_choice: Any) -> None: ...
    def merge(self, new_choices: Any) -> None: ...
    def jsonValue(self): ...
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class MapType(DataType):
    valueType: Any = ...
    def __init__(self, valueType: Any = ..., properties: Any = ...) -> None: ...
    def jsonValue(self): ...
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class Field:
    name: Any = ...
    dataType: Any = ...
    properties: Any = ...
    def __init__(self, name: Any, dataType: Any, properties: Any = ...) -> None: ...
    def __eq__(self, other: Any) -> Any: ...
    def jsonValue(self): ...
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class StructType(DataType):
    fields: Any = ...
    field_map: Any = ...
    def __init__(self, fields: Any = ..., properties: Any = ...) -> None: ...
    def __iter__(self) -> Any: ...
    def add(self, field: Any) -> None: ...
    def hasField(self, field: Any): ...
    def getField(self, field: Any): ...
    def jsonValue(self): ...
    @classmethod
    def fromJsonValue(cls, json_value: Any): ...

class EntityType(DataType):
    def __init__(self, entity: Any, base_type: Any, properties: Any) -> None: ...

def mergeDataTypes(s1: Any, s2: Any): ...

class DynamicRecord(dict):
    def __getattr__(self, attr: Any): ...
    def __setattr__(self, attr: Any, value: Any) -> None: ...
