a
    8¤Xh½  ã                   @   st   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d	„ ZG d
d„ de	ƒZdS )é    N)Úsettings)Úget_user_model)ÚGroup)ÚBaseCommandÚCommandError)Úsignalcommand)ÚaddressÚemailsÚgoogleÚoutlookÚlinkedinÚvcardc                  K   s\   |   d¡}|   d¡}d dd„ ||fD ƒ¡}|r4|S |   d¡}|rF|S |   d¡}|rX|S dS )	zReturn full name or username.Ú
first_nameÚ	last_nameú c                 s   s   | ]}|r|V  qd S ©N© )Ú.0Únr   r   úx/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/django_extensions/management/commands/export_emails.pyÚ	<genexpr>   ó    zfull_name.<locals>.<genexpr>ÚnameÚusernameÚ )ÚgetÚjoin)Úkwargsr   r   r   r   r   r   r   Ú	full_name   s    



r   c                       s€   e Zd ZdZdZdZdZdZ‡ fdd„Z‡ fdd	„Z	d
d„ Z
edd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  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                    s   t ƒ j|i |¤Ž tƒ | _d S r   )ÚsuperÚ__init__r   Ú	UserModel)ÚselfÚargsr   ©Ú	__class__r   r   r!   3   s    zCommand.__init__c              
      sL   t ƒ  |¡ |jddddd ddf |jdddd	td
 dd t¡ d d S )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%   r   r   r.   7   s    
þþzCommand.add_argumentsc                 K   s   t tdtƒf i |¤ŽS )NZEXPORT_EMAILS_FULL_NAME_FUNC)Úgetattrr   r   )r#   r   r   r   r   r   B   s    zCommand.full_namec           	      O   sà   t |ƒdkrtdƒ‚|d }|rvtjj|d ¡ dksvd dd„ tj d¡D ƒ¡}|rbd	| d
 }td| d | ƒ‚tƒ }t	t
dg d¢ƒ}t	t
dg d¢ƒ}|j ¡ j|Ž }|rÀ|j|d ¡ }|j|Ž }t	| |d ƒ|ƒ d S )Né   zextra arguments suppliedr(   )r   z', 'c                 s   s   | ]}|d  V  qdS )r   Nr   )r   Úgr   r   r   r   K   r   z!Command.handle.<locals>.<genexpr>r   ú'z'.zUnknown group 'z'. Valid group names are: ZEXPORT_EMAILS_ORDER_BY)r   r   r   ÚemailZEXPORT_EMAILS_FIELDS)Zgroups__namer-   )Úlenr   r   ZobjectsÚfilterÚcountr   Úvaluesr   r2   r   ÚallÚorder_byZdistinct)	r#   r$   Úoptionsr(   Únamesr"   r<   ÚfieldsÚqsr   r   r   ÚhandleE   s     
zCommand.handlec                    s0   ˆ j  d ‡ fdd„|D ƒ¡¡ ˆ j  d¡ dS )zc
        Single entry per line in the format of:
            "full name" <my@address.com>;
        Ú
c                 3   s.   | ]&}d ˆ j f i |¤Ž| dd¡f V  qdS )z
"%s" <%s>;r6   r   N)r   r   ©r   Úent©r#   r   r   r   _   r   z"Command.address.<locals>.<genexpr>N©ÚstdoutÚwriter   ©r#   r@   r   rE   r   r   Z   s     zCommand.addressc                 C   s,   | j  d dd„ |D ƒ¡¡ | j  d¡ dS )z\
        Single entry with email only in the format of:
            my@address.com,
        z,
c                 s   s    | ]}|  d ¡r|d  V  qdS )r6   N)r   rC   r   r   r   r   g   r   z!Command.emails.<locals>.<genexpr>rB   NrF   rI   r   r   r   r	   b   s    zCommand.emailsc                 C   sJ   t  tj¡}| ddg¡ |D ]&}| | jf i |¤Ž| dd¡g¡ qdS )z3CSV format suitable for importing into google GMailÚNameÚEmailr6   r   N)ÚcsvÚwriterÚsysrG   Úwriterowr   r   ©r#   r@   ÚcsvfrD   r   r   r   r
   j   s    zCommand.googlec              	   C   sP   t  tj¡}| g d¢¡ |D ],}| | dd¡| dd¡| dd¡g¡ qdS )zˆ
        CSV format suitable for importing into linkedin Groups.
        perfect for pre-approving members of a linkedin group.
        )z
First Namez	Last NamerK   r   r   r   r6   N)rL   rM   rN   rG   rO   r   rP   r   r   r   r   q   s    zCommand.linkedinc                 C   sd   t  tj¡}g d¢}| |¡ dgt|ƒd  }|D ]*}| | jf i |¤Ž| dd¡g| ¡ q4dS )z.CSV format suitable for importing into outlook)rJ   zE-mail AddressZNoteszE-mail 2 AddresszE-mail 3 AddresszMobile PhoneZPagerZ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   é   r6   N)rL   rM   rN   rG   rO   r7   r   r   )r#   r@   rQ   ÚcolumnsÚemptyrD   r   r   r   r   {   s    
zCommand.outlookc                 C   sô   zddl }W n, ty8   t| j d¡ƒ t d¡ Y n0 tj}|D ]ª}| ¡ }| j	f i |¤Ž| 
d¡_| d¡rœ| d¡rœ|j |d |d ¡| 
d¡_n |j | j	f i |¤Ž¡| 
d¡_| d	¡rà| 
d	¡}|d	 |_d
|_| | ¡ ¡ qDdS )zVCARD format.r   Nz6Please install vobject to use the vcard export format.r3   Úfnr   r   r   r6   ZINTERNET)ÚvobjectÚImportErrorÚprintÚstyleÚERRORrN   ÚexitrG   ZvCardr   ÚaddÚvaluer   r   rJ   Z
type_paramrH   Ú	serialize)r#   r@   rV   ÚoutrD   ZcardZ	emailpartr   r   r   r   ‡   s"      


zCommand.vcard)Ú__name__Ú
__module__Ú__qualname__r,   r$   ÚlabelZcan_import_settingsÚencodingr!   r.   r   r   rA   r   r	   r
   r   r   r   Ú__classcell__r   r   r%   r   r   +   s    

r   )rN   rL   Zdjango.confr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Zdjango.core.management.baser   r   Z"django_extensions.management.utilsr   r0   r   r   r   r   r   r   Ú<module>   s   
