Skip to content

Commit beb78dd

Browse files
start drafting header request changeup
1 parent 2d0ffff commit beb78dd

2 files changed

Lines changed: 32 additions & 23 deletions

File tree

mp_api/client/_server_utils.py

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,37 @@
22
from __future__ import annotations
33

44
try:
5-
import flask
5+
from flask import (
6+
has_request_context as _has_request_context,
7+
request
8+
)
69
except ImportError:
7-
from mp_api.client.core.exceptions import MPRestError
8-
9-
raise MPRestError("`flask` must be installed to use server utilities.")
10-
11-
import requests
10+
_has_request_context = None
11+
request = None
1212

1313
from mp_api.client import MPRester
1414
from mp_api.client.core.utils import validate_api_key
1515

16-
SESSION = requests.Session()
16+
def has_request_context() -> bool:
17+
"""Determine if the current context is a request.
1718
19+
Returns
20+
--------
21+
bool : True if in a request context
22+
False if flask is not installed or not in a request context.
23+
"""
24+
return _has_request_context is not None and _has_request_context()
25+
26+
def get_request_headers() -> dict[str,Any]:
27+
"""Get the headers if operating in a request context.
28+
29+
Returns
30+
--------
31+
dict of str to Any
32+
Empty dict if flask is not installed, or not in a request context.
33+
Request headers otherwise.
34+
"""
35+
return request.headers if has_request_context() else {}
1836

1937
def is_localhost() -> bool:
2038
"""Determine if current env is local or production.
@@ -24,8 +42,8 @@ def is_localhost() -> bool:
2442
"""
2543
return (
2644
True
27-
if not flask.has_request_context()
28-
else flask.request.headers.get("Host", "").startswith(
45+
if not has_request_context()
46+
else get_request_headers().get("Host", "").startswith(
2947
("localhost:", "127.0.0.1:", "0.0.0.0:")
3048
)
3149
)
@@ -37,7 +55,7 @@ def get_consumer() -> dict[str, str]:
3755
Returns:
3856
dict of str to str, the headers associated with the consumer
3957
"""
40-
if not flask.has_request_context():
58+
if not has_request_context():
4159
return {}
4260

4361
names = [
@@ -48,7 +66,7 @@ def get_consumer() -> dict[str, str]:
4866
"X-Authenticated-Groups", # groups this user belongs to
4967
"X-Consumer-Groups", # same as X-Authenticated-Groups
5068
]
51-
headers = flask.request.headers
69+
headers = get_request_headers()
5270
return {name: headers[name] for name in names if headers.get(name) is not None}
5371

5472

mp_api/client/core/client.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,7 @@
5656
validate_endpoint,
5757
validate_ids,
5858
)
59-
60-
try:
61-
import flask
62-
63-
_flask_is_installed = True
64-
except ImportError:
65-
_flask_is_installed = False
59+
from mp_api.client._server_utils import get_request_headers
6660

6761
if TYPE_CHECKING:
6862
from collections.abc import Callable, Iterable, Iterator
@@ -501,6 +495,7 @@ def _query_delta_backed(
501495
.get("meta", {})
502496
.get("total_doc", 0)
503497
)
498+
print(has_gnome_access)
504499
self.mute_progress_bars = not re_enable
505500

506501
suffix = prefix.rsplit("/")[1]
@@ -1177,17 +1172,13 @@ def _submit_request_and_process(
11771172
Returns:
11781173
Tuple with data and total number of docs in matching the query in the database.
11791174
"""
1180-
headers = None
1181-
if _flask_is_installed and flask.has_request_context():
1182-
headers = flask.request.headers
1183-
11841175
try:
11851176
response = self.session.get(
11861177
url=url,
11871178
verify=verify,
11881179
params=params,
11891180
timeout=timeout,
1190-
headers=headers if headers else self.headers,
1181+
headers=get_request_headers() or self.headers,
11911182
)
11921183
except requests.exceptions.ConnectTimeout:
11931184
raise MPRestError(

0 commit comments

Comments
 (0)