From: Daniele Varrazzo Date: Wed, 21 Dec 2022 23:00:32 +0000 (+0000) Subject: perf: micro-optimize AdaptersMap.get_dumper X-Git-Tag: 3.1.8~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=850827fa51fd75abac6cc4eef8932713983f0a76;p=thirdparty%2Fpsycopg.git perf: micro-optimize AdaptersMap.get_dumper Minimal amount of opcodes in case of fast-path (there is an adapter precisely for the class queried). --- diff --git a/psycopg/psycopg/_adapters_map.py b/psycopg/psycopg/_adapters_map.py index a3a6ef889..70bf4cc02 100644 --- a/psycopg/psycopg/_adapters_map.py +++ b/psycopg/psycopg/_adapters_map.py @@ -197,9 +197,15 @@ class AdaptersMap: use the last one of the dumpers registered on `!cls`. """ try: - dmap = self._dumpers[format] + # Fast path: the class has a known dumper. + return self._dumpers[format][cls] except KeyError: - raise ValueError(f"bad dumper format: {format}") + if format not in self._dumpers: + raise ValueError(f"bad dumper format: {format}") + + # If the KeyError was caused by cls missing from dmap, let's + # look for different cases. + dmap = self._dumpers[format] # Look for the right class, including looking at superclasses for scls in cls.__mro__: