HEX
Server: LiteSpeed
System: Linux us-phx-web1284.main-hosting.eu 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: u300739242 (300739242)
PHP: 8.2.30
Disabled: system, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/alt/python311/lib/python3.11/site-packages/pyroute2/ndb/__pycache__/report.cpython-311.pyc
�

�;ft/���dZddlZddlZddlmZddlmZdZdZdd�Z	dd	�Z
Gd
�d��ZGd�d
e��Z
Gd�de��ZGd�de
��ZdS)a�
.. note:: New in verision 0.5.11

.. testsetup::

    from pyroute2 import NDB
    ndb = NDB(sources=[{'target': 'localhost', 'kind': 'IPMock'}])

.. testcleanup:: *

    for key, value in tuple(globals().items()):
        if key.startswith('ndb') and hasattr(value, 'close'):
            value.close()

Filtering example:

.. testcode::

    report = ndb.interfaces.dump()
    report.select_fields('index', 'ifname', 'address', 'state')
    report.transform_fields(
        address=lambda r: '%s%s.%s%s.%s%s' % tuple(r.address.split(':'))
    )
    for record in report.format('csv'):
        print(record)

.. testoutput::

    'index','ifname','address','state'
    1,'lo','0000.0000.0000','up'
    2,'eth0','5254.0072.58b2','up'

�N)�chain)�clii'zX
RecordSet API is deprecated, pls refer to:

https://docs.pyroute2.org/ndb_reports.html
Fc	#�(K�g}d}dV�|D]�}|�
|r|j}n|}�|r|dxxdz
cc<|D]}|V��g}tjtt	||����d����d��}|�d��t|dd���D]0}|ddkr
|dd�}|�d	|z���1|ddd�|d<|�d
����|D]}|V��dV�dS)N�[����,�)�indent�
z    {�z    %s,z    }�])�_names�json�dumps�dict�zip�split�append�sorted)�dump�headless�buf�fnames�record�line�liness       �F/opt/alt/python311/lib/python3.11/site-packages/pyroute2/ndb/report.py�format_jsonr2sl����
�C�
�F�

�I�I�I������>��
���������	���G�G�G�s�N�G�G�G��
�
���
�
�
�
��C��
�4��F�F� 3� 3�4�4�Q�?�?�?�E�E�d�K�K���
�
�7�����5��2��;�'�'�	)�	)�D��B�x�3����C�R�C�y���J�J�y�4�'�(�(�(�(��b�'�#�2�#�,��B���
�
�7����������
�
�
�
�

�I�I�I�I�I�c#�K�d�}d}|D]M}|�)|r'd}d�||j����V�d�||����V��NdS)Nc���g}|D]`}t|t��r|�d|z���0|�|�d���H|�d|z���a|S)Nz%i�z'%s')�
isinstance�intr)�rec�row�fields   r�dump_recordzformat_csv.<locals>.dump_recordPsu�����	+�	+�E��%��%�%�
+��
�
�4�%�<�(�(�(�(����
�
�2������
�
�6�E�>�*�*�*�*��
rTr)�joinr)rrr(rrs     r�
format_csvr*Os�����	�	�	��F��,�,���>�h�>��F��(�(�;�;�v�}�5�5�6�6�6�6�6��h�h�{�{�6�*�*�+�+�+�+�+�+�	,�,rc�`�eZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zdd�Z
d
�Zd�ZdS)�RecordNc���t|��|_t|��|_t|j��t|j��krt	d���||_dS)Nz*names and values must have the same length)�tupler�_values�len�
ValueError�
_ref_class)�self�names�values�	ref_classs    r�__init__zRecord.__init__dsU���E�l�l����V�}�}����t�{���s�4�<�0�0�0�0��I�J�J�J�#����rc��t|j��}t|j��D]}|dz}||kr|j|cS�dS)Nr)r0r�reversedr/)r3�key�idx�is    r�__getitem__zRecord.__getitem__ks^���$�+�����$�+�&�&�	)�	)�A��1�H�C��C�x�x��|�C�(�(�(�(��	)�	)rc� �td���)N�immutable object)�	TypeError)r3�argv�kwargs   r�__setitem__zRecord.__setitem__rs���*�+�+�+rc�r�|�d��rt�||��S||S)N�_)�
startswith�object�__getattribute__�r3r:s  rrHzRecord.__getattribute__us6���>�>�#���	��*�*�4��5�5�5���9�rc��|�d��std���t�|||��S)NrEr?)rFr@rG�__setattr__)r3r:�values   rrKzRecord.__setattr__{s=���~�~�c�"�"�	0��.�/�/�/��!�!�$��U�3�3�3rc�*�t|j��S�N)�iterr/�r3s r�__iter__zRecord.__iter__�����D�L�!�!�!rc�*�t|j��SrN)�reprr/rPs r�__repr__zRecord.__repr__�rRrc�*�t|j��SrN)r0r/rPs r�__len__zRecord.__len__�s���4�<� � � rc�R��t|t�fd�|���j��S)Nc����|SrN�)�xr3s �r�<lambda>z'Record._select_fields.<locals>.<lambda>�s���D��G�r)r,�mapr2�r3�fieldss` r�_select_fieldszRecord._select_fields�s+����f�c�"3�"3�"3�"3�V�<�<�d�o�N�N�Nrc���|���}|���D]\}}||��||<�t|���|���|j��SrN)�_as_dict�itemsr,�keysr5r2)r3�spec�datar:�funcs     r�_transform_fieldszRecord._transform_fields�sa���}�}���������	#�	#�I�C����T�
�
�D��I�I��d�i�i�k�k�4�;�;�=�=�$�/�B�B�Brc���t|��r||��S|���D]5\}}t|��r|||��sn|||ksdS�6dS)NFT)�callablerc)r3�frer:rLs     r�_matchz
Record._match�s}���A�;�;�	��1�T�7�7�N��*�*�,�,�	�	�J�C��$,�U�O�O�
���d�3�i� � �
�
�:>�s�)�u�:L�:L��u�u���trc�T�i}t|j|j��D]
\}}|||<�|SrN)rrr/)r3�retr:rLs    rrbzRecord._as_dict�s8�����d�k�4�<�8�8�	�	�J�C���C��H�H��
rc�D�t|d��rftd�t|j|j��D����}td�t|j|j��D����}|o|St|t��r,|���D]\}}|||krn�dSdS|j�7t|ttf��r|j�||��Std�t|j|��D����S)Nrc3�:K�|]}|d|dkV��dS�rrNrZ��.0r[s  r�	<genexpr>z Record.__eq__.<locals>.<genexpr>�s.����I�I�Q�A�a�D�A�a�D�L�I�I�I�I�I�Irc3�:K�|]}|d|dkV��dSrqrZrrs  rrtz Record.__eq__.<locals>.<genexpr>�s.����K�K�Q�A�a�D�A�a�D�L�K�K�K�K�K�KrTFc3�:K�|]}|d|dkV��dSrqrZrrs  rrtz Record.__eq__.<locals>.<genexpr>�s.����F�F��q��t�q��t�|�F�F�F�F�F�Fr)�hasattr�allrrr/r#rrcr2�strr$�compare_record)r3�right�n�vr:rLs      r�__eq__z
Record.__eq__�s!���5�(�#�#�	G��I�I�#�d�k�5�<�*H�*H�I�I�I�I�I�A��K�K�#�d�l�E�M�*J�*J�K�K�K�K�K�A��7��N�
��t�
$�
$�
	G�#�k�k�m�m�
�
�
��U��D��I�%�%��E�&��t��5�
�_�
(�Z���S�z�-J�-J�
(��?�1�1�$��>�>�>��F�F�S���u�-E�-E�F�F�F�F�F�FrrN)�__name__�
__module__�__qualname__r7r=rCrHrKrQrUrWr`rhrlrbr~rZrrr,r,cs�������$�$�$�$�)�)�)�,�,�,����4�4�4�
"�"�"�"�"�"�!�!�!�O�O�O�C�C�C��������G�G�G�G�Grr,c�4�eZdZd	d�Zd�Zd�Zd�Zd�Zd�ZdS)
�
BaseRecordSet�(...)c�"�||_||_dSrN)�	generator�ellipsis)r3r�r�s   rr7zBaseRecordSet.__init__�s��"��� ��
�
�
rc��|SrNrZrPs rrQzBaseRecordSet.__iter__�����rc�*�t|j��SrN)�nextr�rPs r�__next__zBaseRecordSet.__next__�s���D�N�#�#�#rc��|SrNrZrPs r�	__enter__zBaseRecordSet.__enter__�r�rc��dSrNrZ)r3�exc_type�	exc_value�	tracebacks    r�__exit__zBaseRecordSet.__exit__�s���rc��d}g}|D]�}t|t��r|�|��n"|�t|����|�d��|dz
}|jr'|t
kr|�|j��n��|r|���d�|��S)Nrrrr")r#ryrrTr��MAX_REPORT_LINES�popr))r3�counterrnrs    rrUzBaseRecordSet.__repr__�s��������		�		�F��&�#�&�&�
)��
�
�6�"�"�"�"��
�
�4��<�<�(�(�(��J�J�t�����q�L�G��}�
��+;�!;�!;��
�
�4�=�)�)�)�����	��G�G�I�I�I��w�w�s�|�|�rN)r�)	rr�r�r7rQr�r�r�rUrZrrr�r��ss������!�!�!�!����$�$�$����
�
�
�����rr�c�$��eZdZd�Z�fd�Z�xZS)�RecordSetConfigc��t|t��r!|���D]
\}}|||<�dStd���)Nzonly dict allowed)r#rrcr1)r3�primer:rLs    rr7zRecordSetConfig.__init__�sU���e�T�"�"�	2�#�k�k�m�m�
"�
"�
��U�!��S�	�	�
"�
"��0�1�1�1rc���t|t��rtj|��}t	���||��SrN)r#ryr�loads�superrC)r3r:rL�	__class__s   �rrCzRecordSetConfig.__setitem__�s>����e�S�!�!�	&��J�u�%�%�E��w�w�"�"�3��.�.�.r)rr�r�r7rC�
__classcell__�r�s@rr�r��sG�������2�2�2�/�/�/�/�/�/�/�/�/rr�c�b��eZdZdZd�fd�	Zd�Zejd���Zejdd���Z	ejd���Z
ejd	���Zejdd
���Zejd���Z
ejd���Zejd
�dfd���Zejd���Zd�Zd�Z�xZS)�	RecordSeta=
    NDB views return objects of this class with `summary()` and `dump()`
    methods. RecordSet objects are generator-based, they do not store the
    data in the memory, but transform them on the fly.

    RecordSet filters also return objects of this class, thus making possible
    to make chains of filters.
    NTc���t���||��g|_|�t|��ni|_dSrN)r�r7�filtersr��config)r3r�r�r�r�s    �rr7zRecordSet.__init__�sA���
������H�-�-�-����17�1C�o�f�-�-�-�����rc�d�	t|j��}|jD]}||��}|�n�|S�0rN)r�r�r�)r3rrks   rr�zRecordSet.__next__�sO��	��$�.�)�)�F��\�
�
����6�����>��E�"��
�	rc���|j��fd���|j�d��rt	||j���SdS)a]
        Select only chosen fields for every record:

        .. testcode::

            report = ndb.interfaces.dump()
            report.select_fields('index', 'ifname')
            for line in report.format('csv'):
                print(line)

        .. testoutput::

            'index','ifname'
            1,'lo'
            2,'eth0'
        c���|j��SrN)r`)r[r_s �rr\z)RecordSet.select_fields.<locals>.<lambda>s���&6�a�&6��&?�r�recordset_pipe�r�N�r�rr��getr�r^s `r�
select_fieldszRecordSet.select_fields�s[���$	
����?�?�?�?�@�@�@��;�?�?�+�,�,�	7��T�$�+�6�6�6�6�	7�	7rc����|j���fd���|j�d��rt	||j���SdS)a�
        Select records based on a function f() or a spec match. A spec
        is dictionary of pairs `field: constant` or `field: callable`:

        .. testcode::

            report = ndb.addresses.summary()
            report.select_records(ifname=lambda x: x.startswith('eth'))
            for line in report.format('csv'):
                print(line)

        .. testoutput::

            'target','tflags','ifname','address','prefixlen'
            'localhost',0,'eth0','192.168.122.28',24
        c�(��|j�fi���r|ndSrN)rl)r[rkres ��rr\z*RecordSet.select_records.<locals>.<lambda>&s$���8�1�8�A�+>�+>��+>�+>�&H�a�a�D�rr�r�Nr�)r3rkres ``r�select_recordszRecordSet.select_recordss_����$	
����H�H�H�H�H�I�I�I��;�?�?�+�,�,�	7��T�$�+�6�6�6�6�	7�	7rc���|j��fd���|j�d��rt	||j���SdS)a'
        Transform fields with a function. Function must accept
        the record as the only argument:

        .. testcode::

            report = ndb.addresses.summary()
            report.transform_fields(
                address=lambda r: f'{r.address}/{r.prefixlen}'
            )
            report.select_fields('ifname', 'address')
            for line in report.format('csv'):
                print(line)

        .. testoutput::

            'ifname','address'
            'lo','127.0.0.1/8'
            'eth0','192.168.122.28/24'
        c���|jdi���S)NrZ)rh)r[rBs �rr\z,RecordSet.transform_fields.<locals>.<lambda>@s���&9�a�&9�&B�&B�E�&B�&B�rr�r�Nr�)r3rBs `r�transform_fieldszRecordSet.transform_fields*s[���,	
����B�B�B�B�C�C�C��;�?�?�+�,�,�	7��T�$�+�6�6�6�6�	7�	7rc�~���tjtt����fd�}t	|����S)Nc3��K��jD]}t|t��rdg}|j}t	||j��D]/\}}|�vr�||��}|�|���0t|||j��}|V���dSrN)r�r#r,rrr/rr2)rr5r4�namerLrBr3s     ��r�gzRecordSet.transform.<locals>.gHs�������.�	
�	
���f�f�-�-�F��F�"�M�E�'*�5�&�.�'A�'A�-�-���e��5�=�=�$/�E�$�K��$6�$6�E��
�
�e�,�,�,�,�#�E�6�6�3D�E�E�F������	
�	
r��warnings�warn�deprecation_notice�DeprecationWarningr�)r3rBr�s`` r�	transformzRecordSet.transformDsJ�����
�(�*<�=�=�=�
	�
	�
	�
	�
	�
	������~�~�rc�����tjtt�����fd�}t	|����S)Nc3��K��jD]=}d}�D]}�|t||��krd}�|r��|V��.�|��r|V��>dS)NTF)r��getattr)r�mr:rkrBr3s   ���rr�zRecordSet.filter.<locals>.gZs�������.�	
%�	
%���� �"�"�C��S�z�W�V�S�%9�%9�9�9�!����%��y�$�������6���%�$�����	
%�	
%rr�)r3rkrBr�s``` r�filterzRecordSet.filterVsP������
�(�*<�=�=�=�
	%�
	%�
	%�
	%�
	%�
	%�
	%������~�~�rc�T�tjtt��|j|�SrN)r�r�r�r�r_)r3rAs  r�selectzRecordSet.selecths%���
�(�*<�=�=�=��t�{�D�!�!rc�~���tjtt����fd�}t	|����S)Nc3�8�K��jD]}|j��V��dSrN)r�r`)rr_r3s ��rr�zRecordSet.fields.<locals>.gqs;������.�
5�
5��+�f�+�V�4�4�4�4�4�
5�
5rr�)r3r_r�s`` rr_zRecordSet.fieldsmsJ�����
�(�*<�=�=�=�	5�	5�	5�	5�	5�	5������~�~�rc��dS�NTrZ)�r1�r2s  rr\zRecordSet.<lambda>xs��4�rr"c������tjtt��t	��������fd�}t|����S)Nc	3�&�K��jD]�}�D]�}�||��rrtt|j�fd�|jD������}tt|j|j����}t|||j��V�����dS)Nc���g|]}��|����	SrZrZ)rsr[�prefixs  �r�
<listcomp>z-RecordSet.join.<locals>.g.<locals>.<listcomp>�s"��� I� I� I�!�6�6�1�1�!5� I� I� Ir)r�r.rrr/r,r2)r�r�r|r}�	conditionr�r{r3s    ����rr�zRecordSet.join.<locals>.g~s�������n�

:�

:���	:�	:�B� �y��R�(�(�:�!�!� "�	� I� I� I� I�r�y� I� I� I������"�%��
�B�J�"?�"?�@�@��$�Q��2�=�9�9�9�9�9��	:�

:�

:r)r�r�r�r�r.r�)r3r{r�r�r�s```` rr)zRecordSet.joinwsc�������
�(�*<�=�=�=��e����	:�	:�	:�	:�	:�	:�	:�	:������~�~�rc��|dkrtt|d�����S|dkrtt|d�����St���)zu
        Return an iterator over text lines in the chosen format.

        Supported formats: 'json', 'csv'.
        rT)r�csv)r�rr*r1)r3�kinds  r�formatzRecordSet.format�sV���6�>�>� ��T�D�!A�!A�!A�B�B�B�
�U�]�]� ��D�4�!@�!@�!@�A�A�A��,�,�rc��d}|D]}|dz
}�|S)zW
        Return number of records.

        The method exhausts the generator.
        rrrZ)r3r�rs   r�countzRecordSet.count�s(�����	�	�F��q�L�G�G��rc�,�t|��|SrN)�listrIs  rr=zRecordSet.__getitem__�s���D�z�z�#��rr�rN)rr�r��__doc__r7r�r�show_resultr�r�r�r�r�r�r_r)r�r�r=r�r�s@rr�r��s����������L�L�L�L�L�L�
���	�_�7�7��_�7�*	�_�7�7�7��_�7�*	�_�7�7��_�7�2	�_����_��"	�_�����_��"	�_�"�"��_�"�	�_����_��	�_�$7�$7������_��*	�_����_��	�	�	�������rr�)F)r�rr��	itertoolsr�pyroute2rr�r�rr*r,rGr�rr�r�rZrr�<module>r�sJ�� � �D����������������������������:,�,�,�,�(NG�NG�NG�NG�NG�NG�NG�NG�b � � � � �F� � � �F/�/�/�/�/�d�/�/�/�B�B�B�B�B�
�B�B�B�B�Br