o
    &zh$                     @   sT   d dl Z d dlmZ ddlmZ G dd dZG dd deZG d	d
 d
edZdS )    N)ImproperlyConfigured   )import_attributec                   @   s&   e Zd ZdddZdd Zdd ZdS )	AppConfOptionsNc                 C   sF   || _ t|dd| _t| j| _t|dd| _t|dg | _i | _d S )Nholderzdjango.conf.settingsproxyFrequired)prefixgetattrholder_pathr   r   r   r   configured_data)selfmetar	    r   G/var/www/html/kangema/venv/lib/python3.10/site-packages/appconf/base.py__init__
   s   
zAppConfOptions.__init__c                 C   s*   | | j r
|S d| j | S )Nz{}_{})
startswithr	   upperformatr   namer   r   r   prefixed_name   s   zAppConfOptions.prefixed_namec                 C   s   | |_ i | _i | _d S N)_metanamesdefaults)r   clsr   r   r   r   contribute_to_class   s   
z"AppConfOptions.contribute_to_classr   )__name__
__module____qualname__r   r   r   r   r   r   r   r      s    
r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )AppConfMetaClassc                    s  t  j}dd |D }|s|| |||S |d}|| ||d|i}|dd }|r-|}	ntdtfi }t|dd }	t|	dt|	dd }
|
d u rVtj|j }|j	
dd }
|d	t|	|
 |d| |d d d
 D ]"}t|d	r|jj|jj |jj|jj |jj|jj qlttjt| D ]}|j|}||jj|< |||jj|< q| D ]
\}}||| q|  |jj D ]\}}|j|}t|jj|| ||| q|jjD ]}|j|}t|jj|std| q|S )Nc                 S   s   g | ]	}t |tr|qS r   )
isinstancer!   ).0br   r   r   
<listcomp>!   s    z,AppConfMetaClass.__new__.<locals>.<listcomp>r   Metar	   	app_label.r   z#The required setting %s is missing.)super__new__poptypeobjectr
   sysmodulesr   r   splitadd_to_classr   hasattrr   r   updater   r   filterstrisupperlistkeysr   items
_configuresetattrr   r   r   )r   r   basesattrs	super_newparentsmodule	new_class	attr_metar   r	   model_moduleparentr   value	__class__r   r   r,      sX   

zAppConfMetaClass.__new__c                 C   s*   t |dr|| | d S t| || d S )Nr   )r4   r   r=   )r   r   rG   r   r   r   r3   X   s   
zAppConfMetaClass.add_to_classc                 C   sz   |  }|j j D ]+\}}|j j|}t|j j||}t|d|  d }t|r.||}|| j j	|< q	|
 | j _	d S )Nzconfigure_%s)r   r   r;   r   getr
   r   lowercallabler   	configure)r   objr   r   default_valuerG   callbackr   r   r   r<   ^   s   zAppConfMetaClass._configure)r   r   r    r,   r3   r<   __classcell__r   r   rH   r   r!      s    9r!   c                   @   sD   e Zd ZdZdd Zdd Zedd Zdd	 Zd
d Z	dd Z
dS )AppConfz~
    An app setting object to be used for handling app setting defaults
    gracefully and providing a nice API for them.
    c                 K   s"   |  D ]
\}}t| || qd S r   )r;   r=   )r   kwargsr   rG   r   r   r   r   p   s   zAppConf.__init__c                 C   s   t t| jj S r   )sortedsetr   r   r:   r   r   r   r   __dir__t   s   zAppConf.__dir__c                 C   s   | j jS r   )r   r   rV   r   r   r   r   x   s   zAppConf.configured_datac                 C   s*   | j jrt| j j|S td|| j jf )Nz%s not found. Use '%s' instead.)r   r   r
   r   AttributeErrorr   r   r   r   r   __getattr__|   s
   
zAppConf.__getattr__c                 C   s6   ||  krt| jj| j|| t| || d S r   )r   r=   r   r   r   r/   __setattr__)r   r   rG   r   r   r   rZ      s
   zAppConf.__setattr__c                 C   s   | j S )zx
        Hook for doing any extra configuration, returning a dictionary
        containing the configured data.
        )r   rV   r   r   r   rM      s   zAppConf.configureN)r   r   r    __doc__r   rW   propertyr   rY   rZ   rM   r   r   r   r   rR   k   s    
rR   )	metaclass)	r0   django.core.exceptionsr   utilsr   r   r.   r!   rR   r   r   r   r   <module>   s    N