Skip to content

Bump soupsieve from 2.10 to 4.1 - #257

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/soupsieve-4.1
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/soupsieve-4.1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Nov 13, 2026

Copy link
Copy Markdown
Contributor

Bumps soupsieve from 2.10 to 4.1.

Release notes

Sourced from soupsieve's releases.

4.1

  • NEW: Soup Sieve is now thread safe, and this is now tested, including on free-threaded Python. This is assuming read only operations on a document. Check out our documentation for more details.
  • FIX: Fix a race where compiling selectors in multiple threads at the same time could fail with a bogus syntax error or silently parse a selector incorrectly.
  • FIX: Fix issue where trailing whitespace and comments can sometimes fail to be consumed properly.
  • FIX: Fix a selector that starts with a comment followed by whitespace, such as /* comment */ div, failing with a syntax error.
  • FIX: Custom selector names should be checked with ASCII only lowercase.
  • FIX: Fix [attr=value], [attr$=value], [attr|=value], and [attr!=value] ignoring a trailing newline in the attribute value, so [type=hidden] no longer matches type="hidden&[#10](https://github.com/facelessuser/soupsieve/issues/10);".
  • FIX: Cache the language, the contenteditable state, the select of an option, and the tree that an element is in, as found from its ancestors, when matching :lang(), :read-write, :read-only, :checked, :default, and :indeterminate to avoid quadratic time on deeply nested documents.
  • FIX: Fix :lang('') not matching every element without any language information, which per the HTML spec has an empty language tag. It missed the first such element checked, or all of them when there was no head.
  • FIX: :lang() no longer matches an element whose language tag is not well-formed BCP 47 syntax, such as -, en-, en_US, or a subtag longer than 8 characters, and a language range that is not well-formed matches nothing. Previously, lang="-" matched :lang(''), and ill-formed tags matched :lang('*').
  • FIX: Fix :lang() ranges that end in a wildcard, such as en-* or *-*, never matching. As RFC 4647 extended filtering specifies, wildcards after the first subtag are ignored, so en-* matches the same as en.
  • FIX: Fix [attr*=value] and [attr$=value] taking time quadratic in the length of the value when it nearly matches a long attribute value, including when matching case insensitive.

4.0.1

  • FIX: Cache whether an element is or has a matching descendant when matching :has() to avoid quadratic time on deeply nested documents.
  • FIX: Cache whether the parent matches when matching the child combinator (a > b) so it is matched once for all of its children, avoiding quadratic time when the parent is expensive, such as div:has(> p) > span.

4.0

  • BREAK: The contents of an HTML template are no longer treated as part of the document. Selectors do not descend into a template, and elements inside one can't see beyond it, which also applies to pseudo-classes such as :lang(), :disabled, and :default. select and filter will still reach the contents of a template when they are called on the template itself, for example soup.template.select('p'). See the FAQ for more information.
  • BREAK: The contents of an iframe are no longer treated as a separate document, as they are not one in a browser. Elements in an iframe are normal children, so :root does not match them, and :default, :indeterminate, :checked, :dir(), :lang(), and :read-write treat them like any other element. Recent versions of html.parser, lxml, and html5lib all escape the contents of an iframe like a browser does, so this mostly affects XHTML, Python versions that still don't escape such content in their specific html.parser, and elements added to an iframe by hand. :-soup-contains() now also includes the escaped text in an iframe. See the FAQ for more information.
  • NEW: Update :disabled and :enabled to treat option and optgroup elements inside a disabled select as disabled, following a recent HTML specification update.
  • FIX: Fix the subsequent-sibling combinator and :has(~ ...) never matching top level elements of a fragment that has no root element, unless caching was disabled.

... (truncated)

Commits
  • f779580 Fix quadratic time with attribute matching
  • 074f5bb Fixes for ill-formed tags and wildcard ranges (#360)
  • cb33de6 Cache ancestor lookups in :lang(), :read-write and form matching (#357)
  • 911819e Update changelog
  • d6b9f5f Fix more comment/white space related issues
  • 21970f4 Make SoupSieve thread safe (#359)
  • 7146233 Fix attribute selectors ignoring a trailing newline in the value (#358)
  • 8338547 Fix regression regarding comment parsing
  • b5fa4d1 Use format strings
  • c5c2179 Custom CSS names should be check for ASCII lower case only
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.10 to 4.1.
- [Release notes](https://github.com/facelessuser/soupsieve/releases)
- [Commits](facelessuser/soupsieve@2.10...4.1)

---
updated-dependencies:
- dependency-name: soupsieve
  dependency-version: '4.1'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update python code labels Nov 13, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants