ó
#yRc           @   s~   d  d l  Z  d  d l Z d  d l m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ	 d e
 f d	 „  ƒ  YZ d S(
   iÿÿÿÿN(   t
   fromstring(   t   Artifactt   DepmapLoadingExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyR   '   s   t   DepmapInvalidExceptionc           B   s   e  Z RS(    (   R   R   (    (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyR   *   s   t   Depmapc           B   s_   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s  
    Class for working with depmap files (dependency maps). These are files used
    by XMvn to provide mapping between Maven artifacts and file on the
    filesystem.

    Example usage:
    >>> d = Depmap('maven-idea-plugin.xml')
    >>> print d.get_java_requires()
    1.5
    >>> print d.get_provided_artifacts()[0]
    org.apache.maven.plugins:maven-idea-plugin:None:None:2.2
    c         C   sk   | |  _  |  j | ƒ |  j d  k r@ t d j d | ƒ ƒ ‚ n  |  j ƒ  sg t d j d | ƒ ƒ ‚ n  d  S(   Ns1   Failed to load fragment {path} You have a problemt   paths6   Depmap {path} does not contain any provided artifacts (   t   _Depmap__patht   _Depmap__load_depmapt   _Depmap__doct   NoneR   t   formatt   get_provided_mappings(   t   selfR   (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   __init__;   s    	c      	   C   s‰   t  | ƒ w } y4 t j t j j | ƒ d d | ƒ} | j ƒ  } Wn* t k
 ro | j d ƒ | j ƒ  } n Xt	 | ƒ |  _
 Wd  QXd  S(   Nt   rbt   fileobji    (   t   opent   gzipt   GzipFilet   osR   t   basenamet   readt   IOErrort   seekR    R
   (   R   t   fragment_patht   ft   gzft   data(    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   __load_depmapC   s    	c         C   sF   |  j  ƒ  } x! | D] \ } } | j r t Sq W|  j j d ƒ d k	 S(   sn   Return true if depmap is for compatibility package

         This means package should have versioned providess   .//skipProvidesN(   R   t   versiont   TrueR
   t   findR   (   R   t   provided_mapst   mt   l(    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt	   is_compatR   s
    	c         C   sž   g  } x‘ |  j  j d ƒ D]} } | j d ƒ } t | ƒ d k rO t d ƒ ‚ n  t j | d ƒ } | j s‰ t d j d |  j ƒ ƒ ‚ n  | j	 | ƒ q W| S(   s2   Returns list of Artifact provided by given depmap.s   .//dependencys   ./maveni   s"   Multiple maven nodes in dependencyi    s5   Depmap {path} does not have version in maven providesR   (
   R
   t   findallt   lenR   R   t   from_xml_elementR   R   R   t   append(   R   t	   artifactst   dept   artifact(    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   get_provided_artifacts]   s    	c         C   sç   g  } xÚ |  j  j d ƒ D]Æ } | j d ƒ } t | ƒ d k rO t d ƒ ‚ n  t j | d ƒ } | j s‰ t d j d |  j ƒ ƒ ‚ n  | j d ƒ } t | ƒ d k r¹ t d	 ƒ ‚ n  t j | d ƒ } | j	 | | f ƒ q W| S(
   sÂ   Return list of (Artifact, Artifact) tuples.

        First part of returned tuple is Maven artifact identification
        Second part of returned tuple is local artifact identification
        s   .//dependencys   ./maveni   s"   Multiple maven nodes in dependencyi    s5   Depmap {path} does not have version in maven providesR   s   ./jpps    Multiple jpp nodes in dependency(
   R
   R&   R'   R   R   R(   R   R   R   R)   (   R   t   mappingsR+   t
   m_artifactt
   l_artifact(    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyR   j   s    	c         C   sC   g  } x6 |  j  j d ƒ D]" } t j | ƒ } | j | ƒ q W| S(   s2   Returns list of Artifact required by given depmap.s   .//autoRequires(   R
   R&   R   R(   R)   (   R   R*   R+   R,   (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   get_required_artifacts   s
    c         C   sC   g  } x6 |  j  j d ƒ D]" } t j | ƒ } | j | ƒ q W| S(   s:   Returns list of Artifact that were build but not installeds   .//skippedArtifact(   R
   R&   R   R(   R)   (   R   R*   R+   R,   (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   get_skipped_artifacts‡   s
    c         C   s.   |  j  j d ƒ } | d k	 r* | j } n  | S(   s.   Returns JVM version required by depmap or Nones   .//requiresJavaN(   R
   R!   R   t   text(   R   t   jreq(    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   get_java_requires   s    c         C   s.   |  j  j d ƒ } | d k	 r* | j } n  | S(   s:   Returns JVM development version required by depmap or Nones   .//requiresJavaDevelN(   R
   R!   R   R3   (   R   R4   (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   get_java_devel_requires–   s    (   R   R   t   __doc__R   R	   R%   R-   R   R1   R2   R5   R6   (    (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyR   -   s   								(   R   t   os.pathR   t
   lxml.etreeR    t   javapackages.artifactR   t	   ExceptionR   R   t   objectR   (    (    (    s7   /usr/lib/python2.7/site-packages/javapackages/depmap.pyt   <module>    s   