# sql/_py_util.py # Copyright (C) 2005-2022 the SQLAlchemy authors and contributors # # # This module is part of SQLAlchemy and is released under # the MIT License: https://www.opensource.org/licenses/mit-license.php class prefix_anon_map(dict): """A map that creates new keys for missing key access. Considers keys of the form " " to produce new symbols "_", where "index" is an incrementing integer corresponding to . Inlines the approach taken by :class:`sqlalchemy.util.PopulateDict` which is otherwise usually used for this type of operation. """ def __missing__(self, key): (ident, derived) = key.split(" ", 1) anonymous_counter = self.get(derived, 1) self[derived] = anonymous_counter + 1 value = f"{derived}_{anonymous_counter}" self[key] = value return value class cache_anon_map(dict): """A map that creates new keys for missing key access. Produces an incrementing sequence given a series of unique keys. This is similar to the compiler prefix_anon_map class although simpler. Inlines the approach taken by :class:`sqlalchemy.util.PopulateDict` which is otherwise usually used for this type of operation. """ _index = 0 def get_anon(self, object_): idself = id(object_) if idself in self: return self[idself], True else: # inline of __missing__ self[idself] = id_ = str(self._index) self._index += 1 return id_, False def __missing__(self, key): self[key] = val = str(self._index) self._index += 1 return val