
Pc           @   st  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k i	 i
 Z
 d  d k Z e i   d Z d e f d     YZ e   Z d e f d     YZ e   Z d   Z e i i e _ d   Z e i i e _ d	   Z e i i e _ d
 Z d Z d Z d Z d Z d Z d Z d Z d Z d e f d     YZ  e    Z! d   Z" e  i" i e" _ d   Z# e  i# i e# _ d   Z$ e  i$ i e$ _ d   Z% e  i% i e% _ d   Z& e  i& i e& _ d   Z' e  i' i e' _ d   Z( e  i( i e( _ d   Z) e  i) i e) _ d  d k* Z* d e* i+ f d     YZ, e d  Z- d  e f d!     YZ. e d"  Z/ d S(#   iNs   http://addons.eventscripts.com/t   DBGLogc           B   s,   e  Z d  Z d   Z d d  Z d   Z RS(   s/    Base Class for logging installlib information c         C   s   g  |  _  d  S(   N(   t   lines(   t   self(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   __init__   s    c         C   s5   | d j	 o t i | |  n |  i i |  d S(   s=    Writes the text to log, echoing to the console if necessary N(   t   Nonet   est   dbgmsgR   t   append(   R   t   textt   dbglvl(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   write   s    c         C   s(   x! |  i  D] } t i d |  q
 Wd S(   s)    Outputs stored log lines to the console i    N(   R   R   R   (   R   t   line(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   echo#   s    
 N(   t   __name__t
   __module__t   __doc__R   R   R
   R   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR       s   	t
   ESAMUploadc           B   se   e  Z d  Z e d Z e d Z e d Z d   Z d   Z d d d d d e	 d d  Z
 d	   Z RS(
   s.    Class for submitting information to the ESAM s
   sdk/uploads   sdk/add_collaborators   sdk/remove_collaborator c      
   C   s(   |  i  |  i d | d | d | d | S(   s-    Adds a collaborator to an addon on the ESAM t   usernamet   api_keyt   basenamet   collaborator(   t   kw_postt   addurl(   R   R   R   R   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   addCollaboratorM   s    c      
   C   s(   |  i  |  i d | d | d | d | S(   s2    Removes a collaborator from an addon on the ESAM R   R   R   R   (   R   t	   removeurl(   R   R   R   R   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   removeCollaboratorQ   s    t    t   Normalc      ,   C   s  t  i i |  } | i d d  i d d  d } | i d d  d } t | d  } t i | i    } | i	   |  i
 |  i d | d | d | d	 | d
 | d | d | d | d | d | d | d | d | d | d | d |	 d t |  d | d | d |
 d | S(   s    Uploads a file to the ESAM s   \t   /i   t   .t   rbR   R   R   t   filenamet   filesizet   file_extensiont   version_notest   versiont   b64_file_contentt
   addon_namet	   forum_urlt   public_variablet
   addon_desct
   es_versiont	   video_urlt   addon_summaryt   ready4approvalt   install_instructionst   featurelist_urlt   es_load_argst   status(   t   ost   patht   getsizet   replacet   rsplitt   opent   base64t   encodestringt   readt   closeR   t	   uploadurlt   int(   R   R   R   R   R2   R%   R#   R"   R(   R+   R/   R)   R&   R'   R*   R-   R.   R,   R0   R    R   R!   t   fR$   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   uploadU   s    "
-c         O   sf   t  |  d j o t d t  |   n t i | d d t i |  } | i   } | i   | S(   s1    Internal function: Sends encoded data to an url i   s+   kw_post takes exactly 1 argument (%s given)i    t   data(   t   lent	   TypeErrort   urllib2t   urlopent   urllibt	   urlencodeR9   R:   (   R   t   at   kwt   ut   d(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   j   s
    *"
(   R   R   R   t   baseurlR;   R   R   R   R   t   FalseR>   R   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   ,   s   


		c          O   s   t  i |  |   S(   N(   t
   esamuploadR   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   u   s    c          O   s   t  i |  |   S(   N(   RL   R   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   y   s    c          O   s   t  i |  |   S(   N(   RL   R>   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR>   }   s    t   addont   desct   esmint   namet   pvart   usert   addonst	   downloadst   wootst	   ESAMQueryc           B   s   e  Z d  Z e d Z e d Z e d Z e d Z e d Z e d Z	 e d Z
 e d Z d	   Z d
   Z d d  Z d d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s(    Class for querying ESAM addon database s   sdk/search/s   sdk/updatedsince/s   sdk/topusers   sdk/topaddons   sdk/watched_addons/s   sdk/collaborators/s   sdk/getbasename/s   sdk/checkDependencies/c         C   so   t  i |  i |  } t i | i    } | i   | i d  g  } | i d  D] } | | i	 qU ~ f S(   si   
      Returns a tuple in the format: (leader, collaborators)
      Where collaborators is a list.
      t   leaderR   (
   RB   RC   t   getcollaburlt   ElementTreet   XMLR9   R:   t   findtextt   getiteratorR   (   R   R   RH   R?   t   _[1]t   x(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   getCollaborators   s    
c         C   s   |  i  |  i | d | d  S(   sF    Returns a list of addons matching the search text of the search type R   RM   (   t
   getXMLListt	   searchurl(   R   t
   searchtypeR   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   search   s    i
   c         C   s9   | t  j o t d  n |  i |  i | d | d  S(   s@    Returns a list of top addons sorted by the given sort constant s0   TOP_ADDONCOUNT is not a valid sort for topAddonss   /%iRM   (   t   TOP_ADDONCOUNTt
   ValueErrorR`   t   topaddonsurl(   R   t   sortbyt   count(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt	   topAddons   s    c         C   s   |  i  |  i | d | d  S(   s?    Returns a list of top users sorted by the given sort constant s   /%iRR   (   R`   t
   topuserurl(   R   Rg   Rh   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   topUsers   s    c         C   s   |  i  |  i t |  d  S(   s<    Returns a list of addons updated since the given Unix time RM   (   R`   t	   updateurlR<   (   R   t	   timestamp(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   updated_since   s    c         C   sW   t  i |  i t i |   } t i | i    } | i   |  i	 | i
 d  d  S(   s8    Returns a list of addons watched by the given username t   watchedRM   (   RB   RC   t
   watchedurlR7   t	   b64encodeRY   RZ   R9   R:   t   spliceByt   find(   R   R   RH   R?   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt	   watchedBy   s    
c         C   s6   t  i |  i t |   } | i   } | i   | S(   s)    Returns an addon's basename by addon id (   RB   RC   t   getbasenamet   strR9   R:   (   R   t   addonidRH   R?   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   getBaseName   s    
c         C   s   |  i  |  i | d  S(   s1    Returns the dependicies of an addon by basename t
   dependency(   R`   t   checkdep(   R   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   checkDependencies   s    c         C   s>   t  i |  } t i | i    } | i   |  i | |  S(   s<    Returns a list information from the XML returned by an URL (   RB   RC   RY   RZ   R9   R:   Rr   (   R   t   urlt
   searchnameRH   R?   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR`      s    
c   	      C   s   g  } xy | i  |  D]h } h  } xA | i   D]3 } | i } | i |  } | o | | | <q/ q/ W| o | i |  q q W| S(   sW    Returns a list of information in the given XML data that matches the given searchname (   t   findallR\   t   tagR[   R   (	   R   R?   R}   t   resultt   itemt	   item_datat   subitemRP   t   value(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRr      s      	(   R   R   R   RJ   Ra   Rl   Rj   Rf   Rp   RX   Ru   Rz   R_   Rc   Ri   Rk   Rn   Rt   Rx   R{   R`   Rr   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRV      s&   







	
						c          O   s   t  i |  |   S(   N(   t	   esamqueryR_   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR_      s    c          O   s   t  i |  |   S(   N(   R   Rc   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRc      s    c          O   s   t  i |  |   S(   N(   R   Ri   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRi     s    c          O   s   t  i |  |   S(   N(   R   Rk   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRk     s    c          O   s   t  i |  |   S(   N(   R   Rn   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRn   
  s    c          O   s   t  i |  |   S(   N(   R   Rt   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRt     s    c          O   s   t  i |  |   S(   N(   R   Rx   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRx     s    c          O   s   t  i |  |   S(   N(   R   R{   (   RF   RG   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR{     s    t	   ESAMAddonc           B   sM   e  Z d  Z e Z e d  Z d   Z d   Z d   Z d   Z	 d   Z
 RS(   sF    Class that wraps the ESAM SDK and also provides basic addon download c         C   s   | |  _  | |  _ d  S(   N(   R?   t   log(   R   t   xmldataR   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   ?  s    	c         C   s:   |  i  |  } | d j o t d |  i | f  n | S(   sa  
      Available attributes include:
         - id
         - author
         - authorid
         - name
         - basename
         - approved
         - es_load
         - date
         - woots
         - desc
         - summary
         - currentversion
         - versionnotes
         - video
         - defaultssid
         - downloadcount
      s   Addon %s has no '%s' attributeN(   t   getR   t   AttributeErrorR   (   R   RP   t
   return_val(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   __getattr__C  s    c         C   s   |  i  d j o d Sn yb t i |  i d |  i  } t i d |  i d |  i  t i | i	    } | i
   | SWnG t j
 o; t i   } |  i i d | d i | d f d  n Xd S(   sD    Returns a file instance of the addon's latest downloadable version t   1s   addons/download/i    s   ESAMLib: %s - %si   i   N(   t   approvedR   RB   RC   RJ   R   R   R   t   StringIOR9   R:   t   IOErrort   syst   exc_infoR   R
   R   (   R   RH   RM   t   info(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   download^  s    
-c         C   s!   |  i  o |  i  i |  n d S(   s+    Returns an attribute of the addon by name N(   R?   R[   R   (   R   t	   attribute(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   p  s    c         C   s   |  i  o |  i  i   n g  S(   s(    Returns a list of the addon's elements (   R?   R\   (   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   getElementst  s    c         C   s   t  d   |  i    S(   s5    Returns a list of the names of the addon's elements c         S   s   |  i  S(    (   R   (   R^   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   <lambda>z  s    (   t   mapR   (   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   getElementNamesx  s    (   R   R   R   RJ   t   dbglogR   R   R   R   R   R   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR   ;  s   				c         C   s   ys t  i t d |   } | i   } | i   | p d Sn t i |  i d  } | o t	 | |  n d SWnD t
 j
 o8 t i   } | i d | d i | d f d  n Xd S(   s0    Returns an ESAMAddon instance for the basename s   sdk/addoninfo/RM   s   ESAMLib: %s - %si    i   i   N(   RB   RC   RJ   R9   R:   R   RY   RZ   Rs   R   R   R   R   R
   R   (   R   R   RH   R?   t   xmlR   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   getAddon}  s    
*t   ESAMUserc           B   sT   e  Z d  Z d e f d     YZ e d  Z d   Z d   Z d   Z	 d   Z
 RS(   s2    Class that holds ESAM user information for query t
   UserAddonsc           B   sG   e  Z d  Z e d  Z d   Z d   Z d   Z d   Z d   Z	 RS(   sK    Class that allows access to an user's addons through an ESAMUser instance c         C   s   | |  _  | |  _ h  |  _ d  S(   N(   R?   R   RS   (   R   R?   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    		c         C   s1   |  i  |  } | d j o t d |  n | S(   s.    Allows attribute access to the user's addons s)   UserAddons instance has no '%s' attributeN(   Rs   R   R   (   R   RP   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    c         C   su   | |  i  j o |  i  | Sn xO |  i   D]A } | | i d  j o% t | |  i  } |  i  | <| Sq, q, Wd S(   sE    Finds and returns an addon as an ESAMAddon instance by its basename R   N(   RS   t   getAddonListR[   R   R   R   (   R   t	   addonnameRM   t   return_addon(    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyRs     s     c         C   s   | |  i    j S(   sW    Returns True if the basename is in the addon list of the user otherwise returns False (   t   getAddonNameList(   R   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   isAddon  s    c         C   s   |  i  i d  S(   s6    Returns the addon elements for all the user's addons RM   (   R?   R~   (   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    c         C   s   t  d   |  i    S(   s0    Returns a list of addon basenames for the user c         S   s   |  i  d   S(   R   (   R[   (   R^   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    (   R   R   (   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    (
   R   R   R   R   R   R   Rs   R   R   R   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s   					c         C   s"   | |  _  |  i | |  |  _ d  S(   N(   R   R   RS   (   R   R   t	   addondataR   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    	c         C   s1   |  i  |  } | d j o t d |  n | S(   s   
      Available attributes include:
         - username
         - userid
         - addontotal
         - addonrank
         - woottotal
         - wootrank
         - downloadtotal
         - downloadrank
      s,   ESAMUser instance with has no '%s' attributeN(   R   R   R   (   R   RP   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    c         C   s!   |  i  o |  i  i |  n d S(   s*    Returns user information by element name N(   R   R[   R   (   R   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    c         C   s   |  i  o |  i  i   n g  S(   s0    Returns a list of elements of user information (   R   R\   (   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    c         C   s"   t  |  i t d   |  i     S(   sD    Returns a list of element names that can be queried about the user c         S   s   |  i  S(    (   R   (   R^   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    (   t   filterR   R   R   (   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s    (   R   R   R   t   objectR   R   R   R   R   R   R   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyR     s   -			c         C   s  y t  i t d t i |    } | i   } | i   | d j p | o d	 Sn t  i t d |  } t i	 | i    } | i   t  i t d |  } t i	 | i    } | i   t
 | | |  SWnD t j
 o8 t i   } | i d | d i | d f d  n Xd	 S(
   s/    Returns an ESAMUser instance for the username s   sdk/getuserid/t   falses   sdk/getuserinfo/s   sdk/getuseraddons/s   ESAMLib: %s - %si    i   i   N(   RB   RC   RJ   R7   Rq   R9   R:   R   RY   RZ   R   R   R   R   R
   R   (   R   R   RH   t   tidR   R   R   (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pyt   getUser  s      


*(0   R7   R   t   os.pathR1   R   R   RD   RB   t   xml.etree.ElementTreet   etreeRY   t   psycot   fullRJ   R   R    R   R   RL   R   R   R   R>   t   SEARCH_ADDONt   SEARCH_DESCRIPTIONt   SEARCH_ESVERSIONt   SEARCH_NAMEt   SEARCH_PUBLICVARt   SEARCH_USERRd   t   TOP_DOWNLOADSt	   TOP_WOOTSRV   R   R_   Rc   Ri   Rk   Rn   Rt   Rx   R{   t
   installlibt   AddonR   R   R   R   (    (    (    sN   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/esamlib.pys   <module>   sj   
	G				T									!BSU