1
1
import logging
2
2
import os
3
3
4
- from flask import Flask , jsonify , request
4
+ from flask import Flask , jsonify , request , Response
5
5
from flask_caching import Cache
6
6
import polyline
7
7
@@ -64,6 +64,18 @@ def _load_config_memcache():
64
64
return config .load_config ()
65
65
66
66
67
+ @app .before_request
68
+ def handle_preflight ():
69
+ # If before_request returns a non-none value, the regular view isn't run.
70
+ # after_request() does still run though, so the CORS header and OTD version
71
+ # will be set correctly there.
72
+ if request .method == "OPTIONS" :
73
+ response = Response (status = 204 )
74
+ response .headers ["access-control-allow-methods" ] = "GET,POST,OPTIONS,HEAD"
75
+ response .headers ["access-control-allow-headers" ] = "content-type,x-api-key"
76
+ return response
77
+
78
+
67
79
@app .after_request
68
80
def apply_cors (response ):
69
81
"""Set CORs header.
@@ -84,6 +96,16 @@ def apply_cors(response):
84
96
return response
85
97
86
98
99
+ @app .after_request
100
+ def add_version (response ):
101
+ if "version" not in _SIMPLE_CACHE :
102
+ with open (VERSION_PATH ) as f :
103
+ version = f .read ().strip ()
104
+ _SIMPLE_CACHE ["version" ] = version
105
+ response .headers ["x-opentopodata-version" ] = _SIMPLE_CACHE ["version" ]
106
+ return response
107
+
108
+
87
109
class ClientError (ValueError ):
88
110
"""Invalid input data.
89
111
@@ -543,13 +565,3 @@ def get_elevation(dataset_name):
543
565
app .logger .error (e )
544
566
msg = "Unhandled server error, see server logs for details."
545
567
return jsonify ({"status" : "SERVER_ERROR" , "error" : msg }), 500
546
-
547
-
548
- @app .after_request
549
- def add_version (response ):
550
- if "version" not in _SIMPLE_CACHE :
551
- with open (VERSION_PATH ) as f :
552
- version = f .read ().strip ()
553
- _SIMPLE_CACHE ["version" ] = version
554
- response .headers ["x-opentopodata-version" ] = _SIMPLE_CACHE ["version" ]
555
- return response
0 commit comments