3 �^� � @ sV d dl Z d dlZddlmZ ddlmZ ddlmZ ddlm Z G dd� dee�Z dS ) � N� )�MatchContext)�IbpkeyconRange)�PolicyQuery)�match_rangec st e Zd ZdZdZdZdZdZdZdZ � fdd�Z edd� �Zej dd� �Zed d � �Zej dd � �Zdd � Z� ZS )�IbpkeyconQuerya Infiniband pkey context query. Parameter: policy The policy to query. Keyword Parameters/Class attributes: subnet_prefix A subnet prefix to match. pkeys A 2-tuple of the pkey range to match. (Set both to the same value for a single pkey) pkeys_subset If true, the criteria will match if it is a subset of the ibpkeycon's range. pkeys_overlap If true, the criteria will match if it overlaps any of the ibpkeycon's range. pkeys_superset If true, the criteria will match if it is a superset of the ibpkeycon's range. pkeys_proper If true, use proper superset/subset operations. No effect if not using set operations. user The criteria to match the context's user. user_regex If true, regular expression matching will be used on the user. role The criteria to match the context's role. role_regex If true, regular expression matching will be used on the role. type_ The criteria to match the context's type. type_regex If true, regular expression matching will be used on the type. range_ The criteria to match the context's range. range_subset If true, the criteria will match if it is a subset of the context's range. range_overlap If true, the criteria will match if it overlaps any of the context's range. range_superset If true, the criteria will match if it is a superset of the context's range. range_proper If true, use proper superset/subset operations. No effect if not using set operations. NFc s$ t t| �j|f|� tjt�| _d S )N)�superr �__init__�loggingZ getLogger�__name__�log)�self�policy�kwargs)� __class__� �&/usr/lib64/python3.6/ibpkeyconquery.pyr K s zIbpkeyconQuery.__init__c C s | j S )N)�_pkeys)r r r r �pkeysO s zIbpkeyconQuery.pkeysc C s� |d k rvt |� }|jdk s$|jdk r2tdj|���|jdksF|jdkrTtdj|���|j|jkrntdj|���|| _nd | _d S )Nr z.Pkeys must be positive: {0.low:#x}-{0.high:#x}i�� z/Pkeys maximum is 0xffff: {0.low:#x}-{0.high:#x}zGThe low pkey must be smaller than the high pkey: {0.low:#x}-{0.high:#x})r ZlowZhigh� ValueError�formatr )r �valueZ pending_pkeysr r r r S s c C s | j S )N)�_subnet_prefix)r r r r � subnet_prefixi s zIbpkeyconQuery.subnet_prefixc C s |rt j|�| _nd | _d S )N)� ipaddressZIPv6Addressr )r r r r r r m s c c s� | j jdj| �� | j jdj| �� | j jdj| �� | j| j � xf| jj� D ]X}| jdk rj| j|jkrjqN| jr�t |j| j| j | j| j| j � r�qN| j|j�s�qN|V qNW dS )z/Generator which yields all matching ibpkeycons.z,Generating ibpkeycon results from {0.policy}z Subnet Prefix: {0.subnet_prefix}z~Pkeys: {0.pkeys}, overlap: {0.pkeys_overlap}, subset: {0.pkeys_subset}, superset: {0.pkeys_superset}, proper: {0.pkeys_proper}N)r �infor �debugZ_match_context_debugr Z ibpkeyconsr r r �pkeys_subset� pkeys_overlap�pkeys_superset�pkeys_properZ_match_context�context)r Zpkr r r �resultst s&