ó
¹�VZc           @   sf  d  d l  Z  d  d l m Z m Z m Z m Z m Z d  d l m Z m Z d  d l	 m
 Z
 d  d l m Z m Z m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z m Z m Z d  d l Z e  j j e  j j e ƒ ƒ Z e e ƒ Z  d	 e  j! d
 <d e  j! d <d e  j! d <d e f d „  ƒ  YZ" e" e  j# j$ d <d d d „ Z& d d „ Z' e( d „ Z) d „  Z* d „  Z+ d „  Z, e  j- d „  ƒ Z- e  j. d „  ƒ Z/ e  j0 d ƒ e, d „  ƒ ƒ Z1 e  j0 d ƒ d „  ƒ Z2 e  j0 d ƒ d  „  ƒ Z3 e  j0 d! ƒ d" „  ƒ Z4 e  j0 d# ƒ d$ „  ƒ Z5 d% „  Z6 e  j0 d& ƒ d' d( „ ƒ Z7 e  j0 d) d* d+ g ƒd, „  ƒ Z8 e  j0 d- d* d. g ƒe, d/ „  ƒ ƒ Z9 e  j0 d0 d* d. g ƒe, d1 „  ƒ ƒ Z: e  j0 d2 d* d. g ƒe  j0 d3 d* d. g ƒd d d4 „ ƒ ƒ Z; e  j0 d5 ƒ d6 „  ƒ Z< d7 e= f d8 „  ƒ  YZ> e> e  j? ƒ e  _? e d9 k rbe  j@ d: d; d< eA d= d> ƒ n  d S(?   iÿÿÿÿN(   t   Flaskt   gt   abortt   jsonifyt   render_template(   t   timet   strftime(   t   wraps(   t   requestt   send_from_directoryt   redirectt   url_fort   Response(   t   BaseConverter(   t   sha256_crypt(   t   TimedJSONWebSignatureSerializert   BadSignaturet   SignatureExpireds-   h&#2Fvi9>4@_Cw/j/*)\_K81~.dN$f5!r%<Z$63|;1l=_t
   SECRET_KEYs$   http://192.168.92.7:8084/mtpublic/%st   METADATA_URLsE   http://192.168.92.7:8084/mtpublic/_design/clients/_view/all/?key="%s"t	   TOKEN_URLt   RegexConverterc           B   s   e  Z d  „  Z RS(   c         G   s'   t  t |  ƒ j | ƒ | d |  _ d  S(   Ni    (   t   superR   t   __init__t   regex(   t   selft   url_mapt   items(    (    s   /var/www/tracking/tracking.pyR      s    (   t   __name__t
   __module__R   (    (    (    s   /var/www/tracking/tracking.pyR      s   R   c         C   sq   d G|  G| G| GHyQ | r) t  j | ƒ n | } |  d k r] t  j d | ƒ r] t d |  | ƒ Sd SWn d SXd S(   s;   Check if (username, password) or (username, hash) is valid.s   Checking auth...t   sohrabjkt   nnchi   N(   R   t   encryptt   verifyt   generate_tokent   None(   t   usernamet   passwordt   hasht   digest(    (    s   /var/www/tracking/tracking.pyt
   check_auth   s    iX  c         C   s;   t  t j d d | ƒ} | j i |  d 6| d 6| d 6ƒ S(   NR   t
   expires_int   idR$   R&   (   t
   Serializert   appt   configt   dumps(   R*   R$   R&   t
   expirationt   s(    (    s   /var/www/tracking/tracking.pyR"   -   s    c         C   sT   t  t j d ƒ } | j |  d  k	 r+ |  n d d t ƒ\ }  } | rP |  | f S|  S(   NR   t    t   return_header(   R+   R,   R-   t   loadsR#   t   True(   t   tokent   headersR0   t   header(    (    s   /var/www/tracking/tracking.pyt   untoken1   s    -c         C   s¶   d GHy} t  t j d ƒ } t |  t ƒ \ }  } | d t t ƒ  ƒ d k  re t |  d d |  d ƒSt |  d |  d |  d ƒ SWn- t	 k
 r› d GHt
 St k
 r± d	 GHt
 SXd  S(
   Ns   Checking token...R   t   expi<   R$   R&   R*   s   Signature expireds   Bad signature(   R+   R,   R-   R8   R4   t   intR   R(   R"   R   t   FalseR   (   R5   R0   R7   (    (    s   /var/www/tracking/tracking.pyt   check_token6   s     c           C   s   t  d d i d d 6ƒ S(   s   401 Response with Basic AuthsZ   Could not verify your access level for that URL.
You have to login with proper credentialsi‘  s   Basic realm=""s   WWW-Authenticate(   R   (    (    (    s   /var/www/tracking/tracking.pyt   authenticateE   s    c            s   t  ˆ  ƒ ‡  f d †  ƒ } | S(   Nc             sl   t  j } d G| GHt t  j j d ƒ ƒ pB | oB t | j | j ƒ } | ra | t _	 ˆ  |  | Ž  St
 ƒ  Sd  S(   Ns   Authorization: R5   (   R   t   authorizationR<   t   cookiest   getR(   R$   R%   R   t   _tokenR=   (   t   argst   kwargst   authR5   (   t   f(    s   /var/www/tracking/tracking.pyt	   decoratedM   s    			(   R   (   RE   RF   (    (   RE   s   /var/www/tracking/tracking.pyt   requires_authL   s    c           C   s   t  ƒ  t _ d  S(   N(   R   R   t   start(    (    (    s   /var/www/tracking/tracking.pyt   before_requestZ   s    c         C   sç   t  j d d  ƒ r1 |  j d d t  j d d ƒn |  j d d d ƒt  j d d  ƒ rx d t ƒ  t  j d	 |  j d
 <n  d |  j d <d |  j d <d |  j d <t j	 j
 t j	 j t ƒ ƒ |  j d <t j	 j
 t j ƒ  ƒ |  j d <|  S(   NRA   R5   t   valuet   max_ageiX  R1   RH   s   %1.1f msiè  s	   X-Runtimes.   max-age=0, no-cache, no-store, must-revalidates   Cache-Controls   Thu, 29 Nov 1984 19:40:00t   Expiress   no-cachet   Pragmas   Run-int   CWD(   R   R@   R#   t
   set_cookieRA   R   RH   R6   t   ost   patht   dirnamet   abspatht   __file__t   getcwd(   t   response(    (    s   /var/www/tracking/tracking.pyt   apply_caching^   s    "%s   /logoutc           C   s1   t  j d d  ƒ r d  t  _ n  t t d ƒ d ƒ S(   NRA   t   indexi.  (   R   R@   R#   RA   R
   R   (    (    (    s   /var/www/tracking/tracking.pyt   logoutn   s    s   /tracking/<identifier>c         C   s   t  d d |  ƒS(   Ns   layout.htmlt
   identifier(   R   (   RZ   (    (    s   /var/www/tracking/tracking.pyRX   u   s    s   /id/<identifier>c         C   s   t  d d |  ƒS(   Ns   identification.htmlRZ   (   R   (   RZ   (    (    s   /var/www/tracking/tracking.pyt   identificationz   s    s   /stocks/c          C   s  d d l  m }  |  i d d 6d d 6t d 6i d d 6d	 d 6t d 6i d
 d 6d d 6t d 6i d d 6d d 6t d 6i d d 6d d 6t d 6i d d 6d d 6t d 6i d d 6d d 6t d 6i d d 6d d 6t d 6i d d 6d d 6t d 6i d d 6d d 6t d 6g
 ƒ } t | d d ƒS(   Niÿÿÿÿ(   R.   i   R*   s   STOCK PRINCIPALt   descriptiont   defaulti   s   STOCK SECONDAIREi   s   EN COURS OFi   s	   STOCK SAVi   s   STOCK VENTE COMPOSANTSi   s   STOCK ENTREEi   s   STOCK RETOURi   s   STOCK RDi	   s   STOCK TRANSITi
   s   STOCK DEMO-OCCASIONt   mimetypes   application/json(   t   jsonR.   R4   R;   R   (   R.   R_   (    (    s   /var/www/tracking/tracking.pyt   query_stocks~   s    !s   /article/<article>c         C   s_  d d  l  } d d  l } t } d } d |  } | j | ƒ } | sR | j | ƒ n | } d d  l j j } | j | ƒ }	 yÎ i |	 d j	 d d 6|	 d j	 d d 6|	 d j	 d d 6|	 d j	 d d	 6|	 d d j
 d
 6g  d 6}
 xV |	 d j d ƒ D]A } |
 d j i | j	 d d 6| j	 d	 d	 6| j	 d d 6ƒ q÷ Wt |
 ƒ SWn t d ƒ n Xd  S(   Niÿÿÿÿs2  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<articles count="1">
<article identifier="2055159000" value="11.060" currency="CHF" active="1" stocks="70">
<description lang="FRE">PAIRE DE GANTS POUR NAGRA HI-FI</description>
<stock id="1" quantity="70" location="233-A-03"/></article>
</articles>
s£   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="CALL article_query('%s', 'FRE')"  dfnesa
  i    RZ   RJ   t   currencyt   stockst   quantityR\   t   stockR*   t   locationi”  (   t   shlext
   subprocessR;   t   splitt   check_outputt   xml.etree.ElementTreet   etreet   ElementTreet
   fromstringt   attribt   textt   findallt   appendR   R   (   t   articleRf   Rg   t   debugt	   debug_xmlt   shellRB   t   outputt   ETt   roott   outRd   (    (    s   /var/www/tracking/tracking.pyt   query_article�   s0    


c            s‚   d d  l  } d d  l j j ‰  d „  ‰ ‡  ‡ ‡ f d †  } ˆ  j d ƒ } x' |  D] } | | ƒ } | j | ƒ qR Wˆ  j | ƒ S(   Niÿÿÿÿc         S   s   |  | k r | S| |  S(   N(    (   t   keyt   elR]   (    (    s   /var/www/tracking/tracking.pyt   ifnullÎ   s    c            s.  |  d } i  } ˆ | d <ˆ  j  d ƒ } | j d ˆ ƒ | j d ˆ d |  d ƒ ƒ | j d |  d ƒ | j d |  d ƒ | j d	 ˆ d	 |  | ƒ d ƒ | j d t | d
 ƒ ƒ | j d t ˆ d |  d ƒ ƒ ƒ | j d t ˆ d |  d ƒ ƒ ƒ | j d t ˆ d |  d ƒ ƒ ƒ | d | _ | S(   NRr   R*   t   positiont   sourcet   activet   truet   uuidt	   createdOnt	   createdByRZ   Rd   R1   Re   Rc   R\   (   t   Elementt   sett   strRo   (   R~   Rr   R„   t   p(   Rw   R}   R   (    s   /var/www/tracking/tracking.pyt   as_xmlÑ   s    

 """t	   inventory(   R_   Rj   Rk   Rl   R…   Rq   (   RŠ   R   R_   R‰   Rx   R~   Rˆ   (    (   Rw   R}   R   s   /var/www/tracking/tracking.pyt   to_xmlÊ   s    	s   /user/<user_id>i    c         C   s›  d d  l  } d d  l } d |  } | j | ƒ } | j | ƒ } d d  l j j } | j | ƒ } y"t | j	 d ƒ d k sŒ t
 d ƒ ‚ n  i | d j	 d d 6| d j	 d d 6| d j	 d	 d	 6| d j	 d
 d k d
 6| d j	 d d 6| d j	 d d 6| d j	 d d k d 6| d j d 6} d d l m }	 d d l m }
 |	 |
 d d ƒ d k  rq|
 d d ƒ n d ƒ t | ƒ SWn t d ƒ n Xd  S(   Niÿÿÿÿs™   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="CALL user_query('%s')"  dfnesa
  t   counti   s   User count is not equal to 1i    R*   R$   t   roleR€   t   1t   langt   visat   adminR\   (   t   sleep(   t   uniformg      Ð?i   i”  (   Rf   Rg   Rh   Ri   Rj   Rk   Rl   Rm   R:   Rn   t   LookupErrorRo   R   R’   t   randomR“   R   R   (   t   user_idRf   Rg   Ru   RB   Rv   Rw   Rx   Ry   R’   R“   (    (    s   /var/www/tracking/tracking.pyt
   query_useré   s0    

.s   /id/<string:identifier>/t   methodst   POSTc         C   sz  d d  l  } | j t j ƒ } d g |  g t d ƒ g } t j j t | Œ } t j j	 | ƒ sr t j
 | ƒ n  d t d ƒ } t t j j | | ƒ d ƒ } | j t j ƒ | j ƒ  t | |  ƒ } d t d ƒ } t t j j | | ƒ d ƒ } | j | d d	 d
 t ƒ| j ƒ  d d  l } d d  l }	 d t j j t d ƒ t j j | | ƒ f }
 | j |	 j |
 ƒ ƒ d S(   Niÿÿÿÿt   commitss   %Y%m%ds   commit_%s.jsons   %H%M%St   wbs   commit_%s.xmlt   encodings   UTF-8t   xml_declarations   %s -i -o -w %ss   sql/xml2sql.shs   Ahoy, capt'n(   R_   R3   R   t   dataR   RP   RQ   t   joint   baset   existst   makedirst   opent   writet   closeR‹   R4   Rg   Rf   t   PopenRh   (   RZ   R_   t   payloadt   subdirt	   directoryt   filenamet   filet   xmlRg   Rf   Ru   (    (    s   /var/www/tracking/tracking.pyt   post_inv  s&    

.s   /tokent   GETc           C   s   t  i t t j ƒ d d 6ƒ S(   NR*   (   R   R8   R   RA   (    (    (    s   /var/www/tracking/tracking.pyR5   :  s    s   /metadata/<id>c         C   sm   |  t  t j ƒ d k r& t d ƒ n  t j t j d |  d d ƒ} | j r_ t	 | j
 ƒ  ƒ St d ƒ d  S(   NR*   i“  R   t   timeouti   iô  (   R8   R   RA   R   t   requestsR@   R,   R-   t   okR   R_   (   R*   t   resp(    (    s   /var/www/tracking/tracking.pyt   metadata?  s     	s=   /list/<int:list_type>/<regex('([A-Z0-9]{7,10})'):identifier>/s�   /list/<int:list_type>/<regex('([A-Z0-9]{7,10})'):identifier>/<regex('(\d{4}-\d{2}-\d{2})'):date_from>/<regex('(\d{4}-\d{2}-\d{2})'):date_until>/c         C   sœ   d d  l  } d d  l } d „  } d |  | | | d ƒ | | d ƒ f } | j | j j | j j t ƒ | ƒ ƒ t | j j | j j t ƒ d ƒ d d ƒS(   Niÿÿÿÿc         S   s   |  d  k r | S|  S(   N(   R#   (   t   vart   val(    (    s   /var/www/tracking/tracking.pyR}   O  s    s   xslt/fetch.sh %s %s %s %sR1   t   xsltRª   s   mt_batches_summary2.json(   RP   Rf   t   systemRQ   RŸ   RR   RT   R	   (   t	   list_typeRZ   t	   date_fromt
   date_untilRP   Rf   R}   Ru   (    (    s   /var/www/tracking/tracking.pyt   sample_dataJ  s
    	((s(   /<regex('(font|fonts)'):head>/<resource>c         C   s   t  t d d d | ƒƒ S(   Nt   staticRª   s   fonts/(   R
   R   (   t   headt   resource(    (    s   /var/www/tracking/tracking.pyt
   get_imagesY  s    t   ReverseProxiedc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R,   (   R   R,   (    (    s   /var/www/tracking/tracking.pyR   b  s    c         C   sŠ   | j  d d ƒ } | rU | | d <| d } | j | ƒ rU | t | ƒ | d <qU n  | j  d d ƒ } | rz | | d <n  |  j | | ƒ S(   Nt   HTTP_X_SCRIPT_NAMER1   t   SCRIPT_NAMEt	   PATH_INFOt   HTTP_X_SCHEMEs   wsgi.url_scheme(   R@   t
   startswitht   lenR,   (   R   t   environt   start_responset   script_namet	   path_infot   scheme(    (    s   /var/www/tracking/tracking.pyt   __call__e  s    

(   R   R   R   RÌ   (    (    (    s   /var/www/tracking/tracking.pyRÀ   a  s   	t   __main__t   hosts   0.0.0.0Rs   t   portiX  (B   RP   t   flaskR    R   R   R   R   R   R   t	   functoolsR   R   R	   R
   R   R   t   werkzeug.routingR   t   passlib.hashR   t   itsdangerousR   R+   R   R   R°   RQ   RR   t   realpathRT   R    R   R,   R-   R   R   t
   convertersR#   R(   R"   R;   R8   R<   R=   RG   RI   t   after_requestRW   t   routeRY   RX   R[   R`   Rz   R‹   R—   R­   R5   R³   R»   R¿   t   objectRÀ   t   wsgi_appt   runR4   (    (    (    s   /var/www/tracking/tracking.pyt   <module>   sZ   ((			;	4!
