blob: 1eea631c85f0664c1775c860b600ad192d87dcc3 [file] [log] [blame]
# Copyright 2020 The LUCI Authors. All rights reserved.
# Use of this source code is governed under the Apache License, Version 2.0
# that can be found in the LICENSE file.
"""Allows recipe modules to issue warnings in simulation test."""
import inspect
from recipe_engine import recipe_api
class WarningApi(recipe_api.RecipeApiPlain):
warning_client = recipe_api.RequireClient('warning')
@recipe_api.escape_all_warnings
def issue(self, name):
"""Issues an execution warning.
`name` MAY either be a fully qualified "repo_name/WARNING_NAME" or a short
"WARNING_NAME". If it's a short name, then the "repo_name" will be
determined from the location of the file issuing the warning (i.e. if the
issue() comes from a file in repo_X, then "WARNING_NAME" will be
transformed to "repo_X/WARNING_NAME").
It is recommended to use the short name if the warning is defined in the
same repo as the issue() call.
"""
if self._test_data.enabled: # pragma: no cover
issuer_frame, issuer_file, _, _, _, _ = inspect.stack()[1]
try:
fq_name = self.warning_client.resolve_warning(name, issuer_file)
# Escapes the function that issues the warning so that we can attribute
# call site to the caller of that function.
self.warning_client.escape_frame_function(fq_name, issuer_frame)
finally:
del issuer_frame
self.warning_client.record_execution_warning(fq_name)