content: #
  # Copyright 2014 Hewlett-Packard Development Company, L.P.
  #
  # SPDX-License-Identifier: Apache-2.0
  r"""
  ============================
  B101: Test for use of assert
  ============================
  
  This plugin test checks for the use of the Python ``assert`` keyword. It was
  discovered that some projects used assert to enforce interface constraints.
  However, assert is removed with compiling to optimised byte code (`python -O`
  producing \*.opt-1.pyc files). This caused various protections to be removed.
  Consider raising a semantically meaningful error or ``AssertionError`` instead.
  
  Please see
  https://docs.python.org/3/reference/simple_stmts.html#the-assert-statement for
  more info on ``assert``.
  
  **Config Options:**
  
  You can configure files that skip this check. This is often useful when you
  use assert statements in test cases.
  
  .. code-block:: yaml
  
      assert_used:
        skips: ['*_test.py', '*test_*.py']
  
  :Example:
  
  .. code-block:: none
  
      >> Issue: Use of assert detected. The enclosed code will be removed when
         compiling to optimised byte code.
         Severity: Low   Confidence: High
         CWE: CWE-703 (https://cwe.mitre.org/data/definitions/703.html)
         Location: ./examples/assert.py:1
      1 assert logged_in
      2 display_assets()
  
  .. seealso::
  
   - https://bugs.launchpad.net/juniperopenstack/+bug/1456193
   - https://bugs.launchpad.net/heat/+bug/1397883
   - https://docs.python.org/3/reference/simple_stmts.html#the-assert-statement
   - https://cwe.mitre.org/data/definitions/703.html
  
  .. versionadded:: 0.11.0
  
  .. versionchanged:: 1.7.3
      CWE information added
  
  """
  import fnmatch
  
  import bandit
  from bandit.core import issue
  from bandit.core import test_properties as test
  
  
  def gen_config(name):
      if name == "assert_used":
          return {"skips": []}
  
  
  @test.takes_config
  @test.test_id("B101")
  @test.checks("Assert")
  def assert_used(context, config):
      for skip in config.get("skips", []):
          if fnmatch.fnmatch(context.filename, skip):
              return None
  
      return bandit.Issue(
          severity=bandit.LOW,
          confidence=bandit.HIGH,
          cwe=issue.Cwe.IMPROPER_CHECK_OF_EXCEPT_COND,
          text=(
              "Use of assert detected. The enclosed code "
              "will be removed when compiling to optimised byte code."
          ),
      )
  