|
Server : Apache System : Linux server.mata-lashes.com 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : matalashes ( 1004) PHP Version : 8.1.29 Disable Function : NONE Directory : /usr/local/lib64/python3.6/site-packages/pyrsistent/__pycache__/ |
Upload File : |
3
G�Kd�
� @ s d dl Z ddd�ZdS )� N� � ImmutableFc
s� t � t�r� jdd�j� � � fdd�}d}tjdk r@dj|d �}d
jdd� � D ��}d
j||rfd| nd|� ||d�}|r�t|� ddl m
} t|dd�}yt||� W n8 t
k
r� } zt
t| �d | �| �W Y dd} ~ X nX || S )a�
Produces a class that either can be used standalone or as a base class for persistent classes.
This is a thin wrapper around a named tuple.
Constructing a type and using it to instantiate objects:
>>> Point = immutable('x, y', name='Point')
>>> p = Point(1, 2)
>>> p2 = p.set(x=3)
>>> p
Point(x=1, y=2)
>>> p2
Point(x=3, y=2)
Inheriting from a constructed type. In this case no type name needs to be supplied:
>>> class PositivePoint(immutable('x, y')):
... __slots__ = tuple()
... def __new__(cls, x, y):
... if x > 0 and y > 0:
... return super(PositivePoint, cls).__new__(cls, x, y)
... raise Exception('Coordinates must be positive!')
...
>>> p = PositivePoint(1, 2)
>>> p.set(x=3)
PositivePoint(x=3, y=2)
>>> p.set(y=-3)
Traceback (most recent call last):
Exception: Coordinates must be positive!
The persistent class also supports the notion of frozen members. The value of a frozen member
cannot be updated. For example it could be used to implement an ID that should remain the same
over time. A frozen member is denoted by a trailing underscore.
>>> Point = immutable('x, y, id_', name='Point')
>>> p = Point(1, 2, id_=17)
>>> p.set(x=3)
Point(x=3, y=2, id_=17)
>>> p.set(id_=18)
Traceback (most recent call last):
AttributeError: Cannot set frozen members id_
�,� c s( dd� � D �} | r$dj dj| �d�S dS )Nc S s g | ]}|j d �rd| �qS )�_z'%s')�endswith)�.0�f� r
�;/tmp/pip-build-8nxjc3nm/pyrsistent/pyrsistent/_immutable.py�
<listcomp>5 s z9immutable.<locals>.frozen_member_test.<locals>.<listcomp>z�
frozen_fields = fields_to_modify & set([{frozen_members}])
if frozen_fields:
raise AttributeError('Cannot set frozen members %s' % ', '.join(frozen_fields))
z, )�frozen_membersr )�format�join)r
)�membersr
r �frozen_member_test4 s z%immutable.<locals>.frozen_member_testr � � z, verbose={verbose})�verbosez, c s s | ]}d | V qdS )z'%s'Nr
)r �mr
r
r � <genexpr>D s zimmutable.<locals>.<genexpr>a�
class {class_name}(namedtuple('ImmutableBase', [{quoted_members}]{verbose_string})):
__slots__ = tuple()
def __repr__(self):
return super({class_name}, self).__repr__().replace('ImmutableBase', self.__class__.__name__)
def set(self, **kwargs):
if not kwargs:
return self
fields_to_modify = set(kwargs.keys())
if not fields_to_modify <= {member_set}:
raise AttributeError("'%s' is not a member" % ', '.join(fields_to_modify - {member_set}))
{frozen_member_test}
return self.__class__.__new__(self.__class__, *map(kwargs.pop, [{quoted_members}], self))
z set([%s])zset())�quoted_membersZ
member_setr �verbose_string�
class_namer )�
namedtupleZpyrsistent_immutable)r �__name__z:
N)r r )�
isinstance�str�replace�split�sys�version_infor r �print�collectionsr �dict�exec�SyntaxError)
r �namer r r r �templater � namespace�er
)r r � immutable s* -
(r+ )r r F)r r+ r
r
r
r �<module> s