diff --git a/README.md b/README.md index 3eee40053..bad795f63 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ CHANGELOG ### 2.4.16 * Fix handling of floating-point precision near the aligned case that used to result in error from libphoebe. [#965] +* Updates to phoebe-server to be compatible with modern browser requirements. [#959] ### 2.4.15 diff --git a/client-server/phoebe-server b/client-server/phoebe-server index 881092419..d7bab43a8 100644 --- a/client-server/phoebe-server +++ b/client-server/phoebe-server @@ -97,7 +97,7 @@ import subprocess from time import sleep from collections import OrderedDict from datetime import datetime -from distutils.version import StrictVersion +from packaging.version import parse from phoebe.parameters.unit_choices import unit_choices as _unit_choices @@ -502,6 +502,12 @@ def _get_failed_constraints(b): ############################ HTTP ROUTES ###################################### +def _get_request(request): + if request.content_type == 'application/json': + return request.get_json() + else: + return request.form + def _get_response(data, status_code=200, api=False, **metawargs): d = {} d['data'] = data @@ -509,6 +515,7 @@ def _get_response(data, status_code=200, api=False, **metawargs): if api: resp = jsonify(d) resp.status_code = status_code + resp.headers.set('Content-Type', 'application/json') return resp else: return d @@ -516,7 +523,7 @@ def _get_response(data, status_code=200, api=False, **metawargs): @app.route("/info", methods=['GET', 'POST']) @crossdomain(origin='*') def info(): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -538,9 +545,9 @@ def info(): client_warning = None if client_version is not None: - if StrictVersion(client_version) < StrictVersion('1.0.0'): + if parse(client_version) < parse('1.0.0'): client_warning = 'client still in development' - elif StrictVersion(client_version) < StrictVersion('1.1.0'): + elif parse(client_version) < parse('1.1.0'): client_warning = 'client does not support adding or editing servers' @@ -576,7 +583,7 @@ def new_bundle(type): type: 'binary:detached' """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -625,7 +632,7 @@ def new_bundle(type): def open_bundle(type): """ """ - j = request.get_json() + j = _get_request(request) if j is None: j = request.form clientid = j.get('clientid', None) @@ -692,7 +699,7 @@ def open_bundle(type): def json_bundle(bundleid): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -712,7 +719,7 @@ def json_bundle(bundleid): def save_bundle(bundleid): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -738,7 +745,7 @@ def save_bundle(bundleid): @app.route('/export_script/', methods=['GET', 'POST']) @crossdomain(origin='*') def export_script(bundleid): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -776,7 +783,7 @@ def export_script(bundleid): def export_compute(bundleid, compute, model=None): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -806,7 +813,7 @@ def export_compute(bundleid, compute, model=None): def export_solver(bundleid, solver, solution=None): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -835,7 +842,7 @@ def export_solver(bundleid, solver, solution=None): def export_params(bundleid, params): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -862,7 +869,7 @@ def export_params(bundleid, params): def bundle(bundleid): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -895,7 +902,7 @@ def bundle(bundleid): def parameter(bundleid, uniqueid): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -923,7 +930,7 @@ def parameter(bundleid, uniqueid): def adjustable_parameters(bundleid): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -945,7 +952,7 @@ def adjustable_parameters(bundleid): def run_checks(bundleid, run_checks_method, label): """ """ - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -967,7 +974,7 @@ def run_checks(bundleid, run_checks_method, label): @app.route('/nparray/', methods=['GET', 'POST']) @crossdomain(origin='*') def nparray(input): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -1010,7 +1017,7 @@ def nparray(input): @app.route('/distl//', methods=['GET', 'POST']) @crossdomain(origin='*') def distl_convert(input, current_face_value): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -1047,7 +1054,7 @@ def distl_convert(input, current_face_value): @app.route("//figure/", methods=['GET', 'POST']) def serve_figure(bundleid, figure): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -1058,7 +1065,7 @@ def serve_figure(bundleid, figure): @app.route("//figure_afig/", methods=['GET', 'POST']) def serve_figure_afig(bundleid, figure): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None @@ -1069,7 +1076,7 @@ def serve_figure_afig(bundleid, figure): @app.route('//distribution_plot//', methods=['GET', 'POST']) def serve_distribution_plot(bundleid, parameter_uniqueid, distribution): - j = request.get_json() + j = _get_request(request) clientid = j.get('clientid', None) if j is not None else None client_version = j.get('client_version', None) if j is not None else None