github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/results-processor/test_server.py (about) 1 #!/usr/bin/env python3 2 3 # Copyright 2019 The WPT Dashboard Project. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 import argparse 8 import logging 9 import sys 10 import time 11 12 import flask 13 14 # Exported credentials for authenticated APIs 15 AUTH_CREDENTIALS = ('TEST_USERNAME', 'TEST_PASSWORD') 16 17 logging.basicConfig(level=logging.ERROR, stream=sys.stdout) 18 app = flask.Flask(__name__) 19 20 21 @app.route('/api/screenshots/upload', methods=['POST']) 22 def screenshots_upload(): 23 if 'screenshot' not in flask.request.files: 24 return ('Bad request', 400) 25 num = len(flask.request.files.getlist('screenshot')) 26 sys.stderr.write('{}\n'.format(num)) 27 sys.stderr.flush() 28 return ('Success', 201) 29 30 31 @app.route('/slow', methods=['GET']) 32 def slow(): 33 time.sleep(30) 34 return 'Done' 35 36 37 @app.route('/download/attachment', methods=['GET']) 38 def download_attachment(): 39 return flask.send_file('artifact_test.zip', 40 as_attachment=True, 41 download_name='artifact_test.zip') 42 43 44 @app.route('/download/test.txt', methods=['GET']) 45 def download_json(): 46 return 'Hello, world!' 47 48 49 @app.route('/api/status/<run_id>', methods=['PATCH']) 50 def echo_status(run_id): 51 assert flask.request.authorization.username == AUTH_CREDENTIALS[0] 52 assert flask.request.authorization.password == AUTH_CREDENTIALS[1] 53 payload = flask.request.get_json() 54 assert str(payload.get('id')) == run_id 55 sys.stderr.write(flask.request.get_data(as_text=True)) 56 sys.stderr.write('\n') 57 sys.stderr.flush() 58 return 'Success' 59 60 61 @app.route('/api/results/create', methods=['POST']) 62 def echo_create(): 63 assert flask.request.authorization.username == AUTH_CREDENTIALS[0] 64 assert flask.request.authorization.password == AUTH_CREDENTIALS[1] 65 payload = flask.request.get_json() 66 return flask.jsonify(id=payload['id']) 67 68 69 if __name__ == '__main__': 70 parser = argparse.ArgumentParser() 71 parser.add_argument('-p', '--port', required=True, type=int) 72 args = parser.parse_args() 73 app.run(port=args.port, debug=False)