ó
MÁ°Xc           @   s™  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 d# „  Z5 e  j0 d$ d% d& d' g ƒd( „  ƒ Z6 d) „  Z7 e  j0 d* ƒ d+ „  ƒ Z8 e  j0 d, ƒ d- „  ƒ Z9 d. „  Z: e  j0 d/ d% d' g ƒd0 „  ƒ Z; e  j0 d1 d% d& g ƒe, d2 „  ƒ ƒ Z< e  j0 d3 d% d& g ƒe, d4 „  ƒ ƒ Z= e  j0 d5 d% d& g ƒe  j0 d6 d% d& g ƒd d d7 „ ƒ ƒ Z> e  j0 d8 ƒ d9 „  ƒ Z? d: e@ f d; „  ƒ  YZA eA e  jB ƒ e  _B e d< k r•e  jC d= d> d? d@ dA eD ƒ n  d S(B   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    !c         C   s   d j  t |  ƒ j d ƒ ƒ S(   Nt   ,t   /(   t   joint   strt   split(   RQ   (    (    s   /var/www/tracking/tracking.pyt   to_csv�   s    s   /print/<path:varargs>t   methodst   GETt   POSTc         C   s
  d } t  t |  ƒ ƒ } t | d ƒ � } | j | ƒ Wd  QXd d l m } m } d d l m } d d l	 m
 } m } m }	 yv d }
 d |
 | f } | | d	 t ƒd
 } | | d	 t ƒd } | | d	 t ƒt j d k rð t d d ƒ Sd SWn t d ƒ SXd  S(   Ns   /tmp/print.xmlt   wiÿÿÿÿ(   t   callt
   check_call(   Re   (   t   listdirRQ   t   systems!   /var/www/tracking/xslt/items.xslts    xsltproc %s %s > /tmp/items.htmlt   shellsc   wkhtmltopdf --page-width 62mm --page-height 25mm -T 0 -R 0 -B 0 -L 0 /tmp/items.html /tmp/items.pdfsL   lpr -P QL720NW1 -o media=om_br-l0-b3-e0193374-a_61.91x24.96mm /tmp/items.pdfRh   s   /tmp/s	   items.pdfR1   iÌ   iô  (   R1   iÌ   (   t   fetch_articlesRf   t   opent   writet
   subprocessRk   Rl   t   shlexRe   RP   Rm   RQ   Rn   R4   R   t   methodR	   R   (   t   varargst   targett   outputt
   print_fileRk   Rl   Re   Rm   RQ   Rn   t   xsltRo   (    (    s   /var/www/tracking/tracking.pyt   print_articles’   s(    c         C   sD   d d  l  } d d  l } d |  } | j | ƒ } | j | ƒ } | S(   Niÿÿÿÿs£   mysql -u F5VksfQsYW -h 192.168.10.15 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="CALL article_query('%s', 'GER')"  dfnesa
  (   Rt   Rs   Re   t   check_output(   t   articlesRt   Rs   Ro   RB   Rx   (    (    s   /var/www/tracking/tracking.pyRp   °   s
    
s   /articles/<path:varargs>c         C   s"   t  t |  ƒ ƒ } t | d d ƒS(   NR^   s   text/xml(   Rp   Rf   R   (   Rv   Rx   (    (    s   /var/www/tracking/tracking.pyt   query_articles½   s    s   /article/<article>c         C   s  t  |  ƒ } 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ÿÿÿÿi    RZ   RJ   t   currencyt   stockst   quantityR\   t   stockR*   t   locationi”  (   Rp   t   xml.etree.ElementTreet   etreet   ElementTreet
   fromstringt   attribt   textt   findallt   appendR   R   (   t   articleRx   t   ETt   roott   outR‚   (    (    s   /var/www/tracking/tracking.pyt   query_articleÃ   s&    
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 } ˆ  j  d ƒ } | j d ˆ ƒ | j d ˆ d |  d ƒ ƒ | j d |  d ƒ | j d |  d ƒ | j d t | d ƒ ƒ | j d	 t ˆ d	 |  d
 ƒ ƒ ƒ | j d t ˆ d |  d
 ƒ ƒ ƒ | j d t ˆ d |  d
 ƒ ƒ ƒ | d | _ | S(   NRŒ   t   positiont   sourcet   activet   truet   uuidt	   createdOnRZ   R‚   R1   Rƒ   R�   R\   (   t   Elementt   setRd   R‰   (   R”   RŒ   t   p(   R�   R“   R•   (    s   /var/www/tracking/tracking.pyt   as_xmlä   s    
"""t	   inventory(   R_   R„   R…   R†   Rš   R‹   (   Rž   R•   R_   R�   RŽ   R”   Rœ   (    (   R�   R“   R•   s   /var/www/tracking/tracking.pyt   to_xmlÝ   s    	s   /id/<string:identifier>/c         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   Rc   t   baset   existst   makedirsRq   Rr   t   closeRŸ   R4   Rs   Rt   t   PopenRe   (   RZ   R_   t   payloadt   subdirt	   directoryt   filenamet   filet   xmlRs   Rt   Ro   (    (    s   /var/www/tracking/tracking.pyt   post_invù   s&    

.s   /tokenc           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“   *  s    s   xslt/fetch.sh %s %s %s %sR1   Rz   R­   s   mt_batches_summary2.json(   RP   Rt   Rn   RQ   Rc   RR   RT   R	   (   t	   list_typeRZ   t	   date_fromt
   date_untilRP   Rt   R“   Ro   (    (    s   /var/www/tracking/tracking.pyt   sample_data%  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_images4  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   =  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__@  s    

(   R   R   R   RÌ   (    (    (    s   /var/www/tracking/tracking.pyRÀ   <  s   	t   __main__t   hosts   0.0.0.0t   portiX  t   debug(E   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`   Rf   R{   Rp   R~   R�   RŸ   R°   R5   Rµ   R»   R¿   t   objectRÀ   t   wsgi_appt   runR4   (    (    (    s   /var/www/tracking/tracking.pyt   <module>   s^   ((				$		!
