3
���\j� � @ s d dl mZmZmZ d dlZd dlZd dlZd dlZddlm Z ddl
mZmZ ddlm
Z
ddlm
Z
ddlmZ [[[G d d
� d
e�ZG dd� de�ZG d
d� de�Zdd� Zdd� Zdd� Zdd� Zdd� Zd%dd�Ze� dd� Zdd� Zd&dd �Zd!d"� Zd#d$� ZdS )'� )�absolute_import�print_function�unicode_literalsN� )�gpgme)�
errorcheck�
GPGMEError)� constants)�errors)�utilc s� e Zd ZdZdd� Z� fdd�Zdd� Zdd � Zd
d� Ze dd
� �Z
e dd� �Zdd� Ze
� Zddd�Zejd�Zdd� Z� fdd�Z� ZS )�GpgmeWrapperz>Base wrapper class
Not to be instantiated directly.
c C s d | _ || _d S )N)�_callback_excinfo�wrapped)�selfr � r �/usr/lib64/python3.6/core.py�__init__3 s zGpgmeWrapper.__init__c s dj tt| �j� | j�S )Nz <{}/{!r}>)�format�superr �__repr__r )r )� __class__r r r 7 s zGpgmeWrapper.__repr__c sP dj t� jj�g}� fdd�� jD �}|r@|jdj dj|��� dj dj|��S )Nz{}.{}c s g | ]}t � |�r|�qS r )�getattr)�.0�f)r r r �
= s z(GpgmeWrapper.__str__..z({})� z<{}>)r �__name__r �_boolean_properties�append�join)r Zacc�flagsr )r r �__str__; s
zGpgmeWrapper.__str__c C s t t| j��S )N)�hash�reprr )r r r r �__hash__C s zGpgmeWrapper.__hash__c C s$ |d krdS t | j�t |j�kS d S )NF)r# r )r �otherr r r �__eq__F s zGpgmeWrapper.__eq__c C s
t � �dS )z]The name of the c type wrapped by this class
Must be set by child classes.
N)�NotImplementedError)r r r r �_ctypeL s zGpgmeWrapper._ctypec C s
t � �dS )zgThe common prefix of c functions wrapped by this class
Must be set by child classes.
N)r' )r r r r �_cprefixU s zGpgmeWrapper._cprefixc C s
t � �dS )z�Must be implemented by child classes.
This function must return a trueish value for all c functions
returning gpgme_error_t.N)r' )r �namer r r �_errorcheck^ s zGpgmeWrapper._errorcheckFNc s� t tdj| j|��� t tdj| j|���� fdd�}�fdd�}t||dj|�d�}t| j||� |rv|| t|�� n|| �S d S ) Nz{}get_{}z{}set_{}c s t � | j��S )N)�boolr )�slf)�get_funcr r �getl s z1GpgmeWrapper.__wrap_boolean_property..getc s � | j t|�� d S )N)r r, )r- �value)�set_funcr r �set_o s z2GpgmeWrapper.__wrap_boolean_property..set_z{} flag)�doc)r r r r) �property�setattrr r, )r �keyZdo_setr0 r/ r2 �pr )r. r1 r Z__wrap_boolean_propertyh s z$GpgmeWrapper.__wrap_boolean_propertyz$gpgme_([^(]*)\(([^,]*), (.*\) -> .*)c s� |d dks�j dkrdS |�jkr.�j|�S �j | �tt����j��r\��fdd�� n�fdd�� �jjdt�d��}|� _t �j
|� � � �fd d
�}||_|S )z7On-the-fly generation of wrapper methods and propertiesr �_Nc s* � | j f|�� }| jr tj| � t|��S )N)r r
r �gpg_raise_callback_exceptionr )r- �args�result)�funcr* r r � _funcwrap� s
z+GpgmeWrapper.__getattr__.._funcwrapc s$ � | j f|�� }| jr tj| � |S )N)r r
r r9 )r- r: r; )r<