codeshift 0.3.3__py3-none-any.whl → 0.3.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- codeshift/cli/commands/apply.py +24 -2
- codeshift/cli/package_manager.py +102 -0
- codeshift/knowledge/generator.py +11 -1
- codeshift/knowledge_base/libraries/aiohttp.yaml +186 -0
- codeshift/knowledge_base/libraries/attrs.yaml +181 -0
- codeshift/knowledge_base/libraries/celery.yaml +244 -0
- codeshift/knowledge_base/libraries/click.yaml +195 -0
- codeshift/knowledge_base/libraries/django.yaml +355 -0
- codeshift/knowledge_base/libraries/flask.yaml +270 -0
- codeshift/knowledge_base/libraries/httpx.yaml +183 -0
- codeshift/knowledge_base/libraries/marshmallow.yaml +238 -0
- codeshift/knowledge_base/libraries/numpy.yaml +429 -0
- codeshift/knowledge_base/libraries/pytest.yaml +192 -0
- codeshift/knowledge_base/libraries/sqlalchemy.yaml +2 -1
- codeshift/migrator/engine.py +60 -0
- codeshift/migrator/transforms/__init__.py +2 -0
- codeshift/migrator/transforms/aiohttp_transformer.py +608 -0
- codeshift/migrator/transforms/attrs_transformer.py +570 -0
- codeshift/migrator/transforms/celery_transformer.py +546 -0
- codeshift/migrator/transforms/click_transformer.py +526 -0
- codeshift/migrator/transforms/django_transformer.py +852 -0
- codeshift/migrator/transforms/fastapi_transformer.py +12 -7
- codeshift/migrator/transforms/flask_transformer.py +505 -0
- codeshift/migrator/transforms/httpx_transformer.py +419 -0
- codeshift/migrator/transforms/marshmallow_transformer.py +515 -0
- codeshift/migrator/transforms/numpy_transformer.py +413 -0
- codeshift/migrator/transforms/pydantic_v1_to_v2.py +53 -8
- codeshift/migrator/transforms/pytest_transformer.py +351 -0
- codeshift/migrator/transforms/requests_transformer.py +74 -1
- codeshift/migrator/transforms/sqlalchemy_transformer.py +692 -39
- {codeshift-0.3.3.dist-info → codeshift-0.3.5.dist-info}/METADATA +46 -4
- {codeshift-0.3.3.dist-info → codeshift-0.3.5.dist-info}/RECORD +36 -15
- {codeshift-0.3.3.dist-info → codeshift-0.3.5.dist-info}/WHEEL +0 -0
- {codeshift-0.3.3.dist-info → codeshift-0.3.5.dist-info}/entry_points.txt +0 -0
- {codeshift-0.3.3.dist-info → codeshift-0.3.5.dist-info}/licenses/LICENSE +0 -0
- {codeshift-0.3.3.dist-info → codeshift-0.3.5.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# Django Knowledge Base
|
|
2
|
+
# Breaking changes from Django 2.2/3.x to 4.x/5.x
|
|
3
|
+
|
|
4
|
+
name: django
|
|
5
|
+
display_name: Django
|
|
6
|
+
description: High-level Python web framework for rapid development
|
|
7
|
+
migration_guide_url: https://docs.djangoproject.com/en/stable/howto/upgrade-version/
|
|
8
|
+
|
|
9
|
+
supported_migrations:
|
|
10
|
+
- from: "2.2"
|
|
11
|
+
to: "4.0"
|
|
12
|
+
- from: "3.0"
|
|
13
|
+
to: "4.0"
|
|
14
|
+
- from: "3.1"
|
|
15
|
+
to: "4.0"
|
|
16
|
+
- from: "3.2"
|
|
17
|
+
to: "4.0"
|
|
18
|
+
- from: "4.0"
|
|
19
|
+
to: "5.0"
|
|
20
|
+
- from: "4.1"
|
|
21
|
+
to: "5.0"
|
|
22
|
+
- from: "4.2"
|
|
23
|
+
to: "5.0"
|
|
24
|
+
|
|
25
|
+
breaking_changes:
|
|
26
|
+
# URL Configuration Changes (Django 4.0)
|
|
27
|
+
- symbol: "django.conf.urls.url"
|
|
28
|
+
change_type: removed
|
|
29
|
+
severity: high
|
|
30
|
+
from_version: "2.0"
|
|
31
|
+
to_version: "4.0"
|
|
32
|
+
description: "url() function removed, use path() or re_path() instead"
|
|
33
|
+
replacement: "django.urls.path or django.urls.re_path"
|
|
34
|
+
has_deterministic_transform: true
|
|
35
|
+
transform_name: url_to_path_or_re_path
|
|
36
|
+
notes: "url() with regex patterns should use re_path(), simple patterns should use path()"
|
|
37
|
+
|
|
38
|
+
- symbol: "django.conf.urls.include"
|
|
39
|
+
change_type: moved
|
|
40
|
+
severity: medium
|
|
41
|
+
from_version: "1.0"
|
|
42
|
+
to_version: "4.0"
|
|
43
|
+
description: "include() should be imported from django.urls instead of django.conf.urls"
|
|
44
|
+
replacement: "from django.urls import include"
|
|
45
|
+
has_deterministic_transform: true
|
|
46
|
+
transform_name: include_import_fix
|
|
47
|
+
|
|
48
|
+
# Encoding Functions Removed (Django 4.0/5.0)
|
|
49
|
+
- symbol: "django.utils.encoding.force_text"
|
|
50
|
+
change_type: removed
|
|
51
|
+
severity: high
|
|
52
|
+
from_version: "1.0"
|
|
53
|
+
to_version: "4.0"
|
|
54
|
+
description: "force_text() removed, use force_str() instead"
|
|
55
|
+
replacement: "django.utils.encoding.force_str"
|
|
56
|
+
has_deterministic_transform: true
|
|
57
|
+
transform_name: force_text_to_force_str
|
|
58
|
+
|
|
59
|
+
- symbol: "django.utils.encoding.smart_text"
|
|
60
|
+
change_type: removed
|
|
61
|
+
severity: high
|
|
62
|
+
from_version: "1.0"
|
|
63
|
+
to_version: "4.0"
|
|
64
|
+
description: "smart_text() removed, use smart_str() instead"
|
|
65
|
+
replacement: "django.utils.encoding.smart_str"
|
|
66
|
+
has_deterministic_transform: true
|
|
67
|
+
transform_name: smart_text_to_smart_str
|
|
68
|
+
|
|
69
|
+
# Translation Functions Removed (Django 4.0)
|
|
70
|
+
- symbol: "django.utils.translation.ugettext"
|
|
71
|
+
change_type: removed
|
|
72
|
+
severity: high
|
|
73
|
+
from_version: "1.0"
|
|
74
|
+
to_version: "4.0"
|
|
75
|
+
description: "ugettext() removed, use gettext() instead"
|
|
76
|
+
replacement: "django.utils.translation.gettext"
|
|
77
|
+
has_deterministic_transform: true
|
|
78
|
+
transform_name: ugettext_to_gettext
|
|
79
|
+
|
|
80
|
+
- symbol: "django.utils.translation.ugettext_lazy"
|
|
81
|
+
change_type: removed
|
|
82
|
+
severity: high
|
|
83
|
+
from_version: "1.0"
|
|
84
|
+
to_version: "4.0"
|
|
85
|
+
description: "ugettext_lazy() removed, use gettext_lazy() instead"
|
|
86
|
+
replacement: "django.utils.translation.gettext_lazy"
|
|
87
|
+
has_deterministic_transform: true
|
|
88
|
+
transform_name: ugettext_lazy_to_gettext_lazy
|
|
89
|
+
|
|
90
|
+
- symbol: "django.utils.translation.ugettext_noop"
|
|
91
|
+
change_type: removed
|
|
92
|
+
severity: medium
|
|
93
|
+
from_version: "1.0"
|
|
94
|
+
to_version: "4.0"
|
|
95
|
+
description: "ugettext_noop() removed, use gettext_noop() instead"
|
|
96
|
+
replacement: "django.utils.translation.gettext_noop"
|
|
97
|
+
has_deterministic_transform: true
|
|
98
|
+
transform_name: ugettext_noop_to_gettext_noop
|
|
99
|
+
|
|
100
|
+
- symbol: "django.utils.translation.ungettext"
|
|
101
|
+
change_type: removed
|
|
102
|
+
severity: medium
|
|
103
|
+
from_version: "1.0"
|
|
104
|
+
to_version: "4.0"
|
|
105
|
+
description: "ungettext() removed, use ngettext() instead"
|
|
106
|
+
replacement: "django.utils.translation.ngettext"
|
|
107
|
+
has_deterministic_transform: true
|
|
108
|
+
transform_name: ungettext_to_ngettext
|
|
109
|
+
|
|
110
|
+
- symbol: "django.utils.translation.ungettext_lazy"
|
|
111
|
+
change_type: removed
|
|
112
|
+
severity: medium
|
|
113
|
+
from_version: "1.0"
|
|
114
|
+
to_version: "4.0"
|
|
115
|
+
description: "ungettext_lazy() removed, use ngettext_lazy() instead"
|
|
116
|
+
replacement: "django.utils.translation.ngettext_lazy"
|
|
117
|
+
has_deterministic_transform: true
|
|
118
|
+
transform_name: ungettext_lazy_to_ngettext_lazy
|
|
119
|
+
|
|
120
|
+
# HTTP Utilities Removed (Django 4.0)
|
|
121
|
+
- symbol: "django.utils.http.urlquote"
|
|
122
|
+
change_type: removed
|
|
123
|
+
severity: medium
|
|
124
|
+
from_version: "1.0"
|
|
125
|
+
to_version: "4.0"
|
|
126
|
+
description: "urlquote() removed, use urllib.parse.quote instead"
|
|
127
|
+
replacement: "urllib.parse.quote"
|
|
128
|
+
has_deterministic_transform: true
|
|
129
|
+
transform_name: urlquote_to_urllib_quote
|
|
130
|
+
|
|
131
|
+
- symbol: "django.utils.http.urlquote_plus"
|
|
132
|
+
change_type: removed
|
|
133
|
+
severity: medium
|
|
134
|
+
from_version: "1.0"
|
|
135
|
+
to_version: "4.0"
|
|
136
|
+
description: "urlquote_plus() removed, use urllib.parse.quote_plus instead"
|
|
137
|
+
replacement: "urllib.parse.quote_plus"
|
|
138
|
+
has_deterministic_transform: true
|
|
139
|
+
transform_name: urlquote_plus_to_urllib
|
|
140
|
+
|
|
141
|
+
- symbol: "django.utils.http.urlunquote"
|
|
142
|
+
change_type: removed
|
|
143
|
+
severity: medium
|
|
144
|
+
from_version: "1.0"
|
|
145
|
+
to_version: "4.0"
|
|
146
|
+
description: "urlunquote() removed, use urllib.parse.unquote instead"
|
|
147
|
+
replacement: "urllib.parse.unquote"
|
|
148
|
+
has_deterministic_transform: true
|
|
149
|
+
transform_name: urlunquote_to_urllib
|
|
150
|
+
|
|
151
|
+
- symbol: "django.utils.http.urlunquote_plus"
|
|
152
|
+
change_type: removed
|
|
153
|
+
severity: medium
|
|
154
|
+
from_version: "1.0"
|
|
155
|
+
to_version: "4.0"
|
|
156
|
+
description: "urlunquote_plus() removed, use urllib.parse.unquote_plus instead"
|
|
157
|
+
replacement: "urllib.parse.unquote_plus"
|
|
158
|
+
has_deterministic_transform: true
|
|
159
|
+
transform_name: urlunquote_plus_to_urllib
|
|
160
|
+
|
|
161
|
+
- symbol: "django.utils.http.is_safe_url"
|
|
162
|
+
change_type: renamed
|
|
163
|
+
severity: medium
|
|
164
|
+
from_version: "1.0"
|
|
165
|
+
to_version: "4.0"
|
|
166
|
+
description: "is_safe_url() renamed to url_has_allowed_host_and_scheme()"
|
|
167
|
+
replacement: "django.utils.http.url_has_allowed_host_and_scheme"
|
|
168
|
+
has_deterministic_transform: true
|
|
169
|
+
transform_name: is_safe_url_to_url_has_allowed
|
|
170
|
+
|
|
171
|
+
# Model Field Changes (Django 4.0)
|
|
172
|
+
- symbol: "NullBooleanField"
|
|
173
|
+
change_type: removed
|
|
174
|
+
severity: high
|
|
175
|
+
from_version: "1.0"
|
|
176
|
+
to_version: "4.0"
|
|
177
|
+
description: "NullBooleanField removed, use BooleanField(null=True) instead"
|
|
178
|
+
replacement: "BooleanField(null=True)"
|
|
179
|
+
has_deterministic_transform: true
|
|
180
|
+
transform_name: null_boolean_field_to_boolean_field
|
|
181
|
+
notes: "Except for historical migrations"
|
|
182
|
+
|
|
183
|
+
- symbol: "django.contrib.postgres.fields.JSONField"
|
|
184
|
+
change_type: moved
|
|
185
|
+
severity: high
|
|
186
|
+
from_version: "1.0"
|
|
187
|
+
to_version: "4.0"
|
|
188
|
+
description: "PostgreSQL-specific JSONField moved to django.db.models.JSONField"
|
|
189
|
+
replacement: "django.db.models.JSONField"
|
|
190
|
+
has_deterministic_transform: true
|
|
191
|
+
transform_name: postgres_jsonfield_to_models
|
|
192
|
+
notes: "The cross-database JSONField is now preferred"
|
|
193
|
+
|
|
194
|
+
# Request Methods Removed (Django 4.0)
|
|
195
|
+
- symbol: "request.is_ajax()"
|
|
196
|
+
change_type: removed
|
|
197
|
+
severity: high
|
|
198
|
+
from_version: "1.0"
|
|
199
|
+
to_version: "4.0"
|
|
200
|
+
description: "HttpRequest.is_ajax() method removed"
|
|
201
|
+
replacement: "request.headers.get('X-Requested-With') == 'XMLHttpRequest'"
|
|
202
|
+
has_deterministic_transform: true
|
|
203
|
+
transform_name: is_ajax_to_header_check
|
|
204
|
+
notes: "Check X-Requested-With header directly"
|
|
205
|
+
|
|
206
|
+
# Timezone Changes (Django 5.0)
|
|
207
|
+
- symbol: "django.utils.timezone.utc"
|
|
208
|
+
change_type: removed
|
|
209
|
+
severity: medium
|
|
210
|
+
from_version: "4.0"
|
|
211
|
+
to_version: "5.0"
|
|
212
|
+
description: "django.utils.timezone.utc removed, use datetime.timezone.utc"
|
|
213
|
+
replacement: "datetime.timezone.utc"
|
|
214
|
+
has_deterministic_transform: true
|
|
215
|
+
transform_name: timezone_utc_to_datetime
|
|
216
|
+
|
|
217
|
+
# Settings Changes (Django 5.0)
|
|
218
|
+
- symbol: "USE_L10N"
|
|
219
|
+
change_type: removed
|
|
220
|
+
severity: low
|
|
221
|
+
from_version: "4.0"
|
|
222
|
+
to_version: "5.0"
|
|
223
|
+
description: "USE_L10N setting removed, localization is always enabled"
|
|
224
|
+
replacement: "Remove USE_L10N from settings"
|
|
225
|
+
has_deterministic_transform: false
|
|
226
|
+
notes: "Remove this setting entirely, localization is now always enabled"
|
|
227
|
+
|
|
228
|
+
- symbol: "PASSWORD_RESET_TIMEOUT_DAYS"
|
|
229
|
+
change_type: removed
|
|
230
|
+
severity: medium
|
|
231
|
+
from_version: "2.0"
|
|
232
|
+
to_version: "4.0"
|
|
233
|
+
description: "PASSWORD_RESET_TIMEOUT_DAYS removed, use PASSWORD_RESET_TIMEOUT (in seconds)"
|
|
234
|
+
replacement: "PASSWORD_RESET_TIMEOUT"
|
|
235
|
+
has_deterministic_transform: false
|
|
236
|
+
notes: "Multiply days by 86400 to convert to seconds"
|
|
237
|
+
|
|
238
|
+
- symbol: "default_app_config"
|
|
239
|
+
change_type: removed
|
|
240
|
+
severity: low
|
|
241
|
+
from_version: "1.0"
|
|
242
|
+
to_version: "4.0"
|
|
243
|
+
description: "default_app_config in __init__.py is no longer needed"
|
|
244
|
+
replacement: "Remove default_app_config"
|
|
245
|
+
has_deterministic_transform: true
|
|
246
|
+
transform_name: remove_default_app_config
|
|
247
|
+
notes: "Django now automatically discovers AppConfig"
|
|
248
|
+
|
|
249
|
+
# Template Tag Changes (Django 4.0)
|
|
250
|
+
- symbol: "{% ifequal %}"
|
|
251
|
+
change_type: removed
|
|
252
|
+
severity: medium
|
|
253
|
+
from_version: "1.0"
|
|
254
|
+
to_version: "4.0"
|
|
255
|
+
description: "{% ifequal %} template tag removed, use {% if %} instead"
|
|
256
|
+
replacement: "{% if var1 == var2 %}"
|
|
257
|
+
has_deterministic_transform: false
|
|
258
|
+
notes: "Manual template migration required"
|
|
259
|
+
|
|
260
|
+
- symbol: "{% ifnotequal %}"
|
|
261
|
+
change_type: removed
|
|
262
|
+
severity: medium
|
|
263
|
+
from_version: "1.0"
|
|
264
|
+
to_version: "4.0"
|
|
265
|
+
description: "{% ifnotequal %} template tag removed, use {% if %} instead"
|
|
266
|
+
replacement: "{% if var1 != var2 %}"
|
|
267
|
+
has_deterministic_transform: false
|
|
268
|
+
notes: "Manual template migration required"
|
|
269
|
+
|
|
270
|
+
# Admin Changes (Django 4.0)
|
|
271
|
+
- symbol: "django.contrib.admin.util"
|
|
272
|
+
change_type: moved
|
|
273
|
+
severity: low
|
|
274
|
+
from_version: "1.0"
|
|
275
|
+
to_version: "2.0"
|
|
276
|
+
description: "django.contrib.admin.util moved to django.contrib.admin.utils"
|
|
277
|
+
replacement: "django.contrib.admin.utils"
|
|
278
|
+
has_deterministic_transform: true
|
|
279
|
+
transform_name: admin_util_to_utils
|
|
280
|
+
|
|
281
|
+
# Form Changes (Django 4.0)
|
|
282
|
+
- symbol: "django.forms.util"
|
|
283
|
+
change_type: moved
|
|
284
|
+
severity: low
|
|
285
|
+
from_version: "1.0"
|
|
286
|
+
to_version: "2.0"
|
|
287
|
+
description: "django.forms.util moved to django.forms.utils"
|
|
288
|
+
replacement: "django.forms.utils"
|
|
289
|
+
has_deterministic_transform: true
|
|
290
|
+
transform_name: forms_util_to_utils
|
|
291
|
+
|
|
292
|
+
# GIS Admin Changes (Django 5.0)
|
|
293
|
+
- symbol: "django.contrib.gis.admin.GeoModelAdmin"
|
|
294
|
+
change_type: removed
|
|
295
|
+
severity: medium
|
|
296
|
+
from_version: "4.0"
|
|
297
|
+
to_version: "5.0"
|
|
298
|
+
description: "GeoModelAdmin deprecated and removed, use ModelAdmin with GISModelAdmin mixin"
|
|
299
|
+
replacement: "django.contrib.admin.ModelAdmin"
|
|
300
|
+
has_deterministic_transform: false
|
|
301
|
+
notes: "Manual migration may be needed for GIS-specific features"
|
|
302
|
+
|
|
303
|
+
- symbol: "django.contrib.gis.admin.OSMGeoAdmin"
|
|
304
|
+
change_type: removed
|
|
305
|
+
severity: medium
|
|
306
|
+
from_version: "4.0"
|
|
307
|
+
to_version: "5.0"
|
|
308
|
+
description: "OSMGeoAdmin deprecated and removed"
|
|
309
|
+
replacement: "django.contrib.admin.ModelAdmin with OSM widget"
|
|
310
|
+
has_deterministic_transform: false
|
|
311
|
+
notes: "Configure OSM widget manually"
|
|
312
|
+
|
|
313
|
+
# Session Serializer (Django 4.1)
|
|
314
|
+
- symbol: "django.contrib.sessions.serializers.PickleSerializer"
|
|
315
|
+
change_type: removed
|
|
316
|
+
severity: high
|
|
317
|
+
from_version: "4.0"
|
|
318
|
+
to_version: "4.1"
|
|
319
|
+
description: "PickleSerializer removed due to security risks"
|
|
320
|
+
replacement: "django.contrib.sessions.serializers.JSONSerializer"
|
|
321
|
+
has_deterministic_transform: true
|
|
322
|
+
transform_name: pickle_serializer_to_json
|
|
323
|
+
|
|
324
|
+
# Database Backend Changes (Django 3.0)
|
|
325
|
+
- symbol: "django.db.backends.postgresql_psycopg2"
|
|
326
|
+
change_type: renamed
|
|
327
|
+
severity: medium
|
|
328
|
+
from_version: "1.0"
|
|
329
|
+
to_version: "3.0"
|
|
330
|
+
description: "postgresql_psycopg2 backend renamed to postgresql"
|
|
331
|
+
replacement: "django.db.backends.postgresql"
|
|
332
|
+
has_deterministic_transform: false
|
|
333
|
+
notes: "Update DATABASES ENGINE setting"
|
|
334
|
+
|
|
335
|
+
# Static Files (Django 4.1)
|
|
336
|
+
- symbol: "django.contrib.staticfiles.storage.CachedStaticFilesStorage"
|
|
337
|
+
change_type: removed
|
|
338
|
+
severity: medium
|
|
339
|
+
from_version: "1.0"
|
|
340
|
+
to_version: "4.1"
|
|
341
|
+
description: "CachedStaticFilesStorage removed, use ManifestStaticFilesStorage"
|
|
342
|
+
replacement: "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
|
|
343
|
+
has_deterministic_transform: true
|
|
344
|
+
transform_name: cached_storage_to_manifest
|
|
345
|
+
|
|
346
|
+
# Test Runner Changes (Django 4.0)
|
|
347
|
+
- symbol: "django.test.runner.reorder_suite"
|
|
348
|
+
change_type: renamed
|
|
349
|
+
severity: low
|
|
350
|
+
from_version: "1.0"
|
|
351
|
+
to_version: "4.0"
|
|
352
|
+
description: "reorder_suite() renamed to reorder_tests()"
|
|
353
|
+
replacement: "django.test.runner.reorder_tests"
|
|
354
|
+
has_deterministic_transform: true
|
|
355
|
+
transform_name: reorder_suite_to_reorder_tests
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Flask Knowledge Base
|
|
2
|
+
# Breaking changes from Flask 1.x to 2.x/3.x
|
|
3
|
+
|
|
4
|
+
name: flask
|
|
5
|
+
display_name: Flask
|
|
6
|
+
description: Lightweight WSGI web application framework
|
|
7
|
+
migration_guide_url: https://flask.palletsprojects.com/en/stable/changes/
|
|
8
|
+
|
|
9
|
+
supported_migrations:
|
|
10
|
+
- from: "1.0"
|
|
11
|
+
to: "2.0"
|
|
12
|
+
- from: "2.0"
|
|
13
|
+
to: "3.0"
|
|
14
|
+
|
|
15
|
+
breaking_changes:
|
|
16
|
+
# Import changes (Flask 2.3/3.0)
|
|
17
|
+
- symbol: "flask.escape"
|
|
18
|
+
change_type: moved
|
|
19
|
+
severity: high
|
|
20
|
+
from_version: "1.0"
|
|
21
|
+
to_version: "2.3"
|
|
22
|
+
description: "escape function moved from flask to markupsafe"
|
|
23
|
+
replacement: "from markupsafe import escape"
|
|
24
|
+
has_deterministic_transform: true
|
|
25
|
+
transform_name: flask_escape_to_markupsafe
|
|
26
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
27
|
+
|
|
28
|
+
- symbol: "flask.Markup"
|
|
29
|
+
change_type: moved
|
|
30
|
+
severity: high
|
|
31
|
+
from_version: "1.0"
|
|
32
|
+
to_version: "2.3"
|
|
33
|
+
description: "Markup class moved from flask to markupsafe"
|
|
34
|
+
replacement: "from markupsafe import Markup"
|
|
35
|
+
has_deterministic_transform: true
|
|
36
|
+
transform_name: flask_markup_to_markupsafe
|
|
37
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
38
|
+
|
|
39
|
+
# send_file parameter changes (Flask 2.0)
|
|
40
|
+
- symbol: "send_file(attachment_filename=...)"
|
|
41
|
+
change_type: renamed
|
|
42
|
+
severity: high
|
|
43
|
+
from_version: "1.0"
|
|
44
|
+
to_version: "2.0"
|
|
45
|
+
description: "attachment_filename parameter renamed to download_name"
|
|
46
|
+
replacement: "send_file(download_name=...)"
|
|
47
|
+
has_deterministic_transform: true
|
|
48
|
+
transform_name: send_file_attachment_filename_to_download_name
|
|
49
|
+
notes: "Deprecated in 2.0, removed in 2.2"
|
|
50
|
+
|
|
51
|
+
- symbol: "send_file(cache_timeout=...)"
|
|
52
|
+
change_type: renamed
|
|
53
|
+
severity: medium
|
|
54
|
+
from_version: "1.0"
|
|
55
|
+
to_version: "2.0"
|
|
56
|
+
description: "cache_timeout parameter renamed to max_age"
|
|
57
|
+
replacement: "send_file(max_age=...)"
|
|
58
|
+
has_deterministic_transform: true
|
|
59
|
+
transform_name: send_file_cache_timeout_to_max_age
|
|
60
|
+
notes: "Deprecated in 2.0, removed in 2.2"
|
|
61
|
+
|
|
62
|
+
- symbol: "send_file(add_etags=...)"
|
|
63
|
+
change_type: renamed
|
|
64
|
+
severity: low
|
|
65
|
+
from_version: "1.0"
|
|
66
|
+
to_version: "2.0"
|
|
67
|
+
description: "add_etags parameter renamed to etag"
|
|
68
|
+
replacement: "send_file(etag=...)"
|
|
69
|
+
has_deterministic_transform: true
|
|
70
|
+
transform_name: send_file_add_etags_to_etag
|
|
71
|
+
notes: "Deprecated in 2.0, removed in 2.2"
|
|
72
|
+
|
|
73
|
+
# send_from_directory parameter changes (Flask 2.0)
|
|
74
|
+
- symbol: "send_from_directory(filename=...)"
|
|
75
|
+
change_type: renamed
|
|
76
|
+
severity: medium
|
|
77
|
+
from_version: "1.0"
|
|
78
|
+
to_version: "2.0"
|
|
79
|
+
description: "filename parameter renamed to path in send_from_directory"
|
|
80
|
+
replacement: "send_from_directory(path=...)"
|
|
81
|
+
has_deterministic_transform: true
|
|
82
|
+
transform_name: send_from_directory_filename_to_path
|
|
83
|
+
notes: "Deprecated in 2.0, removed in 2.2"
|
|
84
|
+
|
|
85
|
+
# Decorator removals (Flask 2.2/3.0)
|
|
86
|
+
- symbol: "@app.before_first_request"
|
|
87
|
+
change_type: removed
|
|
88
|
+
severity: high
|
|
89
|
+
from_version: "1.0"
|
|
90
|
+
to_version: "2.2"
|
|
91
|
+
description: "before_first_request decorator is deprecated, run setup code when creating the app"
|
|
92
|
+
replacement: "Run setup in create_app() function or use app_context"
|
|
93
|
+
has_deterministic_transform: false
|
|
94
|
+
transform_name: before_first_request_removal
|
|
95
|
+
notes: "Deprecated in 2.2, removed in 3.0. Requires manual migration."
|
|
96
|
+
|
|
97
|
+
- symbol: "@bp.before_app_first_request"
|
|
98
|
+
change_type: removed
|
|
99
|
+
severity: high
|
|
100
|
+
from_version: "1.0"
|
|
101
|
+
to_version: "2.2"
|
|
102
|
+
description: "Blueprint before_app_first_request decorator is deprecated"
|
|
103
|
+
replacement: "Run setup in create_app() function"
|
|
104
|
+
has_deterministic_transform: false
|
|
105
|
+
transform_name: bp_before_app_first_request_removal
|
|
106
|
+
notes: "Deprecated in 2.2, removed in 3.0. Requires manual migration."
|
|
107
|
+
|
|
108
|
+
# JSON encoder/decoder changes (Flask 2.2/3.0)
|
|
109
|
+
- symbol: "app.json_encoder"
|
|
110
|
+
change_type: removed
|
|
111
|
+
severity: high
|
|
112
|
+
from_version: "1.0"
|
|
113
|
+
to_version: "2.2"
|
|
114
|
+
description: "json_encoder attribute replaced with app.json provider"
|
|
115
|
+
replacement: "app.json = CustomJSONProvider(app)"
|
|
116
|
+
has_deterministic_transform: false
|
|
117
|
+
transform_name: json_encoder_to_provider
|
|
118
|
+
notes: "Deprecated in 2.2, removed in 3.0. Requires creating a JSONProvider subclass."
|
|
119
|
+
|
|
120
|
+
- symbol: "app.json_decoder"
|
|
121
|
+
change_type: removed
|
|
122
|
+
severity: high
|
|
123
|
+
from_version: "1.0"
|
|
124
|
+
to_version: "2.2"
|
|
125
|
+
description: "json_decoder attribute replaced with app.json provider"
|
|
126
|
+
replacement: "app.json = CustomJSONProvider(app)"
|
|
127
|
+
has_deterministic_transform: false
|
|
128
|
+
transform_name: json_decoder_to_provider
|
|
129
|
+
notes: "Deprecated in 2.2, removed in 3.0. Requires creating a JSONProvider subclass."
|
|
130
|
+
|
|
131
|
+
- symbol: "flask.json.JSONEncoder"
|
|
132
|
+
change_type: removed
|
|
133
|
+
severity: high
|
|
134
|
+
from_version: "1.0"
|
|
135
|
+
to_version: "3.0"
|
|
136
|
+
description: "JSONEncoder class removed, use JSONProvider instead"
|
|
137
|
+
replacement: "Subclass DefaultJSONProvider"
|
|
138
|
+
has_deterministic_transform: false
|
|
139
|
+
notes: "Fully removed in 3.0"
|
|
140
|
+
|
|
141
|
+
# Context stack removals (Flask 2.3/3.0)
|
|
142
|
+
- symbol: "flask.globals._app_ctx_stack"
|
|
143
|
+
change_type: removed
|
|
144
|
+
severity: high
|
|
145
|
+
from_version: "1.0"
|
|
146
|
+
to_version: "2.3"
|
|
147
|
+
description: "_app_ctx_stack is deprecated, use flask.g instead"
|
|
148
|
+
replacement: "flask.g"
|
|
149
|
+
has_deterministic_transform: true
|
|
150
|
+
transform_name: app_ctx_stack_to_g
|
|
151
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
152
|
+
|
|
153
|
+
- symbol: "flask.globals._request_ctx_stack"
|
|
154
|
+
change_type: removed
|
|
155
|
+
severity: high
|
|
156
|
+
from_version: "1.0"
|
|
157
|
+
to_version: "2.3"
|
|
158
|
+
description: "_request_ctx_stack is deprecated, use flask.g instead"
|
|
159
|
+
replacement: "flask.g"
|
|
160
|
+
has_deterministic_transform: true
|
|
161
|
+
transform_name: request_ctx_stack_to_g
|
|
162
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
163
|
+
|
|
164
|
+
# Environment configuration removals (Flask 2.3/3.0)
|
|
165
|
+
- symbol: "FLASK_ENV"
|
|
166
|
+
change_type: removed
|
|
167
|
+
severity: medium
|
|
168
|
+
from_version: "1.0"
|
|
169
|
+
to_version: "2.3"
|
|
170
|
+
description: "FLASK_ENV environment variable is deprecated, use FLASK_DEBUG"
|
|
171
|
+
replacement: "FLASK_DEBUG=1 or flask --debug"
|
|
172
|
+
has_deterministic_transform: false
|
|
173
|
+
notes: "Deprecated in 2.2, removed in 2.3"
|
|
174
|
+
|
|
175
|
+
- symbol: "app.env"
|
|
176
|
+
change_type: removed
|
|
177
|
+
severity: medium
|
|
178
|
+
from_version: "1.0"
|
|
179
|
+
to_version: "2.3"
|
|
180
|
+
description: "app.env property is deprecated"
|
|
181
|
+
replacement: "app.debug"
|
|
182
|
+
has_deterministic_transform: true
|
|
183
|
+
transform_name: app_env_to_debug
|
|
184
|
+
notes: "Deprecated in 2.2, removed in 2.3"
|
|
185
|
+
|
|
186
|
+
- symbol: "config['ENV']"
|
|
187
|
+
change_type: removed
|
|
188
|
+
severity: medium
|
|
189
|
+
from_version: "1.0"
|
|
190
|
+
to_version: "2.3"
|
|
191
|
+
description: "ENV config key is deprecated"
|
|
192
|
+
replacement: "Use DEBUG config key"
|
|
193
|
+
has_deterministic_transform: false
|
|
194
|
+
notes: "Deprecated in 2.2, removed in 2.3"
|
|
195
|
+
|
|
196
|
+
# Utility function removals (Flask 2.1)
|
|
197
|
+
- symbol: "flask.safe_join"
|
|
198
|
+
change_type: moved
|
|
199
|
+
severity: medium
|
|
200
|
+
from_version: "1.0"
|
|
201
|
+
to_version: "2.0"
|
|
202
|
+
description: "safe_join moved to werkzeug.utils"
|
|
203
|
+
replacement: "from werkzeug.utils import safe_join"
|
|
204
|
+
has_deterministic_transform: true
|
|
205
|
+
transform_name: flask_safe_join_to_werkzeug
|
|
206
|
+
notes: "Deprecated in 2.0, removed in 2.1"
|
|
207
|
+
|
|
208
|
+
# Config loading changes (Flask 2.1)
|
|
209
|
+
- symbol: "app.config.from_json"
|
|
210
|
+
change_type: renamed
|
|
211
|
+
severity: medium
|
|
212
|
+
from_version: "1.0"
|
|
213
|
+
to_version: "2.1"
|
|
214
|
+
description: "from_json removed, use from_file with json.load"
|
|
215
|
+
replacement: "app.config.from_file('config.json', load=json.load)"
|
|
216
|
+
has_deterministic_transform: true
|
|
217
|
+
transform_name: config_from_json_to_from_file
|
|
218
|
+
notes: "Removed in 2.1"
|
|
219
|
+
|
|
220
|
+
# Test client changes (Flask 2.1)
|
|
221
|
+
- symbol: "client.get(as_tuple=True)"
|
|
222
|
+
change_type: removed
|
|
223
|
+
severity: medium
|
|
224
|
+
from_version: "1.0"
|
|
225
|
+
to_version: "2.0"
|
|
226
|
+
description: "Test client as_tuple parameter removed, use response.request.environ"
|
|
227
|
+
replacement: "response = client.get(...); environ = response.request.environ"
|
|
228
|
+
has_deterministic_transform: false
|
|
229
|
+
notes: "Deprecated in 2.0, removed in 2.1"
|
|
230
|
+
|
|
231
|
+
# JSON config keys removed (Flask 2.3/3.0)
|
|
232
|
+
- symbol: "config['JSON_AS_ASCII']"
|
|
233
|
+
change_type: removed
|
|
234
|
+
severity: low
|
|
235
|
+
from_version: "1.0"
|
|
236
|
+
to_version: "2.3"
|
|
237
|
+
description: "JSON_AS_ASCII config key removed, configure on app.json provider"
|
|
238
|
+
replacement: "Configure via app.json provider"
|
|
239
|
+
has_deterministic_transform: false
|
|
240
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
241
|
+
|
|
242
|
+
- symbol: "config['JSON_SORT_KEYS']"
|
|
243
|
+
change_type: removed
|
|
244
|
+
severity: low
|
|
245
|
+
from_version: "1.0"
|
|
246
|
+
to_version: "2.3"
|
|
247
|
+
description: "JSON_SORT_KEYS config key removed, configure on app.json provider"
|
|
248
|
+
replacement: "Configure via app.json provider"
|
|
249
|
+
has_deterministic_transform: false
|
|
250
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
251
|
+
|
|
252
|
+
- symbol: "config['JSONIFY_MIMETYPE']"
|
|
253
|
+
change_type: removed
|
|
254
|
+
severity: low
|
|
255
|
+
from_version: "1.0"
|
|
256
|
+
to_version: "2.3"
|
|
257
|
+
description: "JSONIFY_MIMETYPE config key removed, configure on app.json provider"
|
|
258
|
+
replacement: "Configure via app.json provider"
|
|
259
|
+
has_deterministic_transform: false
|
|
260
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|
|
261
|
+
|
|
262
|
+
- symbol: "config['JSONIFY_PRETTYPRINT_REGULAR']"
|
|
263
|
+
change_type: removed
|
|
264
|
+
severity: low
|
|
265
|
+
from_version: "1.0"
|
|
266
|
+
to_version: "2.3"
|
|
267
|
+
description: "JSONIFY_PRETTYPRINT_REGULAR config key removed, configure on app.json provider"
|
|
268
|
+
replacement: "Configure via app.json provider"
|
|
269
|
+
has_deterministic_transform: false
|
|
270
|
+
notes: "Deprecated in 2.3, removed in 3.0"
|