o
    óªf»o  ã                   @   s¦  d dl Z 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 d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlZddlT eƒ Ze ¡ ZdadZdZg d¢ZeeƒZde_e ¡ Ze e¡ G dd„ dej ƒZ!dd„ Z"i a#	 ej$ej%dd„ ƒƒZ%ej&dd„ ƒZ'e (d¡ej)dd„ ƒƒZ*e (d¡ej(ddgddd„ ƒƒZ+ej(dedej)d d!„ ƒƒZ,e (d"¡ej(d"edej)d#d$„ ƒƒƒZ-ej(d%dgdej)d&d'„ ƒƒaej(d(edej)d)d*„ ƒƒZ.ej(d+edej)d,d-„ ƒƒZ/ej(d.edej)d/d0„ ƒƒZ0ej(d1edej)d2d3„ ƒƒZ1ej(d4edej)d5d6„ ƒƒZej(d7edej)d8d9„ ƒƒZ2e (d:¡d;d<„ ƒZ3ed=krQej4d>d?d@dA dS dS )Bé    N)ÚFlask)Úrequest)Úurl_for)Úsession)Úredirect)Ú	Blueprint)Úmake_response)Úrender_template)Újsoné   )Ú*)	ÚGETÚHEADÚPOSTÚPUTÚDELETEÚCONNECTÚOPTIONSÚTRACEÚPATCHÚ
GkvT9KKu45c                   @   s   e Zd ZdS )ÚUserN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/srv/python/dtodm/dtodm.pyr   (   s    r   c                 C   ó   d S ©Nr   )Úmsgr   r   r   Úexc_handler+   s   r    c                 C   sf  t ƒ atj}td|ƒ tj d¡}d |kd|k@ rt ¡ }| 	dd| 
¡ i¡}| ¡ }t ¡  |d krYd at ¡  t}t|jƒ tttdƒƒƒ}|jddd td	|ƒ d
|ian(|d t_|d t_|d  d¡t_| 	d¡}tjtdd tdttƒƒ nd ad tkr¥| 	d¡ | ¡ td< | 	d|d td d dœ¡ | ¡ td< tjjtd< tjjtd< tS )NÚIPÚdthashÚ at  
            SELECT DISTINCT
                "users"."users_id",
                "login",
                "fullname",
                "loghash",
                (SELECT group_concat("code", '|') FROM (SELECT "code" FROM "users_roles" LEFT JOIN "roles" ON "users_roles"."roles_id"="roles"."roles_id" WHERE "users_roles"."users_id"="users"."users_id" )) AS "acclevel"
            FROM
                "users"
                LEFT JOIN "users_roles" ON "users"."users_id"="users_roles"."users_id"
                LEFT JOIN "roles" ON "users_roles"."roles_id" = "roles"."roles_id"
            WHERE
                "loghash" = :hashÚhashÚloginr   ©Úexpireszr:ÚluserÚusers_idÚfullnameÚacclevelú|zSELECT * FROM "users_roles" T)ÚforcezuzivLogged: aT  
            SELECT
                "name",
                "obd",
                "opened"
            FROM
                "org" LEFT JOIN
                "org_stav" ON "org"."org_id"="org_stav"."org_id"
            WHERE
                "org_stav"."active" = 1
            ORDER BY
                "obd" DESC
            LIMIT 1
        Úorgaô  
            SELECT
                "utv"."utvar" AS "utvar",
                "utv"."utvart" AS "utvart",
                "utv_stav"."obd" AS "obd",
                "utv_stav"."opened" AS "opened"
            FROM
                "utv" LEFT JOIN "utv_stav" ON "utv"."utvar_id"="utv_stav"."utvar_id"
            WHERE
                "utv"."utvar" IN (
                    SELECT "utvar" FROM "user_utv" WHERE "id_users"=:id_users
                )
                AND "utv_stav"."obd" = :obd
        Úobd)Úid_usersr/   ÚuserutvÚstrftimeÚstrptime) r   Úuserr   Úremote_addrÚprintÚcookiesÚgetÚdbÚcursorÚexecuteÚstripÚfetchoneÚcommitr   ÚclearÚ__dir__r   r   r   Ú
set_cookieÚctxÚidr*   Úsplitr+   Úflask_loginÚ
login_userÚvarsÚfetchallÚdatetimer2   r3   )ÚvvÚipÚ	user_hashÚcurÚresÚusrÚsÚrr   r   r   Úuser_loader8   sR   
ÿó

ÿ




þórR   c                   C   s    t jdkr
ttjƒ ttdƒƒS )NÚapir%   )r   Ú	blueprintÚabortÚ
HTTPStatusÚUNAUTHORIZEDr   r   r   r   r   r   Úunauthorized˜   s   

rX   z/logoutc                  C   s^   t dttƒd ƒ t ¡ } |  ddttƒd i¡}t ¡  ttt	dƒƒƒ}|j
dddd	 |S )
NÚuserlrC   z5UPDATE "users" SET "loghash"='' WHERE "users_id"=:uidÚuidr%   r"   r#   r   r&   )r6   rG   r4   r9   r:   r;   r>   r   r   r   rA   )rM   rN   rQ   r   r   r   Úlogoutž   s   ÿÿr[   z/loginr   )Úmethodsc                  C   sd  t dƒ dtjkdtj d¡k@ dtj d¡k@ r®t dƒ t ttj d¡ ¡ ƒ 	¡ tj d¡ ¡   
¡ ¡ ¡ } t dttj d¡ ¡ ƒ 	¡ ƒ t d| ƒ t ¡ }| dtj d¡ ¡  	¡ | dœ¡}t |ƒ | ¡ }t d	|ƒ d |kr®t ttj ¡  ¡ ƒ 
¡ ¡ ¡ }t d
|ƒ | dtj d¡ ¡  	¡ | |dœ¡ t ¡  tttdƒƒƒ}|jd|d |S tdƒS )Nr%   r   r#   ÚusernameÚpwdÚheslozISELECT * FROM "users" WHERE LOWER("login") = :login AND "password" = :pwd)r%   r^   Úuzivr$   zVUPDATE "users" SET "loghash"=:hash WHERE LOWER("login") = :login AND "password" = :pwd)r%   r^   r$   Úhomer"   )Úvaluez
login.html)r6   r   ÚmethodÚformr8   ÚhashlibÚsha512Ústrr<   ÚlowerÚencodeÚ	hexdigestr9   r:   r;   r=   rI   ÚnowÚ	timestampr>   r   r   r   rA   r	   )r^   rM   rN   r4   r$   r   r   r   r%   ­   s8   *6
þ
 
ýÿr%   z	/admusersc               
   C   sv  t dƒ dtdœ} t ¡ }dtjkrød| d< d tj d¡kdtj d¡kB rVt tj d	¡ƒ t tj d
¡ƒ tj d¡ | dtj d	¡tj d¡tj d¡dœ¡ |j	}n t
tj d¡ƒ}| dtj d	¡tj d¡tj d¡|dœ¡ 	 t ¡  d tj d
¡kdttj d
¡ƒ ¡ k@ rÈ| dt ttj d	¡ƒ ¡ tj d
¡  ¡ ¡ ¡ t ttj d¡ƒtj d	¡ ¡  tj d
¡  ¡ ¡ ¡ |dœ¡ tj d¡}t |ƒ | dd|i¡ |D ]}| d||dœ¡ qÜt ¡  tttdt|ƒdƒƒS dtjkrŠt dƒ d tjjdtdkr;d| d< | ddtjjdt
di¡ | ¡ | d< t d| ƒ dd„ | d d  d ¡D ƒ| d< nOd tjjd!tdkrwt d"tjjd!t
dƒ dtjjd!t
di}t d#|ƒ | d$|¡ | d%|¡ | d&|¡ t ¡  nd tjjd'tdkrŠd| d< i | d< | d(¡ | ¡ | d)< t ¡  d| d kr¥| d*¡ | ¡ | d+< t ¡  t d| ƒ td-i | ¤ŽS ).NÚadmusersÚlist©Úakcr(   r   Úeditrp   r)   r#   r%   r^   rZ   zNINSERT INTO "users"("login","uid","fullname") VALUES (:login, :uid, :fullname)r*   )r%   rZ   r*   zä
                UPDATE "users" SET
                    "uid" = :uid,
                    "login" = :login,
                    "fullname" = :fullname
                WHERE
                    "users_id" = :users_id
            )r%   rZ   r*   r)   zÂ
                UPDATE "users" SET
                    "password" = :password,
                    "oauth" = :oauth
                WHERE
                    "users_id" = :users_id
            )ÚpasswordÚoauthr)   r+   z4DELETE FROM "users_roles" WHERE "users_id"=:users_idzNINSERT INTO "users_roles"("users_id","roles_id") VALUES (:users_id, :roles_id))r)   Úroles_id)rq   r   r8   ©Útypea  
                SELECT
                    "users_id",
                    "login",
                    "uid",
                    "fullname", 
                    (SELECT group_concat("roles_id", ',') FROM (SELECT "roles"."roles_id" FROM "users_roles" LEFT JOIN "roles" ON "users_roles"."roles_id"="roles"."roles_id" WHERE "users_roles"."users_id"="users"."users_id" )) AS "acclevel"
                FROM
                    "users"
                WHERE
                    "users_id"=:users_id
                LIMIT 1
            ÚeuserrB   c                 S   s   g | ]}t |ƒ‘qS r   )Úint)Ú.0Úxr   r   r   Ú
<listcomp>'  s    zadmusers.<locals>.<listcomp>ú,Údeletezdelete:Úiduz1DELETE FROM "user_utv" WHERE "users_id"=:users_idz4DELETE FROM "users_roles" WHERE "users_id=:users_id"z.DELETE FROM "users" WHERE "users_id"=:users_idÚadda  
        SELECT
            "users_id",
            "login",
            "uid",
            "fullname", 
            (SELECT group_concat("title", ',') FROM (SELECT "title" FROM "users_roles" LEFT JOIN "roles" ON "users_roles"."roles_id"="roles"."roles_id" WHERE "users_roles"."users_id"="users"."users_id" )) AS "acclevel"
        FROM
            "users"
        ORDER BY
            "uid"
        Úulistz¦
            SELECT
                "roles_id",
                "title"
            FROM
                "roles"
            ORDER BY
                "title"
        Úrolesúadmusers.html)r‚   )r6   r4   r9   r:   r   rc   rd   r8   r;   Ú	lastrowidrx   r>   rg   r<   re   rf   rh   ri   rj   Úgetlistr   r   r   Úargsr=   rD   rH   r	   )rB   rM   ÚedtIdÚaccÚroleAccr~   r   r   r   rm   Ð   sž   þ
 


ýÿ


üù(,8ýúÿ
þÿó
"ÿ



	
rm   ú/c                  C   s~   t dƒ t ¡ } dtd< dtjv r|  ddtd d i¡ |  ¡ td< t d	tjƒ t d
tjƒ t dtd d ƒ t	di t¤ŽS )Nra   rn   rp   ÚHMUa  
            SELECT
                "utv"."utvar_id" AS "utvar_id",
                "utv"."utvar" AS "utvar",
                "utv"."utvart" AS "utvart",
                "utv_stav"."obd" AS "obd",
                "utv_stav"."opened" AS "opened"
            FROM
                "utv_stav" LEFT JOIN "utv" ON "utv"."utvar_id"="utv_stav"."utvar_id"
            WHERE
                "utv_stav"."obd" = :obd
        r/   r.   ÚutvstavÚrrÚriÚopÚopenedú	home.html)r   )
r6   r9   r:   rB   r4   r+   r;   rH   rC   r	   )rM   r   r   r   ra   R  s   
ÿõra   z/userc                   C   r   r   r   r   r   r   r   r4   o  s   r4   z/f50c               	   C   sÚ   t tƒ} tjt_dd dœ}t ¡ }dtjkr	 | 	dd| d i¡ | 
¡ |d< | 	dd| d i¡ | 
¡ |d	< | 	dd| d i¡ g }| 
¡ D ]}| |d
 |d |d |d |d dœ¡ qGt |¡|d< tdi |¤ŽS )Nrn   )rp   Úfilterr   aI  SELECT
            * 
        FROM
            "prac"
        WHERE 
            "utvar" IN (
                SELECT
                    "utvar"
                FROM
                    "user_utv"
                WHERE
                    "id_users" = :users_id
            )
        ORDER BY
            "oscis","cicin"
        r)   rC   Úplistaœ  
        SELECT
            *
        FROM
            "operace"
        WHERE
            "utvar_id" IN (
                SELECT
                    "utv"."utvar_id"
                FROM
                    "user_utv"
					LEFT JOIN "utv" ON "utv"."utvar"="user_utv"."utvar"
                WHERE
                    "user_utv"."id_users" = :users_id
            )
        ORDER BY
            "operace_id"
    ÚopsÚ
operace_idÚoperacetÚnormocasÚtarifjedÚ	prostredi)r”   Útitler–   r—   r˜   Úoplistúf50.html)r›   )rG   r4   Úsqlite3ÚRowr9   Úrow_factoryr:   r   rc   r;   rH   Úappendr
   Údumpsr	   )rO   rB   rM   ÚdrQ   r   r   r   Úf50u  sF   þ
ÿðÿïÿïûÿ	r¢   z/tutvc            
   
   C   s^  dt dœ} t ¡ }tjdkr|tjr{tjd }tj t	|j
¡}| tj t	|j
¡¡ t |¡}|d }i }d}| d|j¡D ]}|||d j< |d7 }q=|jdd	D ] }	t|	|d
  jƒ | d|	|d  jd d |	|d  jdœ¡ qQt ¡  t |¡ n!dtjkrd tjjdtdkr| ddtjjdtdi¡ t ¡  | d¡ | ¡ | d< tdi | ¤ŽS )Nrn   ro   r   ÚimpfileÚtklcxr   r   é   ©Úmin_rowÚutvaraÇ  
                    INSERT INTO "utv"("utvar","zapl","kopl","utvart")
                    VALUES(:utvar, :zapl, :kopl, :utvart)
                    ON CONFLICT ("utvar")
                    DO
                        UPDATE SET
                            "zapl" = :zapl,
                            "kopl" = :kopl,
                            "utvart" = :utvart
                        WHERE
                            "utvar" = :utvar
                ÚpracvÚpracvt)r¨   ÚzaplÚkoplÚutvartr   r}   ru   z'DELETE FROM "utv" WHERE "utvar_id"=:kodÚkodz>SELECT "utvar_id","utvar","utvart" FROM "utv" ORDER BY "utvar"Útutvú	tutv.html)r°   )r4   r9   r:   r   rc   ÚfilesÚosÚpathÚjoinÚtmpDirÚfilenameÚsaveÚopenpyxlÚload_workbookÚ	iter_colsÚ
max_columnrb   Ú	iter_rowsr6   r;   r>   Úremover…   r8   rg   rx   rH   r	   ©
rB   rM   Úuploaded_fileÚfnÚwbÚwsÚColNamesÚCurrentÚCOLÚrowsr   r   r   r¯   Î  sJ   þ



üõ
€
ÿ
r¯   z/todmc            
      C   sv  ddi} t  ¡ }tjdkrˆtjr‡tjd }tj t|j	¡}| 
tj t|j	¡¡ t |¡}|d }i }d}| d|j¡D ]}|||d j< |d7 }q<|jdd	D ]-}	| d
|	|d  j|	|d  j|	|d  j|	|d  j|	|d  j|	|d  jdœ¡ qPt  ¡  t |¡ n!dtjkr©d tjjdtdkr©| ddtjjdtdi¡ t  ¡  | d¡ | ¡ | d< tdi | ¤ŽS )Nrp   rn   r   r£   Útodmr   r   r¥   r¦   a6  
                    INSERT INTO "todm"("kod","zapl","kopl","sazba","sazbap","kodt")
                    VALUES(:kod, :zapl, :kopl, :sazba, :sazbap, :kodt)
                    ON CONFLICT ("kod")
                    DO
                        UPDATE SET
                            "zapl" = :zapl,
                            "kopl" = :kopl,
                            "sazba" = :sazba,
                            "sazbap" = :sazbap,
                            "kodt" = :kodt
                        WHERE
                            "kod" = :kod
                r®   r«   r¬   ÚsazbaÚsazbapÚkodt)r®   r«   r¬   rÈ   rÉ   rÊ   r   r}   ru   z#DELETE FROM "todm" WHERE "kod"=:kodz?SELECT "kod","sazba","sazbap","kodt" FROM "todm" ORDER BY "kod"ú	todm.html)rË   )r9   r:   r   rc   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   rb   r¼   r;   r>   r½   r…   r8   rg   rx   rH   r	   r¾   r   r   r   rÇ     sJ   ÿ



úó
€
ÿ
rÇ   z/ukonyc                  C   s”  t tƒ} t ¡ }ddi}d tjjdtdkrV| dd| d i¡ | 	¡ }d |d kr-i }n	|d  
¡  d	¡}td
|ƒ d| d v sKtjjdtd|v rUtjjdtd|d< ntttdƒƒƒS dtjkrNtjrÑtjjdtd}tjd }tj t|j¡}| tj t|j¡¡ tjt|dddddd}t|d ƒ |D ]+}	t|	ƒ | d||	d t|	d ƒt|	d ƒt|	d ƒ|	d  dd¡ dd¡d œ¡ q›t ¡  t |¡ n×d tj jd!tdkrMtj jd"t!dtj jd!tdtj jd#tdtj jd$tdtj jd%tdtj jd&tdtj jd'tdd(œ}
d)tj jd*t!d "¡ kr"d |
d*< n
tj jd*td|
d*< | d+|
¡ t ¡  tttd,tj jd!tdtj jd#tdd-ƒƒS nZd tjjd.tdkrk| d/|d tjjd.tdd0œ¡ n=d tjjd1tdkr¨| d2tjjdtdtjjd1tdd0œ¡ | 	¡ |d3< t|ƒ | d4¡ | #¡ |d5< t ¡  d1|d< d|d krÃ| d6d#tjjdtdi¡ | #¡ |d7< t$d9i |¤ŽS ):Nrp   rn   Úutvru   ag  
            SELECT group_concat("utvar", '|')  AS "utvary" FROM (SELECT
                "user_utv"."utvar" As "utvar"
            FROM
                "user_utv"
                LEFT JOIN "utv" ON "user_utv"."utvar"="utv"."utvar"
            WHERE
                "user_utv"."id_users" = :users_id
            ORDER BY
                "utv"."utvar")
        r)   rC   Úutvaryr,   zutvary prihl. uzivatele: ÚADMINr+   r‰   r   r£   rQ   ÚIBM852)Úencodingr|   ú')Ú	delimiterÚ	quotecharaŒ  
                    INSERT INTO "operace"(
                        "operace_id","utvar_id","normocas","tarifjed","prostredi","operacet", "kododm", "genodm"
                    ) VALUES (
                        :operace_id,:utvar_id, :normocas, :tarifjed, :prostredi, :operacet, 10, 0
                    ) ON CONFLICT ("operace_id","utvar_id") DO UPDATE SET
                        "normocas" = :normocas,
                        "tarifjed" = :tarifjed,
                        "prostredi" = :prostredi,
                        "operacet" = operacet,
                        "kododm" = 10,
                        "genodm" = NULL
                    r   r   r¥   é   é   z\,z, ú;r#   )Úutvar_idr”   r–   r—   r˜   r•   r”   r•   r×   r–   r—   r˜   Úkododm)r•   r”   r×   r–   r—   r˜   rØ   ÚnullÚgenodma§  
                UPDATE "operace" SET
                    "operacet" = :operacet,
                    "normocas" = :normocas,
                    "tarifjed" = :tarifjed,
                    "prostredi" = :prostredi,
                    "kododm" = :kododm,
                    "genodm" = :genodm
                WHERE
                    "operace_id" = :operace_id
                    AND "utvar_id" = :utvar_id
            Úukony)rq   rÌ   r}   zMDELETE FROM "operace" WHERE "utvar_id"=:utvar_id AND "operace_id"=:operace_id)r×   r”   rq   z«SELECT "operacet", "normocas", "tarifjed", "prostredi", "operace_id", "utvar_id", "kododm", "genodm" FROM "operace" WHERE "utvar_id"=:utvar_id AND "operace_id"=:operace_idÚeopz/SELECT "kod", "kodt" FROM "todm" ORDER BY "kod"ÚodmlistzSELECT "operacet", "normocas", "tarifjed", "prostredi", "operace_id", "utvar_id" FROM "operace" WHERE "utvar_id"=:utvar_id ORDER BY "operace_id"rš   ú
ukony.html)rÞ   )%rG   r4   r9   r:   r   r…   r8   rx   r;   r=   r<   rD   r6   r   r   r   rc   r±   r²   r³   r´   rµ   r¶   r·   ÚcsvÚreaderÚopenÚnextÚfloatÚreplacer>   r½   rd   rg   rh   rH   r	   )rO   rM   rB   rN   r1   rÌ   r¿   rÀ   ÚfrÚlineÚar   r   r   rÛ   ;  sž   ÿÿö
 €




úôù	
õ.å
þþ
ÿrÛ   z/userutvc                  C   sª  ddi} t  ¡ }dtjkrNd tj d¡kr6d tj d¡kr6| dtjjdtdtjjdtddœ¡ t  ¡  tj	jdtd| d< t
ttd	t| d ƒd
ƒƒS dtjkr—d tj	jdtdkr€d tj	jdtdkr€| dtj	jdtdtj	jdtddœ¡ t  ¡  tj	jdtd| d< d| d kr–ttdƒƒS nttdƒƒS | dd| d i¡ |j| d< d| d i}| d|¡ | ¡ | d< | d|¡ | ¡ | d< t  ¡  tdi | ¤ŽS )Nrp   rn   r   rw   r¨   zDINSERT INTO "user_utv"("id_users","utvar") VALUES (:id_users,:utvar)ru   )r0   r¨   r1   )rw   r   r}   zCDELETE FROM "user_utv" WHERE "id_users"=:user_id AND "utvar"=:utvar)Úuser_idr¨   r   z/usersz9SELECT "fullname" FROM "users" WHERE "users_id"=:users_idr)   Ú	eusernameaH  
        SELECT
            "utvar_id",
            "utvar",
            "utvart"
        FROM
            "utv"
        WHERE
            "utv" NOT IN (
                SELECT "utv" FROM "user_utv" WHERE "user_utv"."utvar" = "utv"."utvar"  AND "user_utv"."id_users"= :users_id
            )
        ORDER BY
            "utvar"r¯   a  
        SELECT
            "user_utv"."utvar",
            "utv"."utvart"
        FROM
            "user_utv"
            LEFT JOIN "utv" ON "user_utv"."utvar"="utv"."utvar"
        WHERE
            "user_utv"."id_users" = :users_id
        ORDER BY
            "utv"."utvar"
    Úselutvúuserutv.html)rë   )r9   r:   r   rc   rd   r8   r;   rx   r>   r…   r   r   r   rg   r=   rH   r	   )rB   rM   Úuselectr   r   r   r1   ¯  sP   ÿ
 þ
(þÿÿ
ÿôõr1   z/tpracc            
      C   sP  t  ¡ } ddi}tjdkr’tjr’tjd }tj t|j	¡}| 
tj t|j	¡¡ t |¡}|d }i }d}| d|j¡D ]}|||d j< |d7 }q<|jdd	D ]8}	t|	|d
  jƒ |  d|	|d  j|	|d  j|	|d
  j|	|d  jtt|	|d  jƒ dd¡ƒdœ¡ qPt  ¡  t |¡ |  d¡ |  ¡ |d< t  ¡  tdi |¤ŽS )Nrp   rn   r   r£   Úf5yr   r   r¥   r¦   r©   a•  
                    INSERT INTO "prac"("oscis","cicin","utvar","prijm","tarif")
                    VALUES(:oscis,:cicin,:utvar,:prijm,:tarif)
                    ON CONFLICT ("oscis","cicin")
                    DO
                        UPDATE SET
                            "utvar" = :utvar,
                            "prijm" = :prijm,
                            "tarif" = :tarif
                ÚoscisÚcicinÚprijmr|   Ú.)rî   rï   r¨   rð   Útarifz‚
        SELECT
            *
        FROM
            "prac"           
        ORDER BY
            "utvar","oscis","cicin"
    r’   ú
tprac.html)ró   )r9   r:   r   rc   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   rb   r¼   r6   r;   rã   rg   rä   r>   r½   rH   r	   )
rM   rB   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   r   r   r   Útpracñ  s>   ÿ




û÷

rô   z/errorc                  C   s&   t jd td dœ} d}tdi | ¤ŽS )NÚmessages)r   Úmsg_sesr#   ú
error.html)r÷   )r   r…   r   r	   )rB   r   r   r   r   Úerror&  s
   þrø   Ú__main__z0.0.0.0i  F)ÚhostÚportÚdebug)5rß   re   rI   Úopenpyxl.worksheetr¸   ÚrequestsÚflaskr   r   r   r   r   r   r   r	   r
   rE   r#   ÚopenDBr9   r:   rM   r4   r1   r.   ÚHTTP_METHODSr   ÚappÚ
secret_keyÚLoginManagerÚlogin_managerÚinit_appÚ	UserMixinr   r    rB   Úrequest_loaderrR   Úunauthorized_handlerrX   ÚrouteÚlogin_requiredr[   r%   rm   ra   r¢   r¯   rÇ   rÛ   rô   rø   Úrunr   r   r   r   Ú<module>   s–    
^
!W45r@3

ÿ