Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
return b"%a" % str(value.replace(microsecond=0))
class UUIDType(BaseType):
def p_type(self, string):
return UUID(string.strip("'"))
def convert(self, value: bytes) -> UUID:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: UUID) -> bytes:
return b"%a" % str(value)
class TupleType(BaseType):
__slots__ = ("name", "types")
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
tps = RE_TUPLE.findall(name)[0]
self.types = tuple(what_py_type(tp, container=True) for tp in tps.split(","))
def p_type(self, string: str) -> tuple:
return tuple(
tp.p_type(val)
for tp, val in zip(self.types, self.seq_parser(string.strip("()")))
)
@staticmethod
def unconvert(value) -> bytes:
super().__init__(name, **kwargs)
tps = RE_TUPLE.findall(name)[0]
self.types = tuple(what_py_type(tp, container=True) for tp in tps.split(","))
def p_type(self, string: str) -> tuple:
return tuple(
tp.p_type(val)
for tp, val in zip(self.types, self.seq_parser(string.strip("()")))
)
@staticmethod
def unconvert(value) -> bytes:
return b"(" + b",".join(py2ch(elem) for elem in value) + b")"
class ArrayType(BaseType):
__slots__ = ("name", "type")
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_ARRAY.findall(name)[0], container=True)
def p_type(self, string: str) -> list:
return [self.type.p_type(val) for val in self.seq_parser(string.strip("[]"))]
@staticmethod
def unconvert(value) -> bytes:
return b"[" + b",".join(py2ch(elem) for elem in value) + b"]"
class NullableType(BaseType):
return date_parse(string).date()
except ValueError:
# In case of 0000-00-00
if string == "0000-00-00":
return None
raise
def convert(self, value: bytes) -> Optional[dt.date]:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: dt.date) -> bytes:
return b"%a" % str(value)
class DateTimeType(BaseType):
def p_type(self, string: str):
string = string.strip("'")
try:
return datetime_parse(string)
except ValueError:
# In case of 0000-00-00 00:00:00
if string == "0000-00-00 00:00:00":
return None
raise
def convert(self, value: bytes) -> Optional[dt.datetime]:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: dt.datetime) -> bytes:
return b"%a" % str(value.replace(microsecond=0))
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_NULLABLE.findall(name)[0])
def p_type(self, string: str) -> Any:
if string in self.NULLABLE:
return None
return self.type.p_type(string)
@staticmethod
def unconvert(value) -> bytes:
return b"NULL"
class NothingType(BaseType):
def p_type(self, string: str) -> None:
return None
def convert(self, value: bytes) -> None:
return None
class LowCardinalityType(BaseType):
__slots__ = ("name", "type")
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_LOW_CARDINALITY.findall(name)[0])
def p_type(self, string: str) -> Any:
return None
class LowCardinalityType(BaseType):
__slots__ = ("name", "type")
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_LOW_CARDINALITY.findall(name)[0])
def p_type(self, string: str) -> Any:
return self.type.p_type(string)
class DecimalType(BaseType):
p_type = Decimal
def convert(self, value: bytes) -> Decimal:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: Decimal) -> bytes:
return str(value).encode()
CH_TYPES_MAPPING = {
"UInt8": IntType,
"UInt16": IntType,
"UInt32": IntType,
"UInt64": IntType,
"Int8": IntType,
return self.p_type(value)
@staticmethod
def unconvert(value: int) -> bytes:
return b"%d" % value
class FloatType(IntType):
p_type = float
@staticmethod
def unconvert(value: float) -> bytes:
return b"%r" % value
class DateType(BaseType):
def p_type(self, string: str):
string = string.strip("'")
try:
return date_parse(string).date()
except ValueError:
# In case of 0000-00-00
if string == "0000-00-00":
return None
raise
def convert(self, value: bytes) -> Optional[dt.date]:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: dt.date) -> bytes:
return b"%a" % str(value)
__slots__ = ("name", "type")
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_ARRAY.findall(name)[0], container=True)
def p_type(self, string: str) -> list:
return [self.type.p_type(val) for val in self.seq_parser(string.strip("[]"))]
@staticmethod
def unconvert(value) -> bytes:
return b"[" + b",".join(py2ch(elem) for elem in value) + b"]"
class NullableType(BaseType):
__slots__ = ("name", "type")
NULLABLE = {r"\N", "NULL"}
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_NULLABLE.findall(name)[0])
def p_type(self, string: str) -> Any:
if string in self.NULLABLE:
return None
return self.type.p_type(string)
@staticmethod
def unconvert(value) -> bytes:
return b"NULL"
elif sym == cls.DQ:
blocked = not blocked
cur.append(sym)
else:
cur.append(sym)
yield "".join(cur)
def convert(self, value: bytes) -> Any:
return self.p_type(self.decode(value))
@staticmethod
def unconvert(value) -> bytes:
return b"%a" % value
class StrType(BaseType):
def p_type(self, string: str):
if self.container:
return string.strip("'")
return string
@staticmethod
def unconvert(value: str) -> bytes:
value = value.replace("\\", "\\\\").replace("'", "\\'")
return f"'{value}'".encode()
class IntType(BaseType):
p_type = int
def convert(self, value: bytes) -> Any:
return self.p_type(value)
return datetime_parse(string)
except ValueError:
# In case of 0000-00-00 00:00:00
if string == "0000-00-00 00:00:00":
return None
raise
def convert(self, value: bytes) -> Optional[dt.datetime]:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: dt.datetime) -> bytes:
return b"%a" % str(value.replace(microsecond=0))
class UUIDType(BaseType):
def p_type(self, string):
return UUID(string.strip("'"))
def convert(self, value: bytes) -> UUID:
return self.p_type(value.decode())
@staticmethod
def unconvert(value: UUID) -> bytes:
return b"%a" % str(value)
class TupleType(BaseType):
__slots__ = ("name", "types")
def __init__(self, name: str, **kwargs):
return self.type.p_type(string)
@staticmethod
def unconvert(value) -> bytes:
return b"NULL"
class NothingType(BaseType):
def p_type(self, string: str) -> None:
return None
def convert(self, value: bytes) -> None:
return None
class LowCardinalityType(BaseType):
__slots__ = ("name", "type")
def __init__(self, name: str, **kwargs):
super().__init__(name, **kwargs)
self.type = what_py_type(RE_LOW_CARDINALITY.findall(name)[0])
def p_type(self, string: str) -> Any:
return self.type.p_type(string)
class DecimalType(BaseType):
p_type = Decimal
def convert(self, value: bytes) -> Decimal:
return self.p_type(value.decode())