Commit Graph
1443 Commits
Author SHA1 Message Date
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
3bb6dcc6ca build(deps): bump asgiref from 3.11.1 to 3.12.1 (#2868)
Bumps [asgiref](https://github.com/django/asgiref) from 3.11.1 to 3.12.1.
- [Changelog](https://github.com/django/asgiref/blob/main/CHANGELOG.txt)
- [Commits](https://github.com/django/asgiref/compare/3.11.1...3.12.1)

---
updated-dependencies:
- dependency-name: asgiref
  dependency-version: 3.12.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 09:59:03 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ccae3c4f12 build(deps-dev): bump mypy from 2.2.0 to 2.3.0 (#2865)
Bumps [mypy](https://github.com/python/mypy) from 2.2.0 to 2.3.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v2.2.0...v2.3.0)

---
updated-dependencies:
- dependency-name: mypy
  dependency-version: 2.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 16:16:53 +02:00
Danilo SalveandGitHub de7875d236 chore: clean up imports and replace list()[0] with next(iter()) (#2816)
Two safe, mechanical changes:

- activation.py: replace `list(domain.values())[0]` with
  `next(iter(domain.values()))` in import_aiohttp_cookies to avoid
  materializing the entire iterable just to grab the first dict.
- checking.py: reorganize imports to PEP 8 order (stdlib, third-party,
  local). `from unittest.mock import Mock` and the stdlib `quote`
  import move into the stdlib section; `python_socks` and
  `socid_extractor` move into third-party; `from .error_detection import
  detect_error_page` and the `from .` local imports move into the local
  section.

No behavioral change. Same diff shape as 2484509 -> HEAD for these two
files minus the else-removal work.
2026-07-13 20:03:32 +02:00
b74a063f49 fix: explicit SKIPPED status for Tor/I2P/DNS sites when no proxy is configured (#2815)
Fixes #2664

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-07-13 20:02:35 +02:00
SoxojandGitHub 6ced77f894 Bump to 0.6.3 (#2863) 2026-07-13 18:06:51 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
a8df8a219c build(deps-dev): bump coverage from 7.15.0 to 7.15.1 (#2862)
---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.15.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 09:09:15 +02:00
03a9e2e2be Updated site list and statistics (#2861)
Co-authored-by: soxoj <31013580+soxoj@users.noreply.github.com>
2026-07-11 18:15:24 +02:00
SoxojandGitHub 9842d8cf1f Fix site checks: 14 fixed, 5 disabled (#2860) 2026-07-11 16:02:16 +02:00
Thiago GaleryandGitHub c6147b2b19 fix(data): tag Pixwox with cf_firewall so --cloudflare-bypass triggers (#2847)
Pixwox's protection was tagged only ip_reputation, but its actual
failure mode is a Cloudflare "Just a moment" JS challenge. Since
build_cloudflare_bypass_config() only activates the bypass module for
sites whose protection matches trigger_protection
(cf_js_challenge/cf_firewall/webgate), --cloudflare-bypass was
silently never invoked for Pixwox even with a working FlareSolverr
instance configured.

Verified FlareSolverr solves the exact URL directly (200, real
profile HTML) — the gap was purely in the trigger match, not the
solver.

Fixes #2845
2026-07-09 21:28:48 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
3db4c8779b build(deps-dev): bump mypy from 2.1.0 to 2.2.0 (#2844)
Bumps [mypy](https://github.com/python/mypy) from 2.1.0 to 2.2.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: mypy
  dependency-version: 2.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-09 21:28:21 +02:00
SoxojandGitHub 08d032a4a0 Update README with sponsor info (#2854) 2026-07-09 20:36:55 +02:00
SoxojandGitHub 3e23cae384 Update sponsor info (#2841) 2026-07-06 12:41:21 +02:00
SoxojandGitHub 6d57f58234 Add 5 new sites (#2840) 2026-07-05 20:49:14 +02:00
SoxojandGitHub e352e1dff7 Add 10 new sites (#2839) 2026-07-05 20:10:29 +02:00
SoxojandGitHub 897769dcc2 Fix site checks: 82 fixed, 11 disabled + DiscourseJson engine (#2836)
* Fix site checks: 82 fixed, 11 disabled + DiscourseJson engine

* Fix test_hackernews_requires_profile_marker: update test body to JSON format matching Firebase API probe
2026-07-05 13:28:46 +02:00
SoxojandGitHub c74bad1ebf Fix site checks: 13 fixed, 7 disabled + CN sites: Tuchong, GitCode, Yuque, LeetCode CN, Bangumi, NGA, Moegirl (#2835) 2026-07-04 22:51:50 +02:00
SoxojandGitHub b11a62abc0 Fix site checks: 6 fixed, 1 disabled (#2834) 2026-07-04 19:03:49 +02:00
SoxojandGitHub 28de12f361 Sponsorship update (#2833) 2026-07-04 15:41:47 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
f380208012 build(deps): bump typing-extensions from 4.15.0 to 4.16.0 (#2832)
Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.
- [Release notes](https://github.com/python/typing_extensions/releases)
- [Changelog](https://github.com/python/typing_extensions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/python/typing_extensions/compare/4.15.0...4.16.0)

---
updated-dependencies:
- dependency-name: typing-extensions
  dependency-version: 4.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-03 17:58:41 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ee5f7fa109 build(deps-dev): bump coverage from 7.14.3 to 7.15.0 (#2831)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.14.3 to 7.15.0.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.15.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-03 17:58:29 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
64a20be9a2 build(deps-dev): bump pytest-rerunfailures from 16.3 to 16.4 (#2829)
Bumps [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures) from 16.3 to 16.4.
- [Changelog](https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst)
- [Commits](https://github.com/pytest-dev/pytest-rerunfailures/compare/16.3...16.4)

---
updated-dependencies:
- dependency-name: pytest-rerunfailures
  dependency-version: '16.4'
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-02 09:46:22 +02:00
fc5038bca8 fix: remove stray attribute from html tag in simple_report_pdf.tpl (#2806)
The opening <html> tag contains a malformed type="text/css" attribute
which makes the HTML invalid (leading > missing). In HTML5 the <html>
tag does not require any attributes.

Fixes the malformed HTML that appears in generated PDF reports.

Co-authored-by: yaqing <yyq1043-cloud@users.noreply.github.com>
2026-07-01 21:55:02 +02:00
SoxojandGitHub cfb28b492a Bump to 0.6.2 (#2827)
* Bump to 0.6.2

* Release process automation
2026-07-01 17:32:50 +02:00
SoxojandGitHub e023dd441a Fix site checks: 6 fixed, 5 disabled (#2826) 2026-07-01 14:36:57 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
62a61a0310 build(deps): bump python-bidi from 0.6.10 to 0.6.11 (#2825)
Bumps [python-bidi](https://github.com/MeirKriheli/python-bidi) from 0.6.10 to 0.6.11.
- [Release notes](https://github.com/MeirKriheli/python-bidi/releases)
- [Changelog](https://github.com/MeirKriheli/python-bidi/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/MeirKriheli/python-bidi/compare/v0.6.10...v0.6.11)

---
updated-dependencies:
- dependency-name: python-bidi
  dependency-version: 0.6.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-01 11:30:16 +02:00
jichaowang02-langandGitHub af253d7dc3 Make include-tag site filter case-insensitive (match exclude filter) (#2811)
In MaigretDatabase.ranked_sites_dict, the include (whitelist) tag filter
compared the site's raw tags against the lowercased query tags:

    is_tags_ok = lambda x: set(x.tags).intersection(set(normalized_tags))

while the exclude (blacklist) filter and every sibling lambda
(name/source/engine) lowercase the site-side value:

    is_excluded_by_tag = lambda x: set(map(str.lower, x.tags)).intersection(
        set(normalized_excluded_tags)
    )

So a site stored with an upper/mixed-case tag (e.g. a custom or submitted
site tagged 'US') was excluded by `--exclude-tags us` but NOT found by
`--tags us` — an asymmetry between the two filters. Lowercase the site
tags in the include filter too, matching the rest of the method.

Adds a regression test asserting tags=['us'] finds a site tagged 'US'.
2026-06-29 22:05:00 +02:00
SoxojandGitHub 7b08793e9d Added docs for Neo4j integration (#2818) 2026-06-29 22:04:25 +02:00
AliandGitHub e41c4d7ee3 Add Neo4j Cypher export (--neo4j) (#2774)
Serialize the maigret graph (the same one --graph builds) into an idempotent Cypher script importable into Neo4j. Reuses MaigretGraph via an extracted _build_maigret_graph() helper, leaving save_graph_report behavior unchanged; no new runtime dependency. Adds the --neo4j flag, the neo4j_report setting, docs, and a unit test.

Closes #2630
2026-06-29 15:41:57 +02:00
Sushanth012andGitHub 0a414c2e1c fix: preserve report error reasons (#2802) 2026-06-29 15:06:03 +02:00
jichaowang02-langandGitHub f8c35b09e3 Fix URLMatcher eating leading host chars (unescaped dots in prefix regex) (#2808)
URLMatcher._HTTP_URL_RE_STR was "^https?://(www.|m.)?(.+)$". The dots in
the optional (www.|m.)? subdomain-prefix group were unescaped, so each `.`
matched ANY character. For a host that simply starts with `m` or `www`
(not the literal `m.`/`www.` prefix), the group greedily ate the first
characters:

    extract_main_part('https://medium.com/alice')  -> 'dium.com/alice'
    extract_main_part('https://myspace.com/bob')   -> 'space.com/bob'

extract_main_part feeds make_profile_url_regexp / get_url_template, so the
generated site-detection regexp was corrupted too (medium.com -> dium.com),
and the loose prefix could match bogus hosts like `xmedium.com`. 170+ hosts
in resources/data.json start with `m`.

Fix: escape the dots with a raw string, r"^https?://(www\.|m\.)?(.+)$".
Genuine `m.`/`www.` prefixes are still stripped
(m.wikipedia.org -> wikipedia.org). The two existing tests that pinned the
unescaped pattern string are updated to the corrected form, and a
regression test covers hosts beginning with m/www.
2026-06-29 14:59:31 +02:00
jichaowang02-langandGitHub b0b5bf68d2 Compare raw error percentage against threshold (don't round first) (#2809)
extract_and_group stored the per-error-type percentage already rounded to
2 decimals, and is_important() compares that stored value against the
threshold. Rounding before the comparison can push a rate that is strictly
below the threshold up to it:

    8 Captcha errors / 267 sites = 2.99625%
    round(2.99625, 2) == 3.0  ->  is_important() True  ->  spurious
    'Too many errors of type "Captcha" (3.0%)' warning

This is the residual of the same class fixed in #2788 (scale-then-round):
scaling to a percentage first stopped 2.5% from becoming 3.0%, but rounding
the percentage still feeds the threshold check. The display sites already
round (round(e["perc"], 2)), so storing the raw percentage keeps the shown
values unchanged while making the threshold comparison exact.

Genuine at-or-above-threshold rates still fire (3/100 = 3.0%, DNS 10%).
Adds a regression test for the 2.996% -> 3.0% rounding-up case.
2026-06-28 20:14:51 +02:00
jichaowang02-langandGitHub ac25cd71bb Fix get_dict_ascii_tree ignoring new_line=False (#2805)
`get_dict_ascii_tree(items, prepend="", new_line=True)` immediately reassigned
`new_line` to the horizontal box-drawing glyph ("─"), shadowing the boolean
parameter. The trailing `if not new_line: text = text[1:]` — meant to strip the
leading newline — therefore tested a non-empty string (always truthy) and never
ran. Callers passing `new_line=False` (e.g. `maigret.py` printing a user's
identity data) got a stray leading blank line.

Rename the glyph local to `h_line` so the `new_line` parameter is preserved and
its strip takes effect. The tree drawing is unchanged.

Adds a regression test asserting `new_line=False` drops the leading newline
while keeping the rest of the tree identical.
2026-06-28 20:11:46 +02:00
ca6d7e474e Add archive.org and archive.is links to profile URL blocks (#2803)
Adds quick-access links to web archives (Wayback Machine and archive.is)
in profile URL report blocks, allowing users to see historical snapshots
of profile pages when they still exist but are no longer accessible.

Closes #247

Co-authored-by: yyq1043 <yyq1043@outlook.com>
2026-06-28 20:06:45 +02:00
SoxojandGitHub 24845091c8 Refactor sponsor section in README.md (#2799)
* Refactor sponsor section in README.md

* docs: update sponsor layout in Chinese README
2026-06-24 09:12:01 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9516d2b906 build(deps): update future requirement from >=0.18.3 to >=1.0.0 (#2792)
Updates the requirements on [future](https://github.com/PythonCharmers/python-future) to permit the latest version.
- [Release notes](https://github.com/PythonCharmers/python-future/releases)
- [Changelog](https://github.com/PythonCharmers/python-future/blob/master/docs/changelog.rst)
- [Commits](https://github.com/PythonCharmers/python-future/compare/v0.18.3...v1.0.0)

---
updated-dependencies:
- dependency-name: future
  dependency-version: 1.0.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 10:31:25 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
677f8e053a build(deps): update mock requirement from >=4.0.3 to >=5.2.0 (#2791)
Updates the requirements on [mock](https://github.com/testing-cabal/mock) to permit the latest version.
- [Changelog](https://github.com/testing-cabal/mock/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/testing-cabal/mock/compare/4.0.3...5.2.0)

---
updated-dependencies:
- dependency-name: mock
  dependency-version: 5.2.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 10:31:15 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b52eb529b2 build(deps): update requests-futures requirement from >=1.0.0 to >=1.0.2 (#2794)
Updates the requirements on [requests-futures](https://github.com/ross/requests-futures) to permit the latest version.
- [Changelog](https://github.com/ross/requests-futures/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ross/requests-futures/compare/v1.0.0...v1.0.2)

---
updated-dependencies:
- dependency-name: requests-futures
  dependency-version: 1.0.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 10:05:57 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
aa9acd9d38 build(deps-dev): bump coverage from 7.14.1 to 7.14.3 (#2798)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.14.1 to 7.14.3.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.14.1...7.14.3)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.14.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 10:05:48 +02:00
296daa0f24 refactor: drop dead 'if not dictionary' guards across report paths (#2796)
Closes #2665.

Every site results entry flows through make_site_result (checking.py:788),
which initializes results_site = {} and then unconditionally populates it
(site/username/keywords/parsing_enabled/url_main/cookies up front, checker
at the end, plus status or url_user+future on every branch). It has no
return path that yields an empty dict. check_site_for_username wraps that
result and likewise never returns a falsy entry, and maigret.py does not
construct site-result dicts by hand.

So the four downstream 'if not dictionary: continue' guards (all tagged
'# TODO: fix no site data issue') were dead code — the entries they
guarded against cannot occur. Removed:

  - maigret/maigret.py:101  (extract_ids_from_results)
  - maigret/report.py:151   — 'if not dictionary or dictionary.get("is_similar")'
                              trimmed to just the is_similar check (real logic)
  - maigret/report.py:467  (extended-report builder)
  - maigret/report.py:609  (generate_txt_report)
  - maigret/report.py:627  — 'if not site_result or not site_result.get("status")'
                              trimmed to just the status check (real logic)
  - maigret/report.py:687 (generate_json_report)

plus the four '# TODO: fix no site data issue' comments.

No behavior change for well-formed inputs; downstream .get() calls are
safe because entries are always populated dicts. 292 tests pass.

Co-authored-by: aznikline <aznikline@users.noreply.github.com>
2026-06-23 10:05:31 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
cbb02fb658 build(deps): update chardet requirement from >=5.0.0 to >=7.4.3 (#2797)
Updates the requirements on [chardet](https://github.com/chardet/chardet) to permit the latest version.
- [Release notes](https://github.com/chardet/chardet/releases)
- [Changelog](https://github.com/chardet/chardet/blob/main/docs/changelog.rst)
- [Commits](https://github.com/chardet/chardet/compare/5.0.0...7.4.3)

---
updated-dependencies:
- dependency-name: chardet
  dependency-version: 7.4.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 09:55:42 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9dfeff2d04 build(deps): update stem requirement from >=1.8.1 to >=1.8.2 (#2790)
Updates the requirements on [stem](https://github.com/torproject/stem) to permit the latest version.
- [Release notes](https://github.com/torproject/stem/releases)
- [Commits](https://github.com/torproject/stem/compare/1.8.1...1.8.2)

---
updated-dependencies:
- dependency-name: stem
  dependency-version: 1.8.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-22 19:22:48 +02:00
e90ca42aac test: cover #2666 TODO-test paths (cookie_jar forwarding, extract_ids_from_results) (#2795)
Closes #2666.

Issue #2666 tracked four paths flagged `# TODO: tests`. Two of them
(`executors.py` increment_progress / stop_progress) were removed by the
#2789 refactor and no longer exist. This PR covers the two that remain:

1. maigret/checking.py:247 — the ClientSession cookie_jar forwarding.
   SimpleAiohttpChecker.check() builds ClientSession(cookie_jar=self.cookie_jar
   if self.cookie_jar else None), but nothing asserted the jar handed to the
   checker actually reached the outgoing session. Added two tests using the
   existing constructor-capture pattern (_capture_clientsession): one asserts
   a configured jar is forwarded verbatim, the other asserts None is passed
   when no jar is configured (the else branch).

2. maigret/maigret.py:946 — extract_ids_from_results. The pre-existing
   test_extract_ids_from_results was a bare expression with no `assert` (so
   it silently passed regardless of return value) AND pinned its expectation
   against test_db (tests/db.json), whose site set never matched the Reddit
   URL and silently dropped the ids_links result. Fixed: real assertion against
   default_db, plus three branch tests (cross-site username merge, empty-site
   skip, empty input).

No new dependencies: aioresponses was suggested in the issue but is not in
the project — the existing monkeypatch capture pattern fits the codebase
better and adds zero deps.

Removed both `# TODO: tests` comments from the now-covered lines.

Co-authored-by: aznikline <aznikline@users.noreply.github.com>
2026-06-22 19:22:37 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
468d448684 build(deps-dev): bump pytest from 9.1.0 to 9.1.1 (#2793)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.1.0 to 9.1.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/9.1.0...9.1.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-22 19:21:50 +02:00
SoxojandGitHub 3eaec01523 Code cleanup and refactoring after ponytail audit (#2789) 2026-06-21 12:51:01 +02:00
jichaowang02-langandGitHub 7936ce267f Fix error-percentage rounding tripping thresholds at whole-percent granularity (#2788)
`extract_and_group` computed the per-error-type percentage as
`round(count / len(search_res), 2) * 100` — it rounded the *fraction* to 2
decimals (i.e. to the nearest 1%) and only then scaled by 100, so `perc`
always had whole-percent granularity and was mis-rounded.

A genuine 2.5% error rate (1 error out of 40 sites) became
`round(0.025, 2) * 100 = 3.0%` and tripped the 3% "important" threshold in
`is_important()`, firing a spurious "Too many errors of type ..." warning.
Likewise 9.5% DNS errors rounded to 10.0% and crossed the DNS override.

Scale to a percentage *before* rounding: `round(count / len(search_res) * 100, 2)`.
The existing tests use integer-landing ratios (25/100, 5/100, 3/100) that are
identical under both formulas, so none of them change.

Adds a regression test for a sub-threshold non-integer rate (2.5%) staying silent.
2026-06-21 12:50:27 +02:00
df084d8ac4 Updated site list and statistics (#2787)
Co-authored-by: soxoj <31013580+soxoj@users.noreply.github.com>
2026-06-21 01:53:11 +02:00
SoxojandGitHub 682059cf21 ORCID support (#2786)
* Added support of ORCID identifier

* ORCID documentation
2026-06-20 22:29:19 +02:00
SoxojandGitHub 8f737d10c3 Update README with sponsorship details (#2785) 2026-06-19 13:12:20 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9cf12bc5d2 build(deps): bump pypdf from 6.13.0 to 6.13.3 (#2784)
Bumps [pypdf](https://github.com/py-pdf/pypdf) from 6.13.0 to 6.13.3.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/py-pdf/pypdf/compare/6.13.0...6.13.3)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-version: 6.13.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-19 09:28:05 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
3397d2f4ea build(deps): bump svglib from 2.0.1 to 2.0.2 (#2783)
Bumps [svglib](https://github.com/deeplook/svglib) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/deeplook/svglib/releases)
- [Changelog](https://github.com/deeplook/svglib/blob/main/CHANGELOG.md)
- [Commits](https://github.com/deeplook/svglib/compare/v2.0.1...v2.0.2)

---
updated-dependencies:
- dependency-name: svglib
  dependency-version: 2.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-19 09:22:45 +02:00