#       Licensed to the Apache Software Foundation (ASF) under one
#       or more contributor license agreements.  See the NOTICE file
#       distributed with this work for additional information
#       regarding copyright ownership.  The ASF licenses this file
#       to you under the Apache License, Version 2.0 (the
#       "License"); you may not use this file except in compliance
#       with the License.  You may obtain a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#       Unless required by applicable law or agreed to in writing,
#       software distributed under the License is distributed on an
#       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#       KIND, either express or implied.  See the License for the
#       specific language governing permissions and limitations
#       under the License.

[pytest]
# see python -W and pytest filterwarnings
# https://docs.python.org/3/using/cmdline.html#cmdoption-w
# https://docs.pytest.org/en/6.2.x/reference.html#ini-options-ref
filterwarnings =
    # https://github.com/html5lib/html5lib-python/issues/443
    ignore::DeprecationWarning:html5lib.filters.sanitizer
    # https://github.com/TurboGears/Ming/issues/48
    ignore::DeprecationWarning:ming
    # not sure why timermiddleware is surfacing pymongo warnings, but it does:
    ignore:insert is deprecated. Use insert_one or insert_many instead.:DeprecationWarning:timermiddleware
    ignore:update is deprecated. Use replace_one, update_one or update_many instead.:DeprecationWarning:timermiddleware
    ignore:remove is deprecated. Use delete_one or delete_many instead.:DeprecationWarning:timermiddleware
    # don't let us regress on this:
    error:tmpl_context.form_values:DeprecationWarning:tg.wsgiapp

    # other packages' issues:
    ignore:Deprecated call to `pkg_resources.declare_namespace:DeprecationWarning:pkg_resources
    ignore:pkg_resources is deprecated as an API:DeprecationWarning:tg.util.files
    ignore:pkg_resources is deprecated as an API:DeprecationWarning:formencode

    # py3.12
    ignore::DeprecationWarning:smtpd

    # py3.13
    ignore:'cgi' is deprecated:DeprecationWarning:webob.compat
    ignore:'cgi' is deprecated:DeprecationWarning:formencode.validators

    # https://github.com/pallets/jinja/issues/1156
    error:invalid escape sequence::jinja2.lexer

addopts = --pyargs -p no:flaky --tb=short

# our patterns are listed first:  then ".*" and following are defaults from https://github.com/pytest-dev/pytest/blob/main/src/_pytest/main.py#L52
norecursedirs = templates_responsive resources images js data docs public *.egg-info __pycache__ .* *.egg _darcs build CVS dist node_modules venv {arch}

# legacy|xunit1|xunit2
#junit_family = legacy

# no|log|system-out|system-err|out-err|all
junit_logging = all
