
    9 ft                        d Z ddlZddlZddlmZ ddl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 dd
lmZmZmZ ddlmZmZmZmZmZ ddlmZmZm Z  ddl!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z; h dZ<h dZ=h dZ>h dZ?h dZ@dhZAddhZBdd hZCd!d"hZDd#d$hZEd%d&hZFd'hZGh d(ZHh d)ZId*hZJ eKejL        M                    ejN        O                                                    ZPd+ eeeeeeeeeee e"e#e$e&e'fD             ZQd,hZRd- ZSd. ZTd/ ZUd0 ZVd1 ZWd2 ZXd3 ZYd4 ZZd5 Z[d6 Z\d7 Z]d8 Z^d9 Z_d: Z`d; Zad< Zbd= Zcd> Zdd? Zed@ ZfdA ZgdB ZhdC ZidD ZjdE ZkdF ZldG Zm G dH dI          ZndJ ZodK ZpdL ZqdM ZrdN ZsdO ZtdP Zu G dQ dR          ZvdS ZwdT ZxdU ZydV ZzdW Z{dS )XzAugmentations.    N)InferenceError)	AttributeClassDef
ImportFrom)r   )Module)Super)VERSION)
termcolors)ContextMixinRedirectViewView)	DateMixinDayMixin
MonthMixin	WeekMixin	YearMixin)SingleObjectMixin!SingleObjectTemplateResponseMixinTemplateResponseMixin)DeletionMixin	FormMixinModelFormMixin)MultipleObjectMixin#MultipleObjectTemplateResponseMixin)DocStringCheckerNameChecker)ClassChecker)MisdesignChecker)NewStyleConflictChecker)TypeChecker)ScopeConsumerVariablesChecker)augment_visitsuppress_message)PY3node_is_subclass>    allgetnoneonlycountdatesdeferextrausingcreateexistsfilterlatestupdatevaluesexcludein_bulkreverseannotatedistinctiteratororder_by	aggregatebulk_createvalues_listget_querysetget_or_createcomplex_filterselect_relatedprefetch_relatedupdate_or_createselect_for_update>'   r'   r(   rawlastr)   r*   r+   r,   r-   r.   firstr/   r0   deleter1   r2   r3   r4   r5   r6   r7   r8   r9   r:   earliestr;   r<   r=   	datetimes
as_manager
expressionr>   r?   output_fieldrA   rC   rD   rE   rF   >'   formfieldsactionsr6   inlinessave_asordering	fieldsets	paginatorlist_filtersave_on_toplist_displayradio_fieldsview_on_sitelist_editablelist_per_pageraw_id_fieldssearch_fieldsactions_on_topdate_hierarchyfilter_verticalreadonly_fieldspreserve_filtersactions_on_bottomadd_form_templatefilter_horizontallist_max_show_alllist_display_linksempty_value_displayformfield_overrideslist_select_relatedprepopulated_fieldschange_form_templatechange_list_templateshow_full_result_countobject_history_templateactions_selection_counterdelete_confirmation_template%delete_selected_confirmation_template>   idsave_metarJ   objectsDoesNotExist_base_manager_default_managerget_next_by_dateget_previous_by_dateMultipleObjectsReturned>   nullblankuniquechoicesdefaultdb_indexeditable	db_column	help_text
validatorsprimary_keyverbose_namedb_tablespaceerror_messagesunique_for_dateunique_for_yearunique_for_month
max_lengthauto_nowauto_now_add
max_digitsdecimal_places	upload_tostorageheight_fieldwidth_fieldprotocolunpack_ipv4allow_unicode>   to_field	swappablerelated_namedb_constraintlimit_choices_torelated_query_name>   addsetclearremovethroughdb_tabler   symmetricalr   r   through_fieldsr   r   parent_linkc                     h | ]C}|j          d |j         d |j         ft          |j                                                  fDS ).)
__module____name__tuple__dict__keys).0clss     Z/var/www/equiseq/venv/lib/python3.11/site-packages/pylint_django/augmentations/__init__.py	<setcomp>r     sn        	 ~....	
 	cl!!""      declared_fieldsc                    |j         d         }i }t          r|j        j        n|j        j        } |            D ]J\  }}t          |d         t                    r%t          d |d         j        D                       rE|||<   Kt          |d          r||j
        |j        |j        f}n||j
        |j        f}t          | |_        |g|_          | ||          S )at  
    Replaces the leave_module method on the VariablesChecker class to
    prevent unused-import warnings which are caused by the ForeignKey
    and OneToOneField transformations. By replacing the nodes in the
    AST with their type rather than the django field, imports of the
    form 'from django.db.models import OneToOneField' raise an unused-import
    warning
    r   c              3   *   K   | ]}|d          dv V  dS )r   )
ForeignKeyOneToOneFieldN )r   ns     r   	<genexpr>z<ignore_import_warnings_for_related_fields.<locals>.<genexpr>B  s,      SSq1Q4::SSSSSSr   consumed_uncertain)_to_consumer%   
to_consumeitems	iteritems
isinstancer   anynameshasattrconsumedr   
scope_typer!   _atomic)	orig_methodselfnodeconsumer
new_thingsiteratnamestmtssc_argss	            r   )ignore_import_warnings_for_related_fieldsr   /  s    "H
 J*-PX &&83F3PFvxx ! !eeAh
++ 	SSE!HNSSSSS  
4 x-.. Gx0(2MxObc x0(2EF$g.H zD;tT"""r   c           	         d}|j         t          v s|j                             d          rd}n;t          |j        t
                    r!t          |j        dd          }|t          v rd}|rgt          |                                          }|D ]C}	 |	                                }|D ]}t          |dddd	          r  dS 4# t          $ r Y @w xY w |              dS )
aW  
    When a Django model has a ForeignKey to another model, the target
    of the foreign key gets a '<modelname>_set' attribute for accessing
    a queryset of the model owning the foreign key - eg:

    class ModelA(models.Model):
        pass

    class ModelB(models.Model):
        a = models.ForeignKey(ModelA)

    Now, ModelA instances will have a modelb_set attribute.

    It's also possible to explicitly name the relationship using the related_name argument
    to the ForeignKey constructor. As it's impossible to know this without inspecting all
    models before processing, we'll instead do a "best guess" approach and see if the attribute
    being accessed goes on to be used as a queryset. This is via 'duck typing': if the method
    called on the attribute being accessed is something we might find in a queryset, we'll
    warn.
    F_setTattrnameN django.db.models.manager.Managerdjango.db.models.base.Model.Modelz-django.db.models.fields.related.ForeignObject)r   MANAGER_ATTRSendswithr   parentr   getattrlistget_childreninferredr&   r   )chainr   quack	func_namechildrenchildinferred_clsr   s           r   foreign_key_setsr   U  s+   * E}%%)?)?)G)G%  dk9-- 	Z>>IM)) ))++,, 	 	E$~~// (  C':5 G    "     
EGGGGGs   C
CCc                 R    |j                             d          rd S  |              d S )N_id)r   r   )r   r   s     r   foreign_key_idsr     s.    }e$$ 	EGGGGGr   c                     | j         dd         dk    st          | j        t                    rdS t	          | d          S )z3Checks that node is derivative of ModelAdmin class.NAdminF'django.contrib.admin.options.ModelAdminr   r   r   r   r&   r   s    r   is_model_admin_subclassr     s>    y~  Jt{H$E$E uD"KLLLr   c                 x    | j         dk    st          | j        t                    sdS d}t	          | j        g|R  S )z.Checks that node is derivative of Media class.MediaF)
r   zdjango.forms.widgets.Mediar   r   django.forms.forms.Form.Formzdjango.forms.widgets.Widgetz.Widgetdjango.forms.models.ModelForm
.ModelFormr   r   parentss     r   is_model_media_subclassr     sF    yG:dk8#D#DuG DK2'2222r   c                 x    | j         dk    st          | j        t                    sdS d}t	          | j        g|R  S )z-Checks that node is derivative of Meta class.MetaF)r   r   r   r   r   r   z)rest_framework.serializers.BaseSerializerz&rest_framework.generics.GenericAPIViewz,rest_framework.viewsets.ReadOnlyModelViewSetz$rest_framework.viewsets.ModelViewSetz"django_filters.filterset.FilterSet!factory.django.DjangoModelFactoryr   r   s     r   is_model_meta_subclassr     sF    yF*T[("C"CuG DK2'2222r   c                     	 | j                                         }n#  Y dS xY wd}|D ]<}	 |                                |v r dS t          |g|R  r dS -# t          $ r Y 9w xY wdS )zIChecks that node is derivative of DjangoModelFactory or SubFactory class.F)z!factory.declarations.LazyFunctionzfactory.declarations.SubFactoryr   T)exprr   qnamer&   AttributeError)r   parent_classesr   parent_classs       r   is_model_factoryr    s    ++--uuG '  	!!##w..tt7w777 tt 	 	 	H	 5s    !AA
A"!A"c                     | j         sdS | j                                         D ]I}	 |                                }n# t          $ r Y $w xY w|D ]}|                                dk    r  dS JdS )NFzfactory.helpers.post_generationT)
decoratorsr   r   r   r  )r   	decoratorr   targets       r   !is_factory_post_generation_methodr    s    ? u_1133  		 ))++HH 	 	 	H	  	 	F||~~!BBBttt C	 5s   ;
AAc                 x    | j         dk    st          | j        t                    sdS d}t	          | j        g|R  S )z1Checks that node is derivative of MPTTMeta class.MPTTMetaF)r   r   r   r   r   r   r   r   s     r   is_model_mpttmeta_subclassr    sF    yJjh&G&GuG DK2'2222r   c                 B   | j         |vrdS |                                 sdS 	 |                                                                 D ]D}t          |t                    r|j        }t          |g|R  s|                                |v r dS En# t          $ r Y nw xY wdS )zCChecks that node is an attribute used inside one of allowed parentsFT)	r   
last_childr   r   r   _self_classr&   r  r   )r   attrsr   r   s       r   _attribute_is_magicr    s    }E!!u?? u??$$--// 	 	C#u%% &o.g... #))++2H2Htt 3I	
    5s   A(B B 
BBc                 2    d}t          | t          |          S )N)z"django.core.management.color.Style)r  STYLE_ATTRSr   s     r   is_style_attributer    s    5Gt[':::r   c                 b    d}t          | t                              t                    |          S )z;Checks that node is attribute of Manager or QuerySet class.)r   z.Managerzfactory.base.BaseFactory.buildzdjango.db.models.query.QuerySetz	.QuerySet)r  r   unionQS_ATTRSr   s     r   is_manager_attributer    s+    G t]%8%8%B%BGLLLr   c                 2    d}t          | t          |          S )z0Checks that node is attribute of BaseModelAdmin.)z+django.contrib.admin.options.BaseModelAdminz.BaseModelAdmin)r  MODELADMIN_ATTRSr   s     r   is_admin_attributer  %  s    PGt%5w???r   c                 2    d}t          | t          |          S )z'Checks that node is attribute of Model.)r   r   )r  MODEL_ATTRSr   s     r   is_model_attributer!  +  s    7Gt[':::r   c                 2    d}t          | t          |          S )z'Checks that node is attribute of Field.)zdjango.db.models.fields.Fieldz.Field)r  FIELD_ATTRSr   s     r   is_field_attributer$  1  s    9Gt[':::r   c                 2    d}t          | t          |          S )z+Checks that node is attribute of CharField.)z!django.db.models.fields.CharFieldz
.CharField)r  CHAR_FIELD_ATTRSr   s     r   is_charfield_attributer'  7      AGt%5w???r   c                 2    d}t          | t          |          S )z+Checks that node is attribute of DateField.)z!django.db.models.fields.DateFieldz
.DateField)r  DATE_FIELD_ATTRSr   s     r   is_datefield_attributer+  =  r(  r   c                 2    d}t          | t          |          S )z.Checks that node is attribute of DecimalField.)z$django.db.models.fields.DecimalFieldz.DecimalField)r  DECIMAL_FIELD_ATTRSr   s     r   is_decimalfield_attributer.  C  s    GGt%8'BBBr   c                 2    d}t          | t          |          S )z+Checks that node is attribute of FileField.)z'django.db.models.fields.files.FileFieldz
.FileField)r  FILE_FIELD_ATTRSr   s     r   is_filefield_attributer1  I  s    GGt%5w???r   c                 2    d}t          | t          |          S )z,Checks that node is attribute of ImageField.)z(django.db.models.fields.files.ImageFieldz.ImageField)r  IMAGE_FIELD_ATTRSr   s     r   is_imagefield_attributer4  O  s    IGt%6@@@r   c                 2    d}t          | t          |          S )z7Checks that node is attribute of GenericIPAddressField.)z-django.db.models.fields.GenericIPAddressFieldz.GenericIPAddressField)r  IP_FIELD_ATTRSr   s     r   is_ipfield_attributer7  U  s    G t^W===r   c                 2    d}t          | t          |          S )z+Checks that node is attribute of SlugField.)z!django.db.models.fields.SlugFieldz
.SlugField)r  SLUG_FIELD_ATTRSr   s     r   is_slugfield_attributer:  ^  r(  r   c                 2    d}t          | t          |          S )z,Checks that node is attribute of ForeignKey.)z*django.db.models.fields.related.ForeignKeyz.ForeignKey)r  FOREIGNKEY_FIELD_ATTRSr   s     r   is_foreignkeyfield_attributer=  d  s    KGt%;WEEEr   c                 2    d}t          | t          |          S )z1Checks that node is attribute of ManyToManyField.)z/django.db.models.fields.related.ManyToManyFieldz.ManyToManyField)r  MANYTOMANY_FIELD_ATTRSr   s     r   is_manytomanyfield_attributer@  j  s    UGt%;WEEEr   c                 2    d}t          | t          |          S )z/Checks that node is attribute of OneToOneField.)z-django.db.models.fields.related.OneToOneFieldz.OneToOneField)r  ONETOONE_FIELD_ATTRSr   s     r   is_onetoonefield_attributerC  p  s    QGt%97CCCr   c                 2    d}t          | t          |          S )z&Checks that node is attribute of Form.)r   r   )r  
FORM_ATTRSr   s     r   is_form_attributerF  v  s    JGtZ999r   c                     | j                             d          st          | j        t                    sdS t          | d          S )z1Checks that node is derivative of TestCase class.TestFzdjango.test.testcases.TestCase)r   r   r   r   r   r&   r   s    r   is_model_test_case_subclassrI  |  sC    9f%% jh.O.O uD"BCCCr   c                       e Zd Zd Zd ZdS )IsAttributec                 "    || _         || _        d S N)r   r  )r   r   r  s      r   __init__zIsAttribute.__init__  s    


r   c                 8    t          || j        | j                  S rM  )r  r  r   r   r   s     r   __call__zIsAttribute.__call__  s    "4T\BBBr   Nr   r   __qualname__rN  rQ  r   r   r   rK  rK    s7          C C C C Cr   rK  c                     | j         t          j        vrdS | j        }|r3t	          |t
                    s|j        }|rt	          |t
                    d}|duot          |g|R  S )z[Checks that node is a default http method (i.e get, post, put, and more) of the View class.F)zdjango.views.Viewzdjango.views.generic.Viewzdjango.views.generic.base.ViewN)r   r   http_method_namesr   r   ScopedClassr&   )r   r   subclasss      r   2is_model_view_subclass_method_shouldnt_be_functionrX    s    y...u[F
 FK88   FK88 H E"26"EH"E"E"EEr   c                 (    |dv rdS  | |||          S )a'  
    Ignore unused-argument warnings for function arguments named "request".

    The signature of Django view functions require the request argument but it is okay if the request is not used.
    This function should be used as a wrapper for the `VariablesChecker._is_name_ignored` method.
    )requestargskwargsTr   )r   r   stmtr   s       r   +ignore_unused_argument_warnings_for_requestr^    s)     ,,,t;tT4(((r   c                 >   | j                             d          sdS | j                             d          sdS |                                 rP	 |                                                                 D ]}t          |dd          r dS n# t          $ r Y dS w xY wdS )z/Accept model's fields with get_*_display names._displayFget_r   r   T)r   r   
startswithr  r   r&   r   )r   r   s     r   is_model_field_display_methodrc    s    =!!*-- u=##F++ u 	((1133    #C)FQQ  44    	 	 	55	5s   :B 
B 
BBc                     | j         dvrdS | j        }|r3t          |t                    s|j        }|rt          |t                    ||j         dk    rdS dS )z6Suppress warnings for valid attributes of Media class.)jsFNr   T)r   r   r   rV  r   r   s     r   is_model_media_valid_attributesrg    ss    yu[F
 FK88   FK88  ~//u4r   c                     | j         dvrdS | j        }t          |t                    s|j        }t          |t                    d|j         vrdS dS )z=Suppress warnings for valid constants in templatetags module.)registerFztemplatetags.T)r   r   r   r   rf  s     r   %is_templatetags_module_valid_constantrj    sa    y%%u[F((  ((  fk))u4r   c                     | j         dvrdS | j        }t          |t                    s|j        }t          |t                    |j                             d          sdS dS )z5Suppress warnings for valid constants in urls module.)urlpatternsapp_nameFurlsT)r   r   r   r   r   rf  s     r   is_urls_module_valid_constantro    sm    y333u[F((  ((  ;'' u4r   c                 2    t           dk    r| j        dk    S dS )N)      rx   F)django_versionr   r   s    r   allow_meta_protected_accessrt    s    }''5r   c                       e Zd Zd Zd ZdS )IsClassc                     || _         d S rM  )
class_name)r   rx  s     r   rN  zIsClass.__init__  s    $r   c                 ,    t          || j                  S rM  )r&   rx  rP  s     r   rQ  zIsClass.__call__  s    do666r   NrR  r   r   r   rv  rv    s2        % % %7 7 7 7 7r   rv  c                 J     t          j                    fd            }|S )Nc                       g| R i |S rM  r   )r[  r\  r   with_methods     r   	wrap_funczwrap.<locals>.wrap_func  s#    {;8888888r   )	functoolswraps)r   r|  r}  s   `` r   wrapr    s?    _[!!9 9 9 9 9 "!9 r   c                 ~   |                                  }| j        dk    ot          |t                    o|j        dk    p~|j        d                             d          p^|j                            d          pD|j        dk    p9|j        d                             d          p|j                            d          S )Napplicationasgir   zasgi.pywsgizwsgi.py)framer   r   r   pathr   file)r   r  s     r   is_wsgi_applicationr    s    JJLLE	]" 		
uf%%		
 J&  .z!}%%i00.z""9--. zV#. z!}%%i00	.
 z""9--r   c                 ~    t          t          d          sd S t          | t          t          d          ||           d S )Nvisit_classdef)r   r   r$   r   )linterwarning_nameaugments      r   pylint_newstyle_classdef_compatr    sO    *,<== ')9::	    r   c                      t           j        } | j        dk    rt          | t                    t           _        t           j        }|j        dk    r!t          |t                    t           _        dS dS )zU
    Apply augmentation and suppression rules through monkey patching of pylint.
    _is_name_ignoredleave_moduleN)r"   r  r   r  r^  r  r   )current_is_name_ignoredcurrent_leave_modules     r   apply_wrapped_augmentationsr    so     /?'+===,01HJu,v,v) ,8$66 )--ACl(m(m%%% 76r   c           
         t          | t          j        t                     t          | t          j        t                     t          | t          j        dt                     t          | t          j        dt                     t          | t          j	        dt                     t          | t          j        dt                     t          | t          j        dt                     t          | t          j        dt                     t          | t          j        dt                     t          | t          j        dt                     t          | t          j        dt                      t          | t          j        dt"                     t          | t          j        dt$                     t          | t          j        dt&                     t          | t          j        dt(                     t          | t          j        dt*                     t          | t          j        dt,                     t          | t          j        dt.                     t          | t          j        dt0                     t          | t          j        dt2                     t4          D ]/\  }}t          | t          j        dt7          ||                     0t          | t8          j        dt=          d                     t          | t8          j        dt=          d                     t          | t8          j        dt=          d                     t          | t>          j        dt=          d                     t          | t@          j        d	tB                     tE          | d
tB                     t          | t>          j        dtB                     t          | t8          j#        dtB                     t          | t>          j        dtH                     t          | t          j	        dtJ                     t          | t@          j        d	tL                     tE          | d
tL                     t          | t>          j        dtL                     t          | t8          j#        dtL                     t          | t8          j#        dtN                     t          | t8          j#        dtP                     t          | t>          j)        dtT                     t          | t@          j        d	tV                     tE          | d
tV                     t          | t>          j        dtV                     t          | t8          j#        dtV                     t          | t          j        dtX                     t          | t>          j-        dt\                     t          | t          j	        dt^                     ta                       dS )z)Apply augmentation and suppression rules.z	no-memberzinvalid-nameztoo-many-ancestorsz"django.views.generic.edit.FormViewz*django.views.generic.detail.BaseDetailViewz)django.views.generic.edit.ProcessFormViewW0232r   zmissing-docstringzold-style-classzno-initztoo-few-public-methodszprotected-accessC0103R0904zno-self-usezno-self-argumentN)1r#   r    visit_attributer   r   r$   rc  r  r   visit_assignnamero  r  r  r!  r$  r'  r+  r.  r1  r4  r7  r:  r=  r@  rC  rF  
VIEW_ATTRSrK  r   r  rv  r   r   r   r  leave_classdefrt  rg  r   r   rI  leave_functiondefrX  r  r  visit_functiondefr  r  r  )r  r   r  s      r   apply_augmentationsr  9  s,   &+57GHHH&+5GGGV[8+GdeeeV[8+GYZZZ$%	   V[8+G[\\\V[8+GYZZZV[8+GYZZZV[8+GYZZZV[8+G]^^^V[8+G]^^^V[8+G`aaaV[8+G]^^^V[8+G^___V[8+G[\\\V[8+G]^^^V[8+GcdddV[8+GcdddV[8+GabbbV[8+GXYYY$ 
 
'''		
 	
 	
 	
 '455	   '<==	   ';<<	   #/00	   '	   $F,=?UVVVV\8)E[\\\' 	   $#	   V[97Dcddd'	   $F,=?VWWWV\8)E\]]]' 	   V-<gG^___ V-<gGbccc &:	   '"	   $F,=?YZZZV\8'C]^^^' "	   V[8+GWXXX&)	   V[9>K^___!!!!!r   )|__doc__r~  	itertoolsastroidr   astroid.nodesr   r   r   astroid.nodes.scoped_nodesrV  r   astroid.objectsr   djangor	   rs  django.utilsr
   django.views.generic.baser   r   r   django.views.generic.datesr   r   r   r   r   django.views.generic.detailr   r   r   django.views.generic.editr   r   r   django.views.generic.listr   r   pylint.checkers.baser   r   pylint.checkers.classesr   pylint.checkers.design_analysisr   pylint.checkers.newstyler   pylint.checkers.typecheckr    pylint.checkers.variablesr!   r"   pylint_plugin_utilsr#   r$   pylint_django.utilsr%   r&   r   r  r  r   r#  r&  r*  r-  r0  r3  r6  r9  r<  r?  rB  r   r   from_iterablePALETTESr5   r  r  rE  r   r   r   r   r   r   r  r  r  r  r  r  r  r!  r$  r'  r+  r.  r1  r4  r7  r:  r=  r@  rC  rF  rI  rK  rX  r^  rc  rg  rj  ro  rt  rv  r  r  r  r  r  r   r   r   <module>r     sQ             " " " " " " 9 9 9 9 9 9 9 9 9 9 > > > > > > - - - - - - ! ! ! ! ! ! , , , , , , # # # # # # F F F F F F F F F F \ \ \ \ \ \ \ \ \ \ \ \ \ \ s s s s s s s s s s N N N N N N N N N N ^ ^ ^ ^ ^ ^ ^ ^ > > > > > > > > 0 0 0 0 0 0 < < < < < < < < < < < < 1 1 1 1 1 1 E E E E E E E E ? ? ? ? ? ? ? ? 5 5 5 5 5 5 5 5! ! !H( ( (V* * * Z    ,             
      $  
 c)///
0C0J0J0L0LMMNN  	)+!  
< 

## ## ##L7 7 7t  M M M3 3 3(3 3 3,  4  "3 3 3   $; ; ;
	M 	M 	M@ @ @; ; ;; ; ;@ @ @@ @ @C C C@ @ @A A A> > >@ @ @F F FF F FD D D: : :D D DC C C C C C C CF F F$
) 
) 
)  &        7 7 7 7 7 7 7 7    "  n n n4]" ]" ]" ]" ]"r   