File: //opt/saltstack/salt/lib/python3.10/site-packages/jaraco/__pycache__/collections.cpython-310.pyc
o
;j�g � @ s d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm Z m
Z
mZ d dlm
Z
mZ d dlZee
e e
e jf Zdede
fdd�ZG dd � d ejj�ZG d
d� de�Zdd
� ZG dd� de�Zdd� Zedfdd�ZG dd� de�ZG dd� de�ZG dd� d�ZG dd� d�Zdd� Z G dd � d e�Z!G d!d"� d"e"ejj#�Z$G d#d$� d$e�Z%G d%d&� d&ejjejj&�Z'G d'd(� d(ee%�Z(G d)d*� d*�Z)G d+d,� d,ej*�Z+G d-d.� d.�Z,G d/d0� d0�Z-d1d2� Z.G d3d4� d4ej/�Z0G d5d6� d6�Z1G d7d8� d8e�Z2dS )9� N)� Container�Iterable�Mapping)�Callable�Union�obj�returnc C s8 t | tj�r | jS t | t�st | t�st| �} | j} | S �N)�
isinstance�re�Pattern� fullmatchr r �set�__contains__)r � r �F/opt/saltstack/salt/lib/python3.10/site-packages/jaraco/collections.py� _dispatch s
r c @ sB e Zd ZdZdedefdd�Zdd� Zdd � Zd
d� Z dd
� Z
dS )�
ProjectionaT
Project a set of keys over a mapping
>>> sample = {'a': 1, 'b': 2, 'c': 3}
>>> prj = Projection(['a', 'c', 'd'], sample)
>>> dict(prj)
{'a': 1, 'c': 3}
Projection also accepts an iterable or callable or pattern.
>>> iter_prj = Projection(iter('acd'), sample)
>>> call_prj = Projection(lambda k: ord(k) in (97, 99, 100), sample)
>>> pat_prj = Projection(re.compile(r'[acd]'), sample)
>>> prj == iter_prj == call_prj == pat_prj
True
Keys should only appear if they were specified and exist in the space.
Order is retained.
>>> list(prj)
['a', 'c']
Attempting to access a key not in the projection
results in a KeyError.
>>> prj['b']
Traceback (most recent call last):
...
KeyError: 'b'
Use the projection to update another dict.
>>> target = {'a': 2, 'b': 2}
>>> target.update(prj)
>>> target
{'a': 1, 'b': 2, 'c': 3}
Projection keeps a reference to the original dict, so
modifying the original dict may modify the Projection.
>>> del sample['a']
>>> dict(prj)
{'c': 3}
�keys�spacec C s t |�| _|| _d S r )r �_match�_space)�selfr r r r r �__init__M �
zProjection.__init__c C s | � |�s t|��| j| S r )r �KeyErrorr �r �keyr r r �__getitem__Q s
zProjection.__getitem__c C s t | j| j�S r )�filterr r �r r r r �_keys_resolvedV � zProjection._keys_resolvedc C s | � � S r )r! r r r r �__iter__Y s zProjection.__iter__c C s t t| �� ��S r )�len�tupler! r r r r �__len__\ � zProjection.__len__N)�__name__�
__module__�__qualname__�__doc__�
_Matchabler r r r! r# r&