Now the loaders/dumper declare their format themselves.
@classmethod
def register(
- cls,
- src: Union[type, str],
- context: Optional[AdaptContext] = None,
- format: Format = Format.TEXT,
+ cls, src: Union[type, str], context: Optional[AdaptContext] = None
) -> None:
"""
Configure *context* to use this dumper to convert object of type *src*.
"""
adapters = context.adapters if context else global_adapters
- adapters.register_dumper(src, cls, format=format)
+ adapters.register_dumper(src, cls)
@classmethod
def text(cls, src: Union[type, str]) -> Callable[[DumperType], DumperType]:
def text_(dumper: DumperType) -> DumperType:
+ assert dumper.format == Format.TEXT
dumper.register(src)
return dumper
cls, src: Union[type, str]
) -> Callable[[DumperType], DumperType]:
def binary_(dumper: DumperType) -> DumperType:
- dumper.register(src, format=Format.BINARY)
+ assert dumper.format == Format.BINARY
+ dumper.register(src)
return dumper
return binary_
@classmethod
def register(
- cls,
- oid: int,
- context: Optional[AdaptContext] = None,
- format: Format = Format.TEXT,
+ cls, oid: int, context: Optional[AdaptContext] = None
) -> None:
"""
Configure *context* to use this loader to convert values with OID *oid*.
"""
adapters = context.adapters if context else global_adapters
- adapters.register_loader(oid, cls, format=format)
+ adapters.register_loader(oid, cls)
@classmethod
def text(cls, oid: int) -> Callable[[LoaderType], LoaderType]:
def text_(loader: LoaderType) -> LoaderType:
+ assert loader.format == Format.TEXT
loader.register(oid)
return loader
@classmethod
def binary(cls, oid: int) -> Callable[[LoaderType], LoaderType]:
def binary_(loader: LoaderType) -> LoaderType:
- loader.register(oid, format=Format.BINARY)
+ assert loader.format == Format.BINARY
+ loader.register(oid)
return loader
return binary_
self._own_loaders = True
def register_dumper(
- self,
- src: Union[type, str],
- dumper: Type[Dumper],
- format: Format = Format.TEXT,
+ self, src: Union[type, str], dumper: Type[Dumper]
) -> None:
"""
Configure the context to use *dumper* to convert object of type *src*.
self._dumpers = self._dumpers.copy()
self._own_dumpers = True
- self._dumpers[src, format] = dumper
+ self._dumpers[src, dumper.format] = dumper
- def register_loader(
- self, oid: int, loader: Type[Loader], format: Format = Format.TEXT
- ) -> None:
+ def register_loader(self, oid: int, loader: Type[Loader]) -> None:
"""
Configure the context to use *loader* to convert data of oid *oid*.
"""
self._loaders = self._loaders.copy()
self._own_loaders = True
- self._loaders[oid, format] = loader
+ self._loaders[oid, loader.format] = loader
global_adapters = AdaptersMap()
if not name:
name = f"oid{base_oid}"
- for format, base in (
- (Format.TEXT, ArrayLoader),
- (Format.BINARY, ArrayBinaryLoader),
- ):
+ for base in (ArrayLoader, ArrayBinaryLoader):
lname = f"{name.title()}Array{'Binary' if format else ''}Loader"
loader: Type[Loader] = type(lname, (base,), {"base_oid": base_oid})
- loader.register(array_oid, context=context, format=format)
+ loader.register(array_oid, context=context)
def register_all_arrays() -> None:
"fields_types": [f.type_oid for f in self.fields],
},
)
- loader.register(self.oid, context=context, format=Format.TEXT)
+ loader.register(self.oid, context=context)
# generate and register a customized binary loader
loader = type(
(CompositeBinaryLoader,),
{"factory": factory},
)
- loader.register(self.oid, context=context, format=Format.BINARY)
+ loader.register(self.oid, context=context)
if self.array_oid:
array.register(
@Dumper.text(Decimal)
class DecimalDumper(SpecialValuesDumper):
+
_oid = builtins["numeric"].oid
_special = {
dumper: Type[Dumper] = type(
f"{self.name.title()}Dumper", (RangeDumper,), {"_oid": self.oid}
)
- dumper.register(range_class, context=context, format=Format.TEXT)
+ dumper.register(range_class, context=context)
# generate and register a customized text loader
loader: Type[Loader] = type(
(RangeLoader,),
{"cls": range_class, "subtype_oid": self.subtype_oid},
)
- loader.register(self.oid, context=context, format=Format.TEXT)
+ loader.register(self.oid, context=context)
if self.array_oid:
array.register(
def test_dump_connection_ctx(conn):
make_dumper("t").register(str, conn)
- make_bin_dumper("b").register(str, conn, format=Format.BINARY)
+ make_bin_dumper("b").register(str, conn)
cur = conn.cursor()
cur.execute("select %s, %b", ["hello", "world"])
def test_dump_cursor_ctx(conn):
make_dumper("t").register(str, conn)
- make_bin_dumper("b").register(str, conn, format=Format.BINARY)
+ make_bin_dumper("b").register(str, conn)
cur = conn.cursor()
make_dumper("tc").register(str, cur)
- make_bin_dumper("bc").register(str, cur, format=Format.BINARY)
+ make_bin_dumper("bc").register(str, cur)
cur.execute("select %s, %b", ["hello", "world"])
assert cur.fetchone() == ("hellotc", "worldbc")
def test_load_connection_ctx(conn):
make_loader("t").register(TEXT_OID, conn)
- make_bin_loader("b").register(TEXT_OID, conn, format=Format.BINARY)
+ make_bin_loader("b").register(TEXT_OID, conn)
r = conn.cursor().execute("select 'hello'::text").fetchone()
assert r == ("hellot",)
def test_load_cursor_ctx(conn):
make_loader("t").register(TEXT_OID, conn)
- make_bin_loader("b").register(TEXT_OID, conn, format=Format.BINARY)
+ make_bin_loader("b").register(TEXT_OID, conn)
cur = conn.cursor()
make_loader("tc").register(TEXT_OID, cur)
- make_bin_loader("bc").register(TEXT_OID, cur, format=Format.BINARY)
+ make_bin_loader("bc").register(TEXT_OID, cur)
r = cur.execute("select 'hello'::text").fetchone()
assert r == ("hellotc",)
@pytest.mark.parametrize("fmt_out", [Format.TEXT, Format.BINARY])
def test_load_cursor_ctx_nested(conn, sql, obj, fmt_out):
cur = conn.cursor(format=fmt_out)
- if format == Format.TEXT:
- make_loader("c").register(TEXT_OID, cur, format=fmt_out)
+ if fmt_out == Format.TEXT:
+ make_loader("c").register(TEXT_OID, cur)
else:
- make_bin_loader("c").register(TEXT_OID, cur, format=fmt_out)
+ make_bin_loader("c").register(TEXT_OID, cur)
cur.execute(f"select {sql}")
res = cur.fetchone()[0]