Compare commits

..

No commits in common. "0cd372f6c6ca945b8fc2b8684632f9205886ec2a" and "92287547aa230b1efb51b07168dddf10ff027cdb" have entirely different histories.

View File

@ -15,27 +15,32 @@ GITEA_REPO_URL="https://git.bitmessage.org/api/v1"
combined = {}
def retrieve(token, kind):
if kind not in ("review_requested", "assigned"):
raise cherrypy.HTTPError(401, 'Unauthorized')
req = urllib.request.Request(GITEA_REPO_URL
+ f"/repos/issues/search?state=open&{kind}=true")
req.add_header("Accept", "application/json")
req.add_header("Authorization", "token " + token)
def get_combined(token):
for q in ("review_requested", "assigned"):
req = urllib.request.Request(GITEA_REPO_URL
+ f"/repos/issues/search?state=open&{q}=true")
req.add_header("Accept", "application/json")
req.add_header("Authorization", "token " + token)
retval = {}
timestamp=datetime.datetime.now()
print(f"{timestamp} Requesting and parsing {q}")
with urllib.request.urlopen(req) \
as response:
issues = json.load(response)
for issue in issues:
_id = issue['id']
if _id not in combined:
combined[_id] = issue
combined[_id]['categories'] = []
if q not in combined[_id]['categories']:
combined[_id]['categories'].append(q)
timestamp=datetime.datetime.now()
print(f"{timestamp} Done processing {q}")
return combined
with urllib.request.urlopen(req) as response:
issues = json.load(response)
for issue in issues:
_id = issue['id']
retval[_id] = issue
retval[_id]['categories'] = [kind]
return retval
def process(retrieved):
def process_combined(combined):
cal = Calendar()
for _id, issue in retrieved.items():
for _id, issue in combined.items():
todo = Todo()
todo['uid'] = _id
todo['dtstamp'] = issue['created_at']
@ -55,36 +60,24 @@ def get_token(input_token):
return token
class Root:
def _authenticate(self, kind):
@cherrypy.expose
def todo(self):
cherrypy.response.headers['WWW-Authenticate'] = \
'Basic realm="ICS access"'
cherrypy.response.headers['Content-Type'] = \
'text/calendar'
cherrypy.response.headers['Content-Disposition'] = \
f'attachment; filename="Gitea {kind}.ics"'
'attachment; filename="Gitea TODO.ics"'
authorization = cherrypy.request.headers.get('Authorization', ':')
if not authorization:
raise cherrypy.HTTPError(401, 'Unauthorized')
token = get_token(authorization)
if not token:
raise cherrypy.HTTPError(401, 'Unauthorized')
return token
@cherrypy.expose
def assigned(self):
token = self._authenticate("assigned")
retrieved = retrieve(token, "assigned")
if not retrieved:
combined = get_combined(token)
if not combined:
raise cherrypy.HTTPError(401, 'Unauthorized')
return(process(retrieved))
@cherrypy.expose
def review_requested(self):
token = self._authenticate("review_requested")
retrieved = retrieve(token, "review_requested")
if not retrieved:
raise cherrypy.HTTPError(401, 'Unauthorized')
return(process(retrieved))
return(process_combined(combined))
if __name__ == '__main__':
cherrypy.config.update({'server.socket_host': '0.0.0.0',