Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-cssselect2 for
openSUSE:Factory checked in at 2026-02-17 16:37:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-cssselect2 (Old)
and /work/SRC/openSUSE:Factory/.python-cssselect2.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cssselect2"
Tue Feb 17 16:37:55 2026 rev:10 rq:1333412 version:0.9.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-cssselect2/python-cssselect2.changes
2025-03-21 20:21:42.224966422 +0100
+++
/work/SRC/openSUSE:Factory/.python-cssselect2.new.1977/python-cssselect2.changes
2026-02-17 16:39:11.910980915 +0100
@@ -1,0 +2,7 @@
+Mon Feb 16 17:12:22 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.9.0:
+ * Drop support of Python 3.9, support 3.14
+ * Support :host
+
+-------------------------------------------------------------------
Old:
----
cssselect2-0.8.0.tar.gz
New:
----
cssselect2-0.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-cssselect2.spec ++++++
--- /var/tmp/diff_new_pack.IOXFyq/_old 2026-02-17 16:39:12.495005329 +0100
+++ /var/tmp/diff_new_pack.IOXFyq/_new 2026-02-17 16:39:12.495005329 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-cssselect2
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%define skip_python2 1
%{?sle15_python_module_pythons}
Name: python-cssselect2
-Version: 0.8.0
+Version: 0.9.0
Release: 0
Summary: CSS selectors for Python ElementTree
License: BSD-3-Clause
++++++ cssselect2-0.8.0.tar.gz -> cssselect2-0.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/.github/workflows/release.yml
new/cssselect2-0.9.0/.github/workflows/release.yml
--- old/cssselect2-0.8.0/.github/workflows/release.yml 2025-03-05
15:35:04.000000000 +0100
+++ new/cssselect2-0.9.0/.github/workflows/release.yml 2026-02-12
18:12:31.000000000 +0100
@@ -2,7 +2,7 @@
on:
push:
tags:
- - *
+ - '*'
jobs:
pypi-publish:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/.github/workflows/tests.yml
new/cssselect2-0.9.0/.github/workflows/tests.yml
--- old/cssselect2-0.8.0/.github/workflows/tests.yml 2025-03-05
15:35:04.000000000 +0100
+++ new/cssselect2-0.9.0/.github/workflows/tests.yml 2026-02-12
18:12:31.000000000 +0100
@@ -8,12 +8,12 @@
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
- python-version: ['3.13']
+ python-version: ['3.14']
include:
- os: ubuntu-latest
- python-version: '3.9'
+ python-version: '3.10'
- os: ubuntu-latest
- python-version: 'pypy-3.10'
+ python-version: 'pypy-3.11'
steps:
- uses: actions/checkout@v4
with:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/README.rst
new/cssselect2-0.9.0/README.rst
--- old/cssselect2-0.8.0/README.rst 2025-03-05 15:35:04.000000000 +0100
+++ new/cssselect2-0.9.0/README.rst 2026-02-12 18:12:31.000000000 +0100
@@ -3,7 +3,7 @@
(including cElementTree, lxml, html5lib, etc.)
* Free software: BSD license
-* For Python 3.9+, tested on CPython and PyPy
+* For Python 3.10+, tested on CPython and PyPy
* Documentation: https://doc.courtbouillon.org/cssselect2
* Changelog: https://github.com/Kozea/cssselect2/releases
* Code, issues, tests: https://github.com/Kozea/cssselect2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/cssselect2/__init__.py
new/cssselect2-0.9.0/cssselect2/__init__.py
--- old/cssselect2-0.8.0/cssselect2/__init__.py 2025-03-05 15:35:04.000000000
+0100
+++ new/cssselect2-0.9.0/cssselect2/__init__.py 2026-02-12 18:12:31.000000000
+0100
@@ -13,7 +13,7 @@
from .parser import SelectorError # noqa
from .tree import ElementWrapper # noqa
-VERSION = __version__ = '0.8.0'
+VERSION = __version__ = '0.9.0'
class Matcher:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/cssselect2/compiler.py
new/cssselect2-0.9.0/cssselect2/compiler.py
--- old/cssselect2-0.8.0/cssselect2/compiler.py 2025-03-05 15:35:04.000000000
+0100
+++ new/cssselect2-0.9.0/cssselect2/compiler.py 2026-02-12 18:12:31.000000000
+0100
@@ -279,7 +279,7 @@
'focus-visible', 'target', 'target-within', 'current', 'past',
'future', 'playing', 'paused', 'seeking', 'buffering',
'stalled', 'muted', 'volume-locked', 'user-valid',
- 'user-invalid'):
+ 'user-invalid', 'host'):
# Not applicable in a static context: never match.
return '0'
elif selector.name in ('root', 'scope'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/cssselect2/tree.py
new/cssselect2-0.9.0/cssselect2/tree.py
--- old/cssselect2-0.8.0/cssselect2/tree.py 2025-03-05 15:35:04.000000000
+0100
+++ new/cssselect2-0.9.0/cssselect2/tree.py 2026-02-12 18:12:31.000000000
+0100
@@ -305,14 +305,14 @@
def local_name(self):
"""The local name of this element, as a string."""
namespace_url, local_name = _split_etree_tag(self.etree_element.tag)
- self.__dict__[str('namespace_url')] = namespace_url
+ self.__dict__['namespace_url'] = namespace_url
return local_name
@cached_property
def namespace_url(self):
"""The namespace URL of this element, as a string."""
namespace_url, local_name = _split_etree_tag(self.etree_element.tag)
- self.__dict__[str('local_name')] = local_name
+ self.__dict__['local_name'] = local_name
return namespace_url
@cached_property
@@ -371,10 +371,9 @@
def _split_etree_tag(tag):
position = tag.rfind('}')
- if position == -1:
+ if position == -1 or tag[0] != '{':
return '', tag
else:
- assert tag[0] == '{'
return tag[1:position], tag[position+1:]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/docs/changelog.rst
new/cssselect2-0.9.0/docs/changelog.rst
--- old/cssselect2-0.8.0/docs/changelog.rst 2025-03-05 15:35:04.000000000
+0100
+++ new/cssselect2-0.9.0/docs/changelog.rst 2026-02-12 18:12:31.000000000
+0100
@@ -2,6 +2,15 @@
---------
+Version 0.9.0
+.............
+
+Released on 2026-02-12.
+
+* Drop support of Python 3.9, support 3.14
+* Support :host
+
+
Version 0.8.0
.............
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/docs/example.py
new/cssselect2-0.9.0/docs/example.py
--- old/cssselect2-0.8.0/docs/example.py 2025-03-05 15:35:04.000000000
+0100
+++ new/cssselect2-0.9.0/docs/example.py 2026-02-12 18:12:31.000000000
+0100
@@ -34,15 +34,14 @@
wrapper = cssselect2.ElementWrapper.from_html_root(html_tree)
for element in wrapper.iter_subtree():
tag = element.etree_element.tag.split('}')[-1]
- print('Found tag "{}" in HTML'.format(tag))
+ print(f'Found tag "{tag}" in HTML')
matches = matcher.match(element)
if matches:
for match in matches:
specificity, order, pseudo, payload = match
selector_string, content_string = payload
- print('Matching selector "{}" ({})'.format(
- selector_string, content_string))
+ print(f'Matching selector "{selector_string}" ({content_string})')
else:
print('No rule matching this tag')
print()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/pyproject.toml
new/cssselect2-0.9.0/pyproject.toml
--- old/cssselect2-0.8.0/pyproject.toml 2025-03-05 15:35:04.000000000 +0100
+++ new/cssselect2-0.9.0/pyproject.toml 2026-02-12 18:12:31.000000000 +0100
@@ -8,7 +8,7 @@
keywords = ['css', 'elementtree']
authors = [{name = 'Simon Sapin', email = '[email protected]'}]
maintainers = [{name = 'CourtBouillon', email = '[email protected]'}]
-requires-python = '>=3.9'
+requires-python = '>=3.10'
readme = {file = 'README.rst', content-type = 'text/x-rst'}
license = {file = 'LICENSE'}
dependencies = ['tinycss2', 'webencodings']
@@ -20,11 +20,11 @@
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3 :: Only',
- 'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: 3.13',
+ 'Programming Language :: Python :: 3.14',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Topic :: Internet :: WWW/HTTP',
@@ -55,8 +55,12 @@
omit = ['.*']
[tool.ruff.lint]
-select = ['E', 'W', 'F', 'I', 'N', 'RUF']
+select = ['E', 'W', 'F', 'I', 'N', 'RUF', 'T20', 'PIE', 'PT', 'RSE', 'UP', 'Q']
ignore = ['RUF001', 'RUF002', 'RUF003']
+[tool.ruff.lint.flake8-quotes]
+inline-quotes = 'single'
+multiline-quotes = 'single'
+
[tool.ruff.lint.extend-per-file-ignores]
-'docs/example.py' = ['I001']
+'docs/example.py' = ['I001', 'T201']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cssselect2-0.8.0/tests/test_cssselect2.py
new/cssselect2-0.9.0/tests/test_cssselect2.py
--- old/cssselect2-0.8.0/tests/test_cssselect2.py 2025-03-05
15:35:04.000000000 +0100
+++ new/cssselect2-0.9.0/tests/test_cssselect2.py 2026-02-12
18:12:31.000000000 +0100
@@ -119,7 +119,7 @@
assert not root.matches(':lang(en)')
[email protected]('selector, result', (
[email protected](('selector', 'result'), [
('*', ALL_IDS),
('div', ['outer-div', 'li-div', 'foobar-div']),
('div div', ['li-div']),
@@ -228,7 +228,6 @@
('*#first-li', ['first-li']),
('li div', ['li-div']),
('li > div', ['li-div']),
- ('div div', ['li-div']),
('div > div', []),
('div>.c', ['first-ol']),
('div > .c', ['first-ol']),
@@ -301,6 +300,7 @@
(':active', []),
(':focus', []),
(':target', []),
+ (':host', []),
(':enabled', [
'link-href', 'tag-anchor', 'nofollow-anchor', 'checkbox-unchecked',
'text-checked', 'input-hidden', 'checkbox-checked', 'area-href']),
@@ -319,7 +319,7 @@
('/* test */a:not([href])/* test */,div div', ['name-anchor', 'li-div']),
('/* test */ a:not([href]), div/* test */ div', ['name-anchor', 'li-div']),
('a:not([href]) /* test */,/* test */div div', ['name-anchor', 'li-div']),
-))
+])
def test_select(selector, result):
xml_ids = [
element.etree_element.get('id', 'nil') for element in
@@ -330,12 +330,12 @@
assert xml_ids == html_ids == result
[email protected]('selector, result', (
[email protected](('selector', 'result'), [
('DIV', ['outer-div', 'li-div', 'foobar-div']),
('a[NAme]', ['name-anchor']),
('HTML :link', [
'link-href', 'tag-anchor', 'nofollow-anchor', 'area-href']),
-))
+])
def test_html_select(selector, result):
assert not [
element.etree_element.get('id', 'nil') for element in
@@ -346,7 +346,7 @@
# Data borrowed from http://mootools.net/slickspeed/
[email protected]('selector, result', (
[email protected](('selector', 'result'), [
# Changed from original because we’re only searching the body.
# ('*', 252),
('*', 246),
@@ -395,6 +395,6 @@
('div[class|=dialog]', 50), # ? Seems right
# assert count('div[class!=madeup]', 243), # ? Seems right
('div[class~=dialog]', 51), # ? Seems right
-))
+])
def test_select_shakespeare(selector, result):
assert sum(1 for _ in SHAKESPEARE_BODY.query_all(selector)) == result