• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-eth-py / 36000046092
94%

Build:
DEFAULT BRANCH: main
Ran 24 Sep 2026 12:39PM UTC
Jobs 4
Files 126
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

24 Sep 2026 12:35PM UTC coverage: 93.679% (+0.1%) from 93.57%
36000046092

push

github

web-flow
fix: Raise Etherscan client errors and stop flaky network tests (#2760)

* fix: Raise Etherscan client errors and stop flaky network tests

Etherscan client:
- Detect every rate limit message (per second, daily, free tier) and HTTP 429
  as EtherscanRateLimitError. Before, only "Max rate limit reached" was
  detected and any other error returned None
- Raise EtherscanHttpError for other non ok HTTP responses and
  EtherscanClientException for other API errors, instead of returning None.
  None now only means the contract is not verified
- Wrap transport errors with wrap_http_exceptions as EtherscanConnectionError
- _retry_request raises EtherscanRateLimitError after the last attempt
  instead of returning None

Tests and CI:
- Fix pytest.mark.flaky kwarg: delay is not valid, reruns_delay is
- Add a `network` marker for tests hitting external services (third party
  APIs and RPC nodes). CI only runs them on Python 3.13, so the 4 matrix
  jobs do not share the same API keys at the same time
- Etherscan network tests skip on rate limit, connection and HTTP errors,
  but an invalid API key still fails
- Add offline unit tests for the Etherscan error handling

* fix: Do not retry the Etherscan daily rate limit

- Add EtherscanDailyRateLimitError, raised for the daily quota message.
  _retry_request raises it with no retry, as the quota only resets the next day
- Move the last attempt of _retry_request out of the loop, so there is no
  dead `return None`
- Name the test-app job `test-app (<python version>)`, so it matches the
  required status checks on main. With the `include:` matrix GitHub added
  `not network` to the job name

* fix: Mark only the ENS and Sourcify tests that hit the network

test_domain_hash_to_hex_str and the mocked test_init make no request, so they run on every Python version.

172 of 181 new or added lines in 17 files covered. (95.03%)

2 existing lines in 1 file now uncovered.

11649 of 12435 relevant lines covered (93.68%)

3.49 hits per line

Uncovered Changes

Lines Coverage ∆ File
7
94.12
5.66% safe_eth/eth/tests/clients/test_etherscan_client_v2.py
2
91.25
4.82% safe_eth/eth/clients/etherscan_client_v2.py

Coverage Regressions

Lines Coverage ∆ File
2
91.25
4.82% safe_eth/eth/clients/etherscan_client_v2.py
Jobs
ID Job ID Ran Files Coverage
1 run-3.13 - 36000046092.1 24 Sep 2026 12:39PM UTC 126
93.68
GitHub Action Run
2 run-3.11 - 36000046092.2 24 Sep 2026 12:39PM UTC 126
85.25
GitHub Action Run
3 run-3.12 - 36000046092.3 24 Sep 2026 12:39PM UTC 126
85.25
GitHub Action Run
4 run-3.10 - 36000046092.4 24 Sep 2026 12:39PM UTC 126
85.25
GitHub Action Run
Source Files on build 36000046092
  • Tree
  • List 126
  • Changed 33
  • Source Changed 17
  • Coverage Changed 33
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #36000046092
  • 4b5309fe on github
  • Prev Build on main (#35860941178)
  • Next Build on main (#36135743000)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc