3
g                 @   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\   | j d}| j d}djdd ||gD }|r4|S | j d}|rF|S | j 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   q/var/www/tester-filtro-web/env/lib/python3.6/site-packages/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 )N)super__init__r   	UserModel)selfargsr   )	__class__r   r   r   3   s    zCommand.__init__c          	      sL   t  j| |jddddd ddf |jdddd	td
 ddj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!   parser)r#   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 }|rxtjj|dj dk rxdjdd tjjdD }|rdd	| d
 }td| d | t }t	t
dddddg}t	t
dddddg}|jj j| }|r|j|dj }|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   r/   r   allorder_byZdistinct)	r!   r"   optionsr%   namesr    r9   fieldsqsr   r   r   handleE   s     
zCommand.handlec                s0    j jdj fdd|D   j jd dS )zc
        Single entry per line in the format of:
            "full name" <my@address.com>;
        
c             3   s*   | ]"}d  j f ||jddf V  qdS )z
"%s" <%s>;r3   r   N)r   r   )r   ent)r!   r   r   r   _   s    z"Command.address.<locals>.<genexpr>N)stdoutwriter   )r!   r=   r   )r!   r   r   Z   s     zCommand.addressc             C   s,   | j jdjdd |D  | j jd dS )z\
        Single entry with email only in the format of:
            my@address.com,
        z,
c             s   s    | ]}|j d r|d  V  qdS )r3   N)r   )r   r@   r   r   r   r   g   s    z!Command.emails.<locals>.<genexpr>r?   N)rA   rB   r   )r!   r=   r   r   r   r	   b   s    zCommand.emailsc             C   sJ   t jtj}|jddg x*|D ]"}|j| jf ||jddg q W dS )z3CSV format suitable for importing into google GMailNameEmailr3   r   N)csvwritersysrA   writerowr   r   )r!   r=   csvfr@   r   r   r   r
   j   s    
zCommand.googlec             C   sV   t jtj}|jdddg x4|D ],}|j|jdd|jdd|jddg q"W dS )	z
        CSV format suitable for importing into linkedin Groups.
        perfect for pre-approving members of a linkedin group.
        z
First Namez	Last NamerD   r   r   r   r3   N)rE   rF   rG   rA   rH   r   )r!   r=   rI   r@   r   r   r   r   q   s    
zCommand.linkedinc             C   s   t jtj}ddddddddd	d
ddddddddddg}|j| dgt|d  }x.|D ]&}|j| jf ||jddg|  qZW dS )z.CSV format suitable for importing into outlookrC   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      r3   N)rE   rF   rG   rA   rH   r4   r   r   )r!   r=   rI   columnsemptyr@   r   r   r   r   {   s    


zCommand.outlookc             C   s   yddl }W n. tk
r:   t| jjd tjd Y nX tj}x|D ]}|j }| j	f ||j
d_|jdr|jdr|jj|d |d |j
d_n|jj| j	f ||j
d_|jd	r|j
d	}|d	 |_d
|_|j|j  qHW dS )zVCARD format.r   Nz6Please install vobject to use the vcard export format.r0   fnr   r   r   r3   ZINTERNET)vobjectImportErrorprintstyleERRORrG   exitrA   ZvCardr   addvaluer   r   rC   Z
type_paramrB   	serialize)r!   r=   rN   outr@   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   )rG   rE   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   