#!/usr/bin/env python3 # This is part of a gunicorn app (not intended for standalone use) import os import json import pdata import time import re import committee_info import rapp.bat from datetime import datetime CACHE_TIMEOUT = 14400 def run(environ, user): committers = pdata.loadJson(pdata.COMMITTER_INFO)['people'] pmcSummary = committee_info.PMCsummary() project = environ.get('QUERY_STRING') output = {'okay': False, 'error': 'Unknown user ID provided!'} dumps = {} groups = [] if user: groups = pdata.getPMCs(user) if project and user and re.match(r"[-a-z0-9]+", project): groups = [project] for xproject in groups: # Try cache first? (max 6 hours old) wanted_file = "/tmp/pdata-%s.json" % xproject if (os.path.exists(wanted_file) and os.path.getmtime(wanted_file) > (time.time() - CACHE_TIMEOUT)): mpdata = json.load(open(wanted_file, "r")) # If cache failed, generate fom scratch else: mpdata = pdata.generate(user, xproject) if not mpdata: break open(wanted_file, "w").write(json.dumps(mpdata)) # Weave results into combined object for k, v in mpdata.items(): if k not in dumps: dumps[k] = {} if k == 'email_date': dumps[k] = datetime.fromtimestamp(v).strftime("%Y-%m-%d") else: dumps[k][xproject] = v # Set personalized vars, dump if user and (dumps or pdata.isASFMember(user)): _ddata, allpmcs, _health = pdata.getProjectData() # Check for filed reports dumps['filed'] = {} for k in allpmcs: f = rapp.bat.agenda(environ, user, k) dumps['filed'][k] = f.get('filed', False) dumps['you'] = committers[user] dumps['all'] = sorted(allpmcs) dumps['pmcs'] = sorted(groups) dumps['pmcsummary'] = pmcSummary output = dumps return output