# Deprecated Features

As features are deprecated and cleaned up, they are documented here with steps to update your configuration for replacements.

## `networkidle0` and `networkidle2` for `wait_until` in browser jobs (since 2.28)

Since version 2.28, execution of browser jobs uses Playwright instead of pyppetteer.

The previously-supported `wait_until` values of `networkidle0` and `networkidle2` are not supported anymore. Playwright supports the values `load`, `domcontentloaded`, `networkidle` (discouraged) or `commit` instead.

Existing settings of `networkidle0` and `networkidle2` will be mapped to `networkidle`, and a warning will be issued. To silence the warning and continue to use `networkidle`, specify `wait_until: networkidle` explicitly.

## Filters without subfilters (since 2.22)

In older urlwatch versions, it was possible to write custom filters that do not take a `subfilter` as argument.

If you have written your own filter code like this:

    class CustomFilter(filters.FilterBase):
        """My old custom filter"""

        __kind__ = 'foo'

        def filter(self, data):
            ...

You have to update your filter to take an optional subfilter argument (if the filter configuration does not have a subfilter defined, the value of `subfilter` will be `None`):

    class CustomFilter(filters.FilterBase):
        """My new custom filter"""

        __kind__ = 'foo'

        def filter(self, data, subfilter):
            ...

## string-based filter definitions (since 2.19)

With urlwatch 2.19, string-based filter lists are deprecated, because they are not as flexible as dict-based filter lists and had some problems (e.g. `:` and `,` are treated in a special way and cannot be used in subfilters easily). If you have a filter definition like this:

    filter: css:body,html2text:re,strip

You can get the same results with a filter definition like this:

    filter:
      - css:
          selector: body
      - html2text:
          method: re
      - strip

Since `selector` is the default subfilter for `css`, and `method` is the default subfilter for `html2text`, this can also be written as:

    filter:
      - css: body
      - html2text: re
      - strip

If you just have a single filter such as:

    filter: html2text

You can change this filter to dict-based using:

    filter:
      - html2text

## keyring setting in SMTP reporter configuration (since 2.18)

Since version 2.18, the SMTP reporter configuration now uses `auth` to decide if SMTP authentication should be done or not. Previously, this setting was called `keyring`. If you have an old configuration like this:

    report:
      email:
        smtp:
          host: localhost
          keyring: false
          port: 25
          starttls: true
        subject: '{count} changes: {jobs}'

You can change the setting to this (replace `keyring` with `auth`):

    report:
      email:
        smtp:
          host: localhost
          auth: false
          port: 25
          starttls: true
        subject: '{count} changes: {jobs}'