Skip to content

Commit

Permalink
Add docstrings, collapse with statements
Browse files Browse the repository at this point in the history
  • Loading branch information
jace committed Jul 28, 2023
1 parent f266b20 commit 1e5b364
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 78 deletions.
8 changes: 6 additions & 2 deletions src/baseframe/statsd.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,8 @@ def set( # noqa: A003
def pipeline(self) -> Pipeline:
return current_app.extensions['statsd_core'].pipeline()

def _request_started(self, app: Flask) -> None:
@staticmethod
def _request_started(app: Flask) -> None:
if app.config['STATSD_RATE'] != 0:
setattr(g, REQUEST_START_TIME_ATTR, time.time())

Expand Down Expand Up @@ -254,13 +255,16 @@ def _request_finished(self, app: Flask, response: Response) -> None:
# we use both: timer (via `timing`) and counter (via `incr`).
self.incr(metric_name, tags=tags)

def _before_render_template(self, app: Flask, template: Template, **kwargs) -> None:
@staticmethod
def _before_render_template(app: Flask, template: Template, **kwargs) -> None:
"""Record start time when rendering a template."""
if app.config['STATSD_RATE'] != 0:
if not hasattr(g, TEMPLATE_START_TIME_ATTR):
setattr(g, TEMPLATE_START_TIME_ATTR, {})
getattr(g, TEMPLATE_START_TIME_ATTR)[template] = time.time()

def _template_rendered(self, app: Flask, template: Template, **kwargs) -> None:
"""Calculate time to render a template and log to statsd."""
start_time = getattr(g, TEMPLATE_START_TIME_ATTR, {}).get(template)
if not start_time:
current_app.logger.warning(
Expand Down
154 changes: 78 additions & 76 deletions tests/baseframe_tests/statsd_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,103 +238,105 @@ def test_tags(app, ctx, statsd) -> None:


def test_request_handler_notags(app, statsd, view) -> None:
with patch('statsd.StatsClient.incr') as mock_incr:
with patch('statsd.StatsClient.timing') as mock_timing:
with app.test_client() as client:
client.get('/')
# First call
mock_incr.assert_any_call(
'flask_app.baseframe_tests.statsd_test.request_handlers'
'.endpoint_index.status_code_200',
1,
rate=1,
)
# Second and last call
mock_incr.assert_called_with(
'flask_app.baseframe_tests.statsd_test.request_handlers'
'.endpoint__overall.status_code_200',
1,
rate=1,
)
mock_timing.assert_called()
"""Test request_handlers logging with tags disabled."""
with patch('statsd.StatsClient.incr') as mock_incr, patch(
'statsd.StatsClient.timing'
) as mock_timing, app.test_client() as client:
client.get('/')
# First call
mock_incr.assert_any_call(
'flask_app.baseframe_tests.statsd_test.request_handlers'
'.endpoint_index.status_code_200',
1,
rate=1,
)
# Second and last call
mock_incr.assert_called_with(
'flask_app.baseframe_tests.statsd_test.request_handlers'
'.endpoint__overall.status_code_200',
1,
rate=1,
)
mock_timing.assert_called()


def test_request_handler_tags(app, statsd, view) -> None:
"""Test request_handlers logging with tags enabled."""
app.config['STATSD_TAGS'] = ','
with patch('statsd.StatsClient.incr') as mock_incr:
with patch('statsd.StatsClient.timing') as mock_timing:
with app.test_client() as client:
client.get('/')
mock_incr.assert_called_once_with(
'flask_app.request_handlers,endpoint=index,status_code=200'
',app=baseframe_tests.statsd_test',
1,
rate=1,
)
mock_timing.assert_called_once()
with patch('statsd.StatsClient.incr') as mock_incr, patch(
'statsd.StatsClient.timing'
) as mock_timing, app.test_client() as client:
client.get('/')
mock_incr.assert_called_once_with(
'flask_app.request_handlers,endpoint=index,status_code=200'
',app=baseframe_tests.statsd_test',
1,
rate=1,
)
mock_timing.assert_called_once()


def test_request_handler_disabled(app, view) -> None:
"""Test request_handlers logging disabled."""
app.config['STATSD_REQUEST_LOG'] = False
Statsd(app)
with patch('statsd.StatsClient.incr') as mock_incr:
with patch('statsd.StatsClient.timing') as mock_timing:
with app.test_client() as client:
client.get('/')
mock_incr.assert_not_called()
mock_timing.assert_not_called()
with patch('statsd.StatsClient.incr') as mock_incr, patch(
'statsd.StatsClient.timing'
) as mock_timing, app.test_client() as client:
client.get('/')
mock_incr.assert_not_called()
mock_timing.assert_not_called()


def test_render_template_notags(app, statsd) -> None:
with patch('statsd.StatsClient.incr') as mock_incr:
with patch('statsd.StatsClient.timing') as mock_timing:
with app.app_context():
render_template_string("Test template")
assert mock_incr.call_count == 2
assert mock_timing.call_count == 2
assert [c.args[0] for c in mock_incr.call_args_list] == [
'flask_app.baseframe_tests.statsd_test.render_template'
'.template__str',
'flask_app.baseframe_tests.statsd_test.render_template'
'.template__overall',
]
assert [c.args[0] for c in mock_incr.call_args_list] == [
'flask_app.baseframe_tests.statsd_test.render_template'
'.template__str',
'flask_app.baseframe_tests.statsd_test.render_template'
'.template__overall',
]
"""Test render_template logging with tags disabled."""
with patch('statsd.StatsClient.incr') as mock_incr, patch(
'statsd.StatsClient.timing'
) as mock_timing, app.app_context():
render_template_string("Test template")
assert mock_incr.call_count == 2
assert mock_timing.call_count == 2
assert [c.args[0] for c in mock_incr.call_args_list] == [

Check failure on line 299 in tests/baseframe_tests/statsd_test.py

View workflow job for this annotation

GitHub Actions / test (3.7)

test_render_template_notags AssertionError: assert ['args', 'args'] == ['flask_app.b...ate__overall'] At index 0 diff: 'args' != 'flask_app.baseframe_tests.statsd_test.render_template.template__str' Full diff: [ - 'flask_app.baseframe_tests.statsd_test.render_template.template__str', - 'flask_app.baseframe_tests.statsd_test.render_template.template__overall', + 'args', + 'args', ]
'flask_app.baseframe_tests.statsd_test.render_template.template__str',
'flask_app.baseframe_tests.statsd_test.render_template'
'.template__overall',
]
assert [c.args[0] for c in mock_incr.call_args_list] == [
'flask_app.baseframe_tests.statsd_test.render_template.template__str',
'flask_app.baseframe_tests.statsd_test.render_template'
'.template__overall',
]


def test_render_template_tags(app, statsd) -> None:
"""Test render_template logging with tags enabled."""
app.config['STATSD_TAGS'] = ','
with patch('statsd.StatsClient.incr') as mock_incr:
with patch('statsd.StatsClient.timing') as mock_timing:
with app.app_context():
render_template_string("Test template")
assert mock_incr.call_count == 1
assert mock_timing.call_count == 1
assert (
mock_incr.call_args.args[0]
== 'flask_app.render_template,template=_str,'
'app=baseframe_tests.statsd_test'
)
assert (
mock_incr.call_args.args[0]
== 'flask_app.render_template,template=_str,'
'app=baseframe_tests.statsd_test'
)
with patch('statsd.StatsClient.incr') as mock_incr, patch(
'statsd.StatsClient.timing'
) as mock_timing, app.app_context():
render_template_string("Test template")
assert mock_incr.call_count == 1
assert mock_timing.call_count == 1
assert (

Check failure on line 320 in tests/baseframe_tests/statsd_test.py

View workflow job for this annotation

GitHub Actions / test (3.7)

test_render_template_tags AssertionError: assert 'args' == 'flask_app.re...s.statsd_test' - flask_app.render_template,template=_str,app=baseframe_tests.statsd_test + args
mock_incr.call_args.args[0] == 'flask_app.render_template,template=_str,'
'app=baseframe_tests.statsd_test'
)
assert (
mock_incr.call_args.args[0] == 'flask_app.render_template,template=_str,'
'app=baseframe_tests.statsd_test'
)


def test_render_template_disabled(app, view) -> None:
"""Test render_template logging disabled."""
app.config['STATSD_RENDERTEMPLATE_LOG'] = False
Statsd(app)
with patch('statsd.StatsClient.incr') as mock_incr:
with patch('statsd.StatsClient.timing') as mock_timing:
with app.app_context():
render_template_string("Test template")
mock_incr.assert_not_called()
mock_timing.assert_not_called()
with patch('statsd.StatsClient.incr') as mock_incr, patch(
'statsd.StatsClient.timing'
) as mock_timing, app.app_context():
render_template_string("Test template")
mock_incr.assert_not_called()
mock_timing.assert_not_called()


def test_form_success(ctx, app, statsd, form) -> None:
Expand Down

0 comments on commit 1e5b364

Please sign in to comment.