%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/samba/netcmd/domain/models/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/samba/netcmd/domain/models/__pycache__/fields.cpython-312.pyc

�

�I�d�;��h�ddlmZddlZddlmZmZddlmZddlmZddl	m
Z
mZmZm
Z
ddlmZddlmZmZGd	�d
e��ZGd�d
e�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�Zy) �)�IntEnumN)�ABCMeta�abstractmethod)�datetime)�ElementTree)�Dn�MessageElement�string_to_time�
timestring)�GUID)�ndr_pack�
ndr_unpackc�8�eZdZdZdd�Zed��Zed��Zy)�FieldaMBase class for all fields.

    Each field will need to implement from_db_value and to_db_value.

    A field must correctly support converting both single valued fields,
    and list type fields.

    The only thing many=True does is say the field "prefers" to be a list,
    but really any field can be a list or single value.
    Nc�h�||_||_||_|jr
|�g|_y||_y)aDCreates a new field, should be subclassed.

        :param name: Ldb field name.
        :param many: If true always convert field to a list when loaded.
        :param default: Default value or callback method (obj is first argument)
        :param hidden: If this is True, exclude the field when calling as_dict()
        N)�name�many�hidden�default)�selfrrrrs     �C/usr/lib/python3/dist-packages/samba/netcmd/domain/models/fields.py�__init__zField.__init__/s4����	���	�����9�9����D�L�"�D�L�c��y)z�Converts value read from the database to Python value.

        :param ldb: Ldb connection
        :param value: MessageElement value from the database
        :returns: Parsed value as Python type
        N�)r�ldb�values   r�
from_db_valuezField.from_db_valueBs��	
rc��y)a,Converts value to database value.

        This should return a MessageElement or None, where None means
        the field will be unset on the next save.

        :param value: Input value from Python field
        :param flags: MessageElement flags
        :returns: MessageElement or None
        Nr)rr�flagss   r�to_db_valuezField.to_db_valueLs��	
r)FNF)�__name__�
__module__�__qualname__�__doc__rrrr!rrrrr#s4��	�#�&�
��
��

��

rr)�	metaclassc��eZdZdZd�Zd�Zy)�IntegerFieldz5A simple integer field, can be an int or list of int.c��|�yt|�dkDs|jr|D�cgc]
}t|���c}St|d�Scc}w)z-Convert MessageElement to int or list of int.N�r)�lenr�int�rrr�items    rrzIntegerField.from_db_value]sC���=��
��Z�!�^�t�y�y�*/�0�$�C��I�0�0��u�Q�x�=� ��1��Ac���|�yt|t�r.t|D�cgc]
}t|���c}||j�Stt|�||j�Scc}w)z-Convert int or list of int to MessageElement.N��
isinstance�listr	�strr�rrr r.s    rr!zIntegerField.to_db_valuef�[���=��
��t�
$�!�',�-�t��T��-�u�d�i�i�A�
A�"�#�e�*�e�T�Y�Y�?�?��.��A"N�r"r#r$r%rr!rrrr(r(Zs��?�!�@rr(c��eZdZdZd�Zd�Zy)�BinaryFieldz�Similar to StringField but using bytes instead of str.

    This tends to be quite easy because a MessageElement already uses bytes.
    c��|�yt|�dkDs|jr|D�cgc]
}t|���c}St|d�Scc}w)z�Convert MessageElement to bytes or list of bytes.

        The values on the MessageElement should already be bytes so the
        cast to bytes() is likely not needed in from_db_value.
        Nr*r)r+r�bytesr-s    rrzBinaryField.from_db_valuewsE���=��
��Z�!�^�t�y�y�,1�2�D�E�$�K�2�2���q��?�"��3r/c���|�yt|t�r.t|D�cgc]
}t|���c}||j�Stt|�||j�Scc}w)z1Convert bytes or list of bytes to MessageElement.N)r2r3r	r<rr5s    rr!zBinaryField.to_db_value�s[���=��
��t�
$�!�).�/���t��/���	�	�C�
C�"�%��,��t�y�y�A�A��0r7Nr8rrrr:r:qs���
#�Brr:c��eZdZdZd�Zd�Zy)�StringFieldz6A simple string field, may contain str or list of str.c��|�yt|�dkDs|jr|D�cgc]
}t|���c}St|�Scc}w)z-Convert MessageElement to str or list of str.Nr*�r+rr4r-s    rrzStringField.from_db_value�s?���=��
��Z�!�^�t�y�y�*/�0�$�C��I�0�0��u�:���1s�Ac���|�yt|t�r.t|D�cgc]
}t|���c}||j�Stt|�||j�Scc}w)z-Convert str or list of str to MessageElement.Nr1r5s    rr!zStringField.to_db_value�r6r7Nr8rrrr?r?�s��@��@rr?c�6��eZdZdZd�fd�	Zd�Zd�Zd�Z�xZS)�	EnumFieldz(A field based around Python's Enum type.c�6��||_t�|�	|||�y)z0Create a new EnumField for the given enum class.N)�enum�superr)rrrFrr�	__class__s     �rrzEnumField.__init__�s�����	�
����t�W�-rc��t|jt�r#|jtt	|���S|jt	|��S)zvReturn Enum instance from value.

        Has a special case for IntEnum as the constructor only accepts int.
        )�
issubclassrFrr,r4)rrs  r�enum_from_valuezEnumField.enum_from_value�s<��
�d�i�i��)��9�9�S��U��_�-�-��9�9�S��Z�(�(rc��|�yt|�dkDs|jr|D�cgc]}|j|���c}S|j|�Scc}w)z/Convert MessageElement to enum or list of enum.Nr*)r+rrKr-s    rrzEnumField.from_db_value�sN���=��
��Z�!�^�t�y�y�;@�A�4�D�(�(��.�A�A��'�'��.�.��Bs�Ac��|�yt|t�r8t|D�cgc]}t|j���c}||j
�Stt|j�||j
�Scc}w)z/Convert enum or list of enum to MessageElement.N)r2r3r	r4rrr5s    rr!zEnumField.to_db_value�sd���=��
��t�
$�!�-2�3�T��T�Z�Z��3�U�D�I�I�G�
G�"�#�e�k�k�"2�E�4�9�9�E�E��4��A6�FN)	r"r#r$r%rrKrr!�
__classcell__�rHs@rrDrD�s���2�.�
)�/�FrrDc��eZdZdZd�Zd�Zy)�
DateTimeFieldz8A field for parsing ldb timestamps into Python datetime.c
��|�yt|�dkDs|jr5|D�cgc])}tjt	t|�����+c}Stjt	t|���Scc}w)z7Convert MessageElement to datetime or list of datetime.Nr*)r+rr�
fromtimestampr
r4r-s    rrzDateTimeField.from_db_value�sk���=��
��Z�!�^�t�y�y� %�'���*�*�>�#�d�)�+D�E�'�
'��)�)�.��U��*D�E�E��'s�.A:c�>�|�yt|t�rJt|D�cgc])}tt	tj|�����+c}||j�Sttt	tj|���||j�Scc}w)z7Convert datetime or list of datetime to MessageElement.N)r2r3r	rr,r�	timestamprr5s    rr!zDateTimeField.to_db_value�s����=��
��t�
$�!�GL�M�t��C�� 2� 2�4� 8�9�:�M��t�y�y�"�
"�"�*�S��1C�1C�E�1J�-K�"L�"'����4�
4��Ns�.BNr8rrrrSrS�s��B�F�
4rrSc�0��eZdZdZd�fd�	Zd�Zd�Z�xZS)�RelatedFieldz�A field that automatically fetches the related objects.

    Use sparingly, can be a little slow. If in doubt just use DnField instead.
    c�6��||_t�|�	|||�y)z.Create a new RelatedField for the given model.N)�modelrGr)rrr[rrrHs     �rrzRelatedField.__init__�s�����
�
����t�W�-rc�"�|�yt|�dkDs|jr>|D�cgc]2}|jj|t	|t|������4c}S|jj|t	|t|����Scc}w)z�Convert Message element to related object or list of objects.

        Note that fetching related items is not using any sort of lazy
        loading so use this field sparingly.
        Nr*)�dn)r+rr[�getrr4r-s    rrzRelatedField.from_db_value�sr���=��
��Z�!�^�t�y�y�KP�Q�4�D�J�J�N�N�3�2�c�3�t�9�+=�N�>�Q�Q��:�:�>�>�#�"�S�#�e�*�*=�>�>�>��Rs�7Bc��|�yt|t�r8t|D�cgc]}t|j���c}||j
�Stt|j�||j
�Scc}w)z<Convert related object or list of objects to MessageElement.N)r2r3r	r4r]rr5s    rr!zRelatedField.to_db_value�sc���=��
��t�
$�!�*/�0�$��T�W�W��0�%����D�
D�"�#�e�h�h�-���	�	�B�B��1rNrO)r"r#r$r%rrr!rPrQs@rrYrY�s����
.�
?�CrrYc��eZdZdZd�Zd�Zy)�DnFieldz5A Dn field parses the current field into a Dn object.c	���|�yt|t�r|St|�dkDs|jr#|D�cgc]}t|t	|����c}St|t	|��Scc}w)z<Convert MessageElement to a Dn object or list of Dn objects.Nr*)r2rr+rr4r-s    rrzDnField.from_db_values\���=��
��r�
"��L�
��Z�!�^�t�y�y�38�9�4�B�s�C��I�&�9�9��c�3�u�:�&�&��:s�A(c���|�yt|t�r.t|D�cgc]
}t|���c}||j�Stt|�||j�Scc}w)z>Convert Dn object or list of Dn objects into a MessageElement.Nr1r5s    rr!zDnField.to_db_valuer6r7Nr8rrrrara	s��?�	'�@rrac��eZdZdZd�Zd�Zy)�	GUIDFieldz4A GUID field decodes fields containing binary GUIDs.c	���|�yt|�dkDs|jr'|D�cgc]}ttt|����c}Sttt|d��Scc}w)z=Convert MessageElement with a GUID into a str or list of str.Nr*r)r+rr4rrr-s    rrzGUIDField.from_db_value%sT���=��
��Z�!�^�t�y�y�<A�B�D�C�
�4��.�/�B�B��z�$��a��1�2�2��Cs� A!c
���|�yt|t�r7t|D�cgc]}tt	|����c}||j
�Sttt	|��||j
�Scc}w)z*Convert str with GUID into MessageElement.N)r2r3r	r
rrr5s    rr!zGUIDField.to_db_value.se���=��
��t�
$�!�27�8�$��$�t�*�%�8�%����L�
L�"�(�4��;�"7���	�	�J�J��9s�A4Nr8rrrrere"s��>�3�Krrec��eZdZdZd�Zd�Zy)�BooleanFieldz6A simple boolean field, can be a bool or list of bool.c��|�yt|�dkDs|jr|D�cgc]}t|�dk(��c}St|�dk(Scc}w)z3Convert MessageElement into a bool or list of bool.Nr*�TRUErAr-s    rrzBooleanField.from_db_value<sI���=��
��Z�!�^�t�y�y�49�:�D�C��I��'�:�:��u�:��'�'��;s�Ac
�*�|�yt|t�rEt|D�cgc]$}tt	|��j���&c}||j�Sttt	|��j�||j�Scc}w)z3Convert bool or list of bool into a MessageElement.N)r2r3r	r4�bool�upperrr5s    rr!zBooleanField.to_db_valueEsv���=��
��t�
$�!�5:�;�T��T�$�Z��&�&�(�;�U�D�I�I�O�
O�"�#�d�5�k�"2�"8�"8�":�E�4�9�9�M�M��<s�)BNr8rrrriri9s��@�(�Nrric�(�eZdZdZdddd�Zd�Zd�Zy)	�PossibleClaimValuesFieldaqField for parsing possible values XML for claim types.

    This field will be represented by a list of dicts as follows:

    [
        {"ValueGUID": <GUID>},
        {"ValueDisplayName: "Display name"},
        {"ValueDescription: "Optional description or None for no description"},
        {"Value": <Value>},
    ]

    Note that the GUID needs to be created client-side when adding entries,
    leaving it as None then saving it doesn't generate the GUID.

    The field itself just converts the XML to list and vice versa, it doesn't
    automatically generate GUIDs for entries, this is entirely up to the caller.
    z http://www.w3.org/2001/XMLSchemaz)http://www.w3.org/2001/XMLSchema-instancezChttp://schemas.microsoft.com/2010/08/ActiveDirectory/PossibleValues)�xsd�xsi�c
��|��tjt|��}|jd|j�}g}|jd|j�D]�}|j
|jd|j�j|jd|j�j|jd|j�j|jd|j�jd����|Sy)	z/Parse MessageElement with XML to list of dicts.N�
StringList�Item�	ValueGUID�ValueDisplayName�ValueDescription�Value)rwrxryrz)r�
fromstringr4�find�	NAMESPACE�findall�append�text)rrr�root�string_list�valuesr.s       rrz&PossibleClaimValuesField.from_db_valuejs������)�)�#�e�*�5�D��)�)�L�$�.�.�A�K��F�#�+�+�F�D�N�N�C�
���
�
�!%���;����!G�!L�!L�(,�	�	�2D�26�.�.�)B�BF�$�(,�	�	�2D�26�.�.�)B�BF�$�!�Y�Y�w����?�D�D�
��
��M�rc�`�|�yt|t�r|}n|g}t|�dk(rytjd�}|j
j
�D]2\}}|dk(r|jd|��|jd|��|��4tj|d�}|D]�}tj|d�}	tj|	d	�}
|d	|
_	tj|	d
�}|d
|_	tj|	d�}|d|_	tj|	d�}
|d|
_	��tj�}tj|�j|d
dd��t|j�jd
�||j �S)z6Convert list of dicts back to XML as a MessageElement.Nr�PossibleClaimValuesrs�xmlnszxmlns:rurvrwrxryrzzutf-16TF)�encoding�xml_declaration�short_empty_elements)r2r3r+r�Elementr}�items�set�
SubElementr��io�BytesIO�writer	�getvalue�decoder)rrr �possible_valuesr�r�urlr��	item_dictr.�	item_guid�	item_name�	item_desc�
item_value�outs               rr!z$PossibleClaimValuesField.to_db_value}s����=���e�T�"�#�O�$�g�O����1�$���"�"�#8�9�����-�-�/�	/�I�D�#��r�z�����#�&����6�$���#�.�		/�"�,�,�T�<�@��)�		1�I��)�)�+�v�>�D�#�.�.�t�[�A�I�&�{�3�I�N�#�.�.�t�5G�H�I�&�'9�:�I�N�#�.�.�t�5G�H�I�&�'9�:�I�N�$�/�/��g�>�J�'��0�J�O�		1��j�j�l������%�+�+�C�5=�<@�AF�	,�	H��c�l�l�n�3�3�H�=�u�d�i�i�P�PrN)r"r#r$r%r}rr!rrrrprpPs$���(2�:�Q��I��&2Qrrp)rFrr��abcrrr�	xml.etreerrrr	r
r�samba.dcerpc.miscr�	samba.ndrr
rrr(r:r?rDrSrYrarerirprrr�<module>r�s���.�	�'��!�>�>�"�*�4
�g�4
�n@�5�@�.B�%�B�<@�%�@�.#F��#F�L4�E�4�4 C�5� C�F@�e�@�2K��K�.N�5�N�._Q�u�_Qr

Zerion Mini Shell 1.0