# the length of the result columns
self._row_loaders: List[LoadFunc] = []
+ @classmethod
+ def from_context(cls, context: Optional[AdaptContext]) -> "Transformer":
+ """
+ Return a Transformer from an AdaptContext.
+
+ If the context is a Transformer instance, just return it.
+ """
+ if isinstance(context, Transformer):
+ return context
+ else:
+ return cls(context)
+
@property
def connection(self) -> Optional["BaseConnection[Any]"]:
return self._conn
def __init__(self, context: Optional[AdaptContext] = None):
...
+ @classmethod
+ def from_context(cls, context: Optional[AdaptContext]) -> "Transformer":
+ ...
+
@property
def connection(self) -> Optional["BaseConnection[Any]"]:
...
def __init__(self, cls: type, context: Optional[abc.AdaptContext] = None):
super().__init__(cls, context)
- self._tx = Transformer(context)
+ self._tx = Transformer.from_context(context)
class RecursiveLoader(Loader):
def __init__(self, oid: int, context: Optional[abc.AdaptContext] = None):
super().__init__(oid, context)
- self._tx = Transformer(context)
+ self._tx = Transformer.from_context(context)
"""
def as_bytes(self, context: Optional[AdaptContext]) -> bytes:
- tx = Transformer(context)
+ tx = Transformer.from_context(context)
dumper = tx.get_dumper(self._obj, PyFormat.TEXT)
return dumper.quote(self._obj)
from .. import pq
from .. import postgres
from ..abc import AdaptContext, Buffer
-from ..adapt import PyFormat, RecursiveDumper, RecursiveLoader
+from ..adapt import Transformer, PyFormat, RecursiveDumper, Loader
from .._struct import pack_len, unpack_len
from ..postgres import TEXT_OID
from .._typeinfo import CompositeInfo as CompositeInfo # exported here
return out
-class BaseCompositeLoader(RecursiveLoader):
+class BaseCompositeLoader(Loader):
+ def __init__(self, oid: int, context: Optional[AdaptContext] = None):
+ super().__init__(oid, context)
+ self._tx = Transformer(context)
+
def _parse_record(self, data: bytes) -> Iterator[Optional[bytes]]:
"""
Split a non-empty representation of a composite type into components.
)
-class RecordBinaryLoader(RecursiveLoader):
-
+class RecordBinaryLoader(Loader):
format = pq.Format.BINARY
_types_set = False
+ def __init__(self, oid: int, context: Optional[AdaptContext] = None):
+ super().__init__(oid, context)
+ self._tx = Transformer(context)
+
def load(self, data: Buffer) -> Tuple[Any, ...]:
if not self._types_set:
self._config_types(data)
types: Optional[Tuple[int, ...]]
formats: Optional[List[pq.Format]]
def __init__(self, context: Optional[abc.AdaptContext] = None): ...
+ @classmethod
+ def from_context(cls, context: Optional[abc.AdaptContext]) -> "Transformer": ...
@property
def connection(self) -> Optional[BaseConnection[Any]]: ...
@property
self.types = self.formats = None
+ @classmethod
+ def from_context(cls, context: Optional["AdaptContext"]):
+ """
+ Return a Transformer from an AdaptContext.
+
+ If the context is a Transformer instance, just return it.
+ """
+ if isinstance(context, Transformer):
+ return context
+ else:
+ return cls(context)
+
@property
def pgresult(self) -> Optional[PGresult]:
return self._pgresult