Skip to content

Conversation

@corydolphin
Copy link
Contributor

Python 3.9 reaches end-of-life October 2025. Python 3.10 adoption is now mainstream - major frameworks (strawberry, Django 5.0, FastAPI) require it.

This enables modern Python features:

Dataclasses with kw_only
Union types with | syntax (PEP 604)
isinstance() with union types directly
match statements for pattern matching

Introduce benchmarks using a large (~117KB) GraphQL query to measure
parse and pickle serialization performance. These provide a baseline
for comparing serialization approaches in subsequent commits.

Baseline performance (measrued on a Macbook Pro M4 Max):
- Parse:         81ms
- Pickle encode: 24ms
- Pickle decode: 42ms
- Roundtrip:     71ms
Prepares AST for immutability by using tuples instead of lists for
collection fields. This aligns with the JavaScript GraphQL library
which uses readonly arrays, and enables future frozen datastructures.
Python 3.9 reaches end-of-life October 2025. Python 3.10 adoption is
now mainstream - major frameworks (strawberry, Django 5.0, FastAPI) require it.

This enables modern Python features:
- Dataclasses with `kw_only`
- Union types with `|` syntax (PEP 604)
- isinstance() with union types directly
- match statements for pattern matching
@codspeed-hq
Copy link

codspeed-hq bot commented Jan 8, 2026

CodSpeed Performance Report

Merging this PR will not alter performance

Comparing corydolphin:update-minimum-python-version-to (a30b836) with main (283d002)

Summary

✅ 14 untouched benchmarks
🆕 4 new benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
🆕 test_pickle_large_query_decode N/A 207.9 ms N/A
🆕 test_pickle_large_query_encode N/A 110.5 ms N/A
🆕 test_pickle_large_query_roundtrip N/A 318.1 ms N/A
🆕 test_parse_large_query N/A 420 ms N/A

@Cito Cito merged commit e7110bd into graphql-python:main Jan 8, 2026
10 checks passed
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.

2 participants