Ë
    qûàgP%  ã                   ón   — 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„ Z
d„ Zd„ Zd	„ Z G d
„ de«      Zy)é    )Úapps)ÚGenericForeignKey)ÚBaseCommand)Útransaction)Úsignalcommandc                  ó¶   — t        j                  «       } d}| D ]!  }t        |›d|j                  ›�«       |dz  }Œ# t	        t        d«      «      }| |dz
     }|S )Né   ú. z=Enter the number of the model you would like to de-duplicate:)r   Ú
get_modelsÚprintÚ__name__ÚintÚinput)ÚmodelsÚiteratorÚmodelÚmodel_choiceÚmodel_to_deduplicates        úy/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django_extensions/management/commands/merge_model_instances.pyÚget_model_to_deduplicater   
   sd   € Ü�_‰_Ó€FØ€HØò ˆÜš( E§N¢NÐ3Ô4Ø�A‰‰ðô ”uÐ\Ó]Ó^€LØ! ,°Ñ"2Ñ3ÐØÐó    c           	      óæ  — | j                   j                  «       D �cg c]  }|j                  ‘Œ }}d}|D ]  }t        |›d|›�«       |dz  }Œ d}|s3t	        t        d«      «      }|t        d|«      v rd}nt        d«       |sŒ3|dz
     g}d}|sÓ|D �cg c]	  }||vsŒ|‘Œ }	}d}|	D ]  }t        |›d|›�«       |dz  }Œ t        d«       d}|s�t        d«       t        d	j                  |«      d	z   «       t        d
«      }
|
dk(  rd}d}nOt	        |
«      t        t        dt        |	«      dz   «      «      v r||	t	        |
«      dz
     gz  }d}nt        d«       |sŒ�|sŒÓ|S c c}w c c}w )Nr	   r
   FzEEnter the number of the (first) field you would like to de-duplicate.Tz Invalid input. Please try again.zC. Done adding fields.z8You are currently deduplicating on the following fields:ú
z 
                Enter the number of the field you would like to de-duplicate.
                If you have entered all fields, enter C to continue.
            ÚC)
Ú_metaÚ
get_fieldsÚnamer   r   r   ÚrangeÚjoinÚlistÚlen)r   ÚfieldÚfieldsr   Ú	validatedÚfirst_fieldÚfields_to_deduplicateÚdoneÚfÚavailable_fieldsÚadditional_fields              r   Úget_field_namesr+      sÀ  € Ø&+§k¡k×&<Ñ&<Ó&>Ö?˜Uˆe�j‹jÐ?€FÐ?Ø€HØò ˆÜš(¡EÐ*Ô+Ø�A‰‰ðð €IÙÜœ%Ð gÓhÓiˆØœ%  8Ó,Ñ,Ø‰IäÐ4Ô5ò ð $ K°!¡OÑ4Ð5Ðà€DÙàö
Ø Ð*?Ò!?ŠAð
Ðð 
ð ˆØ%ò 	ˆEÜšh©Ð.Ô/Ø˜‰M‰Hð	ô 	Ð&Ô'àˆ	ÙÜÐLÔMÜ�$—)‘)Ð1Ó2°TÑ9Ô:ä$ð &ó  Ðð   3Ò&Ø�Ø ‘	ÜÐ%Ó&¬$¬u°Q¼Ð<LÓ8MÐPQÑ8QÓ/RÓ*SÑSØ%Ð*:¼3Ð?OÓ;PÐSTÑ;TÑ*UÐ)VÑVÐ%Ø ‘	äÐ8Ô9ò ò ð8 !Ð ùòW @ùò 
s   �E)Â	E.Â"E.c                  ó(   — 	 t        d«      } | dv r| S Œ)Nz„
            Do you want to keep the first or last duplicate instance?
            Enter "first" or "last" to continue.
            )ÚfirstÚlast)r   )Úfirst_or_lasts    r   Úkeep_first_or_last_instancer0   D   s*   € Ø
Üð ó ˆð Ð-Ñ-Ø Ð ð r   c                  óÄ   — g } t        j                  «       D ]F  }|j                  j                  «       D ]'  \  }}t	        |t
        «      sŒ| j                  |«       Œ) ŒH | S )z6Return a list of all GenericForeignKeys in all models.)r   r   Ú__dict__ÚitemsÚ
isinstancer   Úappend)Úgeneric_fieldsr   Ú
field_namer"   s       r   Úget_generic_fieldsr8   N   s_   € à€NÜ—‘Ó"ò -ˆØ!&§¡×!5Ñ!5Ó!7ò 	-ÑˆJ˜Ü˜%Ô!2Õ3Ø×%Ñ% eÕ,ñ	-ð-ð Ðr   c                   óN   — e Zd ZdZed„ «       Z ej                  «       d„ «       Zy)ÚCommandaÉ  
        Removes duplicate model instances based on a specified
        model and field name(s).

        Makes sure that any OneToOne, ForeignKey, or ManyToMany relationships
        attached to a deleted model(s) get reattached to the remaining model.

        Based on the following:
        https://djangosnippets.org/snippets/2283/
        https://stackoverflow.com/a/41291137/2532070
        https://gist.github.com/edelvalle/01886b6f79ba0c4dce66
    c                 ó¬  — t        «       }t        |«      }t        «       }d}|j                  j	                  «       D ]L  }i }|D ]&  }	|j                  |	«      }
|j                  |	|
i«       Œ( 	  |j                  j                  di |¤Ž ŒN t        dj!                  |«      «       y # |j                  $ rž  |j                  j                  di |¤Ž}|dk(  r-|j                  «       }|j                  |j                  ¬«      }n1|dk(  r,|j                  «       }|j                  |j                  ¬«      }| j                  «      \  }}}||z  }Y �Œw xY w)Nr   r-   )Úpkr.   z(Successfully deleted {} model instances.© )r   r+   r0   ÚobjectsÚallÚ__getattribute__ÚupdateÚgetÚMultipleObjectsReturnedÚfilterr-   Úexcluder<   r.   Úmerge_model_instancesr   Úformat)ÚselfÚargsÚoptionsr   Úfield_namesr/   Útotal_deleted_objects_countÚinstanceÚkwargsr7   Úinstance_field_valueÚ	instancesÚprimary_objectÚalias_objectsÚdeleted_objectsÚdeleted_objects_counts                   r   ÚhandlezCommand.handlef   sl  € ä(Ó*ˆÜ% eÓ,ˆÜ3Ó5ˆØ&'Ð#ØŸ™×)Ñ)Ó+ò 	EˆHØˆFØ)ò �
Ø'/×'@Ñ'@ÀÓ'LÐ$Ø—‘ØÐ 4ðõ ðð
EØ!�—‘×!Ñ!Ñ+ FÓ+ð	Eô* 	Ð8×?Ñ?Ð@[Ó\Õ]øð ×0Ñ0ò 
EØ0˜EŸM™M×0Ñ0Ñ:°6Ñ:�	Ø  GÒ+Ø%.§_¡_Ó%6�NØ$-×$5Ñ$5¸×9JÑ9JÐ$5Ó$K‘MØ" fÒ,Ø%.§^¡^Ó%5�NØ$-×$5Ñ$5¸×9JÑ9JÐ$5Ó$K�MàIM×IcÑIcÐdrð  uBó  JCÑF� Ð1FØ+Ð/DÑDÓ+ð
Eús   Á-B&Â&B)EÅEc           
      ó.  — t        «       }t        t        d„ |j                  j	                  «       «      «      }t        t        d„ |«      «      }t        t        d„ |«      «      }g }d}|D �]�  }|D ]f  }	|	j
                  }
t        ||
«      }|j                  «       D ]9  }	 t        ||
«      j                  |«       t        ||
«      j                  |«       Œ; Œh |D �]#  }|j"                  re|j%                  «       }
t        ||
«      }|j                  «       D ]5  }|j&                  j
                  }t        |||«       |j!                  «        Œ7 Œu|j(                  s|j*                  sŒŽ|j
                  }
t        ||
«      }t        ||
«      }|€t        ||
|«       |j!                  «        ŒÒ|j(                  sŒß| j,                  j/                  dj1                  ||j2                  «      «       |j5                  «        �Œ& |D ]“  }i }|j7                  «       ||j8                  <   |j;                  |«      ||j<                  <    |j>                  j                  j                  di |¤Ž}|D ])  }t        ||j
                  |«       |j!                  «        Œ+ Œ• |j2                  s�Œ>||gz  }| j,                  j/                  dj1                  ||j2                  «      «       |j5                  «        |dz  }�Œ� |||fS # t        $ rŠ t        ||
«      j                  }|	j                  «       ||	j                  «       |i} |j                  j                  di |¤Ž}|D ]-  }t        ||	j                  «       |«       |j!                  «        Œ/ Y �Œ÷w xY w)zÙ
        Merge several model instances into one, the `primary_object`.
        Use this function to merge model objects and migrate all of the related
        fields from the alias objects the primary object.
        c                 ó   — | j                   du S ©NT)Úis_relation©Úxs    r   ú<lambda>z/Command.merge_model_instances.<locals>.<lambda>Ž   s   € �a—m‘m tÐ+€ r   c                 ó   — | j                   du S rX   ©Úmany_to_manyrZ   s    r   r\   z/Command.merge_model_instances.<locals>.<lambda>’   s   € �a—n‘n¨Ð,€ r   c                 ó   — | j                   du S )NFr^   rZ   s    r   r\   z/Command.merge_model_instances.<locals>.<lambda>•   s   € �a—n‘n¨Ð-€ r   r   zDeleted {} with id {}
r	   r=   ) r8   r    rD   r   r   r   Úgetattrr?   ÚremoveÚaddÚAttributeErrorÚthroughÚm2m_reverse_field_nameÚm2m_field_namer>   ÚsetattrÚsaveÚone_to_manyÚget_accessor_namer"   Ú
one_to_oneÚmany_to_oneÚstdoutÚwriterG   ÚidÚdeleteÚ_get_pk_valÚfk_fieldÚget_content_typeÚct_fieldr   )rH   rQ   rR   r6   Úrelated_fieldsÚmany_to_many_fieldsrS   rT   Úalias_objectÚmany_to_many_fieldÚalias_varnameÚrelated_objectsÚobjÚthrough_modelrN   Úthrough_model_instancesrM   Úrelated_fieldr7   Úrelated_objectÚprimary_related_objectr"   Úfilter_kwargsÚgeneric_related_objects                           r   rF   zCommand.merge_model_instancesƒ   s’  € ô ,Ó-ˆô œfÙ+Ø× Ñ ×+Ñ+Ó-ó/ó 0ˆô #¤6Ù,¨nó$>ó ?Ðô œfÙ-¨~ó?ó @ˆð
 ˆØ !ÐØ)ó A	+ˆLð ':ò ,Ð"Ø 2× 7Ñ 7�Ü")¨,¸Ó"F�Ø*×.Ñ.Ó0ò ,�Cð,ä ¨mÓ<×CÑCÀCÔHÜ °Ó>×BÑBÀ3ÕGñ	,ð,ð8 "0ó 0�Ø ×,Ò,Ø$1×$CÑ$CÓ$E�MÜ&-¨l¸MÓ&J�OØ.×2Ñ2Ó4ò #˜Ø%2×%8Ñ%8×%=Ñ%=˜
Ü  Z°Ô@ØŸ™�
ñ#ð #×-Ò-°×1JÓ1JØ$1×$6Ñ$6�MÜ%,¨\¸=Ó%I�NÜ-4°^À]Ó-SÐ*Ø-Ð5Ü °¸~ÔNØ&×+Ñ+Õ-Ø&×1Ó1ØŸ™×)Ñ)Ð*C×*JÑ*JØ*¨N×,=Ñ,=ó+?ô @à&×-Ñ-Ö/ð%0ð( (ò 2�Ø "�Ø0<×0HÑ0HÓ0J�˜eŸn™nÑ-Ø05×0FÑ0FÀ|Ó0T�˜eŸn™nÑ-Ø"< %§+¡+×"5Ñ"5×"<Ñ"<Ñ"M¸}Ñ"M�Ø.=ò 2Ð*ÜÐ2°E·J±JÀÔOØ*×/Ñ/Õ1ñ2ð2ð �ŒØ L >Ñ1�Ø—‘×!Ñ!Ð";×"BÑ"BØ  ,§/¡/ó#3ô 4à×#Ñ#Ô%Ø%¨Ñ*Ò%ðCA	+ðF ˜Ð0EÐEÐEøôq *ò ,ô )0°¸mÓ(L×(TÑ(T˜à.×EÑEÓGÈØ.×=Ñ=Ó?Àð"˜ð 3O°-×2GÑ2G×2NÑ2NÑ2XÐQWÑ2XÐ/Ø(?ò ,˜Hä#Ø (Ø 2× AÑ AÓ CØ .ô0ð %ŸM™M�Oó,ð,ús   Â 6LÌBN	ÎN	N)	r   Ú
__module__Ú__qualname__Úhelpr   rU   r   ÚatomicrF   r=   r   r   r:   r:   X   sB   „ ð€Dð ñ^ó ð^ð8 €[×ÑÓñZFó ñZFr   r:   N)Údjango.appsr   Ú"django.contrib.contenttypes.fieldsr   Údjango.core.managementr   Ú	django.dbr   Ú"django_extensions.management.utilsr   r   r+   r0   r8   r:   r=   r   r   ú<module>r�      s9   ðå Ý @Ý .Ý !å <ò ò,!ò^!òôFFˆkõ FFr   