o
    uvXj"  ã                   @   sB   d dl Z d dlmZ d dlmZ d dlmZ dZG dd„ dƒZdS )é    N)Úimport_module)ÚImproperlyConfigured)Úmodule_has_submoduleÚmodelsc                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zedd	„ ƒZddd„Z	ddd„Z
dd„ Zdd„ ZdS )Ú	AppConfigz>Class representing a Django application and its configuration.c                 C   sh   || _ || _d | _t| dƒs| d¡d | _t| dƒs!| j ¡ | _t| dƒs,|  |¡| _	d | _
d | _d S )NÚlabelÚ.é   Úverbose_nameÚpath)ÚnameÚmoduleÚappsÚhasattrÚ
rpartitionr   Útitler
   Ú_path_from_moduler   Úmodels_moduler   )ÚselfÚapp_nameÚ
app_module© r   úO/var/www/html/myproject/venv/lib/python3.10/site-packages/django/apps/config.pyÚ__init__   s   



zAppConfig.__init__c                 C   s   d| j j| jf S )Nz<%s: %s>)Ú	__class__Ú__name__r   ©r   r   r   r   Ú__repr__3   s   zAppConfig.__repr__c                 C   s‚   t t|dg ƒƒ}t|ƒdkr&t|ddƒ}|dur tj |¡g}nt t|ƒƒ}t|ƒdkr4td||f ƒ‚|s=td|f ƒ‚|d S )z;Attempt to determine app's filesystem path from its module.Ú__path__é   Ú__file__Nz�The app module %r has multiple filesystem locations (%r); you must configure this app with an AppConfig subclass with a 'path' class attribute.zƒThe app module %r has no filesystem location, you must configure this app with an AppConfig subclass with a 'path' class attribute.r   )ÚlistÚgetattrÚlenÚosr   ÚdirnameÚsetr   )r   r   ÚpathsÚfilenamer   r   r   r   6   s&   þÿþÿzAppConfig._path_from_modulec           
   
   C   sX  zt |ƒ}W n ty   d}| d¡\}}}|s‚ Y nw z|j}W n ty0   | ||ƒ Y S w | d¡\}}}t |ƒ}zt||ƒ} W n- tyq   |du rntdd„ |j ¡ D ƒƒ}|rit	d||d 
|¡f ƒ‚t |ƒ n‚ Y nw t| tƒs}t	d| ƒ‚z| j}W n ty�   t	d| ƒ‚w zt |ƒ}	W n ty¦   t	d	|||f ƒ‚w | ||	ƒS )
zU
        Factory that creates an app config from an entry in INSTALLED_APPS.
        Nr   c                 s   s8   � | ]\}}t |tƒrt|tƒr|turt|ƒV  qd S )N)Ú
isinstanceÚtypeÚ
issubclassr   Úrepr)Ú.0r   Ú	candidater   r   r   Ú	<genexpr>}   s   € þýýüz#AppConfig.create.<locals>.<genexpr>z4'%s' does not contain a class '%s'. Choices are: %s.z, z#'%s' isn't a subclass of AppConfig.z"'%s' must supply a name attribute.z7Cannot import '%s'. Check that '%s.%s.name' is correct.)r   ÚImportErrorr   Údefault_app_configÚAttributeErrorr"   ÚsortedÚ__dict__Úitemsr   Újoinr+   r   r   )
ÚclsÚentryr   Úmod_pathÚ_Úcls_nameÚmodÚ
candidatesr   r   r   r   r   ÚcreateQ   sl   ÿ÷
þÿÿÿ
þï
ÿ
ÿÿÿÿÿ
zAppConfig.createTc                 C   sL   |r| j  ¡  n| j  ¡  z| j| ¡  W S  ty%   td| j|f ƒ‚w )zŒ
        Return the model with the given case-insensitive model_name.

        Raise LookupError if no model exists with this name.
        z#App '%s' doesn't have a '%s' model.)r   Úcheck_models_readyÚcheck_apps_readyr   ÚlowerÚKeyErrorÚLookupErrorr   )r   Ú
model_nameÚrequire_readyr   r   r   Ú	get_model§   s   
ÿÿzAppConfig.get_modelFc                 c   sB   � | j  ¡  | j ¡ D ]}|jjr|sq|jjr|sq|V  qdS )a—  
        Return an iterable of models.

        By default, the following models aren't included:

        - auto-created models for many-to-many relations without
          an explicit intermediate table,
        - models that have been swapped out.

        Set the corresponding keyword argument to True to include such models.
        Keyword arguments aren't documented; they're a private API.
        N)r   r?   r   ÚvaluesÚ_metaÚauto_createdÚswapped)r   Úinclude_auto_createdÚinclude_swappedÚmodelr   r   r   Ú
get_models·   s   €
ûzAppConfig.get_modelsc                 C   s<   | j j| j | _t| jtƒrd| jtf }t|ƒ| _	d S d S )Nz%s.%s)
r   Ú
all_modelsr   r   r   r   ÚMODELS_MODULE_NAMEr   r   r   )r   Úmodels_module_namer   r   r   Úimport_modelsÌ   s
   þzAppConfig.import_modelsc                 C   s   dS )zT
        Override this method in subclasses to run code when Django starts.
        Nr   r   r   r   r   ÚreadyÕ   s    zAppConfig.readyN)T)FF)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   Úclassmethodr>   rF   rN   rR   rS   r   r   r   r   r   
   s    &

U
	r   )	r$   Ú	importlibr   Údjango.core.exceptionsr   Údjango.utils.module_loadingr   rP   r   r   r   r   r   Ú<module>   s    