ó
Ë=Hdc        	   @   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 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 d  d l m Z e e  Z e  j j e  j j e   Z e   Z d e f d     YZ e e j j d	 <e j d
    Z e j  d    Z! d   Z" e j# d  d    Z$ e j# d  d    Z% e j# d  d    Z& e j# d  d    Z' e j# d  d d   Z) e j# d d d g e j# d d d g e j# d d d g d d d d     Z* e j# d d d g e j# d  d d g d d!    Z+ d"   Z, e j# d# d d g e j# d$ d d g d d d%    Z- e j# d& d d g d' d d(   Z. e j# d)  d*    Z/ e j# d+ d d g e j# d, d d g d- d.    Z0 e j# d/ d d g e j# d0 d d g e j# d1 d d g d d d2     Z1 e j# d3 d d g e j# d4 d d g d5 d6    Z2 e j# d7  d8    Z3 d9 e4 f d:     YZ5 e5 e j6  e _6 e d; k re j7 d< d= d> d? d@ e8 dA e8  n  d S(B   i˙˙˙˙N(   t   Flaskt   requestt   redirectt   url_fort   make_responset   render_template(   t   send_from_directoryt   g(   t   secure_filename(   t   BaseConverter(   t   Lockt   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/registration/registration.pyR      s    (   t   __name__t
   __module__R   (    (    (    s%   /var/www/registration/registration.pyR      s   R   c           C   s   t  j    t _ d  S(   N(   t   timeR   t   start(    (    (    s%   /var/www/registration/registration.pyt   before_request   s    c         C   s¤   t  j    t j } 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 <d	 |  j d
 <d | d |  j d <|  S(   Ns.   max-age=0, no-cache, no-store, must-revalidates   Cache-Controls   Thu, 29 Nov 1984 19:40:00t   Expiress   no-cachet   Pragmas   Run-int   CWDs   4 8 15 16 23 42s   X-LOSTs   %1.1f msič  s	   X-Runtime(
   R   R   R   t   headerst   ost   patht   dirnamet   abspatht   __file__t   getcwd(   t   responset   diff(    (    s%   /var/www/registration/registration.pyt
   add_header   s    %c          C   s&   t    }  t j j t d  |  d <|  S(   Ns!   static/database/documents.sqlite3s   documents.sqlite3(   t   dictR   R   t   joint   base(   t   c(    (    s%   /var/www/registration/registration.pyt   conf%   s    	s,   /<regex('(templates)'):head>/<path:resource>c         C   s   t  d |  S(   Ns   %s.html(   R   (   t   headt   resource(    (    s%   /var/www/registration/registration.pyt   get_template+   s    s(   /<regex('(img|css|js)'):head>/<resource>c         C   s   t  t d d |  d |  S(   Nt   statict   filenamet   /(   R   R   (   R)   R*   (    (    s%   /var/www/registration/registration.pyt
   get_static/   s    s(   /<regex('(font|fonts)'):head>/<resource>c         C   s   t  t d d d |  S(   NR,   R-   s   fonts/(   R   R   (   R)   R*   (    (    s%   /var/www/registration/registration.pyt
   get_images3   s    s   /pubkey/c           C   s   t  t j j t d  d d S(   NR,   R-   s   pubkey/key.pub(   R   R   R   R%   R&   (    (    (    s%   /var/www/registration/registration.pyt   get_public_key7   s    sb   /app/<regex('overview|registration|dates|report|statistics|notes|feedback|acknowledgment'):target>c         C   sP   d d  l  } t | j    j   } t t d d |  } | j d |  | S(   Ni˙˙˙˙s   registration.htmlt   uuidR   (   R2   t   strt   uuid4t   upperR   R   t
   set_cookie(   t   targetR2   t   my_uuidt   resp(    (    s%   /var/www/registration/registration.pyt   registration;   s
    s'   /candidate/<string:uuid>/<int:process>/t   methodst   POSTs2   /candidate/<string:uuid>/<int:kind>/<int:process>/t   GETi   i    c            sŞ  d d  l  } d d  l } d d l m } d       f d   } d d  l } d d l m }	 | j t j	  }
 |
 d }  |
 d } |  Gt j	 GHd g t
 j d	  j d
  } t j j t |  } t j j |  sä t j |  n  d | } t t j j | |  d   } | j |
 |  Wd  QX  d |
 d   } | d  k	 răd d l m } z y` t   d } | | |  \ } } } } t t j j | |  d   } | j |  Wd  QXWn" t k
 rÚ} d t |  GHn XWd  Xn  zż | |
  } d | } t t j j | |  d    } | j | d d d t Wd  QXt j j | |  GHd t j j t d  | d k rwd n d t j j | |  f } | |  d SWd  Xd  S(   Ni˙˙˙˙(   t   systemc         S   s   |  | k r | S| |  S(   N(    (   t   keyt   elt   default(    (    s%   /var/www/registration/registration.pyt   ifnullU   s    c            se   d d  l  } d d  l j j      f d   }   j d  } | |   } | j |    j |  S(   Ni˙˙˙˙c            sě    j  d  } | j d |  d  | j d |  d  | j d t |  d   | j d |  d  | j d t  d |  d    | j d t |  d   | j d	 t  d	 |  d    | j d
  d
 |  d   | j d  d |  d   | j d  d |  d   | j d  d |  d   | j d |  d  | j d |  d  | j d  d |  d   | j d t  d |  d    | j d  d |  d   | j d t |  d   | j d  d |  d   | j d  d |  d     j  d  } | j d |  d d  | j d |  d d  | j d |  d d  | j d  d |  d d   |  d d | _ | j |    j  d  } | j d |  d d  | j d |  d d  | j |  | S(    Nt   machineR2   t   serialNumbert   validt   builtOnt   partnerCodet    t	   modelCodet   intlCodet   modelt   colort   intlCodeLongt   descriptiont	   inputDatet   origint   extreft   kindi   t   shipmentt   warrantyt   purchasedOnt   documentt   addresst   namet   zipt   cityt   languaget   det   streett   transportert   id(   t   Elementt   setR3   t   textt   append(   RC   t   mt   aR'   (   t   ETRB   (    s%   /var/www/registration/registration.pyt   as_xml\   s@    """ t   machines(   t   jsont   xml.etree.ElementTreet   etreet   ElementTreeR`   Rc   (   RC   Ri   Rg   t   rootRd   (   RB   (   Rf   s%   /var/www/registration/registration.pyt   to_xmlX   s    $(   t   abortR2   RD   t   registrationss   %Y,%mt   ,s   %s.jsont   wbRV   (   t   get_document_by_names   documents.sqlite3s&   Failed to write document to database: s   %s.xmlt   encodings   UTF-8t   xml_declarations   %s -i -w %s %ss   sql/xml2sql.shi   s   -pRH   s   Ahoy, capt'n(   t
   subprocesst   shlexR   R>   Ri   t   flaskRo   t   loadsR   t   dataR   t   strftimet   splitR   R%   R&   t   existst   makedirst   opent   dumpt   Nonet	   rasterizeRs   R(   t   writet	   ExceptionR3   t   True(   R2   RR   t   processt   versionRv   Rw   R>   Rn   Ri   Ro   t   payloadt   serial_numbert   subdirt	   directoryR-   t   outfileRV   Rs   t   databaset   _t   blobt   et   xmlt   shell(    (   RB   s%   /var/www/registration/registration.pyt   post_registrationN   sN    	.


! !
!C
s:   /serial/<regex('([A-Za-z0-9]{19,19})'):serial>/<int:mode>/sC   /serial/<regex('([A-Za-z0-9]{19,19})'):serial>/<int:mode>/<int:pi>/c         C   s  d d l  m } m } d d l m } d d l m } d d l m } m	 } m
 }	 d |  | d k rj d n d	 f }
 d
 |  | |
 f } |	 |  | d k r| d k rd } d d g } t d |
  j   } t d |
 d  j | g | | g | d  n  t d d |
 d t S(   Ni˙˙˙˙(   t   callt   check_output(   R|   (   R   (   t   listdirR   R>   s   %s.%si    R   Ri   s¸   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="CALL serial_number_query('%s', 'FRE', %d);"  dfnesa > /tmp/%s
  i   s8   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
sJ   <?xml-stylesheet type="text/xsl" href="/static/xslt/repair_number.xslt"?>
sI   <?xml-stylesheet type="text/xsl" href="/static/xslt/repair_label.xslt"?>
s   /tmp/%st   ws   /tmpR-   t   as_attachment(   i    i   (   Rv   R   R   Rw   R|   Rx   R   R   R   R   R>   R   t	   readlinest
   writelinesR   t   False(   t   serialt   modet   piR   R   R|   R   R   R   R>   t   sourceR   t   vert   pisR   (    (    s%   /var/www/registration/registration.pyt   serial_number_query´   s    "
	3c         C   s3  d d l  m } m } t y| j | j | j t   d  } | j | j | j t   d  } d |  |  f } | |  d } d |  | |  f } | |  d | |  |  f } | |  d	 |  | |  f } | |  d
 | |  |  f } | |  d |  |  |  f } | |  t SWn t	 SXWd  QXd  S(   Ni˙˙˙˙(   R   R>   s   static/xslt/repair_number.xslts   static/xslt/repair_label.xsltsÓ   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6      --default-character-set=utf8      --skip-column-names      --raw      --execute="CALL serial_number_query('%s', 'FRE', 0);"      dfnesa > /tmp/%s.xml
      t   wkhtmltopdfs)   xsltproc -o /tmp/%s_1.html %s /tmp/%s.xmls{   %s -q --title NESA --page-width 62mm --page-height 25mm -L 0 -R 0 -T 0 -B 0 --print-media-type /tmp/%s_1.html /tmp/%s_1.pdfs)   xsltproc -o /tmp/%s_2.html %s /tmp/%s.xmls|   %s -q --title NESA --page-width 62mm --page-height 150mm -L 0 -R 0 -T 0 -B 0 --print-media-type /tmp/%s_2.html /tmp/%s_2.pdfsv   gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=/tmp/%s.pdf /tmp/%s_1.pdf /tmp/%s_2.pdf(
   R   R   R>   t   lockR%   R   t   realpathR   R   R   (   R   R   R>   t   xslt1t   xslt2R   t   wkhtml(    (    s%   /var/www/registration/registration.pyt   make_pdfĐ   s*    $$





s7   /pdf/<regex('([A-Za-z0-9]{19,19})'):serial>/<int:mode>/s@   /pdf/<regex('([A-Za-z0-9]{19,19})'):serial>/<int:mode>/<int:pi>/c         C   sŹ   d d l  m } m } t |   s, t d  S| d k rR t d d d |  d t S| d k r¨ | d k r| d
 GHd |  } n | d	 k r d GHd |  } n  | |  d Sd S(   Ni˙˙˙˙(   R   R>   iů  i    s   /tmpR-   s   %s.pdfR   i   s   Printing number labelsM   lpr -P QL820NWB -#2 -o media=custom_61.98x28.87mm_61.98x28.87mm /tmp/%s_1.pdfs   Printing repair labelsP   lpr -P QL720NWLOG2XL -o media=om_br-l0-c3-e09609526_61.91x149.77mm /tmp/%s_2.pdfs   Ahoy, capt'nt   Arrrr(   i    i   (   R   R   R>   RŠ   Ro   R   R   (   R   R   R   R   R>   R   (    (    s%   /var/www/registration/registration.pyt   pdfú   s    

sH   /label/<regex('([A-Za-z0-9]{19,19})'):serial>/<int:pi>/<int:resolution>/iX  c         C   sĎ   d d l  m } m } t |   s, t d  S| d k rË | d k r d GHd | |  |  f } | |  t d d	 d
 |  d t S| d k rË d GHd | |  |  f } | |  t d d	 d |  d t Sn  d S(   Ni˙˙˙˙(   R   R>   iů  i    i   s   Number labels|   gs -dQUIET -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngmono -r%d -dFirstPage=1 -dLastPage=1 -sOutputFile=/tmp/%s_1.png /tmp/%s.pdfs   /tmpR-   s   %s_1.pngR   s   Repair labels|   gs -dQUIET -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngmono -r%d -dFirstPage=2 -dLastPage=2 -sOutputFile=/tmp/%s_2.png /tmp/%s.pdfs   %s_2.pngRŞ   (   i    i   (   R   R   R>   RŠ   Ro   R   R   (   R   t
   resolutionR   R   R>   R   (    (    s%   /var/www/registration/registration.pyt   label  s    


s
   /database/c          C   sq   d d l  m }  m } d d l m } d d l m } m } d d l m	 } m
 } t t j	 j t d  d d S(	   Ni˙˙˙˙(   R   R   (   R|   (   Ro   R   (   R   R>   R,   R-   s   database/database.json(   Rv   R   R   Rw   R|   Rx   Ro   R   R   R   R>   R   R%   R&   (   R   R   R|   Ro   R   R   R>   (    (    s%   /var/www/registration/registration.pyt   json_database(  s
    s   /fetch/s   /fetch/<string:file>s   pdf$c   
      C   s   d d l  m } d d l m } d d l m } m } zÂ t |    } d j d |  } t	 j
 |  t   d } | | d d	 d
 d d d d |  d d } t d   |  }	 d j t j d  d j t d   |    } t	 j
 |  | |	  SWd  Xd  S(   Ni˙˙˙˙(   R4   (   t   dumps(   t   fetcht   document_by_names2   mosquitto_pub -h apps.axiomes.ch -t "{0}" -m "{1}"s   documents/fetchs   documents.sqlite3s   192.168.200.7t   volkmart   MDa3ZyNhULYyAt	   documentst   archivet   archivest   patternt   limiti   c         S   s(   |  \ } } } t  t d | | f   S(   NRX   t   pages(   s   names   pages(   R$   RY   (   t   .0t   xt   yt   z(    (    s%   /var/www/registration/registration.pyt   <lambda>@  s    s   documents/%Y/%m/%dRq   c         S   s   |  \ } } } | S(   N(    (   Rş   Rť   Rź   R˝   (    (    s%   /var/www/registration/registration.pyRž   E  s    (   R2   R4   Ri   RŻ   R   R°   Rą   R3   t   formatR   R>   R(   t   mapR   R{   R%   (
   t   fileR4   RŻ   R°   Rą   R2   t   ccR   t   rt   out(    (    s%   /var/www/registration/registration.pyR   1  s     *s
   /document/s   /document/<int:document_id>/s'   /document/<int:document_id>/<int:index>c         C   sH  d d l  m } m } m } d d l m } m } m } d d  l } t	   d }	 |  d  k	 ro | |	 |   }
 n | |	  }
 |
 d  k r | d  S| d  k rÂ | d |
 d d |
 d	 d
 |
 d  S| d k rń | | j |
 d  d d d t S| |	 |  |  } | d  k r| d  S| | j | d  d d | d	 d t Sd  S(   Ni˙˙˙˙(   t	   send_filet   jsonifyRo   (   t   get_document_by_idt   get_last_documentt   get_previews   documents.sqlite3i  R_   i    RX   i   Rš   i   i   t   mimetypes   application/pdfR   s   image/%s(   Rx   RĹ   RĆ   Ro   R   RÇ   RČ   RÉ   t   ioR(   R   t   BytesIOR   (   t   document_idt   indexRĹ   RĆ   Ro   RÇ   RČ   RÉ   RË   R   t   dt   p(    (    s%   /var/www/registration/registration.pyt   get_documentK  s"    
%#
s   /documents/s   /documents/<int:count>/i
   c         C   sZ   d d l  m } t   d } | | |   } t t j t d   |    } d | _ | S(   Ni˙˙˙˙(   t   get_last_documentss   documents.sqlite3c         S   s4   |  \ } } } } } t  t d | | | | f   S(   NR_   t
   created_onRX   Rš   (   s   idRÓ   s   names   pages(   R$   RY   (   Rş   Rť   Rź   R˝   t   ut   v(    (    s%   /var/www/registration/registration.pyRž   m  s    s   application/json(   R   RŇ   R(   R   Ri   RŻ   RŔ   RĘ   (   t   countRŇ   R   RĂ   R9   (    (    s%   /var/www/registration/registration.pyRŇ   f  s    !	s
   /timestampc           C   s   t  j d  S(   Ns   %Y-%m-%d %H:%M:%S%z(   R   R{   (    (    (    s%   /var/www/registration/registration.pyt	   timestamps  s    t   ReverseProxiedc           B   s   e  Z d    Z d   Z RS(   c         C   s   | |  _  d  S(   N(   t   app(   R   RŮ   (    (    s%   /var/www/registration/registration.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_NAMERH   t   SCRIPT_NAMEt	   PATH_INFOt   HTTP_X_SCHEMEs   wsgi.url_scheme(   t   gett
   startswitht   lenRŮ   (   R   t   environt   start_responset   script_namet	   path_infot   scheme(    (    s%   /var/www/registration/registration.pyt   __call__  s    

(   R   R   R   Rć   (    (    (    s%   /var/www/registration/registration.pyRŘ   |  s   	t   __main__t   hosts   0.0.0.0t   portiX  t   threadedt   debug(9   R   t   globt   reR   Ri   Rx   R    R   R   R   R   R   R   R   t   werkzeugR   t   werkzeug.routingR	   t	   threadingR
   R   RŮ   R   R   RĽ   R   R&   R¤   R   R   t
   convertersR   t   after_requestR#   R(   t   routeR+   R/   R0   R1   R   R:   R   R˘   RŠ   RŤ   R­   RŽ   R   RŃ   RŇ   R×   t   objectRŘ   t   wsgi_appt   runR   (    (    (    s%   /var/www/registration/registration.pyt   <module>   s`   <.		c	*		