Skip to content

Commit 9dd65f5

Browse files
author
Fabien Coelho
committed
improve documentation and spacing.
1 parent 34ae33f commit 9dd65f5

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

Diff for: FlaskTester.py

+42-2
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ class RequestFlaskResponse:
195195
"""
196196

197197
def __init__(self, response):
198+
"""Constructor parameter
199+
200+
- ``response`` from request.
201+
"""
198202

199203
self._response = response
200204
self.status_code = response.status_code
@@ -214,6 +218,11 @@ class Client:
214218
"""Common class for flask authenticated testing."""
215219

216220
def __init__(self, auth: Authenticator, default_login: str|None = None):
221+
"""Constructor parameters.
222+
223+
- ``auth`` authenticator
224+
- ``default_login`` if not ``login`` is set.
225+
"""
217226
self._auth = auth
218227
self._default_login = default_login
219228

@@ -260,18 +269,23 @@ def request(self, method: str, path: str, status: int|None = None, auth: str|Non
260269
return res
261270

262271
def get(self, path, **kwargs):
272+
"""HTTP GET request."""
263273
return self.request("GET", path, **kwargs)
264274

265275
def post(self, path, **kwargs):
276+
"""HTTP POST request."""
266277
return self.request("POST", path, **kwargs)
267278

268279
def put(self, path, **kwargs):
280+
"""HTTP PUT request."""
269281
return self.request("PUT", path, **kwargs)
270282

271283
def patch(self, path, **kwargs):
284+
"""HTTP PATCH request."""
272285
return self.request("PATCH", path, **kwargs)
273286

274287
def delete(self, path, **kwargs):
288+
"""HTTP DELETE request."""
275289
return self.request("DELETE", path, **kwargs)
276290

277291
def check(self, method: str, path: str, status: int, content: str|None = None, **kwargs):
@@ -291,6 +305,7 @@ def check(self, method: str, path: str, status: int, content: str|None = None, *
291305
# get HTTP response
292306
res = self.request(method, path, status=status, **kwargs)
293307

308+
# check contents
294309
if content is not None:
295310
if not re.search(content, res.text, re.DOTALL): # pragma: no cover
296311
log.error(f"cannot find {content} in {res.text}")
@@ -303,15 +318,23 @@ class RequestClient(Client):
303318
"""Request-based test provider."""
304319

305320
def __init__(self, auth: Authenticator, base_url: str, default_login=None):
321+
"""Constructor parameters.
322+
323+
- ``auth`` authenticator
324+
- ``base_url`` target server
325+
- ``default_login`` if not ``login`` is set.
326+
"""
306327
super().__init__(auth, default_login)
307328
self._base_url = base_url
308329
# reuse connections, otherwise it is too slow…
309330
from requests import Session
310331
self._requests = Session()
311332

312333
def _request(self, method: str, path: str, **kwargs):
313-
# ensure file upload compatibility
334+
"""Actual request handling."""
335+
314336
if "data" in kwargs:
337+
# "data" to "files" parameter transfer
315338
data = kwargs["data"]
316339
files: dict[str, Any] = {}
317340
for name, whatever in data.items():
@@ -324,39 +347,50 @@ def _request(self, method: str, path: str, **kwargs):
324347
files[name] = (file_name, file_handle, file_type)
325348
else:
326349
pass
327-
# complete "data" to "files" parameter transfer
328350
for name in files:
329351
del data[name]
330352
assert "files" not in kwargs
331353
kwargs["files"] = files
332354
# sanity
333355
assert not (files and "json" in kwargs), "cannot mix file upload and json?"
356+
334357
res = self._requests.request(method, self._base_url + path, **kwargs)
358+
335359
return RequestFlaskResponse(res)
336360

337361

338362
class FlaskClient(Client):
339363
"""Flask-based test provider."""
340364

341365
def __init__(self, auth: Authenticator, client, default_login=None):
366+
"""Constructor parameters.
367+
368+
- ``auth`` authenticator
369+
- ``client`` Flask ``test_client``
370+
- ``default_login`` if not ``login`` is set.
371+
"""
342372
super().__init__(auth, default_login)
343373
self._client = client
344374

345375
def _request(self, method: str, path: str, **kwargs):
376+
"""Actual request handling."""
346377
return self._client.open(method=method, path=path, **kwargs)
347378

348379

349380
@pytest.fixture
350381
def ft_authenticator():
351382
"""Pytest Fixture: ft_authenticator."""
383+
352384
level = os.environ.get("FLASK_TESTER_LOG_LEVEL", "NOTSET")
353385
log.setLevel(logging.DEBUG if level == "DEBUG" else
354386
logging.INFO if level == "INFO" else
355387
logging.WARNING if level == "WARNING" else
356388
logging.ERROR if level == "ERROR" else
357389
logging.CRITICAL if level == "CRITICAL" else
358390
logging.NOTSET)
391+
359392
allow = os.environ.get("FLASK_TESTER_ALLOW", "bearer basic param").split(" ")
393+
360394
# per-scheme parameters, must be consistent with FSA configuration
361395
user = os.environ.get("FLASK_TESTER_USER", "USER")
362396
pwd = os.environ.get("FLASK_TESTER_PASS", "PASS")
@@ -365,18 +399,23 @@ def ft_authenticator():
365399
header = os.environ.get("FLASK_TESTER_HEADER", "Auth")
366400
cookie = os.environ.get("FLASK_TESTER_COOKIE", "auth")
367401
tparam = os.environ.get("FLASK_TESTER_TPARAM", "AUTH")
402+
368403
# create authenticator, possibly with initial credentials
369404
auth = Authenticator(allow, user=user, pwd=pwd, login=login, bearer=bearer, header=header, cookie=cookie, tparam=tparam)
405+
370406
if "FLASK_TESTER_AUTH" in os.environ:
371407
auth.setPasses(os.environ["FLASK_TESTER_AUTH"].split(","))
408+
372409
yield auth
373410

374411

375412
@pytest.fixture
376413
def ft_client(ft_authenticator):
377414
"""Pytest Fixture: ft_client."""
415+
378416
default_login = os.environ.get("FLASK_TESTER_DEFAULT", None)
379417
client: Client
418+
380419
if "FLASK_TESTER_URL" in os.environ: # pragma: no cover
381420
app_url = os.environ["FLASK_TESTER_URL"]
382421
client = RequestClient(ft_authenticator, app_url, default_login)
@@ -392,4 +431,5 @@ def ft_client(ft_authenticator):
392431
client = FlaskClient(ft_authenticator, app.test_client(), default_login)
393432
else: # pragma: no cover
394433
raise FlaskTesterError("no Flask application to test")
434+
395435
yield client

0 commit comments

Comments
 (0)