Edgewall Software

Ticket #1877: frontend.patch

File frontend.patch, 2.7 KB (added by luciano@…, 3 years ago)

the patch that implements the described feature

  • ModPythonHandler.py

    diff -ur trac.o/ModPythonHandler.py trac/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 
     128def get_tickets(mpr, dir, project): 
     129    t_env = cache_get_environment(dir + "/" + project, mpr) 
     130    t_db = t_env.get_db_cnx() 
     131    t_cur = t_db.cursor() 
     132    t_cur.execute(sql_open) 
     133    t_open = t_cur.fetchall()[0][0] 
     134    if (mpr.remote_user): 
     135            t_cur.execute(sql_user % mpr.remote_user) 
     136            t_user = t_cur.fetchall()[0][0] 
     137    else: 
     138            t_user = 0 
     139    return (t_user, t_open) 
    125140 
    126141def send_project_index(req, mpr, dir): 
    127142    req.content_type = 'text/html' 
    128143    req.write('<html><head><title>Available Projects</title></head>') 
    129144    req.write('<body><h1>Available Projects</h1><ul>') 
    130145    for project in os.listdir(dir): 
    131         req.write('<li><a href="%s">%s</a></li>' 
     146        (u, o) = get_tickets(mpr, dir, project) 
     147        req.write('<li><a href="%s">%s</a>' 
    132148                  % (href_join(mpr.idx_location, project), project)) 
     149        if o > 0: 
     150            req.write(': <a href="%s">%d</a> open' 
     151                  % (href_join(mpr.idx_location, project, 'report', '1'), o)) 
     152        if u > 0: 
     153            req.write(', <a href="%s">%d</a> yours' 
     154                  % (href_join(mpr.idx_location, project, 'report', '7'), u)) 
     155        req.write('</li>') 
    133156    req.write('</ul></body><html>') 
    134157 
    135158def open_environment(env_path, mpr): 
     
    149172env_cache = {} 
    150173env_cache_lock = threading.Lock() 
    151174 
     175def cache_get_environment(env_path, mpr): 
     176    env = None 
     177    try: 
     178        env_cache_lock.acquire() 
     179        if not env_path in env_cache: 
     180            env_cache[env_path] = open_environment(env_path, mpr) 
     181        env = env_cache[env_path] 
     182    finally: 
     183        env_cache_lock.release() 
     184    return env 
     185     
    152186def get_environment(req, mpr): 
    153187    global env_cache, env_cache_lock 
    154188    options = req.get_options() 
     
    169203            send_project_index(req, mpr, env_parent_dir) 
    170204            return None 
    171205         
    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 
     206    return cache_get_environment(env_path, mpr) 
    181207 
    182208def handler(req): 
    183209    mpr = ModPythonRequest(req)