
    khF                         d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ g dZ G d	 d
e          Zd ZddZd ZdS )    N)DictListTupleUnion)MODELS_MODULE_NAME)import_string)CollisionResolvingRunner)SubclassesFinder)RemovedInNextVersionWarning)z#from django.core.cache import cachez from django.conf import settingsz.from django.contrib.auth import get_user_modelz!from django.db import transactionzRfrom django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, Whenz!from django.utils import timezonezfrom django.urls import reversez7from django.db.models import Exists, OuterRef, Subqueryc                       e Zd ZdS )ObjectImportErrorN)__name__
__module____qualname__     Z/var/www/histauto/venv/lib/python3.11/site-packages/django_extensions/management/shells.pyr   r   !   s        Dr   r   c                     t          t          |                     d                              }	 	 ||                    t                    dz            S # t
          $ r |d         cY S w xY w# t          $ r | cY S w xY w)a  
    Retrieve application name from models.py module path

    >>> get_app_name('testapp.models.foo')
    'testapp'

    'testapp' instead of 'some.testapp' for compatibility:
    >>> get_app_name('some.testapp.models.foo')
    'testapp'
    >>> get_app_name('some.models.testapp.models.foo')
    'testapp'
    >>> get_app_name('testapp.foo')
    'testapp'
    >>> get_app_name('some.testapp.foo')
    'testapp'
    .   )listreversedsplitindexr   
ValueError
IndexError)mod_namerpartss     r   get_app_namer   %   s    " (8>>#..//00F	&,,'9::Q>?? 	 	 	!9	    s)   "A A*'A- )A**A- -A<;A<Fc                    i }| D ]9}t          |t                    r|                                }	 t          |t                    r2|                    d          r	 t	          j        |          }nF# t          $ r9}|s-t          |                    d|d|                     Y d}~Y d}~nd}~ww xY wt          d |j
        D                       s(|s%t          |                    d|z                       |s%t          |                    d|z                       |j
        D ]H}t          |t          j                  r4|j        D ],}|j        p|j        }	t!          j        |j                  ||	<   -t          |t          j                  rt!          j        |j        i i d |j        D                       }
|j        D ]}|j        p|j        }		 |j        d	k    r&t+          |
          D ]}t-          |
|          ||<   nt-          |
|j                  ||	<   [# t.          $ rC}t          d
|j         d|j         dt+          |
                      t1          |          d}~ww xY wJnt3          j        dt6          d           t          |t                    rVt'          |          }
|
||                    d          d         <   |s%t          |                    d|z                       t          |t:          t<          f          rt?          |          dk    rt          |d         t                    s/|s+t          |                    d|d         z                       wt          |d         t:          t<          f          rt          d |d         D                       rt'          |d         i i |d                   }
g }|d         D ]o}	 t-          |
|          ||<   |                     |           ,# t.          $ r7 |s2t          |                    d|d|d         d|d                     Y lw xY w|sAt          |                    d|d         dd!                    |                               nlt          |d         t                    r|d         d	k    rqt'          |d         i i |d                   }
t+          |
          D ]}t-          |
|          ||<   |s+t          |                    d|d         z                       nt-          t'          |d         i i |d         g          |d                   }
|
||d         <   |s4t          |                    d|d         d|d                              n_|s5t          |                    d|d         d|d         d                     n'|s%t          |                    d|z                       # t0          $ r+ |s%t          |                    d |z                       Y 7w xY w|S )!a  
    Import the items in import_directives and return a list of the imported items

    Each item in import_directives should be one of the following forms
        * a tuple like ('module.submodule', ('classname1', 'classname2')), which indicates a 'from module.submodule import classname1, classname2'
        * a tuple like ('module.submodule', 'classname1'), which indicates a 'from module.submodule import classname1'
        * a tuple like ('module.submodule', '*'), which indicates a 'from module.submodule import *'
        * a simple 'module.submodule' which indicates 'import module.submodule'.

    Returns a dict mapping the names to the imported items
    )from zimport zError parsing:  Nc              3   b   K   | ]*}t          |t          j        t          j        f          V  +d S N)
isinstanceastImport
ImportFrom).0bodys     r   	<genexpr>zimport_items.<locals>.<genexpr>]   sF        GKJtcj#.%ABB     r   z"Only specify import statements: %rz%sc                     g | ]	}|j         
S r   )name)r)   r-   s     r   
<listcomp>z import_items.<locals>.<listcomp>t   s    1S1S1S$)1S1S1Sr   *zCouldn't find z in z. Only found: zuOld style import definitions are deprecated. You should use the new style which is similar to normal Python imports.    )
stacklevelr   r   z	import %sz7Unable to import %r: module name must be of type stringr   c              3   @   K   | ]}t          |t                    V  d S r$   )r%   str)r)   es     r   r+   zimport_items.<locals>.<genexpr>   sE       G G/0
1c**G G G G G Gr   zUnable to import z from z: z does not existr!    import , zfrom %s import *z: names must be stringsz*Unable to import %r: names must be stringszUnable to import %r)"r%   r3   strip
startswithr&   parse	ExceptionprintERRORallr*   SQL_COLTYPEr'   namesasnamer-   	importlibimport_moduler(   
__import__moduledirgetattrAttributeErrorImportErrorwarningswarnr   r   r   tuplelenappendjoin)import_directivesstyle
quiet_loadimported_objects	directivenodeexcr*   r-   r@   imported_objectkimported_namess                r   import_itemsrY   B   s    & ]F ]F	i%% 	*!))IZ	F)S)) Vi.B.B$/ / V!9Y//DD  ! ! !% !ekkkIIIss*STTUUU ! ! ! ! !!   OSy     	 & !KK Dy P   
 ! ?%++D9,<==>>> I 7 7D!$
33 $(J  D%)[%=DIF7@7N $	8 8,V44 "$77 7*3*> KR1S1S
1S1S1S+ + %)J 7 7D%)[%=DIF7#'9#3#3-0-A-A %* %*>E,;Q?* ?*(8(;(;%*
 @G(7@& @&$4V$< $2 7 7 7 %)N )N )N )N )N7:?7K7K)N )N!" !" !" '2#&6&6 67/7B  L/     i-- X&0&;&;O@O$Y__S%9%9!%<=% Je//i0GHHIII	D%=99 Rc)nnPQ>Q>Q%ilC88 !) 	! %)6 '0l	%3!" !"   !!)A,u>> =3 G G4=aLG G G D D =
 +5Yq\2r9UV<*X*X)+$-aL < <D<9@RV9W9W 0 6 !/ 5 5d ; ; ; ; $2 & & &'1 !&$)(-7;ttYq\\\444-Q)* )*%& %& %&&  * ! % 1 1 1'0|||TYY~5N5N5N%P!" !"   $IaL#66 " %Q<3...8 )!b"il/ /O &)%9%9 R R6=oq6Q6Q 0 3 3#- " %$)$5$56H9UV<6W$X$X!" !" !" /6 *9Q<R)A, P P )!/ /O >M,Yq\:#- " %$)$5$5$5+4Q<<<1)G%& %&!" !" !"  * ! %'0|||Yq\\\%C!" !"   & !KK Ly X   
  	F 	F 	F Fekk"7)"CDDEEE	F s   ,XA43X4
B7>*B2(X-X2B77AX CXA	H&%X&
I3	0>I.	.I3	3BXA9X<A+X(P;X>QXQF4X1X=<X=c                     ddl m ddlm} j        s
 |             ddlm                      dg           }t          dg           }||z   dv }                     d          t          d	i           t          d
i           t          di           }i i fdfd}fd} fdfd}	d}
	 ddl	m
} d}
n# t          $ r Y nw xY w|rUs"t                              d                     t          |          }|                                D ]
\  }}||<   |
r|s|                                D ]}\  }}|                    d          d         }t#          |j                  }|v s	|d|v rB                    |j        g            |j                                     |           ~|s |	            D ]|\  }}|st#          |j                  }|v r!|D ]X}|d|j        v r|j        r@                    |j        g            |j                                     |j                   Y} |             s)t                              d          |rdndz              |             t          dd          rZs"t                              d                     t          t,                    }|                                D ]
\  }}||<   t          di           }|rUs"t                              d                     t          |          }|                                D ]
\  }}||<   t          di           }|rUs"t                              d                      t          |          }|                                D ]
\  }}||<   S )!Nr   )apps)setup)settings	dont_loadSHELL_PLUS_DONT_LOADr/   rQ   SHELL_PLUS_MODEL_ALIASESSHELL_PLUS_APP_PREFIXESSHELL_PLUS_PRE_IMPORTSc                     i } t          
                                          D ]\  }}t          |          }                    |i           }                    |          }t          |          D ]e}|d|	v r|                    |          }|s|r|d|}n|}|                     |g            | |                             |d|           f| S )a  
        Collect dictionary from names to possible models. Model is represented as his full path.
        Name of model can be alias if SHELL_PLUS_MODEL_ALIASES or SHELL_PLUS_APP_PREFIXES is specified for this model.
        This dictionary is used by collision resolver.
        At this phase we can't import any models, because collision resolver can change results.
        :return: Dict[str, List[str]]. Key is name, value is list of full model's path's.
        r   _)sorteditemsr   get
setdefaultrM   )models_to_importapp_modmodelsapp_nameapp_aliasesprefix
model_namealiasapp_prefixesr^   load_modelsmodel_aliasess           r   &get_dict_from_names_to_possible_modelsz>import_objects.<locals>.get_dict_from_names_to_possible_models  s    %k&7&7&9&9:: 	P 	POGV#G,,H'++Hb99K!%%h//F$Vnn P P
&hh

3y@@#
33 + ++166:: > * ++E2666 '..'''::/NOOOOP  r   c                      t          dg           } | rPs"t                              d                      t          |                                                      d S d S )NSHELL_PLUS_SUBCLASSES_IMPORTz# Shell Plus Subclasses Imports)rF   r;   	SQL_TABLEr
   collect_subclasses)base_classes_to_importperform_automatic_importsrQ   r]   rP   s    r   import_subclassesz)import_objects.<locals>.import_subclasses%  s    !(3QSU!V!V! 	 Jeoo&GHHIII%% !788KKMM    	 	r   c                  p    t                                                                 }  |            dS )z
        Perform collision resolving and imports all models.
        When collisions are resolved we can perform imports and print information's, because it is last phase.
        This function updates imported_objects dictionary.
        N)r	   run_collision_resolver)modules_to_modelsrt   rz   s    r   import_modelsz%import_objects.<locals>.import_models.  sG     566MM2244
 
 	"!"344444r   c                    |                                  D ]H\  }}g }t          |          D ]\  }}	 t          |d|          |<   ||k    r|                    |           n|                    |d|d           U# t          $ r}                    d          rt          j                                         d          s8t          		                    d|d|dt          |                               Y d	}~d	}~ww xY w                    d          s;t          	                    d
|dd                    |                               Jd	S )a  
        Import elements from given dictionary.
        :param modules_to_classes: dictionary from module name to tuple.
        First element of tuple is model name, second is model alias.
        If both elements are equal than element is imported without alias.
        r   z (as )	tracebackrQ   zFailed to import 'z' from 'z
' reason: Nr!   r5   r6   )rf   re   r   rM   rH   rg   r   	print_excr;   r<   r3   r>   rN   )
modules_to_classesfull_module_pathrk   model_labelsro   rp   r4   rR   optionsrP   s
          r   rz   z1import_objects.<locals>.perform_automatic_imports9  s    );(@(@(B(B 	 	$fL%+F^^  !
E.;#3#3#3ZZ@/ /$U+ "U**$++J7777$++JJJ,NOOO" 	 	 	{{;// .!+---";;|44 !KKK#-::/?/?/?Q!I   		 ;;|,, %%%+++TYY|-D-D-DF   -	 	s   AB
DA5DDc               3      K                                    D ]&} | j        r| j        |                                 fV  'd S r$   )get_app_configsmodels_module
get_models)appr[   s    r   get_apps_and_modelsz+import_objects.<locals>.get_apps_and_models]  sV      '')) 	: 	:C  :')9)99999	: 	:r   F)_document_registryTz# Shell Plus User Pre Imports)rQ   r   z# Shell Plus Model Imports%sz SKIPPED SHELL_PLUS_DJANGO_IMPORTSz# Shell Plus Django ImportsSHELL_PLUS_IMPORTSz# Shell Plus User ImportsSHELL_PLUS_POST_IMPORTSz# Shell Plus User Post Imports)django.appsr[   djangor\   readydjango.confr]   rg   rF   mongoengine.baser   rH   r;   rw   rY   rf   r   r   r   rh   rM   r   r   ) r   rP   r\   dont_load_clidont_load_confdont_load_any_modelsrb   r{   r   r   mongoenginer   importsrW   vr-   modrl   rj   
app_modelsr   r   rq   r[   r^   rt   rR   rr   rs   rz   rQ   r]   s    ``                    @@@@@@@@@@r   import_objectsr      s         : $$$$$$KKR00MX'=rBBN.I)+\**JH&@"EEM8%>CCL$X/GLLK               <       	5 	5 	5 	5 	5 	5" " " " " " "H: : : : :
 K777777     $ 	D%//"ABBCCC5uTTTMMOO 	$ 	$DAq"#Q 5/ 5+1133 	5 	5ID#::c??2&D#CN33H9$$HHHdd)C	(Q(Q""3>2666'..t4444 E#6#6#8#8 	E 	EGZ #G$455H9$$! E E&hh5BB> E**3>2>>>/66s|DDDE  
OO:;;19zzr;	
 	
 	

 MOOO x4d;; $ 	B%//"?@@AAA8%JWWWMMOO 	$ 	$DAq"#Q +?DD $ 	@%//"=>>???15ZPPPMMOO 	$ 	$DAq"#Q &h0I2NN $ 	E%//"BCCDDD6*UUUMMOO 	$ 	$DAq"#Qs   C 
C'&C')F)r&   r   rI   rA   typingr   r   r   r   django.apps.configr   django.utils.module_loadingr   %django_extensions.collision_resolversr	   #django_extensions.import_subclassesr
   #django_extensions.utils.deprecationr   r   r:   r   r   rY   r   r   r   r   <module>r      sI   



                     2 1 1 1 1 1 5 5 5 5 5 5 J J J J J J @ @ @ @ @ @ K K K K K K	 	 	 	 	 	 	 		 	 	 	  :m m m m`~ ~ ~ ~ ~r   