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

kivy / kivy / 30072791444
60%

Build:
DEFAULT BRANCH: master
Ran 24 Jul 2026 06:46AM UTC
Jobs 2
Files 346
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 Jul 2026 06:36AM UTC coverage: 60.226% (+0.08%) from 60.147%
30072791444

push

github

web-flow
Normalize resource cache keys so path spellings share one entry (#9351)

* Accept pathlib.Path in path-accepting APIs

Kivy's path-accepting APIs historically required a str. This lets them also
accept any os.PathLike (e.g. pathlib.Path) by coercing to str via os.fspath()
at a small set of central choke points, keeping all internals (string parsing,
cache keys, Cython .encode()) string-based.

- utils: add path_to_str() helper (coerces os.PathLike -> str; leaves str,
  bytes, None, file-like and URIs unchanged).
- properties: StringProperty.convert() now coerces os.PathLike -> str, so every
  path-bearing StringProperty (Image.source, font_name, App.kv_file, the
  background_*/atlas image sources, Window.icon, ...) accepts Path. Non-path,
  non-str values still raise ValueError.
- resource_find / resource_add_path / resource_remove_path: coerce up front so
  cache keys and path-list membership stay consistent.
- core loaders: Image/ImageLoader (load/save/filename), SoundLoader.load,
  VideoBase.filename/generate_thumbnail, LabelBase.resolve_font_name/register,
  SvgLoader.load, Lottie filename.
- lang/atlas/storage: Builder.load_file/unload_file/load_string, Atlas,
  JsonStore, DictStore.
- app/config: App.load_kv/get_application_config; Config.read now accepts
  os.PathLike while still rejecting multiple filenames.
- tests: new kivy/tests/test_pathlib_support.py, parametrized over str vs Path.

Coercion only fires for isinstance(x, os.PathLike), so str inputs (including
atlas://, http://, data: URIs) and BytesIO pass through unchanged. On Windows a
Path canonicalizes to native separators; coercion is consistent per argument.

* Normalize resource cache keys so path spellings share one entry

resource_find (kv.resourcefind) and Loader.image (kv.loader) keyed their
caches on the raw input string, so different spellings of the same file
('a/b.png' vs 'a\\b.png', redundant ./.. segments, case differences on
case-insensitive platforms, and pathlib.Path in... (continued)

3276 of 6498 branches covered (50.42%)

127 of 136 new or added lines in 4 files covered. (93.38%)

3 existing lines in 2 files now uncovered.

29517 of 49010 relevant lines covered (60.23%)

1.19 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
74.74
1.5% kivy/loader.py
4
95.83
kivy/tests/test_resource_cache_key.py
1
59.09
1.71% kivy/resources.py

Coverage Regressions

Lines Coverage ∆ File
2
74.74
1.5% kivy/loader.py
1
59.09
1.71% kivy/resources.py
Jobs
ID Job ID Ran Files Coverage
1 30072791444.1 24 Jul 2026 06:46AM UTC 346
58.75
GitHub Action Run
2 30072791444.2 24 Jul 2026 06:46AM UTC 346
60.18
GitHub Action Run
Source Files on build 30072791444
  • Tree
  • List 346
  • Changed 40
  • Source Changed 3
  • Coverage Changed 40
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30072791444
  • 789f3047 on github
  • Prev Build on master (#30009965577)
  • Next Build on master (#30072869306)
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