o
    h{D                     @   s  d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZmZmZ dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zi d(ed)ed*ed+ed,ed-ed.ed/ed0ed1ed2ed3ed4ed5ed6ed7ed8eZd9d: Z G d;d< d<Z!G d=d> d>e!Z"G d?d@ d@e!Z#G dAdB dBe!Z$G dCdD dDe!Z%G dEdF dFe&Z'dS )G    )unicode_literalsN)FieldDoesNotExist)ModelQprefetch_related_objects) NullRelationshipValueEncounteredextract_field_valueget_model_fieldsort_by_fieldsc                    s^   t trjd u r fdd}|S  fdd}|S t|  }| fdd}|S )Nc                    s*   z
t |  }W |u S  ty   Y dS w NFr   r   objother_valueattribute_namevalue U/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/modelcluster/queryset.py_test      ztest_exact.<locals>._testc                    sH   zt |  }W n
 ty   Y dS w j|jko#t|jp#t|jS r   )r   r   pk
isinstance	__class__r   r   r   r   r      s   
c                    s*   z
t |  }W |kS  ty   Y dS w r   r   r   )r   typed_valuer   r   r   .   r   )r   r   r   r	   	to_python)modelr   r   r   fieldr   )r   r   r   r   
test_exact   s   




r   c                    sF   t |  }|d u r fdd}|S   fdd}|S )Nc                    s*   z
t |  }W |d u S  ty   Y dS w r   r   r   val)r   r   r   r   >   r   ztest_iexact.<locals>._testc                    s8   zt |  }W n
 ty   Y dS w |d uo| kS r   r   r   upperr   r   match_valuer   r   r   G      r	   r   r"   )r   r   r$   r   r   r   r#   r   test_iexact8   s   

r'   c                    &   t |  }|| fdd}|S )Nc                    s4   zt |  }W n
 ty   Y dS w |d uo|v S r   r   r   r#   r   r   r   U      ztest_contains.<locals>._testr	   r   r   r   r   r   r   r   r#   r   test_containsQ      

r,   c                    *   t |  }||  fdd}|S )Nc                    s8   zt |  }W n
 ty   Y dS w |d uo| v S r   r!   r   r#   r   r   r   c   r%   ztest_icontains.<locals>._testr&   r+   r   r#   r   test_icontains_      
r/   c                    r(   )Nc                    s4   zt |  }W n
 ty   Y dS w |d uo|k S r   r   r   r#   r   r   r   q   r)   ztest_lt.<locals>._testr*   r+   r   r#   r   test_ltm   r-   r1   c                    r(   )Nc                    s4   zt |  }W n
 ty   Y dS w |d uo|kS r   r   r   r#   r   r   r      r)   ztest_lte.<locals>._testr*   r+   r   r#   r   test_lte{   r-   r2   c                    r(   )Nc                    s4   zt |  }W n
 ty   Y dS w |d uo|kS r   r   r   r#   r   r   r      r)   ztest_gt.<locals>._testr*   r+   r   r#   r   test_gt   r-   r3   c                    r(   )Nc                    s4   zt |  }W n
 ty   Y dS w |d uo|kS r   r   r   r#   r   r   r      r)   ztest_gte.<locals>._testr*   r+   r   r#   r   test_gte   r-   r4   c                    s2   t |  tfdd|D  fdd}|S )Nc                 3   s    | ]}  |V  qd S N)r   ).0r    )r   r   r   	<genexpr>   s    ztest_in.<locals>.<genexpr>c                    s*   z
t |  }W |v S  ty   Y dS w r   r   r   )r   match_valuesr   r   r      r   ztest_in.<locals>._test)r	   set)r   r   
value_listr   r   )r   r   r8   r   test_in   s   
r;   c                    r(   )Nc                    6   zt |  }W n
 ty   Y dS w |d uo|S r   )r   r   
startswithr   r#   r   r   r         ztest_startswith.<locals>._testr*   r+   r   r#   r   test_startswith   r-   r?   c                    r.   )Nc                    :   zt |  }W n
 ty   Y dS w |d uo| S r   )r   r   r"   r=   r   r#   r   r   r         ztest_istartswith.<locals>._testr&   r+   r   r#   r   test_istartswith   r0   rB   c                    r(   )Nc                    r<   r   )r   r   endswithr   r#   r   r   r      r>   ztest_endswith.<locals>._testr*   r+   r   r#   r   test_endswith   r-   rD   c                    r.   )Nc                    r@   r   )r   r   r"   rC   r   r#   r   r   r      rA   ztest_iendswith.<locals>._testr&   r+   r   r#   r   test_iendswith   r0   rE   c                    s:   t |  }||d ||d  fdd}|S )Nr      c                    s<   zt |  }W n
 ty   Y dS w |d uo|ko|kS r   r   r   r   end_val	start_valr   r   r      s   ztest_range.<locals>._testr*   )r   r   	range_valr   r   r   rG   r   
test_range   s
   
rK   c                    s    fdd}|S )Nc                    s8   zt |  }W n
 ty   Y dS w r|d u S |d uS r   r   r   r   senser   r   r      s   ztest_isnull.<locals>._testr   )r   r   rM   r   r   rL   r   test_isnull   s   
rN   c                    s   t | fdd}|S )Nc                    6   zt |  }W n
 ty   Y dS w |d uo|S r   r   r   searchr   r   regexr   r   r     r>   ztest_regex.<locals>._test)recompiler   r   regex_stringr   r   rR   r   
test_regex  s   
rX   c                    s    t |t j fdd}|S )Nc                    rO   r   rP   r   rR   r   r   r     r>   ztest_iregex.<locals>._test)rT   rU   IrV   r   rR   r   test_iregex  s   rZ   exactiexactcontains	icontainsltltegtgteinr=   istartswithrC   	iendswithrangeisnullrS   iregexc                 C   sh   z
t | d| W n ty   d}Y nw d}|s'|d tv r't|  }nt}d|}|| ||S )N__FT)r	   joinr   FILTER_EXPRESSION_TOKENSpopr   )r   key_clausesr    field_match_foundconstructorr   r   r   r    _build_test_function_from_filter7  s   
rq   c                   @      e Zd Zdd ZdS )FakeQuerySetIterablec                 C   s
   || _ d S r5   )queryset)selfrt   r   r   r   __init__M     
zFakeQuerySetIterable.__init__N)__name__
__module____qualname__rv   r   r   r   r   rs   L      rs   c                   @   rr   )ModelIterablec                 c   s    | j jE d H  d S r5   )rt   resultsru   r   r   r   __iter__R  s   zModelIterable.__iter__Nrx   ry   rz   r   r   r   r   r   r|   Q  r{   r|   c                   @   rr   )DictIterablec                 #   sF    | j jpdd | j jjjD }| j jD ]  fdd|D V  qd S )Nc                 S      g | ]}|j qS r   namer6   r   r   r   r   
<listcomp>X      z)DictIterable.__iter__.<locals>.<listcomp>c              
      s    i | ]}|t  |d d d dqS Tpk_onlysuppress_fielddoesnotexist)suppress_nullrelationshipvalueencounteredr   r6   
field_namer   r   r   
<dictcomp>Z  s    z)DictIterable.__iter__.<locals>.<dictcomp>)rt   dict_fieldsr   _metafieldsr}   ru   field_namesr   r   r   r   W  s   

zDictIterable.__iter__Nr   r   r   r   r   r   V  r{   r   c                   @   rr   )ValuesListIterablec                 #   sJ    | j jpdd | j jjjD }| j jD ] t fdd|D V  qd S )Nc                 S   r   r   r   r   r   r   r   r   b  r   z/ValuesListIterable.__iter__.<locals>.<listcomp>c              	      s   g | ]}t  |d d d dqS r   r   r   r   r   r   r   d  s    )rt   tuple_fieldsr   r   r   r}   tupler   r   r   r   r   a  s
   zValuesListIterable.__iter__Nr   r   r   r   r   r   `  r{   r   c                   @   rr   )FlatValuesListIterablec                 c   s4    | j jd }| j jD ]}t||ddddV  qd S )Nr   Tr   )rt   r   r}   r   )ru   r   r   r   r   r   r   h  s
   zFlatValuesListIterable.__iter__Nr   r   r   r   r   r   g  r{   r   c                   @   s   e Zd Zdd Zdd Zd:ddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zdd$d%d&Zd'd( Zd)d* Zd+d, Zd-d. ZeeeZd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9Z dS );FakeQuerySetc                 C   s"   || _ || _g | _g | _t| _d S r5   )r   r}   r   r   r|   iterable_class)ru   r   r}   r   r   r   rv   o  s
   
zFakeQuerySet.__init__c                 C      | S r5   r   r~   r   r   r   allv  s   zFakeQuerySet.allNc                 C   s6   t | j|d ur	|n| j}| j|_| j|_| j|_|S r5   )r   r   r}   r   r   r   )ru   r}   newr   r   r   	get_cloney  s
   zFakeQuerySet.get_clonec                    sj   j  g } fdd}jD ]!}t|tr|| | q|\}}|t| j|d| q||S )Nc                    s    fdd}|S )Nc                    sr   d}t jkrt fddD }nt jkr$t fddD }nt fddD dk}jr7| S |S )NFc                       g | ]}| qS r   r   r6   testr   r   r   r         zSFakeQuerySet.resolve_q_object.<locals>.test.<locals>.test_inner.<locals>.<listcomp>c                    r   r   r   r   r   r   r   r     r   c                    r   r   r   r   r   r   r   r     r   rF   )r   ANDr   ORanysumnegated)r   result)	connectorfiltersq_objectr   r   
test_inner  s   

z?FakeQuerySet.resolve_q_object.<locals>.test.<locals>.test_innerr   )r   r   r   r   r   r   r     s   z+FakeQuerySet.resolve_q_object.<locals>.testri   )	r   childrenr   r   appendresolve_q_objectrq   r   split)ru   r   r   r   childrn   r    r   r   r   r     s   

zFakeQuerySet.resolve_q_objectc                 O   sN   g }|D ]
}| | | q| D ]\}}| t| j|d| q|S )Nri   )r   r   itemsrq   r   r   )ru   argskwargsr   r   keyr    r   r   r   _get_filters  s   zFakeQuerySet._get_filtersc                    0   | j |i | | j fdd| jD d}|S )Nc                    s&   g | ] t  fd dD r qS )c                    r   r   r   r   r   r   r   r     r   z2FakeQuerySet.filter.<locals>.<listcomp>.<listcomp>r   r6   r   r   r   r         z'FakeQuerySet.filter.<locals>.<listcomp>r}   r   r   r}   ru   r   r   cloner   r   r   filter  
   
zFakeQuerySet.filterc                    r   )Nc                    s&   g | ] t  fd dD s qS )c                    r   r   r   r   r   r   r   r     r   z3FakeQuerySet.exclude.<locals>.<listcomp>.<listcomp>r   r   r   r   r   r     r   z(FakeQuerySet.exclude.<locals>.<listcomp>r   r   r   r   r   r   exclude  r   zFakeQuerySet.excludec                 O   sl   | j |i |}| }|dkr| jd| jjj |dkr)|D ]}|  S d S | jd| jjj|f )Nr   z!%s matching query does not exist.rF   z2get() returned more than one %s -- it returned %s!)r   countr   DoesNotExistr   object_nameMultipleObjectsReturned)ru   r   r   r   result_countr   r   r   r   get  s   zFakeQuerySet.getc                 C   
   t | jS r5   lenr}   r~   r   r   r   r     rw   zFakeQuerySet.countc                 C   r   r5   boolr}   r~   r   r   r   exists  rw   zFakeQuerySet.existsc                 C   s   | D ]}|  S d S r5   r   )ru   r   r   r   r   first  s   zFakeQuerySet.firstc                 C   s0   | j r| jt| j d}|D ]}|  S d S d S Nr   )r}   r   reversed)ru   r   r   r   r   r   last  s   zFakeQuerySet.lastc                 G   r   r5   r   ru   r   r   r   r   select_related     zFakeQuerySet.select_relatedc                 G   s   t | jg|R   | S r5   )r   r}   r   r   r   r   prefetch_related  s   zFakeQuerySet.prefetch_relatedc                 G   r   r5   r   r   r   r   r   only  r   zFakeQuerySet.onlyc                 G   r   r5   r   r   r   r   r   defer  r   zFakeQuerySet.deferc                 G   s.   |   }||_|D ]}t| j| q	t|_|S r5   )r   r   r	   r   r   r   )ru   r   r   fr   r   r   values  s   zFakeQuerySet.values)flatc                G   sP   |   }||_|D ]}t| j| q	|r#t|dkrtdt|_|S t|_|S )NrF   zH'flat' is not valid when values_list is called with more than one field.)	r   r   r	   r   r   	TypeErrorr   r   r   )ru   r   r   r   r   r   r   r   values_list  s   zFakeQuerySet.values_listc                 G   s&   | j | jd d  d}t|j| |S r   )r   r}   r
   )ru   r   r   r   r   r   order_by  s   zFakeQuerySet.order_byc                    sl   g }|sdd | j jjD }t }| jD ] t fdd|D }||vr/|| |  q| j|dS )Nc                 S   s   g | ]}|j s|jqS r   )primary_keyr   r   r   r   r   r   	  s    z)FakeQuerySet.distinct.<locals>.<listcomp>c                 3   s    | ]
}t t |V  qd S r5   )strr   r   r   r   r   r7     s    z(FakeQuerySet.distinct.<locals>.<genexpr>r   )	r   r   r   r9   r}   r   addr   r   )ru   r   unique_results	seen_keysr   r   r   r   distinct  s   


zFakeQuerySet.distinctc                 C   s   | j S r5   r   r~   r   r   r   _get_result_cache  s   zFakeQuerySet._get_result_cachec                 C   s   t || _d S r5   )listr}   )ru   r    r   r   r   _set_result_cache  s   zFakeQuerySet._set_result_cachec                 C   s
   | j | S r5   r   )ru   kr   r   r   __getitem__  rw   zFakeQuerySet.__getitem__c                 c   s    |  | }|E d H  d S r5   )r   )ru   iteratorr   r   r   r   !  s   
zFakeQuerySet.__iter__c                 C   r   r5   r   r~   r   r   r   __nonzero__%  rw   zFakeQuerySet.__nonzero__c                 C   s   t t| S r5   )reprr   r~   r   r   r   __repr__(  s   zFakeQuerySet.__repr__c                 C   r   r5   r   r~   r   r   r   __len__+  rw   zFakeQuerySet.__len__Tr5   )!rx   ry   rz   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   property_result_cacher   r   r   r   r   orderedr   r   r   r   r   n  s<    
			
r   )(
__future__r   rT   django.core.exceptionsr   django.db.modelsr   r   r   modelcluster.utilsr   r   r	   r
   r   r'   r,   r/   r1   r2   r3   r4   r;   r?   rB   rD   rE   rK   rN   rX   rZ   rl   rq   rs   r|   r   r   r   objectr   r   r   r   r   <module>   s    ,	

