o
    3g                     @  sl   d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ G dd deZG dd	 d	eZeZdS )
    )annotationsN)ABCabstractmethod)ConfigParserNoOptionErrorNoSectionError)localc                   @  s   e Zd ZdZd Zdd Zdd Zdd Ze	d	d
 Z
e	dd Ze	dd Ze	dd ZdddZdd Zdd Zdd ZdS )
ConfigBasea  Base class for Config parsers.

    :param filename: The file to use

    The ``with`` statement can be used to automatically try to read on entering and write if changed on exiting. Otherwise, use ``.read`` and ``.write`` as needed. Set and get the options using ``[]`` syntax.

    Usage:

        with Config("~/.myprog_rc") as conf:
            value = conf.get("option", "default")
            value2 = conf["option"] # shortcut for default=None

    zfilename changedc                 C  s   t || _d| _d S )NF)r   pathfilenamechangedselfr    r   J/home/garg/my-data/venv/lib/python3.10/site-packages/plumbum/cli/config.py__init__   s   
zConfigBase.__init__c                 C  s8   t t |   W d    | S 1 sw   Y  | S N)
contextlibsuppressFileNotFoundErrorreadr   r   r   r   	__enter__   s   

zConfigBase.__enter__c                 C  s   | j r	|   d S d S r   )r   write)r   exc_typeexc_valexc_tbr   r   r   __exit__$   s   zConfigBase.__exit__c                 C     dS )zRead in the linked fileNr   r   r   r   r   r   (       zConfigBase.readc                 C  s
   d| _ dS )zWrite out the linked fileFN)r   r   r   r   r   r   ,   s   
zConfigBase.writec                 C  r   )z$Internal get function for subclassesNr   r   optionr   r   r   _get1   r   zConfigBase._getc                 C  r   )zIInternal set function for subclasses. Must return the value that was set.Nr   r   r!   valuer   r   r   _set5   r   zConfigBase._setNc                 C  s2   z|  |W S  ty   d| _| || Y S w )z4Get an item from the store, returns default if failsT)r"   KeyErrorr   r%   )r   r!   defaultr   r   r   get9   s   zConfigBase.getc                 C  s   d| _ | || dS )z(Set an item, mark this object as changedTN)r   r%   r#   r   r   r   setA   s   zConfigBase.setc                 C  s
   |  |S r   )r"   r    r   r   r   __getitem__F   s   
zConfigBase.__getitem__c                 C  s   |  ||S r   )r)   r#   r   r   r   __setitem__I   s   zConfigBase.__setitem__r   )__name__
__module____qualname____doc__split	__slots__r   r   r   r   r   r   r"   r%   r(   r)   r*   r+   r   r   r   r   r	   
   s$    




r	   c                      s\   e Zd ZdZd Z fddZ fddZ fddZe	d	d
 Z
dd Zdd Z  ZS )	ConfigINIDEFAULTparserc                   s   t  | t | _d S r   )superr   r   r4   r   	__class__r   r   r   Q   s   zConfigINI.__init__c                   s   | j | j t   d S r   )r4   r   r   r5   r   r6   r   r   r   U   s   zConfigINI.readc                   sJ   t | jddd}| j| W d    n1 sw   Y  t   d S )Nwzutf-8)encoding)openr   r4   r   r5   )r   fr6   r   r   r   Y   s   zConfigINI.writec                 C  s.   d|vr| j }||fS |dd\}}||fS )N.   )DEFAULT_SECTIONr0   )clsr!   secr   r   r   _sec_opt^   s
   zConfigINI._sec_optc              	   C  sF   |  |\}}z| j||W S  ttfy"   t| d| d w )N:)rA   r4   r(   r   r   r&   )r   r!   r@   r   r   r   r"   f   s   zConfigINI._getc              	   C  sf   |  |\}}z| j||t| W t|S  ty2   | j| | j||t| Y t|S w r   )rA   r4   r)   strr   add_section)r   r!   r$   r@   r   r   r   r%   n   s   zConfigINI._set)r,   r-   r.   r>   r0   slotsr   r   r   classmethodrA   r"   r%   __classcell__r   r   r6   r   r2   M   s    
r2   )
__future__r   r   abcr   r   configparserr   r   r   plumbumr   r	   r2   Configr   r   r   r   <module>   s    C+