a =*fO4 @ s d Z dZdZddlZddlZddlmZmZ ddlm Z m Z mZ dd lm Z mZmZmZ e eZeed Zdd ZG d d dZG dd de ZG dd deZdS )z?Cyril Jaquier, Yaroslav Halchenko, Serg G. Brester (aka sebres)z\Copyright (c) 2004 Cyril Jaquier, 2007 Yaroslav Halchenko, 2015 Serg G. Brester (aka sebres)ZGPL N) NoOptionErrorNoSectionError )sysSafeConfigParserWithIncludeslogLevel ) getLogger_as_bool_merge_dictssubstituteRecursiveTags)boolintc c sr t | ttfrL| D ]6}t|dkr.|\}}}n|d \}}}|||fV qn"| D ]}| | \}}|||fV qPdS )zIterator over the options template with default options. Each options entry is composed of an array or tuple with: [[type, name, ?default?], ...] Or it is a dict: {name: [type, default], ...} r N) isinstancelisttuplelen)optionsoptnameopttypeoptvalue r @/usr/lib/python3.9/site-packages/fail2ban/client/configreader.py_OptionsTemplateGen) s r c @ s e Zd ZdZd"ddZdd Zdd Zed d Zd#dd Z d$ddZ dd Zdd Zd%ddZ dd Zdd Zd&ddZdi fddZd d! ZdS )'ConfigReaderzkGeneric config reader class. A caching adapter which automatically reuses already shared configuration. Nc K sT d | _ d | _|d ur|| _|d ur6|| _ || _d | _n| jd u rPtf i || _d S N) _cfg_share_cfg_cfg_share_kwargs_cfg_share_basedirConfigReaderUnshared)selfZ use_configshare_configkwargsr r r __init__D s zConfigReader.__init__c C s | j r| j | n|| _d S r )r setBaseDirr r! basedirr r r r% R s zConfigReader.setBaseDirc C s | j r| j S | jS d S r )r getBaseDirr r! r r r r( X s zConfigReader.getBaseDirc C s | j S r )r r) r r r r" ^ s zConfigReader.share_configTc C sT | j s| | |r(| j jdur(| j jS td|| j | j |}|| j _|S )z Overloads a default (not shared) read of config reader. To prevent multiple reads of config files with it includes, reads into the config reader, if it was not yet cached/shared by 'name'. Nz Loading configs for %s under %s )r _create_unsharedread_cfg_fileslogSysinfor( read)r! nameonceretr r r r. b s zConfigReader.read c C sx | j sb| jdurb| j|| _ | j sttf d| ji| j| _ | jdurT| j | j | j | j|<