o
    i                     @   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 }|r|S |  d}|r#|S |  d}|r,|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   s/var/www/html/formularioweb/env/lib/python3.10/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di |S )NEXPORT_EMAILS_FULL_NAME_FUNCr   )getattrr   r   )r#   r   r   r   r   r   L   s   zCommand.full_namec           	      O   s   t |dkr
td|d }|r;tjj|d dks;ddd tjdD }|r1d	| 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   U   r   z!Command.handle.<locals>.<genexpr>r   'z'.zUnknown group 'z'. Valid group names are: EXPORT_EMAILS_ORDER_BY)r   r   r   emailEXPORT_EMAILS_FIELDS)groups__namer-   )lenr   r   objectsfiltercountr   valuesr   r3   r   allorder_bydistinct)	r#   r$   optionsr(   namesr"   rA   fieldsqsr   r   r   handleO   s4   
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   s0    | ]}d  j di ||ddf V  qdS )z
"%s" <%s>;r8   r   Nr   )r   r   r   entr#   r   r   r   t   s
    
z"Command.address.<locals>.<genexpr>Nstdoutwriter   r#   rF   r   rK   r   r   n   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 )r8   N)r   rI   r   r   r   r      s     z!Command.emails.<locals>.<genexpr>rH   NrL   rO   r   r   r   r	   {   s   zCommand.emailsc                 C   sJ   t tj}|ddg |D ]}|| jdi ||ddg qdS )z3CSV format suitable for importing into google GMailNameEmailr8   r   Nr   )csvwritersysrM   writerowr   r   r#   rF   csvfrJ   r   r   r   r
      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 NamerQ   r   r   r   r8   N)rR   rS   rT   rM   rU   r   rV   r   r   r   r      s   


zCommand.linkedinc                 C   sd   t tj}g d}|| dgt|d  }|D ]}|| jdi ||ddg|  qdS )z.CSV format suitable for importing into outlook)rP   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      r8   Nr   )rR   rS   rT   rM   rU   r;   r   r   )r#   rF   rW   columnsemptyrJ   r   r   r   r      s   
(zCommand.outlookc                 C   s   zddl }W n ty   t| jd td Y nw tj}|D ]U}| }| j	di ||
d_|drN|drN|j|d |d |
d_n|j| j	di ||
d_|d	rp|
d	}|d	 |_d
|_||  q"dS )zVCARD format.r   Nz6Please install vobject to use the vcard export format.r4   fnr   r   r   r8   INTERNETr   )vobjectImportErrorprintstyleERRORrT   exitrM   vCardr   addvaluer   r   rP   
type_paramrN   	serialize)r#   rF   r`   outrJ   card	emailpartr   r   r   r      s2    


zCommand.vcard)__name__
__module____qualname__r,   r$   labelcan_import_settingsencodingr!   r.   r   r   rG   r   r	   r
   r   r   r   __classcell__r   r   r%   r   r   +   s"    
r   )rT   rR   django.confr   django.contrib.authr   django.contrib.auth.modelsr   django.core.management.baser   r   "django_extensions.management.utilsr   r0   r   r   r   r   r   r   <module>   s   
