3
g=Z                 @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ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d dZG dd dee	ZG dd deZG dd dZG dd deZ G dd deeZ!ej"G dd deeZ#ej"G dd deZ$ej"G dd deeZ%ej"G dd deeZ&ej"G dd  d eeZ'ej"G d!d" d"eeZ(G d#d$ d$Z)ej"G d%d& d&e)e&Z*ej"G d'd( d(e)e'Z+ej"G d)d* d*e eZ,G d+d, d,eZ-ej"G d-d. d.e-Z.ej"G d/d0 d0e.Z/ej"G d1d2 d2e-Z0ej"G d3d4 d4e0Z1ej"G d5d6 d6e-Z2ej"G d7d8 d8e2Z3ej"G d9d: d:e eZ4ej"G d;d< d<eZ5ej"G d=d> d>eZ6ej"G d?d@ d@e6Z7G dAdB dBeZ8G dCdD dDe8e#Z9G dEdF dFe8e%Z:G dGdH dHe8e&Z;G dIdJ dJe8e'Z<G dKdL dLe8e(Z=G dMdN dNZ>ej"G dOdP dPe>e$Z?ej"G dQdR dRe>e.Z@ej"G dSdT dTe>e/ZAej"G dUdV dVe>e0ZBej"G dWdX dXe>e1ZCej"G dYdZ dZe>e2ZDej"G d[d\ d\e>e3ZEdS )]    N)copy)EmptyResultSet)CaseExistsFuncValueWhen)	CharFieldDateTimeFieldFieldIntegerField	UUIDField)RegisterLookupMixin)
OrderedSet)RemovedInDjango40Warning)cached_property)make_hashablec               @   s   e Zd ZdZd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dZdd Zdd Zdd Zd.ddZdd Zdd Zed d! Zed"d# Zed$d% Zed&d' Zd(d) Zd*d+ ZdS )/LookupNTFc             C   s`   || | _ | _| j | _t| j dr0| j j }ng }|rVddlm} t||rVtd|| _	d S )Nget_bilateral_transformsr   )QueryzBBilateral transformations on nested querysets are not implemented.)
lhsrhsget_prep_lookuphasattrr   django.db.models.sql.queryr   
isinstanceNotImplementedErrorbilateral_transforms)selfr   r   r   r    r   V/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/db/models/lookups.py__init__   s    

zLookup.__init__c             C   s   x| j D ]}||}qW |S )N)r   )r   valueZ	transformr   r   r    apply_bilateral_transforms(   s    z!Lookup.apply_bilateral_transformsc             C   s   |d kr| j }| jrvg g  }}xz|D ]L}t|| jjd}| j|}|j|j}|j|\}}	|j	| |j
|	 q$W n$| j||\}
}dgt| | }}||fS )N)output_fieldz%s)r   r   r   r   r$   r#   resolve_expressionquerycompileappendextendget_db_prep_lookuplen)r   compiler
connectionr   sqlssqls_paramspr"   sqlZ
sql_params_paramsr   r   r    batch_process_rhs-   s    



zLookup.batch_process_rhsc             C   s   | j  r| jgS | j| jgS )N)rhs_is_direct_valuer   r   )r   r   r   r    get_source_expressions>   s    zLookup.get_source_expressionsc             C   s(   t |dkr|d | _n|\| _| _d S )N   r   )r+   r   r   )r   Z	new_exprsr   r   r    set_source_expressionsC   s    zLookup.set_source_expressionsc             C   s<   t | jdr| jS | jr6t | jjdr6| jjj| jS | jS )Nr%   get_prep_value)r   r   prepare_rhsr   r$   r9   )r   r   r   r    r   I   s
    zLookup.get_prep_lookupc             C   s
   d|gfS )Nz%sr   )r   r"   r-   r   r   r    r*   P   s    zLookup.get_db_prep_lookupc             C   s*   |p| j }t|dr |j|j}|j|S )Nr%   )r   r   r%   r&   r'   )r   r,   r-   r   r   r   r    process_lhsS   s    

zLookup.process_lhsc             C   s^   | j }| jr:| j r$t|| jjd}| j|}|j|j}t	|drN|j
|S | j||S d S )N)r$   as_sql)r   r   r5   r   r   r$   r#   r%   r&   r   r'   r*   )r   r,   r-   r"   r   r   r    process_rhsY   s    


zLookup.process_rhsc             C   s   t | jd S )Nr<   )r   r   )r   r   r   r    r5   g   s    zLookup.rhs_is_direct_valuec             C   s4   t | }|jj||_t|jdr0|jj||_|S )Nrelabeled_clone)r   r   r>   r   r   )r   Zrelabelsnewr   r   r    r>   j   s
    zLookup.relabeled_clonec             C   s*   | j j }t| jdr&|j| jj  |S )Nget_group_by_cols)r   r@   r   r   r)   )r   aliascolsr   r   r    r@   q   s    
zLookup.get_group_by_colsc             C   s   t d S )N)r   )r   r,   r-   r   r   r    r<   w   s    zLookup.as_sqlc             C   sj   d}g }x@| j | jfD ]0}t|tr<tt|dddd}d}|j| qW |rZt| | n| }|j||S )NFT)Zthen)default)	r   r   r   r   r   r   r(   typer<   )r   r,   r-   wrappedexprsexprlookupr   r   r    	as_oraclez   s    
zLookup.as_oraclec             C   s   | j jpt| jddS )Ncontains_aggregateF)r   rJ   getattrr   )r   r   r   r    rJ      s    zLookup.contains_aggregatec             C   s   | j jpt| jddS )Ncontains_over_clauseF)r   rL   rK   r   )r   r   r   r    rL      s    zLookup.contains_over_clausec             C   s   | j jpt| jddS )N
is_summaryF)r   rM   rK   r   )r   r   r   r    rM      s    zLookup.is_summaryc             C   s   | j | j| jfS )N)	__class__r   r   )r   r   r   r    identity   s    zLookup.identityc             C   s   t |tstS | j|jkS )N)r   r   NotImplementedrO   )r   otherr   r   r    __eq__   s    
zLookup.__eq__c             C   s   t t| jS )N)hashr   rO   )r   r   r   r    __hash__   s    zLookup.__hash__)N)N)N)__name__
__module____qualname__lookup_namer:   Zcan_use_none_as_rhsr!   r#   r4   r6   r8   r   r*   r;   r=   r5   r>   r@   r<   rI   r   rJ   rL   propertyrM   rO   rR   rT   r   r   r   r    r      s.   


r   c               @   s,   e Zd ZdZdZdZedd Zdd ZdS )		Transformz
    RegisterLookupMixin() is first so that get_lookup() and get_transform()
    first examine self and then check output_field.
    Fr7   c             C   s   | j  d S )Nr   )r6   )r   r   r   r    r      s    zTransform.lhsc             C   s2   t | jdr| jj }ng }| jr.|j| j |S )Nr   )r   r   r   	bilateralr(   rN   )r   r   r   r   r    r      s    z"Transform.get_bilateral_transformsN)	rU   rV   rW   __doc__r[   arityrY   r   r   r   r   r   r    rZ      s
   rZ   c                   s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	BuiltinLookupNc                sb   t  j|||\}}| jjj }| jjj|d}|jj||| }|jj| j	|| }|t
|fS )N)r-   )superr;   r   r$   Zget_internal_typedb_typeopsZfield_cast_sqlZlookup_castrX   list)r   r,   r-   r   lhs_sqlr3   Zfield_internal_typer`   )rN   r   r    r;      s    zBuiltinLookup.process_lhsc             C   sF   | j ||\}}| j||\}}|j| | j||}d||f |fS )Nz%s %s)r;   r=   r)   
get_rhs_op)r   r,   r-   rc   r3   rhs_sql
rhs_paramsr   r   r    r<      s
    
zBuiltinLookup.as_sqlc             C   s   |j | j | S )N)	operatorsrX   )r   r-   r   r   r   r    rd      s    zBuiltinLookup.get_rhs_op)N)rU   rV   rW   r;   r<   rd   __classcell__r   r   )rN   r    r^      s   	r^   c               @   s   e Zd ZdZdZdd ZdS )FieldGetDbPrepValueMixinzZ
    Some lookups require Field.get_db_prep_value() to be called on their
    inputs.
    Fc                sT   t | jjdd }t |dd p$| jjjd| jrB fdd|D n| ddgfS )NZtarget_fieldget_db_prep_valuez%sc                s   g | ]}| d dqS )T)preparedr   ).0v)r-   rj   r   r    
<listcomp>   s    z?FieldGetDbPrepValueMixin.get_db_prep_lookup.<locals>.<listcomp>T)rk   )rK   r   r$   rj   $get_db_prep_lookup_value_is_iterable)r   r"   r-   fieldr   )r-   rj   r    r*      s
    z+FieldGetDbPrepValueMixin.get_db_prep_lookupN)rU   rV   rW   r\   ro   r*   r   r   r   r    ri      s   ri   c                   sB   e Zd ZdZdZdd Z fddZdd Zd fd
d	Z  Z	S ) FieldGetDbPrepValueIterableMixinzg
    Some lookups require Field.get_db_prep_value() to be called on each value
    in an iterable.
    Tc             C   sb   t | jdr| jS g }xF| jD ]<}t |dr.n"| jrPt | jjdrP| jjj|}|j| qW |S )Nr%   r9   )r   r   r:   r   r$   r9   r(   )r   Zprepared_values	rhs_valuer   r   r    r      s    
z0FieldGetDbPrepValueIterableMixin.get_prep_lookupc                s&   | j  r| j||S t j||S d S )N)r5   r4   r_   r=   )r   r,   r-   )rN   r   r    r=      s    z,FieldGetDbPrepValueIterableMixin.process_rhsc             C   s<   |g}t |dr|j|j}t |dr4|j|\}}||fS )Nr%   r<   )r   r%   r&   r'   )r   r,   r-   r1   paramr3   r   r   r    resolve_expression_parameter   s    

z=FieldGetDbPrepValueIterableMixin.resolve_expression_parameterNc                sJ   t  j |}t fddt| D  \}}tjj|}|t|fS )Nc             3   s"   | ]\}}j  ||V  qd S )N)rt   )rl   r1   rs   )r,   r-   r   r   r    	<genexpr>  s   zEFieldGetDbPrepValueIterableMixin.batch_process_rhs.<locals>.<genexpr>)r_   r4   zip	itertoolschainfrom_iterabletuple)r   r,   r-   r   Zpre_processedr1   r3   )rN   )r,   r-   r   r    r4     s    z2FieldGetDbPrepValueIterableMixin.batch_process_rhs)N)
rU   rV   rW   r\   ro   r   r=   rt   r4   rh   r   r   )rN   r    rq      s   rq   c               @   s   e Zd ZdZdZdd ZdS )PostgresOperatorLookupz*Lookup defined by operators on PostgreSQL.Nc             C   sD   | j ||\}}| j||\}}t|t| }d|| j|f |fS )Nz%s %s %s)r;   r=   rz   postgres_operator)r   r,   r-   r   
lhs_paramsr   rf   r3   r   r   r    as_postgresql  s    z$PostgresOperatorLookup.as_postgresql)rU   rV   rW   r\   r|   r~   r   r   r   r    r{     s   r{   c                   s,   e Zd ZdZ fddZ fddZ  ZS )Exactexactc                sZ   ddl m} t| j|rL| jj rD| jjsL| jj  | jjdg ntdt	 j
||S )Nr   )r   pkzSThe QuerySet value for an exact lookup must be limited to one result using slicing.)r   r   r   r   Zhas_limit_onehas_select_fieldsclear_select_clause
add_fields
ValueErrorr_   r=   )r   r,   r-   r   )rN   r   r    r=   !  s    

zExact.process_rhsc                s`   t | jtrRt| jddrR|jj| jrR| j||\}}| jrBdnd}|| |fS t j	||S )NZconditionalFz%szNOT %s)
r   r   boolrK   r   ra   Z0conditional_expression_supported_in_where_clauser;   r_   r<   )r   r,   r-   rc   r3   template)rN   r   r    r<   /  s    zExact.as_sql)rU   rV   rW   rX   r=   r<   rh   r   r   )rN   r    r     s   r   c                   s$   e Zd ZdZdZ fddZ  ZS )IExactZiexactFc                s2   t  j||\}}|r*|jj|d |d< ||fS )Nr   )r_   r=   ra   Zprep_for_iexact_query)r   qnr-   r   r3   )rN   r   r    r=   C  s    zIExact.process_rhs)rU   rV   rW   rX   r:   r=   rh   r   r   )rN   r    r   >  s   r   c               @   s   e Zd ZdZdS )GreaterThangtN)rU   rV   rW   rX   r   r   r   r    r   J  s   r   c               @   s   e Zd ZdZdS )GreaterThanOrEqualZgteN)rU   rV   rW   rX   r   r   r   r    r   O  s   r   c               @   s   e Zd ZdZdS )LessThanltN)rU   rV   rW   rX   r   r   r   r    r   T  s   r   c               @   s   e Zd ZdZdS )LessThanOrEqualZlteN)rU   rV   rW   rX   r   r   r   r    r   Y  s   r   c                   s    e Zd ZdZ fddZ  ZS )IntegerFieldFloatRoundingz
    Allow floats to work as query values for IntegerField. Without this, the
    decimal portion of the float would always be discarded.
    c                s$   t | jtrtj| j| _t j S )N)r   r   floatmathceilr_   r   )r   )rN   r   r    r   c  s    z)IntegerFieldFloatRounding.get_prep_lookup)rU   rV   rW   r\   r   rh   r   r   )rN   r    r   ^  s   r   c               @   s   e Zd ZdS )IntegerGreaterThanOrEqualN)rU   rV   rW   r   r   r   r    r   i  s   r   c               @   s   e Zd ZdS )IntegerLessThanN)rU   rV   rW   r   r   r   r    r   n  s   r   c                   s<   e Zd ZdZ fddZdd Z fddZdd	 Z  ZS )
Ininc                s   t | jdd }|d k	r(||jkr(td| j ryt| j}|jd  W n$ tk
rl   dd | jD }Y nX |svt| j	|||\}}ddj
| d }||fS t | jdd	s| jj  | jjd
g t j||S d S )N_dbzvSubqueries aren't allowed across different databases. Force the inner query to be evaluated using `list(inner_query)`.c             S   s   g | ]}|d k	r|qS )Nr   )rl   rr   r   r    rn     s    z"In.process_rhs.<locals>.<listcomp>(z, )r   Tr   )rK   r   rA   r   r5   r   discard	TypeErrorr   r4   joinr   r   r_   r=   )r   r,   r-   Zdb_rhsr   r.   r/   placeholder)rN   r   r    r=   w  s&    

zIn.process_rhsc             C   s   d| S )NzIN %sr   )r   r-   r   r   r   r    rd     s    zIn.get_rhs_opc                s>   |j j }| j r0|r0t| j|kr0| j||S t j||S )N)ra   max_in_list_sizer5   r+   r   split_parameter_list_as_sqlr_   r<   )r   r,   r-   r   )rN   r   r    r<     s    
z	In.as_sqlc             C   s   |j j }| j||\}}| j||\}}dg}g }	xtdt||D ]v}
|
dkr\|jd |jd|  |	j| ||
|
|  }||
|
|  }dj|}|j| |jd |	j| qFW |jd dj||	fS )Nr   r   z OR z%s IN (z, r    )	ra   r   r;   r4   ranger+   r(   r)   r   )r   r,   r-   r   r   r}   r   rf   Zin_clause_elementsr3   offsetr.   r/   Zparam_groupr   r   r    r     s$    






zIn.split_parameter_list_as_sql)	rU   rV   rW   rX   r=   rd   r<   r   rh   r   r   )rN   r    r   s  s
   r   c                   s0   e Zd ZdZdZ fddZ fddZ  ZS )PatternLookupz%%%s%%Fc                sB   t | jds| jr0|j| j j|j}|j|S t j||S d S )Nr<   )	r   r   r   Zpattern_opsrX   formatZpattern_escr_   rd   )r   r-   r   pattern)rN   r   r    rd     s    

zPatternLookup.get_rhs_opc                sH   t  j||\}}| j r@|r@| j r@| j|jj|d  |d< ||fS )Nr   )r_   r=   r5   r   param_patternra   Zprep_for_like_query)r   r   r-   r   r3   )rN   r   r    r=     s    zPatternLookup.process_rhs)rU   rV   rW   r   r:   rd   r=   rh   r   r   )rN   r    r     s   r   c               @   s   e Zd ZdZdS )ContainscontainsN)rU   rV   rW   rX   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdS )	IContainsZ	icontainsN)rU   rV   rW   rX   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdZdS )
StartsWith
startswithz%s%%N)rU   rV   rW   rX   r   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdS )IStartsWithZistartswithN)rU   rV   rW   rX   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdZdS )EndsWithendswithz%%%sN)rU   rV   rW   rX   r   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdS )	IEndsWithZ	iendswithN)rU   rV   rW   rX   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdd ZdS )Ranger   c             C   s   d|d |d f S )NzBETWEEN %s AND %sr   r7   r   )r   r-   r   r   r   r    rd     s    zRange.get_rhs_opN)rU   rV   rW   rX   rd   r   r   r   r    r     s   r   c               @   s   e Zd ZdZdZdd ZdS )IsNullZisnullFc             C   sJ   t | jtstjdt |j| j\}}| jr:d| |fS d| |fS d S )NzXUsing a non-boolean value for an isnull lookup is deprecated, use True or False instead.z
%s IS NULLz%s IS NOT NULL)r   r   r   warningswarnr   r'   r   )r   r,   r-   r1   r3   r   r   r    r<     s    zIsNull.as_sqlN)rU   rV   rW   rX   r:   r<   r   r   r   r    r     s   r   c                   s$   e Zd ZdZdZ fddZ  ZS )RegexregexFc                s`   | j |jkrt j||S | j||\}}| j||\}}|jj| j }|||f || fS d S )N)rX   rg   r_   r<   r;   r=   ra   Zregex_lookup)r   r,   r-   r   r}   r   rf   Zsql_template)rN   r   r    r<     s    zRegex.as_sql)rU   rV   rW   rX   r:   r<   rh   r   r   )rN   r    r     s   r   c               @   s   e Zd ZdZdS )IRegexZiregexN)rU   rV   rW   rX   r   r   r   r    r     s   r   c                   s4   e Zd Zdd Z fddZdd Zdd Z  ZS )	
YearLookupc             C   s2   | j j j}t|tr"|jj|}n|jj|}|S )N)r   r$   r   r
   ra   Z%year_lookup_bounds_for_datetime_fieldZ!year_lookup_bounds_for_date_field)r   r-   yearr$   Zboundsr   r   r    year_lookup_bounds%  s
    

zYearLookup.year_lookup_boundsc       	         s|   | j  rn| j||| jj\}}| j||\}}| j||}| j|| j\}}|j| j|| d||f |fS t	 j
||S )Nz%s %s)r5   r;   r   r=   get_direct_rhs_sqlr   r   r)   get_bound_paramsr_   r<   )	r   r,   r-   rc   r3   re   r2   startfinish)rN   r   r    r<   -  s    zYearLookup.as_sqlc             C   s   |j | j | S )N)rg   rX   )r   r-   r   r   r   r    r   ;  s    zYearLookup.get_direct_rhs_sqlc             C   s   t dd S )NzAsubclasses of YearLookup must provide a get_bound_params() method)r   )r   r   r   r   r   r    r   >  s    zYearLookup.get_bound_params)rU   rV   rW   r   r<   r   r   rh   r   r   )rN   r    r   $  s   r   c               @   s   e Zd Zdd Zdd ZdS )	YearExactc             C   s   dS )NzBETWEEN %s AND %sr   )r   r-   r   r   r   r    r   E  s    zYearExact.get_direct_rhs_sqlc             C   s   ||fS )Nr   )r   r   r   r   r   r    r   H  s    zYearExact.get_bound_paramsN)rU   rV   rW   r   r   r   r   r   r    r   D  s   r   c               @   s   e Zd Zdd ZdS )YearGtc             C   s   |fS )Nr   )r   r   r   r   r   r    r   M  s    zYearGt.get_bound_paramsN)rU   rV   rW   r   r   r   r   r    r   L  s   r   c               @   s   e Zd Zdd ZdS )YearGtec             C   s   |fS )Nr   )r   r   r   r   r   r    r   R  s    zYearGte.get_bound_paramsN)rU   rV   rW   r   r   r   r   r    r   Q  s   r   c               @   s   e Zd Zdd ZdS )YearLtc             C   s   |fS )Nr   )r   r   r   r   r   r    r   W  s    zYearLt.get_bound_paramsN)rU   rV   rW   r   r   r   r   r    r   V  s   r   c               @   s   e Zd Zdd ZdS )YearLtec             C   s   |fS )Nr   )r   r   r   r   r   r    r   \  s    zYearLte.get_bound_paramsN)rU   rV   rW   r   r   r   r   r    r   [  s   r   c                   s    e Zd ZdZ fddZ  ZS )UUIDTextMixinzs
    Strip hyphens from a value when filtering a UUIDField on backends without
    a native datatype for UUID.
    c                s`   |j jsFddlm} | j r(t| j| _|| jtdtdt d| _t j	||\}}||fS )Nr   )Replace-r   )r$   )
featuresZhas_native_uuid_fieldZdjango.db.models.functionsr   r5   r   r   r	   r_   r=   )r   r   r-   r   r   r3   )rN   r   r    r=   e  s    zUUIDTextMixin.process_rhs)rU   rV   rW   r\   r=   rh   r   r   )rN   r    r   `  s   r   c               @   s   e Zd ZdS )
UUIDIExactN)rU   rV   rW   r   r   r   r    r   o  s   r   c               @   s   e Zd ZdS )UUIDContainsN)rU   rV   rW   r   r   r   r    r   t  s   r   c               @   s   e Zd ZdS )UUIDIContainsN)rU   rV   rW   r   r   r   r    r   y  s   r   c               @   s   e Zd ZdS )UUIDStartsWithN)rU   rV   rW   r   r   r   r    r   ~  s   r   c               @   s   e Zd ZdS )UUIDIStartsWithN)rU   rV   rW   r   r   r   r    r     s   r   c               @   s   e Zd ZdS )UUIDEndsWithN)rU   rV   rW   r   r   r   r    r     s   r   c               @   s   e Zd ZdS )UUIDIEndsWithN)rU   rV   rW   r   r   r   r    r     s   r   )Frw   r   r   r   Zdjango.core.exceptionsr   Zdjango.db.models.expressionsr   r   r   r   r   Zdjango.db.models.fieldsr	   r
   r   r   r   Zdjango.db.models.query_utilsr   Zdjango.utils.datastructuresr   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   Zdjango.utils.hashabler   r   rZ   r^   ri   rq   r{   Zregister_lookupr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   s    3
 






A
 





