Skip to content

Address issue #222#477

Open
dotsdl wants to merge 10 commits intomainfrom
claude/address-issue-222-EnCIf
Open

Address issue #222#477
dotsdl wants to merge 10 commits intomainfrom
claude/address-issue-222-EnCIf

Conversation

@dotsdl
Copy link
Member

@dotsdl dotsdl commented Jan 9, 2026

This commit introduces a new scopes_exclude configuration parameter for compute services, addressing issue #222.

Changes:

  • Added scopes_exclude field to ComputeServiceSettings with validation
  • Updated ComputeService to initialize and pass scopes_exclude to client
  • Updated ComputeClient.claim_tasks() to accept and transmit scopes_exclude
  • Updated compute API /claim endpoint to filter taskhubs based on excluded scopes
  • Filtering uses Scope.is_superset() to exclude taskhubs matching excluded scopes

The scopes_exclude option is applied after scopes as a filter, allowing users to specify broad scopes while excluding specific subset scopes from task claiming.

Fixes #222

claude added 2 commits January 9, 2026 21:24
This commit introduces a new `scopes_exclude` configuration parameter
for compute services, addressing issue #222.

Changes:
- Added `scopes_exclude` field to ComputeServiceSettings with validation
- Updated ComputeService to initialize and pass scopes_exclude to client
- Updated ComputeClient.claim_tasks() to accept and transmit scopes_exclude
- Updated compute API /claim endpoint to filter taskhubs based on excluded scopes
- Filtering uses Scope.is_superset() to exclude taskhubs matching excluded scopes

The scopes_exclude option is applied after scopes as a filter, allowing users
to specify broad scopes while excluding specific subset scopes from task claiming.

Fixes #222
@codecov
Copy link

codecov bot commented Jan 9, 2026

Codecov Report

❌ Patch coverage is 91.30435% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.54%. Comparing base (2c4b0d9) to head (3b78e6d).

Files with missing lines Patch % Lines
alchemiscale/compute/service.py 66.66% 1 Missing ⚠️
alchemiscale/compute/settings.py 94.11% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #477      +/-   ##
==========================================
+ Coverage   78.88%   79.54%   +0.65%     
==========================================
  Files          29       29              
  Lines        4808     4830      +22     
==========================================
+ Hits         3793     3842      +49     
+ Misses       1015      988      -27     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

dotsdl and others added 7 commits February 17, 2026 18:53
The validate_scopes_exclude validator crashed on None input (the field
default), since it attempted to slice a None value. Added a None guard.

Also added unit tests for the validator and integration tests for the
/claim endpoint and client with scopes_exclude filtering, including
edge cases for excluding all scopes and wildcard exclusions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The same None-guard issue existed in validate_scopes — it would crash
when scopes defaults to None. Added the guard and a unit test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace verbose nested loop with dict comprehension using any().
Apply minimize_scope_space to scopes_exclude to eliminate redundant
exclusion checks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract _make_token_data_override and _make_compute_api_no_auth helpers
to eliminate duplication between single-scope and multi-scope fixtures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Member Author

@dotsdl dotsdl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm happy with this. Ready for review @ianmkenney!

Starlette's TestClient needs json= to set Content-Type: application/json
automatically. Using content=json.dumps(...) sends raw bytes without
the proper content type, causing FastAPI to return 422.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dotsdl dotsdl requested a review from ianmkenney March 17, 2026 04:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add scopes-exclude config option for compute services

2 participants