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

FlexMeasures / flexmeasures / 39836790812
87%

Build:
DEFAULT BRANCH: main
Ran 22 Oct 2026 07:12PM UTC
Jobs 1
Files 194
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

22 Oct 2026 07:03PM UTC coverage: 86.918% (+0.05%) from 86.867%
39836790812

push

github

web-flow
Refuse duplicate data sources, merging existing ones and their references (#2613)

* Reuse the oldest data source when duplicates exist

Concurrent calls to get_or_create_source can each insert the same source,
because the unique constraint on data_source treats NULL user and account IDs as distinct.
Every later lookup then raised MultipleResultsFound, failing all schedules under that configuration (#2611).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: F.N. Claessen <claessen@seita.nl>

* Share one job between concurrent identical calls to a job-cached function

The job cache checked for a cached job, and only stored a new one after creating it,
so two identical calls arriving together both missed the cache and each created their own job.
For scheduling, the two jobs then each created their own data source for the same configuration (#2611).
Hold a Redis lock on the hash of the call's arguments while checking the cache and creating the job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: F.N. Claessen <claessen@seita.nl>

* Add changelog entry for PR #2612

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: F.N. Claessen <claessen@seita.nl>

* Read the cached job ID once, as the key can expire between two reads

Checking that the job cache key exists and then getting it could return None if the key expired in between,
failing on .decode().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: F.N. Claessen <claessen@seita.nl>

* Name the duplicate source IDs in the warning, and empty the queue after the concurrency test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: F.N. Claessen <claessen@seita.nl>

* Join the concurrency test's threads with a timeout, and stop shadowing the source argument

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: F.N. Claessen <claessen@seita.nl>

* Refuse duplicate data sources, after mergi... (continued)

91 of 95 new or added lines in 4 files covered. (95.79%)

22338 of 25700 relevant lines covered (86.92%)

0.87 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
52.21
4.22% flexmeasures/cli/jobs.py
1
93.66
1.21% flexmeasures/data/services/data_sources.py
Jobs
ID Job ID Ran Files Coverage
1 39836790812.1 22 Oct 2026 07:12PM UTC 194
86.92
GitHub Action Run
Source Files on build 39836790812
  • Tree
  • List 194
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39836790812
  • a818d105 on github
  • Prev Build on main (#39498165270)
  • Next Build on main (#39849526989)
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