Repository navigation
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Comment |
cachebox is pulled into the sdk test group via deepdiff. Only cachebox 6.x publishes CPython 3.15 wheels; 5.x has to be built from source with PyO3, whose bundled version refuses 3.15 unless forced with PYO3_USE_ABI3_FORWARD_COMPATIBILITY. deepdiff 9.1.0 (latest) still caps cachebox <6, so a plain lock upgrade is a no-op and a uv override is needed. Remove it once deepdiff allows cachebox 6. cachebox 5.2.3 -> 6.2.7. gooddata-sdk tests pass with it on py314 and py310 via tox (572 passed) and on 3.15.0rc3 (568 passed, arrow test excluded as pyarrow has no cp315 wheels yet).
Python 3.10 reaches end of life in October 2026, so the floor moves to 3.11 as 3.15 is added, keeping five supported versions. Adding 3.15: - trove classifiers, tox envlists of all packages, the CI unit-test matrix and the default IN_TEST_ENVS in ci_tests.mk - CI runs tox inside per-version Docker images, so ci_tests.mk gains a test-ci-py315-build target based on python:3.15.0rc3-slim-bookworm (3.15 final is not released yet; bump the tag once it is) - gooddata-eval also gets the 3.14 classifier it was missing Dropping 3.10: - requires-python >=3.11 for the workspace and every package; the 3.10 classifier, tox env, CI matrix entry and Docker build target removed; READMEs, AGENTS.md, CONTRIBUTING.md and Sonar settings updated - ruff target-version py311: applied the safe UP017 (datetime.UTC) and import-order fixes. UP042 ((str, Enum) -> StrEnum) is ignored here and handled in a separate commit because it changes str()/format() of public enums Known blockers for a green py315 job: pyarrow (latest 25.0.1) publishes no cp315 wheels and fails to build from source, which affects gooddata-flexconnect, gooddata-flight-server and the test groups of gooddata-sdk and gooddata-pandas; and gooddata-pandas still caps pandas <3 while pandas 2 has no cp315 wheels (lifted in a following commit). Tested: all packages via tox on py311 and py314; ruff, ruff format and ty pass.
gooddata-pandas returns pandas objects, so pandas 3's behavior changes (default "str" dtype for strings, copy-on-write, missing-value handling in string columns) reach users through our API. Rather than silently allowing both majors, gooddata-pandas now requires pandas >=3.0.0,<4.0.0 and the change ships as a breaking release. pandas 3 is also the only line with CPython 3.15 wheels; pandas 2.3.3 segfaults inside pd.to_datetime when built from source on 3.15. pandas 3 requires Python 3.11+, which the previous commit made the floor. Behavior changes found by running the test suite on pandas 3: - pd.to_datetime infers resolution from the input in pandas 3 (dates become datetime64[s]) while pandas 2 always produced datetime64[ns]. Date/datetime attribute conversion in both the JSON and Arrow paths now goes through to_datetime_ns(), which keeps the datetime64[ns] dtype gooddata-pandas returned before. - Index levels built from Arrow field metadata (transposed results) are never Arrow-mapped; they used to be object dtype and are now the default "str" dtype (NaN-backed StringDtype). The ARROW_STRINGS test now skips those levels the same way it skips object levels. Tested: gooddata-pandas tox py311 and py314 (pandas 3.0.6), 347 passed each; ruff, ruff format and ty pass.
With Python 3.11 as the floor, StrEnum is available, and several of these enums already carried notes to switch once 3.10 was dropped. ruff UP042 is no longer ignored. Breaking: str() and format() of these enums now return the member value (e.g. "asc") instead of "SortDirection.ASC". Equality with plain strings and JSON/pydantic serialization are unchanged. Public enums affected: gooddata-sdk SortDirection and LocatorItemType; gooddata-pipelines CustomFieldType, ColumnDataType, EntityType, LoadType and WorkflowType; gooddata-eval AnomalyDetectionGranularity and LoopExit. UpsertOutcome already overrode __str__ to return the value, so its override is dropped as redundant. Tested: all packages via tox on py311 and py314; ruff, ruff format and ty pass.
hkad98
force-pushed
the
jkd/python-3-15
branch
from
October 6, 2026 13:37
6ecb6be to
0b54e12
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Python 3.15 support, drops Python 3.10 (EOL October 2026), requires pandas 3 and migrates
(str, Enum)classes toStrEnum. These are breaking changes; the next release should be 2.0.0.Breaking changes
>=3.0.0,<4.0.0. The DataFrames and Series it returns follow pandas 3 semantics: string columns and index levels use the defaultstrdtype instead ofobject, missing values in string columns stay missing, and copy-on-write is always on. Date/datetime attribute columns keepdatetime64[ns]as before.StrEnummigration.str()andformat()of these enums now return the member value (e.g."asc") instead of"SortDirection.ASC". Equality with plain strings and serialization are unchanged.SortDirection,LocatorItemType(UpsertOutcomealready behaved this way)CustomFieldType,ColumnDataType,EntityType,LoadType,WorkflowTypeAnomalyDetectionGranularity,LoopExitCommits
Override cachebox to >=6
cachebox (sdk test group, via deepdiff) publishes cp315 wheels only from 6.x, but deepdiff 9.1.0 still caps it
<6. A uvoverride-dependenciesentry forces 6.2.7; drop it once deepdiff allows cachebox 6.Support Python 3.15 and drop Python 3.10
ci_tests.mk(newtest-ci-py315-buildtarget onpython:3.15.0rc3-slim-bookworm; bump to the final tag once released).requires-python >=3.11everywhere; the 3.10 classifier, tox env, CI entry and Docker target removed; READMEs, AGENTS.md, CONTRIBUTING.md and Sonar settings updated.target-version = "py311": applied the safe UP017 (datetime.UTC) and import-order fixes.Require pandas 3 in gooddata-pandas
pandas 2 has no cp315 wheels (2.3.3 built from source segfaults inside
pd.to_datetimeon 3.15), and pandas 3's behavior changes reach users through gooddata-pandas' return values, so the pin moves to>=3.0.0,<4.0.0as a breaking change rather than silently allowing both majors.pd.to_datetimeinfers resolution in pandas 3 (datetime64[s]for dates). Date/datetime conversion in both the JSON and Arrow paths now goes throughto_datetime_ns(), keeping thedatetime64[ns]dtype gooddata-pandas returned before.strdtype; theARROW_STRINGStest skips them as it skipsobjectlevels. Converter output is unchanged.Migrate (str, Enum) classes to StrEnum
With 3.11 as the floor,
StrEnumis available and several enums already carried notes to switch once 3.10 was dropped. ruff UP042 is enforced.Points for review
datetime64[ns]vs. adopting pandas 3's inferred resolution.