HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/google-cloud-cli/396/lib/third_party/cachetools/keys.py
"""Key functions for memoizing decorators."""

from __future__ import absolute_import

__all__ = ('hashkey', 'typedkey')


class _HashedTuple(tuple):
  """A tuple that ensures that hash() will be called no more than once

    per element, since cache decorators will hash the key multiple
    times on a cache miss.  See also _HashedSeq in the standard
    library functools implementation.

    """

  __hashvalue = None

  def __hash__(self, hash=tuple.__hash__):
    hashvalue = self.__hashvalue
    if hashvalue is None:
      self.__hashvalue = hashvalue = hash(self)
    return hashvalue

  def __add__(self, other, add=tuple.__add__):
    return _HashedTuple(add(self, other))

  def __radd__(self, other, add=tuple.__add__):
    return _HashedTuple(add(other, self))

  def __getstate__(self):
    return {}


# used for separating keyword arguments; we do not use an object
# instance here so identity is preserved when pickling/unpickling
_kwmark = (_HashedTuple,)


def hashkey(*args, **kwargs):
  """Return a cache key for the specified hashable arguments."""

  if kwargs:
    return _HashedTuple(args + sum(sorted(kwargs.items()), _kwmark))
  else:
    return _HashedTuple(args)


def typedkey(*args, **kwargs):
  """Return a typed cache key for the specified hashable arguments."""

  key = hashkey(*args, **kwargs)
  key += tuple(type(v) for v in args)
  key += tuple(type(v) for _, v in sorted(kwargs.items()))
  return key