Skip to content

Fix TableModel validator to accept pandas StringDtype#1063

Open
jlr13 wants to merge 7 commits intoscverse:mainfrom
jlr13:fix-stringdtype-validation
Open

Fix TableModel validator to accept pandas StringDtype#1063
jlr13 wants to merge 7 commits intoscverse:mainfrom
jlr13:fix-stringdtype-validation

Conversation

@jlr13
Copy link

@jlr13 jlr13 commented Feb 5, 2026

The TableModel validator now properly accepts modern pandas StringDtype for instance_key columns, along with CategoricalDtype with string categories.

This fixes #1062 where the validator incorrectly rejected StringDtype columns, forcing users to use deprecated object dtypes. The new validation logic:

  • Explicitly checks for pd.StringDtype instances
  • Accepts pd.CategoricalDtype with string categories
  • Maintains backward compatibility with integer and object dtypes
  • Provides clearer error messages

🤖 Generated with Claude Code

Jan Lukas Rinker and others added 2 commits February 5, 2026 14:39
The TableModel validator now properly accepts modern pandas StringDtype
for instance_key columns, along with CategoricalDtype with string categories.

This fixes scverse#1062 where the validator incorrectly rejected StringDtype columns,
forcing users to use deprecated object dtypes. The new validation logic:
- Explicitly checks for pd.StringDtype instances
- Accepts pd.CategoricalDtype with string categories
- Maintains backward compatibility with integer and object dtypes
- Provides clearer error messages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Feb 5, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.94%. Comparing base (3d9dee3) to head (d295632).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1063   +/-   ##
=======================================
  Coverage   91.93%   91.94%           
=======================================
  Files          51       51           
  Lines        7664     7670    +6     
=======================================
+ Hits         7046     7052    +6     
  Misses        618      618           
Files with missing lines Coverage Δ
src/spatialdata/models/models.py 88.55% <100.00%> (+0.12%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@LucaMarconato
Copy link
Member

I though of closing in favor of work being done here: #1073, but actually I will use this opportunity to polish a bit the check. So I will reopen and integrate some changes here, in particular I will add tests.

@LucaMarconato LucaMarconato reopened this Feb 16, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Updates TableModel’s instance_key dtype validation to support modern pandas string types, addressing #1062 and reducing the need for deprecated object dtypes.

Changes:

  • Accept pd.StringDtype for instance_key columns.
  • Accept pd.CategoricalDtype when categories are integer- or string-like.
  • Add parametrized tests covering accepted/rejected instance_key dtypes (string, categorical, int, float, object).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/spatialdata/models/models.py Expands instance_key dtype validation logic and updates the error message for clarity.
tests/models/test_models.py Adds coverage for instance_key dtype validation across pandas string/categorical/integer cases.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

LucaMarconato and others added 3 commits February 16, 2026 18:04
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants