
    ]j                     x    d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ g dZd Z G d	 d
e	      Zy)    N)settings)get_user_model)Group)BaseCommandCommandError)signalcommand)addressemailsgoogleoutlooklinkedinvcardc                      | j                  d      }| j                  d      }dj                  d ||fD              }|r|S | j                  d      }|r|S | j                  d      }|r|S y)zReturn full name or username.
first_name	last_name c              3   &   K   | ]	  }|s|  y wN ).0ns     ]/root/env/lib/python3.12/site-packages/django_extensions/management/commands/export_emails.py	<genexpr>zfull_name.<locals>.<genexpr>   s     <!!A<s   nameusername )getjoin)kwargsr   r   r   r   s        r   	full_namer       sn    L)J

;'I88<
I6<<D::fDzz*%H    c                   v     e Zd ZdZdZdZdZdZ fdZ fdZ	d Z
ed	        Zd
 Zd Zd Zd Zd Zd Z xZS )Commandz=Export user email address list in one of a number of formats.z[output file]zfilename to save toTzutf-8c                 B    t        |   |i | t               | _        y r   )super__init__r   	UserModel)selfargsr   	__class__s      r   r&   zCommand.__init__3   s    $)&)')r!   c                     t         |   |       |j                  ddddd d      f |j                  dddd	t        d
   ddj	                  t              z         y )Nz--groupz-gstoregroupz8Limit to users which are part of the supplied group name)actiondestdefaulthelpz--formatz-fformatr   z output format. May be one of %s.z, )r%   add_argumentsadd_argumentFORMATSr   )r(   parserr*   s     r   r3   zCommand.add_arguments7   sk    f%tG'4K 	 	
 	 	W8WQZ3dii6HH 	 	
r!   c                 8     t        t        dt              di |S )NEXPORT_EMAILS_FULL_NAME_FUNCr   )getattrr   r    )r(   r   s     r   r    zCommand.full_nameB   s    Kwx!?KUfUUr!   c                    t        |      dkD  rt        d      |d   }|rt        j                  j	                  |      j                         dk(  sSdj                  d t        j                  j                  d      D              }|rd|z   d	z   }t        d
|z   dz   |z         t               }t        t        dg d      }t        t        dg d      } |j                  j                         j                  | }|r |j	                  |      j                         } |j                  | } t        | |d         |       y )N   zextra arguments suppliedr-   )r   z', 'c              3   &   K   | ]	  }|d      yw)r   Nr   )r   gs     r   r   z!Command.handle.<locals>.<genexpr>K   s     Pa&	Ps   r   'z'.zUnknown group 'z'. Valid group names are: EXPORT_EMAILS_ORDER_BY)r   r   r   emailEXPORT_EMAILS_FIELDS)groups__namer2   )lenr   r   objectsfiltercountr   valuesr   r9   r   allorder_bydistinct)	r(   r)   optionsr-   namesr'   rI   fieldsqss	            r   handlezCommand.handleE   s$   t9q=9:: --5-9??AQFKKP5==3G3G3OPPEed*058;WWZ__``"$	8%=?op#9;kl-Y""$--x8.779BRYY(gh'(,r!   c                       j                   j                  dj                   fd|D                      j                   j                  d       y)zc
        Single entry per line in the format of:
            "full name" <my@address.com>;
        
c              3   p   K   | ]-  }d  j                   di |d|j                  dd      d / yw)"z" <r@   r   z>;Nr   )r    r   )r   entr(   s     r   r   z"Command.address.<locals>.<genexpr>_   s2     #oehNDNN4IS4I377SZ\^K_$`#os   36Nstdoutwriter   r(   rN   s   ` r   r	   zCommand.addressZ   s9    
 	$))#oln#oop$r!   c                     | j                   j                  dj                  d |D                     | j                   j                  d       y)z\
        Single entry with email only in the format of:
            my@address.com,
        z,
c              3   J   K   | ]  }|j                  d       s|d      yw)r@   N)r   )r   rT   s     r   r   z!Command.emails.<locals>.<genexpr>g   s     $Tc3777CSS\$Ts   #
#rQ   NrU   rX   s     r   r
   zCommand.emailsb   s7    
 	%**$TR$TTU$r!   c                     t        j                  t        j                        }|j	                  ddg       |D ]5  }|j	                   | j
                  di ||j                  dd      g       7 y)z3CSV format suitable for importing into google GMailNameEmailr@   r   Nr   )csvwritersysrV   writerowr    r   r(   rN   csvfrT   s       r   r   zCommand.googlej   s`    zz#**%vw'( 	ICMM>4>>0C0#'''22FGH	Ir!   c           	         t        j                  t        j                        }|j	                  g d       |D ]F  }|j	                  |j                  dd      |j                  dd      |j                  dd      g       H y)z
        CSV format suitable for importing into linkedin Groups.
        perfect for pre-approving members of a linkedin group.
        )z
First Namez	Last Namer]   r   r   r   r@   N)r^   r_   r`   rV   ra   r   rb   s       r   r   zCommand.linkedinq   sm    
 zz#**%:; 	gCMM377<4cggk26NPSPWPWX_acPdef	gr!   c                    t        j                  t        j                        }g d}|j	                  |       dgt        |      dz
  z  }|D ]8  }|j	                   | j                  di ||j                  dd      g|z          : y)z.CSV format suitable for importing into outlook)r\   zE-mail AddressNoteszE-mail 2 AddresszE-mail 3 AddresszMobile PhonePagerCompanyz	Job Titlez
Home PhonezHome Phone 2zHome FaxzHome AddresszBusiness PhonezBusiness Phone 2zBusiness FaxzBusiness AddresszOther Phonez	Other FaxzOther Addressr      r@   Nr   )r^   r_   r`   rV   ra   rC   r    r   )r(   rN   rc   columnsemptyrT   s         r   r   zCommand.outlook{   s    zz#**%d 	gGq() 	QCMM>4>>0C0#'''22FG%OP	Qr!   c                    	 ddl }t
        j                  }|D ]#  }j                         } | j                  di ||j                  d      _        |j                  d      rH|j                  d      r7|j                  j                  |d   |d         |j                  d      _        n?|j                  j                   | j                  di |      |j                  d      _        |j                  d	      r"|j                  d	      }|d	   |_        d
|_        |j!                  |j#                                & y# t        $ r= t        | j                  j	                  d             t        j                  d       Y w xY w)zVCARD format.r   Nz6Please install vobject to use the vcard export format.r;   fnr   r   r   r@   INTERNETr   )vobjectImportErrorprintstyleERRORr`   exitrV   vCardr    addvaluer   r   r\   
type_paramrW   	serialize)r(   rN   ro   outrT   card	emailparts          r   r   zCommand.vcard   s2   	
 jj 	(C==?D#14>>#8C#8DHHTN ww{#(=&-mm&8&8[9I3|K\&]# '.mm&8&89N#9N&O#www HHW-	"%g,	'1	$IIdnn&'	(  	$**""#[\]HHQK	s   E   AFF)__name__
__module____qualname__r1   r)   labelcan_import_settingsencodingr&   r3   r    r   rO   r	   r
   r   r   r   r   __classcell__)r*   s   @r   r#   r#   +   sb    JDD!EH*	
V - -(  Ig
Q(r!   r#   )r`   r^   django.confr   django.contrib.authr   django.contrib.auth.modelsr   django.core.management.baser   r   "django_extensions.management.utilsr   r5   r    r#   r   r!   r   <module>r      s4    
 
   . , A <(r(k r(r!   