
    
FZj8%              	          d Z ddlZddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZ ddlmZ  G d de      Zd%d	Zd
 Z ej(                  dd       ej*                  dddd      ej,                  d                      Z ej0                  d       ej2                  ddd      ej,                  d                      Z ej0                  d       ej2                  ddd       ej*                  dd       ej*                  dd       ej*                  ddd       ej,                  d&d!                                          Z ej(                          ej8                         ej:                  d"                      Zd# ZejA                  e       ejA                  e       ejA                  e       e!d$k(  r e        yy)'zQ
mygeotab.cli
~~~~~~~~~~~~

Console utilities for working with the MyGeotab API.
    N   )API	__title____version__dates)Credentials)AuthenticationExceptionc                   n    e Zd ZdZd Zed        Zed        Zed        Zd Z	ddZ
d	 Zd
 ZddZd Zy)SessionzThe console session object.c                     d| _         y)z&Initialize the console session object.N)credentialsselfs    NC:\Users\Rodrigo\frota-trucks-cliente\python\Lib\site-packages\mygeotab/cli.py__init__zSession.__init__   s
        c                      t        j                  t              } t        j                  j                  |       st        j                  |        t        j                  j                  | d      S )Nz
config.ini)clickget_app_dirr   ospathexistsmakedirsjoin)config_paths    r   _get_config_filezSession._get_config_file   sC    ''	2ww~~k*KK$ww||K66r   c                 $    dj                  |       S )Nzsession:{0})format)databases    r   _section_namezSession._section_name%   s    ##H--r   c                     | sg S g }| j                         }|D ]*  }d|v s|j                  |j                  d      d          , |S )N:)sectionsappendsplit)confignamessection_namesnames       r   session_nameszSession.session_names)   sL    I)!Dd{TZZ_R01 " r   c                    | j                   sy t        j                         }|j                  | j	                                | j                   j
                  }| j                  |      }||j                         vr|j                  |       |j                  |d| j                   j                         |j                  |d| j                   j                         |j                  |d| j                   j
                         |j                  |d| j                   j                         t        | j	                         d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nusername
session_idr   serverw)r   configparserConfigParserreadr   r   r    r$   add_sectionsetr-   r.   r/   openwrite)r   r'   r   section_name
configfiles        r   savezSession.save4   s   **,D))+,##,,))(3v00|,

<T-=-=-F-FG

<t/?/?/J/JK

<T-=-=-F-FG

<4+;+;+B+BC$'')3/:LL$ 0//s   EE%Nc                    t        j                         }|j                  | j                                	 |,|j	                         }t        |      dk  rd | _        y |d   }n| j                  |      }|j                  |d      }|j                  |d      }|j                  |d      }|j                  |d      }t        ||||      | _        y # t         j                  $ r
 d | _        Y y t         j                  $ r
 d | _        Y y w xY w)Nr   r#   r-   r.   r   r/   )r1   r2   r3   r   r$   lenr   r    getr   NoSectionErrorNoOptionError)	r   r*   r'   r$   r8   r-   r.   r   r/   s	            r   loadzSession.loadF   s    **,D))+,	$|!??,x=1$'+D$'|#11$7zz,
;HL,?Jzz,
;HZZh7F*8Z6RD** 	$#D)) 	$#D	$s   'C A2C D,DDc                     t        j                         }|j                  | j                                | j	                  |      S N)r1   r2   r3   r   r+   )r   r'   s     r   get_sessionszSession.get_sessions\   s6    **,D))+,!!&))r   c                 Z    | j                   rt        j                  | j                         S y rB   )r   r   from_credentialsr   s    r   get_apizSession.get_apia   s%    ''(8(899r   c                     |rt        ||||      }nt        |||      }|j                         | _        | j                          y )N)r-   passwordr   r/   )r-   rH   r   )r   authenticater   r:   )r   r-   rH   r   r/   apis         r   loginzSession.loginf   s>    x(XV\]Cx(XNC++-		r   c                    | j                   r| j                   j                  }| j                  |      }t        j                         }|j                  | j                                |j                  |       t        | j                         d      5 }|j                  |       d d d        d | _         y d | _         y # 1 sw Y   d | _         y xY w)Nr0   )
r   r   r    r1   r2   r3   r   remove_sectionr6   r7   )r   r   r8   r'   r9   s        r   logoutzSession.logoutn   s    ''00H--h7L!..0FKK--/0!!,/d++-s3zZ( 44 4s   B<<CrB   )NNN)__name__
__module____qualname____doc__r   staticmethodr   r    r+   r:   r@   rC   rF   rK   rN    r   r   r   r      sd    %  7 7 . .  %$$,*

	 r   r   c                 ,   |st        j                  dt              }|st        j                  ddt              }	 t        j                  dd      5 }| j	                  ||||       |j                  d       d	d	d	       | j                  r3t        j                  d
| j                  z         | j                  |       | j                         S # 1 sw Y   XxY w# t        $ r- t        j                  d       t        j                  d       Y y	w xY w)a  Logs into a MyGeotab server and stores the returned credentials.

    :param session: The current Session object.
    :param user: The username used for MyGeotab servers. Usually an email address.
    :param password: The password associated with the username. Optional if `session_id` is provided.
    :param database: The database or company name. Optional as this usually gets resolved upon authentication.
    :param server: The server ie. my23.geotab.com. Optional as this usually gets resolved upon authentication.
    Username)typePasswordT)
hide_inputrW   r   zLogging in...)lengthlabelNLogged in as: %sz(Incorrect credentials. Please try again.r   )r   promptstrprogressbarrK   updater   echor@   rF   r	   sysexit)sessionuserrH   r   r/   r_   s         r   rK   rK   z   s     ||JS1<<
t#F
a?;MM$(F;q! @ JJ)G,?,??@LL"   @? # 

=>s*   C &C:AC CC 3DDc                     | j                         }|st        j                  d       y |D ]  }t        j                  |        y )Nz(No active sessions))rC   r   ra   )rd   active_sessionsactive_sessions      r   list_active_sessionsri      s9    **,O

)*)

>" *r   Tz,Lists and manages active session credentials)invoke_without_commandhelpz--listz-lzDisplay active sessions)is_flagrk   c                     |rt        |        yt        j                         }|j                  4t        j                  |j                                |j                          yy)z[Shows the current logged in sessions.

    :param session: The current Session object.
    N)ri   r   get_current_contextinvoked_subcommandra   get_helprc   )rd   listctxs      r   sessionsrs      sL     W%

#
#
%C
%

3<<>"
 &r   zLog out from a MyGeotab server)rk   r   )nargsrequiredc                 \    | j                  |       | j                          t        |        y)zRemoves a session from the saved credentials.

    :param session: The current Session object.
    :param database: The database name to log out from.
    N)r@   rN   ri   )rd   r   s     r   removerw      s"     LLNN!r   z&Launch an interactive MyGeotab consoleFz--userz-uz
--passwordz-pz--serverzThe server (ie. my4.geotab.com))defaultrk   c                    t        |||| |      }dj                  t              }dj                  |t        j                  j                  dd            }| j                  rd| j                  z  nd}dj                  ||g      }		 ddlm	}
 d	 } |
t               |d
j                  ||      |       y# t        $ r< 	 ddlm	}
  |
|	|d       Y y# t        $ r ddl}|j                  |	|       Y Y yw xY ww xY w)as  An interactive Python API console for MyGeotab

    If either IPython or ptpython are installed, it will launch an interactive console using those libraries instead of
    the built-in Python console. Using IPython or ptpython has numerous advantages over the stock Python console,
    including: colors, pretty printing, command auto-completion, and more.

    By default, all library objects are available as locals in the script, with 'myg' being the active API object.

    :param session: The current Session object.
    :param database: The database name to open a console to.
    :param user: The username used for MyGeotab servers. Usually an email address.
    :param password: The password associated with the username. Optional if `session_id` is provided.
    :param server: The server ie. my23.geotab.com. Optional as this usually gets resolved upon authentication.
    zMyGeotab Console {0}z{0} [Python {1}]
 r\   zNot logged inr   )embedc                     d| _         y )Nipython)prompt_style)repls    r   	configurezconsole.<locals>.configure   s
     )Dr   z{0}. {1})globalslocalstitler   neutral)banner1user_nscolorsN)local)_populate_localsr   r   rb   versionreplacer   r   ptpython.replr|   r   ImportErrorIPythoncodeinteract)rd   r   re   rH   r/   
local_varsmyg_console_versionr   	auth_linebannerr|   r   r   s                r   consoler      s    * "(HfgtLJ077D ''(;S[[=P=PQUWY=Z[G>E>Q>Q#g&9&99WfIYY+,F4'	* 	I##$7C		
  4	4%&*YG 	4MM&
M3	44s*   -B4 4	C9>C C51C94C55C9c                 v    t               | _        	 | j                  j                          y# t        $ r Y yw xY w)zaMyGeotab Python SDK command line tools.

    You probably want to use the `console` command.
    N)r   objr@   IOError)rr   s    r   mainr      s1     iCG s   , 	88c                 ~   |j                   st        |||| |       |j                  |        |j                         }|st        |||| |      }	 |j	                  d|j                   j
                         t        |t        t              S # t        $ r' t        j                  d       t        |||| |      }Y Ew xY w)NUser)r*   z-Your session has expired. Please login again.)mygmygeotabr   )r   rK   r@   rF   r=   r-   r	   r   ra   dictr   r   )r   rH   r/   rd   re   rJ   s         r   r   r      s    gtXx8LL
//
CGT8Xv>?W0099:
 C(%88	 # ?

BCGT8Xv>?s   'B -B<;B<__main__)NN)NNNN)"rR   r1   os.pathr   rb   r   r   r{   r   r   r   r   rJ   r   
exceptionsr	   objectr   rK   ri   groupoptionpass_objrs   commandargumentrw   r   version_optionpass_contextr   r   add_commandrO   rT   r   r   <module>r      s     
   0 0  /` f ` F4# D/]^hd1JK  L _ 45
!d3"  4 6" <=
!e4hlD!j$-NO(4  P "  5 >(4V 	   	9"       V     zF r   