#!/usr/bin/env python
+"""Serve a JSON API for getting/setting notmuch tags with nmbug commits."""
+
import json
import mailbox
import os
import flask
import flask_cors
+import nmbug
import notmuch
@app.route('/mid/<message_id>', methods=['GET', 'POST'])
def message_id_tags(message_id):
if flask.request.method == 'POST':
+ changes = flask.request.get_json()
+ if not changes:
+ return flask.Response(status=400)
database = notmuch.Database(
path=NOTMUCH_PATH,
mode=notmuch.Database.MODE.READ_WRITE)
return flask.Response(status=404)
database.begin_atomic()
message.freeze()
- for change in flask.request.get_json():
+ for change in changes:
if change.startswith('+'):
message.add_tag(TAG_PREFIX + change[1:])
elif change.startswith('-'):
tags = _message_tags(message=message)
finally:
database.close()
+ nmbug.commit(message='nmhive: {} {}'.format(
+ message_id, ' '.join(changes)))
elif flask.request.method == 'GET':
database = notmuch.Database(path=NOTMUCH_PATH)
try:
if __name__ == '__main__':
- app.run(host='0.0.0.0')
+ import argparse
+
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument(
+ '-H', '--host', default='127.0.0.1',
+ help='The hostname to listen on.')
+ parser.add_argument(
+ '-p', '--port', type=int, default=5000,
+ help='The port to listen on.')
+ parser.add_argument(
+ '-d', '--debug', type=bool, default=False,
+ help='Run Flask in debug mode (e.g. show errors).')
+
+ args = parser.parse_args()
+
+ app.debug = args.debug
+ app.run(host=args.host, port=args.port)