ó
Ò:\c           @   s²   d  Z  d d l m Z d d l Z d d l m Z m Z m Z m Z d d l	 m
 Z
 d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d a d
 „  Z d „  Z e d k r® e ƒ  n  d S(   s   Project API.iÿÿÿÿ(   t   dequeN(   t   QObjectt   QThreadt   QTimert   Signal(   t   loggert   ProjectWorkerc           B   s;   e  Z d  Z e e e e ƒ Z d „  Z d „  Z d „  Z RS(   s$   Project Worker based on cona-kapsel.c         C   s;   t  t |  ƒ j ƒ  | |  _ | |  _ | |  _ t |  _ d S(   s   Anaconda Project Worker.N(   t   superR   t   __init__t   methodt   argst   kwargst   Falset   _is_finished(   t   selfR	   R
   R   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyR      s
    			c         C   s   |  j  S(   s@   Return True if worker status is finished otherwise return False.(   R   (   R   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyt   is_finished"   s    c         C   s†   d } d } y |  j |  j |  j Ž  } Wn8 t k
 rb } | } t j t |  j j | f ƒ ƒ n X|  j	 j
 |  | | ƒ t |  _ d S(   s6   Start process worker for given method args and kwargs.N(   t   NoneR	   R
   R   t	   ExceptionR   t   debugt   strt   __name__t   sig_finishedt   emitt   TrueR   (   R   t   errort   outputt   err(    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyt   start&   s    #(	   R   t
   __module__t   __doc__R   t   objectR   R   R   R   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyR      s
   		t   _ProjectAPIWrapperc           B   sk   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z e d	 d	 d	 d „ Z
 d „  Z d	 d	 d	 d	 d „ Z RS(
   s"   Project API based on conda-kapsel.i   c         C   s   t  t |  ƒ j ƒ  y  d d l m } | ƒ  |  _ Wn t k
 rO i  |  _ n Xt ƒ  |  _ t ƒ  |  _	 g  |  _
 g  |  _ t ƒ  |  _ t ƒ  |  _ d |  _ t ƒ  |  _ d |  _ |  j j d ƒ |  j j j |  j ƒ |  j j d ƒ |  j j j |  j ƒ d S(   s&   Project API based on anaconda-project.iÿÿÿÿ(   t   AnacondaProjecti    i   iM  iˆ  N(   R   R   R   t   anaconda_project.apiR    t   _project_apit   ImportErrorR    t   _queuet   _queue_workerst   _threadst   _workersR   t   _timert   _timer_worker_deletet   _running_threadst   _bag_collectort   _chunk_sizet   setIntervalt   timeoutt   connectt   _startt   _clean_workers(   R   R    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyR   :   s&    				c         C   s.   x |  j  r |  j  j ƒ  q W|  j j ƒ  d S(   s+   Delete periodically workers in workers bag.N(   R+   t   popleftR)   t   stop(   R   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyR1   R   s    c         C   sz  |  j  r’ |  j |  j k  r’ |  j d 7_ t ƒ  } |  j  j ƒ  } | j | ƒ | j j | j ƒ | j	 j | j
 ƒ | j
 ƒ  |  j j | ƒ n  |  j rá xC |  j D]5 } | j ƒ  r¥ |  j j | ƒ |  j j | ƒ q¥ q¥ Wn  |  j r/xB |  j D]4 } | j ƒ  rô |  j j | ƒ |  j d 8_ qô qô Wn  t |  j ƒ d k rvt |  j ƒ d k rv|  j j ƒ  |  j j
 ƒ  n  d S(   s-   Start threads and check for inactive workers.i   i    N(   R%   R*   t   MAX_THREADSR   R2   t   moveToThreadR   R/   t   quitt   startedR   R&   t   appendR'   R   R+   t   removet
   isFinishedt   lenR(   R3   R)   (   R   t   threadt   workert   wt   t(    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyR0   X   s,    	
		*c         O   sC   t  | | | ƒ } |  j j | ƒ |  j j | ƒ |  j j ƒ  | S(   s   Create a new worker instance.(   R   R'   R8   R%   R(   R   (   R   R	   R
   R   R=   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyt   _create_workery   s
    c         C   sG   t  j t | ƒ ƒ |  j j } |  j | | d | d | d | d | ƒS(   s!   Initialize project given by path.t   make_directoryt   namet   icont   description(   R   R   R   R"   t   create_projectR@   (   R   t   pathRA   RB   RC   RD   R	   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyRE      s    	c         C   sY   t  j t | ƒ ƒ y |  j j | ƒ } Wn) t k
 rT |  j j | d d ƒ} n X| S(   s   Load project given by path.t   frontendN(   R   R   R   R"   t   load_projectR   R   (   R   RF   t   proj(    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyRH   •   s    c         C   sP   t  j t | | | f ƒ ƒ |  j j } |  j | | d d d d d d d d ƒS(   s   Upload project to repo.t   sitet   usernamet   tokent	   log_levelN(   R   R   R   R"   t   uploadR@   R   (   R   t   projectRJ   RK   RL   RM   R	   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyRN   Ÿ   s    N(   R   R   R   R4   R   R1   R0   R@   R   R   RE   RH   RN   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyR   5   s   			!		c           C   s   t  d  k r t ƒ  a  n  t  S(   N(   t   PROJECT_APIR   R   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyt
   ProjectAPI²   s    c          C   s-   d d l  m }  |  ƒ  } | j t j ƒ d  S(   Niÿÿÿÿ(   t   qapplication(   t"   anaconda_navigator.utils.qthelpersRR   t   exec_t   syst   exit(   RR   t   app(    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyt
   local_test»   s    	t   __main__(   R   t   collectionsR    RU   t   qtpy.QtCoreR   R   R   R   t   anaconda_navigator.utils.logsR   R   R   R   RP   RQ   RX   R   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/api/project_api.pyt   <module>   s   " z			