Edgewall Software

Ticket #1877: frontend_v2.patch

File frontend_v2.patch, 2.8 KB (added by luciano@…, 3 years ago)

new version of the patch

  • ModPythonHandler.py

    old new  
    122122    def get(self, key, default=''): 
    123123        return util.FieldStorage.get(self, key, default) 
    124124 
     125sql_user = "SELECT COUNT(*) FROM ticket WHERE owner='%s' AND status <> 'closed'" 
     126sql_open = "SELECT COUNT(*) FROM ticket WHERE status <> 'closed'" 
     127 
     128class TempRequest: 
     129    def __init__(self, cgi, base): 
     130        self.cgi_location = cgi 
     131        self.base_url = base 
     132 
     133def get_tickets(mpr, dir, project): 
     134    t_mpr = TempRequest(mpr.cgi_location + project, mpr.base_url + project) 
     135    env_path = os.path.join(dir, project) 
     136    env = cache_get_environment(env_path, t_mpr) 
     137    db = env.get_db_cnx() 
     138    cur = db.cursor() 
     139    cur.execute(sql_open) 
     140    t_open = cur.fetchall()[0][0] 
     141    if (mpr.remote_user): 
     142            cur.execute(sql_user % mpr.remote_user) 
     143            t_user = cur.fetchall()[0][0] 
     144    else: 
     145            t_user = 0 
     146    return (t_user, t_open) 
    125147 
    126148def send_project_index(req, mpr, dir): 
    127149    req.content_type = 'text/html' 
    128150    req.write('<html><head><title>Available Projects</title></head>') 
    129151    req.write('<body><h1>Available Projects</h1><ul>') 
    130152    for project in os.listdir(dir): 
    131         req.write('<li><a href="%s">%s</a></li>' 
     153        (u, o) = get_tickets(mpr, dir, project) 
     154        req.write('<li><a href="%s">%s</a>' 
    132155                  % (href_join(mpr.idx_location, project), project)) 
     156        if o > 0: 
     157            req.write(': <a href="%s">%d</a> open' 
     158                  % (href_join(mpr.idx_location, project, 'report', '1'), o)) 
     159        if u > 0: 
     160            req.write(', <a href="%s">%d</a> yours' 
     161                  % (href_join(mpr.idx_location, project, 'report', '7'), u)) 
     162        req.write('</li>') 
    133163    req.write('</ul></body><html>') 
    134164 
    135165def open_environment(env_path, mpr): 
     
    149179env_cache = {} 
    150180env_cache_lock = threading.Lock() 
    151181 
     182def cache_get_environment(env_path, mpr): 
     183    env = None 
     184    try: 
     185        env_cache_lock.acquire() 
     186        if not env_path in env_cache: 
     187            env_cache[env_path] = open_environment(env_path, mpr) 
     188        env = env_cache[env_path] 
     189    finally: 
     190        env_cache_lock.release() 
     191    return env 
     192     
    152193def get_environment(req, mpr): 
    153194    global env_cache, env_cache_lock 
    154195    options = req.get_options() 
     
    169210            send_project_index(req, mpr, env_parent_dir) 
    170211            return None 
    171212         
    172     try: 
    173         env = None 
    174         env_cache_lock.acquire() 
    175         if not env_path in env_cache: 
    176             env_cache[env_path] = open_environment(env_path, mpr) 
    177         env = env_cache[env_path] 
    178     finally: 
    179         env_cache_lock.release() 
    180     return env 
     213    return cache_get_environment(env_path, mpr) 
    181214 
    182215def handler(req): 
    183216    mpr = ModPythonRequest(req)