
    hL                         S SK Jr  S SKJrJrJr  S SKJrJr  S SK	J
r
  S SKJrJr   " S S\5      r " S S	5      r " S
 S\\5      r " S S\5      rg)    )settings)call_commandget_commandsload_command_class)BaseCommandCommandError)
connection)get_tenant_modelget_public_schema_namec                   H   ^  \ rS rSrSrSrU 4S jrU 4S jrS rS r	Sr
U =r$ )	BaseTenantCommand
   z
Generic command class useful for iterating any existing command
over all schemata. The actual command name is expected in the
class variable COMMAND_NAME of the subclass.
Nc                 8  > [         TU ]  " U /UQ70 UD6n[        5       UR                     n[	        U[
        5      (       a  UnO[        XCR                  5      nSUR                  < SUR                  < SUR                  < S[        USS5      < 3Ul        U$ )z(
Sets option_list and help dynamically.
zCalls z2 for all registered schemata. You can use regular z options. Original help for z: helpnone)	super__new__r   COMMAND_NAME
isinstancer   r   getattrr   )clsargskwargsobjapp_namecmdclass	__class__s         ]/var/www/html/env/lib/python3.13/site-packages/django_tenants/management/commands/__init__.pyr   BaseTenantCommand.__new__   s     goc3D3F3>#"2"23h,,H)(4D4DEH 251A1A3CSCSUXUeUe18661RT 
    c                 l   > [         TU ]  U5        UR                  SSSS9  UR                  SSSSS	S
9  g )N-s--schemaschema_namedestz-pz--skip-publicskip_public
store_trueF)r&   actiondefault)r   add_argumentsadd_argumentselfparserr   s     r   r+   BaseTenantCommand.add_arguments(   s?    f%D*=AD/ldijr    c                 t   [        UR                  S5      5      nUS:  as  [        5         [        U R                  R	                  S5      U R                  R                  UR                  5      -   U R                  R	                  SU-  5      -   5        [        R                  " U5        [        U/UQ70 UD6  g )N	verbosity   z=== Switching to schema 'z' then calling %s:)
intgetprintstyleNOTICE	SQL_TABLEr$   r	   
set_tenantr   )r.   tenantcommand_namer   optionsr2   s         r   execute_command!BaseTenantCommand.execute_command-   s    K01	>G$**##$?@**&&v'9'9:;**##$8<$GHI J 	f% 	\4D4G4r    c                    US   (       d  U R                   (       an  US   =(       d    U R                   n[        R                  " 5         U R                  " [	        5       R
                  R                  US9U R                  /UQ70 UD6  g[	        5       R
                  R                  5        HG  nUS   (       a  UR                   [        5       :X  a  M'  U R                  " X@R                  /UQ70 UD6  MI     g)z2
Iterates a command over all registered schemata.
r$   r$   r'   N)
r$   r	   set_schema_to_publicr>   r
   objectsr5   r   allr   )r.   r   r=   r$   r;   s        r   handleBaseTenantCommand.handle;   s     =!T%5%5!-0DD4D4DK++-  !1!3!;!;!?!?K!?!XZ^ZkZk 3"&3*13 +,4488:.63E3EI_Ia3a((1B1BUTUWU ;r     )__name__
__module____qualname____firstlineno____doc__r$   r   r+   r>   rE   __static_attributes____classcell__r   s   @r   r   r   
   s+     K&k
5V Vr    r   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )InteractiveTenantOptionL   c                 &   > [         TU ]  " U0 UD6  g N)r   __init__)r.   r   r   r   s      r   rU    InteractiveTenantOption.__init__M   s    $)&)r    c                 (    UR                  SSSSS9  g )Nr"   r#   r$   zspecify tenant schema)r&   r   r,   r.   r/   s     r   r+   %InteractiveTenantOption.add_argumentsP   s    D*=G^_r    c                    [        5       nUR                  R                  5       nU(       d  [        S5      eUR	                  S5      (       a  US   nO_ [        S5      nUS:X  aJ  [        SR                  U Vs/ s H#  oUR                  < SUR                  5       < 3PM%     sn5      5        OOM^  XC Vs/ s H  oUR                  PM     sn;  a  [        SU< S35      eUR                  R	                  US	9$ s  snf s  snf )
NzThere are no tenants in the system.
To learn how create a tenant, see:
https://django-tenants.readthedocs.org/en/latest/use.html#creating-a-tenantr$   z+Enter Tenant Schema ('?' to list schemas): ?
z - zInvalid tenant schema, ''rA   )
r
   rC   rD   r   r5   inputr6   joinr$   get_primary_domain)r.   r=   TenantModelall_tenantstenant_schemats         r   &get_tenant_from_options_or_interactive>InteractiveTenantOption.get_tenant_from_options_or_interactiveS   s    &(!))--/  O P P ;;}%%#M2M %&S T C'$))bm$nbm]^--AUAUAW%Xbm$nop   D1 DDOPP""&&=&AA %o !Es   9*C:6C?rG   )	rH   rI   rJ   rK   rU   r+   rf   rM   rN   rO   s   @r   rQ   rQ   L   s    *`B Br    rQ   c                   >   ^  \ rS rSrSrU 4S jrS rU 4S jrSrU =r	$ )TenantWrappedCommandl   z
Generic command class useful for running any existing command
on a particular tenant. The actual command name is expected in the
class variable COMMAND_NAME of the subclass.
c                 Z   > [         TU ]  " U /UQ70 UD6nUR                  5       Ul        U$ rT   )r   r   COMMANDcommand_instance)r   r   r   r   r   s       r   r   TenantWrappedCommand.__new__s   s.    goc3D3F3"{{}
r    c                     U R                   " S0 UD6n[        R                  " U5        U R                  R                  " U0 UD6  g )NrG   )rf   r	   r:   rm   execute)r.   r   r=   r;   s       r   rE   TenantWrappedCommand.handlex   s<    <<GwGf%%%t7w7r    c                 Z   > [         TU ]  U5        U R                  R                  U5        g rT   )r   r+   rm   r-   s     r   r+   "TenantWrappedCommand.add_arguments~   s$    f%++F3r    rG   )
rH   rI   rJ   rK   rL   r   rE   r+   rM   rN   rO   s   @r   ri   ri   l   s    
84 4r    ri   c                   &    \ rS rSrS rS rS rSrg)
SyncCommon   c                     UR                  SSSSSS9  UR                  SSSSS	S9  UR                  S
SSS9  UR                  SSSS SS9  g )Nz--tenantr(   r;   Fz2Tells Django to populate only tenant applications.)r)   r&   r*   r   z--sharedsharedz2Tells Django to populate only shared applications.r"   r#   r$   r%   z
--executorstoreexecutorzEExecutor to be used for running migrations [standard|multiprocessing]rX   rY   s     r   r+   SyncCommon.add_arguments   sw    J|(TY!U 	 	WJ|(TY!U 	 	WD*=ALzSW!h 	 	jr    c                    UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        [
        R                  U l        Xl        X l	        U R                  (       aD  U R                  (       a  [        S5      eU R                  [        5       :X  a  SU l        O8SU l        O0U R                  (       d  U R                  (       d  SU l        SU l        [        [
        S5      (       a  [
        R                  U l        [        [
        S5      (       a  [
        R                  U l        g g )	Nr;   rx   r$   rz   z4schema should only be used with the --tenant switch.TTENANT_APPSSHARED_APPS)r5   sync_tenantsync_publicr$   rz   r   INSTALLED_APPSinstalled_appsr   r=   r   r   hasattrr}   tenant_appsr~   shared_apps)r.   r   r=   s      r   rE   SyncCommon.handle   s    ";;x0";;x0";;}5J/&55	"#YZZ!!%;%==#' #' !!$*:*:#D#D8]++'33D8]++'33D ,r    c                 l    U R                   R                  U R                  R                  U5      5        g rT   )stdoutwriter7   r8   )r.   outputs     r   _noticeSyncCommon._notice   s#    $**++F34r    )	r   rz   r   r=   r$   r   r   r   r   N)rH   rI   rJ   rK   r+   rE   r   rM   rG   r    r   ru   ru      s    j445r    ru   N)django.confr   django.core.managementr   r   r   django.core.management.baser   r   	django.dbr	   django_tenants.utilsr
   r   r   rQ   ri   ru   rG   r    r   <module>r      sQ      Q Q A   J?V ?VDB B@42K 4.'5 '5r    