PHP 8.2.30
Preview: _py_util.py Size: 2.12 KB
/opt/hc_python/lib/python3.12/site-packages/sqlalchemy/sql/_py_util.py

# sql/_py_util.py
# Copyright (C) 2005-2025 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 __future__ import annotations

import typing
from typing import Any
from typing import Dict
from typing import Tuple
from typing import Union

from ..util.typing import Literal

if typing.TYPE_CHECKING:
    from .cache_key import CacheConst


class prefix_anon_map(Dict[str, str]):
    """A map that creates new keys for missing key access.

    Considers keys of the form "<ident> <name>" to produce
    new symbols "<name>_<index>", where "index" is an incrementing integer
    corresponding to <name>.

    Inlines the approach taken by :class:`sqlalchemy.util.PopulateDict` which
    is otherwise usually used for this type of operation.

    """

    def __missing__(self, key: str) -> str:
        (ident, derived) = key.split(" ", 1)
        anonymous_counter = self.get(derived, 1)
        self[derived] = anonymous_counter + 1  # type: ignore
        value = f"{derived}_{anonymous_counter}"
        self[key] = value
        return value


class cache_anon_map(
    Dict[Union[int, "Literal[CacheConst.NO_CACHE]"], Union[Literal[True], str]]
):
    """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_: Any) -> Tuple[str, bool]:
        idself = id(object_)
        if idself in self:
            s_val = self[idself]
            assert s_val is not True
            return s_val, True
        else:
            # inline of __missing__
            self[idself] = id_ = str(self._index)
            self._index += 1

            return id_, False

    def __missing__(self, key: int) -> str:
        self[key] = val = str(self._index)
        self._index += 1
        return val

Directory Contents

Dirs: 1 × Files: 31

Name Size Perms Modified Actions
- drwxr-xr-x 2025-04-04 08:02:04
Edit Download
17.82 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
72.21 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
32.88 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
39.70 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
269.12 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
55.19 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
46.32 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
16.32 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
64.68 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
173.16 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
17.88 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
7.41 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
62.36 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
48.04 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
6.70 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
74.99 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
7.48 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
224.63 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
235.41 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
125.93 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
32.88 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
82.85 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
46.96 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
35.47 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
3.71 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
61.16 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
625 B lrw-r--r-- 2025-04-04 08:02:01
Edit Download
2.12 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
19.90 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
12.55 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download
5.68 KB lrw-r--r-- 2025-04-04 08:02:01
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).