o
    a"<f=                     @   sV   d dl Z d dlmZ ddlmZ G dd de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   C/var/www/html/kck/venv/lib/python3.10/site-packages/appconf/base.py__init__
   s   
zAppConfOptions.__init__c                 C   s*   | | j r
|S d| j | f S )Nz%s_%s)
startswithr	   upper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 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 rXt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 qnt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.) superr    __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   )r3   r   r<   )r   r   rF   r   r   r   r2   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_valuerF   callbackr   r   r   r;   ^   s   zAppConfMetaClass._configure)r   r   r   r+   r2   r;   __classcell__r   r   rG   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   rF   r   r   r   r   p   s   zAppConf.__init__c                 C   s   t t| jj S r   )sortedsetr   r   r9   r   r   r   r   __dir__t   s   zAppConf.__dir__c                 C   s   | j jS r   )r   r   rU   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   rF   r   r   r   rY      s
   zAppConf.__setattr__c                 C   s   | j S )zx
        Hook for doing any extra configuration, returning a dictionary
        containing the configured data.
        )r   rU   r   r   r   rL      s   zAppConf.configureN)r   r   r   __doc__r   rV   propertyr   rX   rY   rL   r   r   r   r   rQ   k   s    
rQ   )	metaclass)
r/   django.core.exceptionsr   utilsr   r.   r   r-   r    rQ   r   r   r   r   <module>   s    N