ó
‹²,]c           @   s  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 d  d l m	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d l m Z m Z e r× d  d l m Z d  d	 l m Z m Z n d  d
 l m Z m Z m Z d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   QObjectt   Signal(   t   __version__(   t   _(   t   PY3(   t   is_anaconda(   t   check_versiont   is_stable_version(   t   urlopen(   t   URLErrort	   HTTPError(   R   R	   R
   t   WorkerUpdatesc           B   s8   e  Z d  Z e ƒ  Z d d d „ Z d „  Z d „  Z RS(   sÆ   
    Worker that checks for releases using either the Anaconda
    default channels or the Github Releases page without
    blocking the Spyder user interface, in case of connection
    issues.
    t    c         C   sY   t  j |  ƒ | |  _ d  |  _ d  |  _ | |  _ | |  _ | sL t |  _	 n	 | |  _	 d  S(   N(
   R    t   __init__t   _parentt   Nonet   errort   latest_releaset   startupt   releasesR   t   version(   t   selft   parentR   R   R   (    (    s5   lib/python2.7/site-packages/spyder/workers/updates.pyR   )   s    					c         C   s®   d |  j  k r t | f St |  j  ƒ rS g  |  j D] } t | ƒ r2 | ^ q2 } n8 g  |  j D]( } t | ƒ s | |  j  k r] | ^ q] } | d } t |  j  | d ƒ | f S(   s  Checks if there is an update available.

        It takes as parameters the current version of Spyder and a list of
        valid cleaned releases in chronological order.
        Example: ['2.3.2', '2.3.3' ...] or with github ['2.3.4', '2.3.3' ...]
        t   deviÿÿÿÿt   <(   R   t   FalseR   R   R   (   R   R   t   rR   (    (    s5   lib/python2.7/site-packages/spyder/workers/updates.pyt   check_update_available6   s    
+(
c         C   s¯  t  ƒ  rf d |  _ t j d k r3 |  j d 7_ qo t j d k rT |  j d 7_ qo |  j d 7_ n	 d |  _ t |  _ t |  _	 d } yžt t d ƒ r½ t j ƒ  } t |  j d	 | ƒ} n t |  j ƒ } y8| j ƒ  } t | t ƒ sù | j ƒ  } n  t j | ƒ } t  ƒ  r|  j d k r€g  |  _ xT | d
 D]E } d | k r4t j d | ƒ r4|  j j | j d ƒ d ƒ q4q4Wn  |  j ƒ  } nV |  j d k råg  | D] } | d j d d ƒ ^ q¥|  _ t t |  j ƒ ƒ |  _ n  |  j ƒ  } | \ |  _ |  _	 Wn t k
 r#t d ƒ } n XWnU t  k
 rDt d ƒ } n9 t! k
 r`t d ƒ } n t k
 r|t d ƒ } n X|  j" o| d k	 s«| |  _# |  j$ j% ƒ  n  d S(   s'   Main method of the WorkerUpdates workers#   https://repo.anaconda.com/pkgs/maint   nts   /win-64/repodata.jsont   darwins   /osx-64/repodata.jsons   /linux-64/repodata.jsons7   https://api.github.com/repos/spyder-ide/spyder/releasest   _create_unverified_contextt   contextt   packagest   spyders   spyder-[a-zA-Z]t   -i   t   tag_namet   vR   s   Unable to retrieve information.sX   Unable to connect to the internet. <br><br>Make sure the connection is working properly.s   Unable to check for updates.N(&   R   t   urlt   ost   namet   syst   platformR   t   update_availableR   R   R   t   hasattrt   sslR   R   t   readt
   isinstancet   strt   decodet   jsont   loadsR   t   ret   searcht   appendt   splitR   t   replacet   listt   reversedt	   ExceptionR   R
   R	   R   R   t	   sig_readyt   emit(   R   t	   error_msgR   t   paget   datat   itemt   result(    (    s5   lib/python2.7/site-packages/spyder/workers/updates.pyt   startM   s\    							')	N(	   t   __name__t
   __module__t   __doc__R   R;   R   R   R   RB   (    (    (    s5   lib/python2.7/site-packages/spyder/workers/updates.pyR       s
   		(   R1   R&   R3   R,   R(   t   qtpy.QtCoreR    R   R!   R   t   spyder.config.baseR   t   spyder.py3compatR   t   spyder.config.utilsR   t   spyder.utils.programsR   R   t   urllib.requestR   t   urllib.errorR	   R
   t   urllib2R   (    (    (    s5   lib/python2.7/site-packages/spyder/workers/updates.pyt   <module>   s   