]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
perf: speed up Python UUID converters
authorAarni Koskela <akx@iki.fi>
Fri, 27 Feb 2026 16:38:59 +0000 (18:38 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 8 Mar 2026 18:23:10 +0000 (19:23 +0100)
psycopg/psycopg/types/uuid.py

index b094937add30742aa93b36b24da5e105c53d46e1..0e59de0982c91b95f0295fc2555830d5adf16e59 100644 (file)
@@ -25,14 +25,14 @@ class UUIDDumper(Dumper):
     oid = _oids.UUID_OID
 
     def dump(self, obj: uuid.UUID) -> Buffer | None:
-        return obj.hex.encode()
+        return b"%032x" % obj.int
 
 
 class UUIDBinaryDumper(UUIDDumper):
     format = Format.BINARY
 
     def dump(self, obj: uuid.UUID) -> Buffer | None:
-        return obj.bytes
+        return obj.int.to_bytes(16, "big")
 
 
 class UUIDLoader(Loader):
@@ -43,18 +43,14 @@ class UUIDLoader(Loader):
             from uuid import UUID
 
     def load(self, data: Buffer) -> uuid.UUID:
-        if isinstance(data, memoryview):
-            data = bytes(data)
-        return UUID(data.decode())
+        return UUID((bytes(data) if isinstance(data, memoryview) else data).decode())
 
 
 class UUIDBinaryLoader(UUIDLoader):
     format = Format.BINARY
 
     def load(self, data: Buffer) -> uuid.UUID:
-        if isinstance(data, memoryview):
-            data = bytes(data)
-        return UUID(bytes=data)
+        return UUID(bytes=(bytes(data) if isinstance(data, memoryview) else data))
 
 
 def register_default_adapters(context: AdaptContext) -> None: