You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by hu...@apache.org on 2019/08/09 17:32:32 UTC

svn commit: r1864826 - in /comdev/reporter.apache.org/trunk/scripts/rapp: drafts.py whimsy.py

Author: humbedooh
Date: Fri Aug  9 17:32:31 2019
New Revision: 1864826

URL: http://svn.apache.org/viewvc?rev=1864826&view=rev
Log:
Updates:
- fetch calendar from whimsy to determine which agenda in use
- better (future?) checks for partial content
- list agenda file in forgotten API

Modified:
    comdev/reporter.apache.org/trunk/scripts/rapp/drafts.py
    comdev/reporter.apache.org/trunk/scripts/rapp/whimsy.py

Modified: comdev/reporter.apache.org/trunk/scripts/rapp/drafts.py
URL: http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/scripts/rapp/drafts.py?rev=1864826&r1=1864825&r2=1864826&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/scripts/rapp/drafts.py (original)
+++ comdev/reporter.apache.org/trunk/scripts/rapp/drafts.py Fri Aug  9 17:32:31 2019
@@ -118,7 +118,8 @@ def save(environ, user):
 
 def forgotten(environ, user):
     """ Query for which TLP reports have drafts but haven't filed to agenda yet """
-    agenda, cached = rapp.whimsy.get_whimsy(rapp.whimsy.WHIMSY_AGENDA, environ)
+    which_agenda, aurl = rapp.whimsy.latest_agenda(environ)
+    agenda, cached = rapp.whimsy.get_whimsy(aurl, environ)
     drafts = sorted([x for x in os.listdir(DRAFTS_DIR) if x.startswith(EDITOR_TYPE) and x.endswith('.draft')])
     lost = {}
     for entry in agenda:
@@ -129,6 +130,7 @@ def forgotten(environ, user):
             if entry.get('report'):
                 lost[rid] = {
                     'filed': True,
+                    'agenda': which_agenda,
                     'attach': entry['attach']
                 }
             else:
@@ -150,6 +152,7 @@ def forgotten(environ, user):
                     last_author = u.replace('.draft', '')
                 lost[rid] = {
                     'filed': False,
+                    'agenda': which_agenda,
                     'has_draft': has_draft,
                     'last_draft': last_report,
                     'last_author': last_author,

Modified: comdev/reporter.apache.org/trunk/scripts/rapp/whimsy.py
URL: http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/scripts/rapp/whimsy.py?rev=1864826&r1=1864825&r2=1864826&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/scripts/rapp/whimsy.py (original)
+++ comdev/reporter.apache.org/trunk/scripts/rapp/whimsy.py Fri Aug  9 17:32:31 2019
@@ -11,8 +11,11 @@ import pdata
 import committee_info
 
 WHIMSY_SUBMIT = 'https://whimsy.apache.org/board/agenda/json/post'
-WHIMSY_AGENDA = 'https://whimsy.apache.org/board/agenda/latest.json'
+WHIMSY_AGENDA_IP = 'https://whimsy.apache.org/board/agenda/%s.json'
+WHIMSY_AGENDA_RE = r'https://whimsy\.apache\.org/board/agenda/(latest|\d+-\d+-\d+)\.json'
+
 WHIMSY_COMMENTS = 'https://whimsy.apache.org/board/agenda/json/historical-comments'
+WHIMSY_CALENDAR = 'https://whimsy.apache.org/board/agenda/calendar.json'
 
 def get_whimsy(url, env, ttl = 14400):
     cached = True
@@ -23,10 +26,13 @@ def get_whimsy(url, env, ttl = 14400):
     else:
         try:
             print("Fetching %s => %s..." % (url, wanted_file))
-            js = requests.get(url, headers = {'Authorization': env.get('HTTP_AUTHORIZATION')}, timeout = 5).json()
+            rv = requests.get(url, headers = {'Authorization': env.get('HTTP_AUTHORIZATION')}, timeout = 5)
+            js = rv.json()
             
-            # Some weaving may be required here if we're not member or chair
-            if url == WHIMSY_AGENDA and len(js) < 50 and ttl <= 3600:
+            # If we get a partial response (206), we need to weave the partial
+            # into the full object in cache.
+            if re.match(WHIMSY_AGENDA_RE, url) and (len(js) < 50 or rv.status_code == 206):
+                print("Got partial response, weaving!!")
                 try:
                     ojs = json.load(open(wanted_file))
                 except:
@@ -51,7 +57,7 @@ def get_whimsy(url, env, ttl = 14400):
                 js = ojs
             
             # Extend old cache if needed
-            elif url == WHIMSY_COMMENTS:
+            elif url == WHIMSY_COMMENTS and rv.status_code == 206:
                 try:
                     ojs = json.load(open(wanted_file))
                 except:
@@ -70,6 +76,15 @@ def get_whimsy(url, env, ttl = 14400):
     
     return js, cached
 
+def latest_agenda(environ):
+    calendar, cached = get_whimsy(WHIMSY_CALENDAR, environ)
+    latest = calendar['agendas'][-1]
+    ymd = re.match(r"board_agenda_(\d\d\d\d_\d\d_\d\d)\.txt", latest)
+    if ymd:
+        return latest, WHIMSY_AGENDA_IP % ymd.group(1).replace('_', '-')
+    else:
+        return latest, WHIMSY_AGENDA_IP % 'latest'
+
 def has_access(user, project):
     member = pdata.isASFMember(user)
     pmc = project in pdata.getPMCs(user)
@@ -88,15 +103,17 @@ def guess_title(project):
 
 def agenda_forced(environ, user):
     """ Force whimsy agenda refresh... """
-    get_whimsy(WHIMSY_AGENDA, environ, ttl = 0)
+    txtfile, url = latest_agenda(environ)
+    get_whimsy(url, environ, ttl = 0)
     return agenda(environ, user)
 
 def agenda(environ, user):
     """ Returns data on the board report for a project, IF present and/or filed in the current agenda """
     project = environ.get('QUERY_STRING')
     report = None
+    txtfile, url = latest_agenda(environ)
     if has_access(user, project):
-        agenda, cached = get_whimsy(WHIMSY_AGENDA, environ, ttl = 3600)
+        agenda, cached = get_whimsy(url, environ, ttl = 3600)
         for entry in agenda:
             ml = entry.get('mail_list') # mailing list id, usually correct
             rid = entry.get('roster', '').replace('https://whimsy.apache.org/roster/committee/', '') # ldap id per roster