U
     æf½  ã                   @   s|   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 ddd	d
ddg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   úW/tmp/pip-unpacked-wheel-1isl55vw/django_extensions/management/commands/export_emails.pyÚ	<genexpr>   s      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||Ž 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 |Ž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ddddgƒ}t	t
dddddgƒ}|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   s     z!Command.handle.<locals>.<genexpr>r   ú'z'.zUnknown group 'z'. Valid group names are: ZEXPORT_EMAILS_ORDER_BYr   r   r   ÚemailZEXPORT_EMAILS_FIELDS)Zgroups__namer,   )Úlenr   r   ZobjectsÚfilterÚcountr   Úvaluesr   r1   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 |Ž| dd¡f V  qdS )z
"%s" <%s>;r5   r   N)r   r   ©r   Úent©r"   r   r   r   _   s     z"Command.address.<locals>.<genexpr>N©ÚstdoutÚwriter   ©r"   r?   r   rD   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 )r5   N)r   rB   r   r   r   r   g   s     
 z!Command.emails.<locals>.<genexpr>rA   NrE   rH   r   r   r   r	   b   s    zCommand.emailsc                 C   sF   t  tj¡}| ddg¡ |D ]"}| | jf |Ž| dd¡g¡ qdS )z3CSV format suitable for importing into google GMailÚNameÚEmailr5   r   N)ÚcsvÚwriterÚsysrF   Úwriterowr   r   ©r"   r?   ÚcsvfrC   r   r   r   r
   j   s    zCommand.googlec              	   C   sR   t  tj¡}| dddg¡ |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 NamerJ   r   r   r   r5   N)rK   rL   rM   rF   rN   r   rO   r   r   r   r   q   s    zCommand.linkedinc                 C   s„   t  tj¡}ddddddddd	d
ddddddddddg}| |¡ dgt|ƒd  }|D ]&}| | jf |Ž| dd¡g| ¡ qXdS )z.CSV format suitable for importing into outlookrI   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   é   r5   N)rK   rL   rM   rF   rN   r6   r   r   )r"   r?   rP   ÚcolumnsÚemptyrC   r   r   r   r   {   s,    
            ý
zCommand.outlookc                 C   sî   zddl }W n. tk
r:   t| j d¡ƒ t d¡ Y nX tj}|D ]¢}| ¡ }| j	f |Ž| 
d¡_| d¡rš| d¡rš|j |d |d ¡| 
d¡_n|j | j	f |Ž¡| 
d¡_| d	¡rÚ| 
d	¡}|d	 |_d
|_| | ¡ ¡ qFdS )zVCARD format.r   Nz6Please install vobject to use the vcard export format.r2   Úfnr   r   r   r5   ZINTERNET)ÚvobjectÚImportErrorÚprintÚstyleÚERRORrM   ÚexitrF   ZvCardr   ÚaddÚvaluer   r   rI   Z
type_paramrG   Ú	serialize)r"   r?   rU   ÚoutrC   ZcardZ	emailpartr   r   r   r   ‡   s"     


zCommand.vcard)Ú__name__Ú
__module__Ú__qualname__r+   r#   ÚlabelZcan_import_settingsÚencodingr    r-   r   r   r@   r   r	   r
   r   r   r   Ú__classcell__r   r   r$   r   r   +   s    

r   )rM   rK   Zdjango.confr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Zdjango.core.management.baser   r   Z"django_extensions.management.utilsr   r/   r   r   r   r   r   r   Ú<module>   s   ú
