| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- # cyextension/util.pyx
- # Copyright (C) 2005-2024 the SQLAlchemy authors and contributors
- # <see AUTHORS file>
- #
- # This module is part of SQLAlchemy and is released under
- # the MIT License: https://www.opensource.org/licenses/mit-license.php
- from collections.abc import Mapping
- from sqlalchemy import exc
- cdef tuple _Empty_Tuple = ()
- cdef inline bint _is_mapping_or_tuple(object value):
- return isinstance(value, dict) or isinstance(value, tuple) or isinstance(value, Mapping)
- cdef inline bint _is_mapping(object value):
- return isinstance(value, dict) or isinstance(value, Mapping)
- def _distill_params_20(object params):
- if params is None:
- return _Empty_Tuple
- elif isinstance(params, list) or isinstance(params, tuple):
- if params and not _is_mapping(params[0]):
- raise exc.ArgumentError(
- "List argument must consist only of dictionaries"
- )
- return params
- elif _is_mapping(params):
- return [params]
- else:
- raise exc.ArgumentError("mapping or list expected for parameters")
- def _distill_raw_params(object params):
- if params is None:
- return _Empty_Tuple
- elif isinstance(params, list):
- if params and not _is_mapping_or_tuple(params[0]):
- raise exc.ArgumentError(
- "List argument must consist only of tuples or dictionaries"
- )
- return params
- elif _is_mapping_or_tuple(params):
- return [params]
- else:
- raise exc.ArgumentError("mapping or sequence expected for parameters")
- cdef class prefix_anon_map(dict):
- def __missing__(self, str key):
- cdef str derived
- cdef int anonymous_counter
- cdef dict self_dict = self
- derived = key.split(" ", 1)[1]
- anonymous_counter = self_dict.get(derived, 1)
- self_dict[derived] = anonymous_counter + 1
- value = f"{derived}_{anonymous_counter}"
- self_dict[key] = value
- return value
- cdef class cache_anon_map(dict):
- cdef int _index
- def __init__(self):
- self._index = 0
- def get_anon(self, obj):
- cdef long long idself
- cdef str id_
- cdef dict self_dict = self
- idself = id(obj)
- if idself in self_dict:
- return self_dict[idself], True
- else:
- id_ = self.__missing__(idself)
- return id_, False
- def __missing__(self, key):
- cdef str val
- cdef dict self_dict = self
- self_dict[key] = val = str(self._index)
- self._index += 1
- return val
|