# Path: common/common_html.py
# def get_head(title, css = None, html5 = False):
# 
# Path: common/utils.py
# def read_file(filename):
# def write_file(filename, text):
# def save_obj(filename, data):
# def load_obj(filename):
# def sha1(filename):
# def write_sha1(sha1, filename):
# def url_opener():
# def copy_file_from_url(url, out_file, expect_sha1 = None, max_retry = 4):
# def compress_file_data(out_filename, data, compress_type):
# def compress_file(out_filename, in_filename, compress_type):
# def uncompress_file(filename, compress_type):
# def _retry_on_eintr(func, *args):
# def safe_read(fd):
# def safe_write(fd, text):
# def print_traceback(*kwargs):
# def readline_backward(filename, buf_size=8192):
# 
# Path: common/lifo_cache.py
# class LifoCacheMem(object):
# class LifoCache(LifoCacheMem):
#     def __init__(self, cache_size):
#     def get(self, key):
#     def set(self, key, data):
#     def stat_ratio(self, count, total = None):
#     def access_stat(self, as_type = None):
#     def __init__(self, cache_name, mem_cache_size = 4, disk_cache_size = 32):
#     def get(self, filename):
#     def set(self, filename, data):
#     def access_stat(self, as_type = None):
# 
# Path: common/job_queue.py
# class JobQueue:
#     def __init__(self, filename = None):
#     def put(self, *args):
#     def remove(self):
#     def get(self):
#     def copy_items(self, get_last = False):
#     def save(self, filename):
#     def empty(self):
#     def _load(self, filename):
#     def expect(func, data, *args):
#     def put_get_save_test():
#     def thread_test():
#         def thread1(jobs):
#         def thread2(jobs):
# 
# Path: common/tool_connect.py
# class ToolConnect:
#     def __init__(self, server_name, port):
#     def _ill_formed_request(self, conn, data):
#     def wait_request(self):
#     def send_text_reply(self, conn, data):
#     def send_reply(self, conn, data):
#     def close(self):


import os
import thread
import time
import hashlib
import re
import ocr
from common import common_html
from common import utils
from common import lifo_cache
from common import job_queue
from common import tool_connect
            request, conn = tools.wait_request()

            try:
                url = request.get('url', '')
                lang = request.get('lang', '')
                user = request.get('user', '')
                cmd = request['cmd']
            except:
                ret = ret_val(E_ERROR, "invalid request")
                tools.send_reply(conn, ret)
                conn.close()
                continue

            t = time.time()
            print (date_s(t) + " REQUEST " + user + ' ' + lang + ' ' + cmd + ' ' + url).encode('utf-8')

            if cmd == "ocr":
                # bypass the job queue if the ocr is cached to ensure a cached
                # ocr will be returned as soon as possible.
                text = get_from_cache(cache, url, lang)
                if text:
                    tools.send_reply(conn, ret_val(E_OK, text))
                    conn.close()
                else:
                    queue.put(url, lang, user, t, tools, conn)

                next_page_url = next_url(url)

                queue.put(next_page_url, lang, user, t, None, None)
            elif cmd == 'status':

# Path: common/common_html.py
# def get_head(title, css = None, html5 = False):
# 
# Path: common/utils.py
# def read_file(filename):
# def write_file(filename, text):
# def save_obj(filename, data):
# def load_obj(filename):
# def sha1(filename):
# def write_sha1(sha1, filename):
# def url_opener():
# def copy_file_from_url(url, out_file, expect_sha1 = None, max_retry = 4):
# def compress_file_data(out_filename, data, compress_type):
# def compress_file(out_filename, in_filename, compress_type):
# def uncompress_file(filename, compress_type):
# def _retry_on_eintr(func, *args):
# def safe_read(fd):
# def safe_write(fd, text):
# def print_traceback(*kwargs):
# def readline_backward(filename, buf_size=8192):
# 
# Path: common/lifo_cache.py
# class LifoCacheMem(object):
# class LifoCache(LifoCacheMem):
#     def __init__(self, cache_size):
#     def get(self, key):
#     def set(self, key, data):
#     def stat_ratio(self, count, total = None):
#     def access_stat(self, as_type = None):
#     def __init__(self, cache_name, mem_cache_size = 4, disk_cache_size = 32):
#     def get(self, filename):
#     def set(self, filename, data):
#     def access_stat(self, as_type = None):
# 
# Path: common/job_queue.py
# class JobQueue:
#     def __init__(self, filename = None):
#     def put(self, *args):
#     def remove(self):
#     def get(self):
#     def copy_items(self, get_last = False):
#     def save(self, filename):
#     def empty(self):
#     def _load(self, filename):
#     def expect(func, data, *args):
#     def put_get_save_test():
#     def thread_test():
#         def thread1(jobs):
#         def thread2(jobs):
# 
# Path: common/tool_connect.py
# class ToolConnect:
#     def __init__(self, server_name, port):
#     def _ill_formed_request(self, conn, data):
#     def wait_request(self):
#     def send_text_reply(self, conn, data):
#     def send_reply(self, conn, data):
#     def close(self):


# Path: ocr/ocrdaemon.py
import os
import thread
import time
import hashlib
import re
import ocr
from common import common_html
from common import utils
from common import lifo_cache
from common import job_queue
from common import tool_connect

            request, conn = tools.wait_request()

            try:
                url = request.get('url', '')
                lang = request.get('lang', '')
                user = request.get('user', '')
                cmd = request['cmd']
            except:
                ret = ret_val(E_ERROR, "invalid request")
                tools.send_reply(conn, ret)
                conn.close()
                continue

            t = time.time()
            print (date_s(t) + " REQUEST " + user + ' ' + lang + ' ' + cmd + ' ' + url).encode('utf-8')

            if cmd == "ocr":
                # bypass the job queue if the ocr is cached to ensure a cached
                # ocr will be returned as soon as possible.
                text = get_from_cache(cache, url, lang)
                if text:
                    tools.send_reply(conn, ret_val(E_OK, text))
                    conn.close()
                else:
                    queue.put(url, lang, user, t, tools, conn)

                next_page_url = next_url(url)

                queue.put(next_page_url, lang, user, t, None, None)
            elif cmd == 'status':

                html = do_status(queue)