3 گaB @ s d Z ddlmZ ddlmZ ddlZddlZddlZddlZddlZddl m Z ddl mZ ddl mZ ddl m Z dd l mZ dd l mZ ddl mZ ddlZddlmZ dd lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm!Z" ddl#m$Z$ ej%e&Z'e(e(dddZ)e(e(dddZ*ej+dZ,ej+dej-Z.G dd d e"ed!Z!G d"d# d#e e!ed!ZG d$d% d%eej/ed!Z0G d&d' d'Z1G d(d) d)Z2e(e(e(ee( dd*d+d,Z3e(e(ee(e(e(f d-d.d/Z4dS )0zPlugin common functions. )ABCMeta)abstractmethodN)Any)Callable)Iterable)List)Optional)Set)Tuple)achallenges) configuration)crypto_util) interfaces)errors)reverter) constants) filesystem)os) Installer)Plugin) PluginStorage)namereturnc C s | d S )z9ArgumentParser options namespace (prefix of all options).- )r r r /usr/lib/python3.6/common.pyoption_namespace# s r c C s | j ddd S )z;ArgumentParser dest namespace (prefix of all destinations).r _)replace)r r r r dest_namespace( s r zX(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)z3^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*[a-z]+$c s e Zd ZdZejedd fddZee e d dddd Zeej edd ddZeed ddZeedddZeed ddZeedddZeedddZeej edddZ ZS )r zGeneric plugin.N)configr r c s t j|| || _|| _d S )N)super__init__r r )selfr r ) __class__r r r" 7 s zPlugin.__init__.)addr c C s dS )zAdd plugin arguments to the CLI argument parser. :param callable add: Function that proxies calls to `argparse.ArgumentParser.add_argument` prepending options with unique plugin name prefix. Nr )clsr% r r r add_parser_arguments<