Skip to content

Commit 552a32e

Browse files
feanilclaude
andauthored
chore: drop Python 3.11 support (#268)
* chore: drop Python 3.11 support Remove Python 3.11 from CI matrix, tox envlist, publish workflow, setup.py classifiers, and python_requires. Part of openedx/public-engineering#499 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: regenerate requirements for Python 3.12 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: bump version to 1.0.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: update typesense import for typesense-python 2.0 typesense-python 2.0 removed the typesense.client module. Client is now exported directly from the top-level typesense package. Migration guide: https://github.com/typesense/typesense-python#compatibility Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: bump version to 0.4.0 and document breaking changes This is a 0.x project so minor version bumps cover breaking changes (per SemVer). Document both breaking changes in this release: - Drop Python 3.11 support - typesense-python 2.0 requires Typesense Server >= v30.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * style: apply black formatting changes from black 26.x upgrade Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 78b36e4 commit 552a32e

File tree

17 files changed

+684
-470
lines changed

17 files changed

+684
-470
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
strategy:
2222
matrix:
2323
os: [ubuntu-latest]
24-
python-version: ['3.11', '3.12']
24+
python-version: ['3.12']
2525
toxenv: [py, quality, django42, django52, e2e, package]
2626

2727
steps:

.github/workflows/pypi-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: setup python
1515
uses: actions/setup-python@v2
1616
with:
17-
python-version: 3.11
17+
python-version: 3.12
1818

1919
- name: Install Dependencies
2020
run: pip install setuptools wheel

CHANGELOG.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,20 @@ Unreleased
1818
* Fix: Set default value for ``pinned`` field on ``CommentThread`` to ``False``
1919
to prevent NULL sort bug.
2020

21+
[0.4.0] – 2026-03-12
22+
*********************
23+
24+
Breaking Changes
25+
----------------
26+
27+
* Drop Python 3.11 support; Python 3.12 is now required.
28+
* Upgrade typesense-python from 1.x to 2.0. This release requires
29+
**Typesense Server >= v30.0** (previously >= v28.0). See the
30+
`typesense-python compatibility table
31+
<https://github.com/typesense/typesense-python#compatibility>`_
32+
for details. If you are running an older Typesense server you must
33+
upgrade it before deploying this version of openedx-forum.
34+
2135
0.3.4 – 2025-08-13
2236
******************
2337

forum/migration_helpers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
)
2626
from forum.utils import make_aware, get_trunc_title
2727

28-
2928
logger = logging.getLogger(__name__)
3029

3130

forum/search/typesense.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django.conf import settings
99
from django.core.paginator import Paginator
1010

11-
from typesense.client import Client
11+
from typesense import Client
1212
from typesense.types.collection import CollectionCreateSchema
1313
from typesense.types.document import DocumentSchema, SearchParameters
1414
from typesense.exceptions import ObjectNotFound

requirements/base.txt

Lines changed: 58 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,31 @@ amqp==5.3.1
88
# via kombu
99
annotated-types==0.7.0
1010
# via pydantic
11-
asgiref==3.9.1
11+
anyio==4.12.1
12+
# via httpx
13+
asgiref==3.11.1
1214
# via django
13-
attrs==25.3.0
15+
attrs==25.4.0
1416
# via openedx-events
15-
beautifulsoup4==4.13.5
17+
beautifulsoup4==4.14.3
1618
# via -r requirements/base.in
17-
billiard==4.2.1
19+
billiard==4.2.4
1820
# via celery
19-
camel-converter[pydantic]==4.0.1
21+
camel-converter[pydantic]==5.1.0
2022
# via meilisearch
21-
celery==5.5.3
23+
celery==5.6.2
2224
# via event-tracking
23-
certifi==2025.8.3
25+
certifi==2026.2.25
2426
# via
2527
# elasticsearch
28+
# httpcore
29+
# httpx
2630
# requests
27-
cffi==1.17.1
31+
cffi==2.0.0
2832
# via pynacl
29-
charset-normalizer==3.4.3
33+
charset-normalizer==3.4.5
3034
# via requests
31-
click==8.2.1
35+
click==8.3.1
3236
# via
3337
# celery
3438
# click-didyoumean
@@ -42,11 +46,11 @@ click-plugins==1.1.1.2
4246
# via celery
4347
click-repl==0.3.0
4448
# via celery
45-
code-annotations==2.3.0
49+
code-annotations==2.3.2
4650
# via edx-toggles
47-
django==4.2.23
51+
django==5.2.12
4852
# via
49-
# -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt
53+
# -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt
5054
# -r requirements/base.in
5155
# django-crum
5256
# django-waffle
@@ -66,111 +70,123 @@ django-waffle==5.0.0
6670
# edx-toggles
6771
djangorestframework==3.16.1
6872
# via -r requirements/base.in
69-
dnspython==2.7.0
73+
dnspython==2.8.0
7074
# via pymongo
7175
edx-ccx-keys==2.0.2
7276
# via openedx-events
73-
edx-django-utils==8.0.0
77+
edx-django-utils==8.0.1
7478
# via
7579
# edx-toggles
7680
# event-tracking
7781
# openedx-events
78-
edx-opaque-keys[django]==3.0.0
82+
edx-opaque-keys[django]==3.1.0
7983
# via
8084
# edx-ccx-keys
8185
# openedx-events
82-
edx-search==4.1.3
86+
edx-search==4.4.0
8387
# via -r requirements/base.in
8488
edx-toggles==5.4.1
8589
# via
8690
# edx-search
8791
# event-tracking
8892
elasticsearch==7.13.4
8993
# via
90-
# -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt
94+
# -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt
9195
# -r requirements/base.in
9296
# edx-search
9397
event-tracking==3.3.0
9498
# via edx-search
95-
fastavro==1.12.0
99+
fastavro==1.12.1
96100
# via openedx-events
97-
idna==3.10
98-
# via requests
101+
h11==0.16.0
102+
# via httpcore
103+
httpcore==1.0.9
104+
# via httpx
105+
httpx==0.28.1
106+
# via typesense
107+
idna==3.11
108+
# via
109+
# anyio
110+
# httpx
111+
# requests
99112
jinja2==3.1.6
100113
# via code-annotations
101-
kombu==5.5.4
114+
kombu==5.6.2
102115
# via celery
103-
markupsafe==3.0.2
116+
markupsafe==3.0.3
104117
# via jinja2
105-
meilisearch==0.37.0
118+
meilisearch==0.40.0
106119
# via edx-search
107-
mysqlclient==2.2.7
120+
mysqlclient==2.2.8
108121
# via -r requirements/base.in
109122
openedx-atlas==0.7.0
110123
# via -r requirements/base.in
111124
openedx-events==10.5.0
112125
# via event-tracking
113-
packaging==25.0
126+
packaging==26.0
114127
# via kombu
115128
prompt-toolkit==3.0.52
116129
# via click-repl
117-
psutil==7.0.0
130+
psutil==7.2.2
118131
# via edx-django-utils
119-
pycparser==2.22
132+
pycparser==3.0
120133
# via cffi
121-
pydantic==2.11.7
134+
pydantic==2.12.5
122135
# via camel-converter
123-
pydantic-core==2.33.2
136+
pydantic-core==2.41.5
124137
# via pydantic
125-
pymongo==4.14.1
138+
pymongo==4.16.0
126139
# via
127140
# -r requirements/base.in
128141
# edx-opaque-keys
129142
# event-tracking
130-
pynacl==1.5.0
143+
pynacl==1.6.2
131144
# via edx-django-utils
132145
python-dateutil==2.9.0.post0
133146
# via celery
134147
python-slugify==8.0.4
135148
# via code-annotations
136-
pytz==2025.2
149+
pytz==2026.1.post1
137150
# via event-tracking
138-
pyyaml==6.0.2
151+
pyyaml==6.0.3
139152
# via code-annotations
140153
requests==2.32.5
141154
# via
142155
# -r requirements/base.in
143156
# meilisearch
144-
# typesense
145157
six==1.17.0
146158
# via
147159
# edx-ccx-keys
148160
# event-tracking
149161
# python-dateutil
150-
soupsieve==2.8
162+
soupsieve==2.8.3
151163
# via beautifulsoup4
152-
sqlparse==0.5.3
164+
sqlparse==0.5.5
153165
# via django
154-
stevedore==5.5.0
166+
stevedore==5.7.0
155167
# via
156168
# code-annotations
157169
# edx-django-utils
158170
# edx-opaque-keys
159171
text-unidecode==1.3
160172
# via python-slugify
161-
typesense==1.1.1
173+
typesense==2.0.0
162174
# via -r requirements/base.in
163175
typing-extensions==4.15.0
164176
# via
177+
# anyio
165178
# beautifulsoup4
166179
# edx-opaque-keys
167180
# pydantic
168181
# pydantic-core
182+
# typesense
169183
# typing-inspection
170-
typing-inspection==0.4.1
184+
typing-inspection==0.4.2
171185
# via pydantic
172-
tzdata==2025.2
186+
tzdata==2025.3
173187
# via kombu
188+
tzlocal==5.3.1
189+
# via celery
174190
urllib3==1.26.20
175191
# via
176192
# elasticsearch
@@ -180,7 +196,7 @@ vine==5.1.0
180196
# amqp
181197
# celery
182198
# kombu
183-
wcwidth==0.2.13
199+
wcwidth==0.6.0
184200
# via prompt-toolkit
185201

186202
# The following packages are considered to be unsafe in a requirements file:

0 commit comments

Comments
 (0)