From 8f251a5a0f4b9596d74ef5940345693d46572f73 Mon Sep 17 00:00:00 2001 From: Ian Fijolek Date: Mon, 5 Feb 2018 17:56:37 -0800 Subject: [PATCH] Make writes to indexer idempotent --- indexer/indexer/main.py | 42 ++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/indexer/indexer/main.py b/indexer/indexer/main.py index fe881c3..d7a2eee 100644 --- a/indexer/indexer/main.py +++ b/indexer/indexer/main.py @@ -76,18 +76,38 @@ def check(): @app.route('/token', methods=['POST']) def create_tokens(): """Creates a token from posted JSON request""" - if request.is_json: - print('Got a json request', file=sys.stderr) - print(request.get_json(), file=sys.stderr) - else: - print('Not a json request', file=sys.stderr) - print(request.get_json(force=True), file=sys.stderr) + new_token = EmailToken.from_json(request.get_json(force=True)) - token = EmailToken.from_json(request.get_json(force=True)) - db.session.add(token) - db.session.commit() - db.session.refresh(token) - return jsonify(success=True, record=token.as_dict()) + existing_token = EmailToken.query.filter_by( + token=new_token.token, + token_type=new_token.token_type, + ).first() + + print( + 'Received token with value {} and type {}'.format( + new_token.token, new_token.token_type + ), file=sys.stderr + ) + + print('Existing token? ', existing_token, file=sys.stderr) + + if not existing_token: + print('No existing token, creating a new one', file=sys.stderr) + db.session.add(new_token) + db.session.commit() + db.session.refresh(new_token) + return jsonify( + success=True, + created=True, + record=new_token.as_dict() + ) + else: + print('Found an existing token', file=sys.stderr) + return jsonify( + success=True, + created=False, + record=existing_token.as_dict() + ) @app.route('/token', methods=['GET'])