Ë
    qûàg.  ã                   óÚ  — d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZ  eedd	«      Z eed
d«      Z eedd«      Z eedd«      Z eede
j$                  e
j&                  e
j(                  e
j*                  f«      Z eedd«      Z eedd«      Z eedd«      Z eedd«      Z eedd«      Z eedd«      Z G d„ d«      Z G d„ d e«      Z G d!„ d"e«      Z G d#„ d$e«      Z y)%as  
The Django Admin Generator is a project which can automatically generate
(scaffold) a Django Admin for you. By doing this it will introspect your
models and automatically generate an Admin with properties like:

 - `list_display` for all local fields
 - `list_filter` for foreign keys with few items
 - `raw_id_fields` for foreign keys with a lot of items
 - `search_fields` for name and `slug` fields
 - `prepopulated_fields` for `slug` fields
 - `date_hierarchy` for `created_at`, `updated_at` or `joined_at` fields

The original source and latest version can be found here:
https://github.com/WoLpH/django-admin-generator/
é    N)Úapps)Úsettings)ÚLabelCommandÚCommandError©Úmodels)ÚsignalcommandÚMAX_LINE_WIDTHéN   ÚINDENT_WIDTHé   ÚLIST_FILTER_THRESHOLDé   ÚRAW_ID_THRESHOLDéd   ÚLIST_FILTERÚSEARCH_FIELD_NAMES)ÚnameÚslugÚDATE_HIERARCHY_NAMES)Ú	joined_atÚ
updated_atÚ
created_atÚPREPOPULATED_FIELD_NAMES)z	slug=nameÚPRINT_IMPORTSzY# -*- coding: utf-8 -*-
from django.contrib import admin

from .models import %(models)s
ÚPRINT_ADMIN_CLASSzM

@admin.register(%(name)s)
class %(name)sAdmin(admin.ModelAdmin):%(class_)s
ÚPRINT_ADMIN_PROPERTYz
    %(key)s = %(value)sc                   ó   — e Zd ZdZd„ Zy)ÚUnicodeMixinze
    Mixin class to handle defining the proper __str__/__unicode__
    methods in Python 2 or 3.
    c                 ó"   — | j                  «       S ©N)Ú__unicode__©Úselfs    ús/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django_extensions/management/commands/admin_generator.pyÚ__str__zUnicodeMixin.__str__M   s   € Ø×ÑÓ!Ð!ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   © r'   r%   r   r   G   s   „ ñó
"r'   r   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚAdminAppc                 ó.   — || _         || _        || _        y r!   )Ú
app_configÚ	model_resÚoptions)r$   r0   r1   r2   s       r%   Ú__init__zAdminApp.__init__R   s   € Ø$ˆŒØ"ˆŒØˆ�r'   c              #   óô   K  — | j                   j                  «       D ]W  }t        |fi | j                  ¤Ž}| j                  D ]  }|j                  |j                  «      sŒ n | j                  rŒT|–— ŒY y ­wr!   )r0   Ú
get_modelsÚ
AdminModelr2   r1   Úsearchr   )r$   ÚmodelÚadmin_modelÚmodel_res       r%   Ú__iter__zAdminApp.__iter__W   so   è ø€ Ø—_‘_×/Ñ/Ó1ò 
	ˆEÜ$ UÑ;¨d¯l©lÑ;ˆKà ŸN™Nò �Ø—?‘? ;×#3Ñ#3Õ4Ùðð —>’>ØàÓñ
	ùs   ‚AA8Á!A8c                 ó@   — dj                  | j                  «       «      S ©NÚ ©ÚjoinÚ_unicode_generatorr#   s    r%   r"   zAdminApp.__unicode__d   ó   € Ø�w‰w�t×.Ñ.Ó0Ó1Ð1r'   c              #   ó  K  — | D �cg c]  }|j                   ‘Œ }}t        t        dj                  |«      ¬«      z  –— g }| D ]=  }t        t        |j                   |¬«      z  –— |j                  |j                   «       Œ? y c c}w ­w)Nz, r   )r   Úclass_)r   r   Údictr@   r   Úappend)r$   r9   Úmodels_listÚadmin_model_namess       r%   rA   zAdminApp._unicode_generatorg   s‰   è ø€ Ø;?Ö@¨K�{×'Ó'Ð@ˆÐ@Üœd¨$¯)©)°KÓ*@ÔAÑAÒAàÐØò 	7ˆKÜ#¤dØ ×%Ñ%Ø"ô'ñ ò ð ×$Ñ$ [×%5Ñ%5Õ6ñ	7ùò	 Aùs   ‚B
‡BšA0B
c                 ód   — d| j                   j                  ›d| j                  j                  ›d�S ©Nú<ú[z]>)Ú	__class__r(   Úappr   r#   s    r%   Ú__repr__zAdminApp.__repr__s   s$   � à�N‰N×#Ó#Ø�H‰H�M‹Mð
ð 	
r'   N)r(   r)   r*   r3   r;   r"   rA   rO   r,   r'   r%   r.   r.   Q   s   „ òò
ò2ò
7ó
r'   r.   c                   ó~   — e Zd ZdZeeeeefd„Z	d„ Z
ed„ «       Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zefd„Zd„ Zd„ Zd„ Zd„ Zy)r6   )Úlist_displayÚlist_filterÚraw_id_fieldsÚsearch_fieldsÚprepopulated_fieldsÚdate_hierarchyc                 ó¬   — || _         g | _        g | _        g | _        g | _        i | _        d | _        || _        || _        || _	        || _
        || _        y r!   )r8   rQ   rR   rS   rT   rU   rV   Úsearch_field_namesÚraw_id_thresholdÚlist_filter_thresholdÚdate_hierarchy_namesÚprepopulated_field_names)r$   r8   rY   rZ   rX   r[   r\   r2   s           r%   r3   zAdminModel.__init__„   sc   € ð
 ˆŒ
ØˆÔØˆÔØˆÔØˆÔØ#%ˆÔ Ø"ˆÔØ"4ˆÔØ 0ˆÔØ%:ˆÔ"Ø$8ˆÔ!Ø(@ˆÕ%r'   c                 óP   — d| j                   j                  ›d| j                  ›d�S rJ   )rM   r(   r   r#   s    r%   rO   zAdminModel.__repr__–   s    � à�N‰N×#Ó#Ø�I‹Ið
ð 	
r'   c                 ó.   — | j                   j                  S r!   )r8   r(   r#   s    r%   r   zAdminModel.nameœ   s   € à�z‰z×"Ñ"Ð"r'   c              #   óJ  K  — | j                   }|j                  D ]„  }t        |d«      r,t        |j                  d|j                  j
                  «      }nt        d«      ‚|j                  j                  «       }|d | j                  «       |k  sŒw|j                  –— Œ† y ­w)NÚremote_fieldÚrelated_modelz%Unable to process ManyToMany relation)rY   Úlocal_many_to_manyÚhasattrÚgetattrr`   r8   r   ÚobjectsÚallÚcountr   )r$   ÚmetarY   Úfieldra   Úrelated_objectss         r%   Ú_process_many_to_manyz AdminModel._process_many_to_many    s–   è ø€ Ø×0Ñ0ÐØ×,Ñ,ò 	!ˆEÜ�u˜nÔ-Ü '¨×(:Ñ(:¸OÈU×M_ÑM_×MeÑMeÓ f‘ä"Ð#JÓKÐKØ+×3Ñ3×7Ñ7Ó9ˆOØÐ0Ð 0Ð1×7Ñ7Ó9Ð<LÓLØ—j‘jÓ ñ	!ùs   ‚BB#ÂB#c              #   ó”   K  — |j                   j                  «       }|j                  D ]  }| j                  ||«      }|sŒ|–— Œ y ­wr!   )ÚparentsÚvaluesÚfieldsÚ_process_field)r$   rh   Úparent_fieldsri   r   s        r%   Ú_process_fieldszAdminModel._process_fields«   sE   è ø€ ØŸ™×+Ñ+Ó-ˆØ—[‘[ò 	ˆEØ×&Ñ& u¨mÓ<ˆDÚØ“
ñ	ùs   ‚>AÁAc                 óØ  — | j                   }| j                  }t        ||«      }t        |d«      r,t	        |j
                  d|j
                  j                  «      }nt        d«      ‚|j                  j                  «       }|d | j                  «       }||k\  r&| j                  j                  |j                  «       y ||k  r&| j                  j                  |j                  «       y y )Nr`   ra   z%Unable to process ForeignKey relation)rY   rZ   Úmaxrc   rd   r`   r8   r   re   rf   rg   rS   rF   r   rR   )r$   ri   rY   rZ   Ú	max_countra   Úrelated_counts          r%   Ú_process_foreign_keyzAdminModel._process_foreign_key²   sÎ   € Ø×0Ñ0ÐØ $× :Ñ :ÐÜÐ-Ð/?Ó@ˆ	Ü�5˜.Ô)Ü# E×$6Ñ$6¸È×I[ÑI[×IaÑIaÓb‰MäÐFÓGÐGØ%×-Ñ-×1Ñ1Ó3ˆØ% j yÐ1×7Ñ7Ó9ˆàÐ,Ò,Ø×Ñ×%Ñ% e§j¡jÕ1àÐ2Ò2Ø×Ñ×#Ñ# E§J¡JÕ/ð r'   c                 ó„  — ||v ry t        |j                  «      }| j                  j                  |«       t	        |t
        «      rGt	        |t        j                  «      r| j                  |«       n| j                  j                  |«       |j                  | j                  v r| j                  j                  |«       |S r!   )Ústrr   rQ   rF   Ú
isinstancer   r   Ú
ForeignKeyrw   rR   rX   rT   )r$   ri   rq   Ú
field_names       r%   rp   zAdminModel._process_fieldÆ   s–   € Ø�MÑ!Øä˜Ÿ™“_ˆ
Ø×Ñ× Ñ  Ô,Ü�eœ[Ô)Ü˜%¤×!2Ñ!2Ô3Ø×)Ñ)¨%Õ0à× Ñ ×'Ñ'¨
Ô3à�:‰:˜×0Ñ0Ñ0Ø×Ñ×%Ñ% jÔ1àÐr'   c                 ó@   — dj                  | j                  «       «      S r=   r?   r#   s    r%   r"   zAdminModel.__unicode__×   rB   r'   c                 ó(  — t        |t        t        t        f«      r| j	                  |t        |«      «      S t        |t
        «      r| j                  ||«      S t        |t        «      r| j                  ||«      S t        t        |«      ›d|›�«      ‚)Nz is not supported in )rz   ÚlistÚsetÚtupleÚ_yield_tuplerE   Ú_yield_dictry   Ú_yield_stringÚ	TypeErrorÚtype©r$   ÚkeyÚvalues      r%   Ú_yield_valuezAdminModel._yield_valueÚ   sx   € Ü�eœd¤C¬Ð/Ô0Ø×$Ñ$ S¬%°«,Ó7Ð7Ü˜œtÔ$Ø×#Ñ# C¨Ó/Ð/Ü˜œsÔ#Ø×%Ñ% c¨5Ó1Ð1ä¼4À½;ÉÐNÓOÐOr'   c                 ó6   — t         t        | ||«      ¬«      z  S )N)rˆ   r‰   )r   rE   )r$   rˆ   r‰   Ú	converters       r%   r„   zAdminModel._yield_stringä   s!   € Ü#¤dØÙ˜EÓ"ô'
ñ 
ð 	
r'   c                 ój  — g }| j                  ||«      }t        |«      t        kD  rŒ|j                  | j                  |dt        «      «       |j                  «       D ]'  \  }}|j                  dt        z  dz  ›|›d|›�«       Œ) |j                  t        dz  dz   «       dj                  |«      }|S )Nú{é   ú z: ú}ú
)r„   Úlenr
   rF   ry   Úitemsr   r@   )r$   rˆ   r‰   Ú	row_partsÚrowÚkÚvs          r%   rƒ   zAdminModel._yield_dictê   s©   € Øˆ	Ø× Ñ   eÓ,ˆÜˆs‹8”nÒ$Ø×Ñ˜T×/Ñ/°°S¼#Ó>Ô?ØŸ™›ò N‘��1Ø× Ñ ¨q´<Ñ/?À#Ò/EÂqÉ!Ð!LÕMðNð ×Ñœ\¨CÑ/°#Ñ5Ô6Ø—)‘)˜IÓ&ˆCàˆ
r'   c                 óX  — g }| j                  ||«      }t        |«      t        kD  rƒ|j                  | j                  |dt        «      «       |D ],  }|j                  dt
        z  dz  t        |«      z   dz   «       Œ. |j                  t
        dz  dz   «       dj                  |«      }|S )Nú(r�   r�   ú,ú)r’   )r„   r“   r
   rF   ry   r   Úreprr@   )r$   rˆ   r‰   r•   r–   r˜   s         r%   r‚   zAdminModel._yield_tuple÷   s¦   € Øˆ	Ø× Ñ   eÓ,ˆÜˆs‹8”nÒ$Ø×Ñ˜T×/Ñ/°°S¼#Ó>Ô?Øò I�Ø× Ñ  ¤\Ñ!1°CÑ!7¼$¸q»'Ñ!AÀCÑ!GÕHðIð ×Ñœ\¨CÑ/°#Ñ5Ô6Ø—)‘)˜IÓ&ˆCàˆ
r'   c              #   ó”   K  — | j                  «        | j                  D ]%  }t        | |«      }|sŒ| j                  ||«      –— Œ' y ­wr!   )Ú_processÚPRINTABLE_PROPERTIESrd   rŠ   r‡   s      r%   rA   zAdminModel._unicode_generator  sF   è ø€ Ø�‰ŒØ×,Ñ,ò 	4ˆCÜ˜D #Ó&ˆEÚØ×'Ñ'¨¨UÓ3Ó3ñ	4ùs
   ‚.A±Ac                 óþ  — | j                   j                  }| xj                  t        | j	                  |«      «      z  c_        t        | j                  |«      «      }| j                  d d d…   D ]  }||v sŒ| j                  rŒ|| _         n t        | j                  «      D ]P  }|j                  dd«      \  }}|j                  d«      }||v sŒ.d}|D ]
  }||vsŒd} n |rŒB|| j                  |<   ŒR d| _        y )Néÿÿÿÿú=é   r›   FT)r8   Ú_metarS   r   rk   rr   r[   rV   Úsortedr\   ÚsplitrU   Ú	processed)r$   rh   Úfield_namesr|   r—   ÚvsÚ
incompleter˜   s           r%   rŸ   zAdminModel._process  s  € Ø�z‰z×Ñˆà×Òœd 4×#=Ñ#=¸dÓ#CÓDÑDÕÜ˜4×/Ñ/°Ó5Ó6ˆà×3Ñ3±D°b°DÑ9ò 	ˆJØ˜[Ò(°×1DÓ1DØ&0�Ô#Ùð	ô
 ˜×5Ñ5Ó6ò 	5ˆAØ—G‘G˜C “O‰EˆAˆrØ—‘˜#“ˆBØ�KÒØ"�
Øò �AØ Ò+Ø%)˜
Ùðò
 "Ø24�D×,Ñ,¨QÒ/ð	5ð ˆ�r'   N)r(   r)   r*   r    r   r   r   r   r   r3   rO   Úpropertyr   rk   rr   rw   rp   r"   rŠ   r�   r„   rƒ   r‚   rA   rŸ   r,   r'   r%   r6   r6   z   sx   „ ðÐð 0@Ø'<Ø$6Ø&:Ø*Bó	Aò$
ð ñ#ó ð#ò	!òòò(ò"2òPð 37ó 
òòò4ór'   r6   c                   ó*   — e Zd ZdZdZd„ Zed„ «       Zy)ÚCommandz5Generate a `admin.py` file for the given app (models)Tc                 ód  — |j                  d«       |j                  dd¬«       |j                  dddt        d¬	«       |j                  d
ddt        d¬	«       |j                  dddt        d¬	«       |j                  ddt        t
        dd¬«       |j                  ddt        t        dd¬«       y )NÚapp_nameÚ
model_nameÚ*)Únargsz-sz--search-fieldrF   zNFields named like this will be added to `search_fields` [default: %(default)s])ÚactionÚdefaultÚhelpz-dz--date-hierarchyzNA field named like this will be set as `date_hierarchy` [default: %(default)s]z-pz--prepopulated-fieldsz‡These fields will be prepopulated by the other field.The field names can be specified like `spam=eggA,eggB,eggC` [default: %(default)s]z-lz--list-filter-thresholdr   zsIf a foreign key has less than LIST_FILTER_THRESHOLD items it will be added to `list_filter` [default: %(default)s])r†   rµ   Úmetavarr¶   z-rz--raw-id-thresholdr   znIf a foreign key has more than RAW_ID_THRESHOLD items it will be added to `list_filter` [default: %(default)s])Úadd_argumentr   r   r   Úintr   r   )r$   Úparsers     r%   Úadd_argumentszCommand.add_arguments+  sä   € Ø×Ñ˜JÔ'Ø×Ñ˜L°ÐÔ4Ø×ÑØÐ"¨8Ü&ð&ð 	ô 	'ð
 	×ÑØÐ$¨XÜ(ð&ð 	ô 	'ð
 	×ÑØÐ)°(Ü,ð&ð 	ô 	'ð 	×ÑØÐ+´#Ü)Ð3JðGð 	ô 	Hð
 	×ÑØÐ&¬SÜ$Ð.@ðGð 	õ 	Hr'   c                 óh  — |d   }	 t        j                  |«      }g }|d   D ]5  }|j                  t        j                  |t        j                  «      «       Œ7 | j                  j	                  t        ||fi |¤Žj                  «       «       y # t        $ r˜ | j                  j	                  d«       | j                  j	                  d«       t        j
                  «       D �cg c]  }|j                  ‘Œ nc c}w }}t        |«      D ]   }| j                  j	                  d|z  «       Œ" Y y w xY w)Nr°   z6This command requires an existing app name as argumentzAvailable apps:z    %sr±   )r   Úget_app_configÚLookupErrorÚstderrÚwriteÚget_app_configsÚlabelr¦   rF   ÚreÚcompileÚ
IGNORECASEÚstdoutr.   r&   )	r$   Úargsr2   r°   rN   Ú
app_labelsrÂ   r1   Úargs	            r%   ÚhandlezCommand.handleI  s
  € à˜:Ñ&ˆð	Ü×%Ñ% hÓ/ˆCð ˆ	Ø˜<Ñ(ò 	=ˆCØ×ÑœRŸZ™Z¨¬R¯]©]Ó;Õ<ð	=ð 	�‰×Ñœ( 3¨	Ñ=°WÑ=×EÑEÓGÕHøô ò 	Ø�K‰K×ÑÐVÔWØ�K‰K×ÑÐ/Ô0Ü/3×/CÑ/CÓ/EÖF¨˜#Ÿ)›)ÑFùÒFˆJÐFÜ 
Ó+ò 4�Ø—‘×!Ñ! (¨UÑ"2Õ3ð4áð	ús   ‡B ÂAD1Ã%C9Ã86D1Ä0D1N)r(   r)   r*   r¶   Úcan_import_settingsr»   r	   rÊ   r,   r'   r%   r®   r®   &  s)   „ ØF€DàÐòHð< ñIó ñIr'   r®   )!r+   rÃ   Údjango.appsr   Údjango.confr   Údjango.core.management.baser   r   Ú	django.dbr   Ú"django_extensions.management.utilsr	   rd   r
   r   r   r   Ú	DateFieldÚDateTimeFieldr{   ÚBooleanFieldr   r   r   r   r   r   r   r   r.   r6   r®   r,   r'   r%   ú<module>rÔ      sS  ðñó  
å Ý  ß BÝ å <ñ ˜Ð#3°RÓ8€Ù�x °Ó3€Ù Ð*AÀ2ÓFÐ Ù˜8Ð%7¸Ó=Ð á�h Ø
×ÑØ
×ÑØ
×ÑØ
×Ñð	0ó €ñ ˜XÐ';ð >ó Ð ñ
 ˜xÐ)?ð Bó Ð ñ # 8Ð-Gð Jó Ð ñ ˜ /ð 4ó €ñ ˜HÐ&9ð <ó Ð ñ ˜xÐ)?ð Bó Ð ÷"ñ "ô&
ˆ|ô &
ôRi�ô iôX5Iˆlõ 5Ir'   