codeshift 0.2.0__py3-none-any.whl → 0.3.1__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.
@@ -0,0 +1,190 @@
1
+ # FastAPI Knowledge Base
2
+ # Breaking changes from 0.x to 0.100+/1.0
3
+
4
+ name: fastapi
5
+ display_name: FastAPI
6
+ description: Modern, fast web framework for building APIs with Python based on type hints
7
+ migration_guide_url: https://fastapi.tiangolo.com/release-notes/
8
+
9
+ supported_migrations:
10
+ - from: "0.99"
11
+ to: "0.100"
12
+ - from: "0.x"
13
+ to: "1.0"
14
+
15
+ breaking_changes:
16
+ # Pydantic v2 compatibility changes (0.100+)
17
+ - symbol: "response_model_exclude_unset"
18
+ change_type: behavior_changed
19
+ severity: medium
20
+ from_version: "0.99"
21
+ to_version: "0.100"
22
+ description: "Pydantic v2 changes how unset fields are handled in response models"
23
+ replacement: "Use response_model_exclude_unset=True explicitly"
24
+ has_deterministic_transform: false
25
+ notes: "Behavior may differ between Pydantic v1 and v2"
26
+
27
+ - symbol: "Field(regex=...)"
28
+ change_type: renamed
29
+ severity: medium
30
+ from_version: "0.99"
31
+ to_version: "0.100"
32
+ description: "Pydantic Field regex parameter renamed to pattern"
33
+ replacement: "Field(pattern=...)"
34
+ has_deterministic_transform: true
35
+ transform_name: field_regex_to_pattern
36
+
37
+ - symbol: "Body(regex=...)"
38
+ change_type: renamed
39
+ severity: medium
40
+ from_version: "0.99"
41
+ to_version: "0.100"
42
+ description: "Body regex parameter renamed to pattern"
43
+ replacement: "Body(pattern=...)"
44
+ has_deterministic_transform: true
45
+ transform_name: body_regex_to_pattern
46
+
47
+ - symbol: "Query(regex=...)"
48
+ change_type: renamed
49
+ severity: medium
50
+ from_version: "0.99"
51
+ to_version: "0.100"
52
+ description: "Query regex parameter renamed to pattern"
53
+ replacement: "Query(pattern=...)"
54
+ has_deterministic_transform: true
55
+ transform_name: query_regex_to_pattern
56
+
57
+ - symbol: "Path(regex=...)"
58
+ change_type: renamed
59
+ severity: medium
60
+ from_version: "0.99"
61
+ to_version: "0.100"
62
+ description: "Path regex parameter renamed to pattern"
63
+ replacement: "Path(pattern=...)"
64
+ has_deterministic_transform: true
65
+ transform_name: path_regex_to_pattern
66
+
67
+ # Deprecated features
68
+ - symbol: "from starlette.responses import JSONResponse"
69
+ change_type: deprecated
70
+ severity: low
71
+ from_version: "0.x"
72
+ to_version: "1.0"
73
+ description: "Import JSONResponse directly from fastapi.responses instead"
74
+ replacement: "from fastapi.responses import JSONResponse"
75
+ has_deterministic_transform: true
76
+ transform_name: starlette_to_fastapi_responses
77
+
78
+ - symbol: "from starlette.requests import Request"
79
+ change_type: deprecated
80
+ severity: low
81
+ from_version: "0.x"
82
+ to_version: "1.0"
83
+ description: "Import Request directly from fastapi instead"
84
+ replacement: "from fastapi import Request"
85
+ has_deterministic_transform: true
86
+ transform_name: starlette_to_fastapi_request
87
+
88
+ - symbol: "from starlette.status import *"
89
+ change_type: deprecated
90
+ severity: low
91
+ from_version: "0.x"
92
+ to_version: "1.0"
93
+ description: "Import status from fastapi instead"
94
+ replacement: "from fastapi import status"
95
+ has_deterministic_transform: true
96
+ transform_name: starlette_to_fastapi_status
97
+
98
+ - symbol: "from starlette.websockets import WebSocket"
99
+ change_type: deprecated
100
+ severity: low
101
+ from_version: "0.x"
102
+ to_version: "1.0"
103
+ description: "Import WebSocket directly from fastapi instead"
104
+ replacement: "from fastapi import WebSocket"
105
+ has_deterministic_transform: true
106
+ transform_name: starlette_to_fastapi_websocket
107
+
108
+ # OpenAPI schema changes
109
+ - symbol: "openapi_prefix"
110
+ change_type: removed
111
+ severity: medium
112
+ from_version: "0.x"
113
+ to_version: "0.100"
114
+ description: "openapi_prefix parameter removed from FastAPI app"
115
+ replacement: "Use root_path parameter instead"
116
+ has_deterministic_transform: true
117
+ transform_name: openapi_prefix_to_root_path
118
+
119
+ - symbol: "app.openapi_schema"
120
+ change_type: behavior_changed
121
+ severity: low
122
+ from_version: "0.99"
123
+ to_version: "0.100"
124
+ description: "OpenAPI schema generation updated for Pydantic v2 compatibility"
125
+ replacement: "Review generated schema for Pydantic v2 format"
126
+ has_deterministic_transform: false
127
+ notes: "Schema structure may differ slightly"
128
+
129
+ # Dependency Injection changes
130
+ - symbol: "Depends(use_cache=False)"
131
+ change_type: renamed
132
+ severity: low
133
+ from_version: "0.x"
134
+ to_version: "0.100"
135
+ description: "use_cache parameter renamed to use_cached"
136
+ replacement: "Depends(use_cached=False)"
137
+ has_deterministic_transform: true
138
+ transform_name: depends_use_cache_rename
139
+
140
+ # Response model changes
141
+ - symbol: "response_model_by_alias"
142
+ change_type: behavior_changed
143
+ severity: medium
144
+ from_version: "0.99"
145
+ to_version: "0.100"
146
+ description: "Pydantic v2 changes alias behavior in response models"
147
+ replacement: "Use model_config = ConfigDict(populate_by_name=True) in Pydantic models"
148
+ has_deterministic_transform: false
149
+ notes: "May require updates to Pydantic models"
150
+
151
+ # Form and File handling
152
+ - symbol: "UploadFile.file"
153
+ change_type: behavior_changed
154
+ severity: low
155
+ from_version: "0.x"
156
+ to_version: "0.100"
157
+ description: "UploadFile.file is now a SpooledTemporaryFile with async methods"
158
+ replacement: "Use await file.read() instead of file.file.read()"
159
+ has_deterministic_transform: false
160
+ notes: "Async methods preferred for file operations"
161
+
162
+ # Security utilities
163
+ - symbol: "OAuth2PasswordRequestForm"
164
+ change_type: behavior_changed
165
+ severity: low
166
+ from_version: "0.x"
167
+ to_version: "0.100"
168
+ description: "OAuth2PasswordRequestForm scopes parameter handling changed"
169
+ replacement: "Check scopes handling in your authentication flow"
170
+ has_deterministic_transform: false
171
+
172
+ # Background tasks
173
+ - symbol: "BackgroundTasks.add_task"
174
+ change_type: behavior_changed
175
+ severity: low
176
+ from_version: "0.x"
177
+ to_version: "0.100"
178
+ description: "BackgroundTasks now uses anyio for better async handling"
179
+ replacement: "No code changes required, but behavior may differ"
180
+ has_deterministic_transform: false
181
+
182
+ # Middleware changes
183
+ - symbol: "app.add_middleware"
184
+ change_type: behavior_changed
185
+ severity: medium
186
+ from_version: "0.x"
187
+ to_version: "0.100"
188
+ description: "Middleware execution order and exception handling improved"
189
+ replacement: "Review middleware order and exception handling"
190
+ has_deterministic_transform: false
@@ -0,0 +1,311 @@
1
+ # Pandas Knowledge Base
2
+ # Breaking changes from 1.x to 2.0
3
+
4
+ name: pandas
5
+ display_name: Pandas
6
+ description: Powerful data structures for data analysis, time series, and statistics
7
+ migration_guide_url: https://pandas.pydata.org/docs/whatsnew/v2.0.0.html
8
+
9
+ supported_migrations:
10
+ - from: "1.5"
11
+ to: "2.0"
12
+
13
+ breaking_changes:
14
+ # Major deprecations and removals
15
+ - symbol: "DataFrame.append()"
16
+ change_type: removed
17
+ severity: high
18
+ from_version: "1.5"
19
+ to_version: "2.0"
20
+ description: "DataFrame.append() removed in favor of pd.concat()"
21
+ replacement: "pd.concat([df1, df2], ignore_index=True)"
22
+ has_deterministic_transform: true
23
+ transform_name: append_to_concat
24
+ notes: "Use pd.concat() with a list of DataFrames"
25
+
26
+ - symbol: "Series.append()"
27
+ change_type: removed
28
+ severity: high
29
+ from_version: "1.5"
30
+ to_version: "2.0"
31
+ description: "Series.append() removed in favor of pd.concat()"
32
+ replacement: "pd.concat([s1, s2], ignore_index=True)"
33
+ has_deterministic_transform: true
34
+ transform_name: series_append_to_concat
35
+
36
+ - symbol: "DataFrame.iteritems()"
37
+ change_type: removed
38
+ severity: medium
39
+ from_version: "1.5"
40
+ to_version: "2.0"
41
+ description: "iteritems() removed, use items() instead"
42
+ replacement: "DataFrame.items()"
43
+ has_deterministic_transform: true
44
+ transform_name: iteritems_to_items
45
+
46
+ - symbol: "Series.iteritems()"
47
+ change_type: removed
48
+ severity: medium
49
+ from_version: "1.5"
50
+ to_version: "2.0"
51
+ description: "iteritems() removed, use items() instead"
52
+ replacement: "Series.items()"
53
+ has_deterministic_transform: true
54
+ transform_name: series_iteritems_to_items
55
+
56
+ # Index changes
57
+ - symbol: "Index.is_monotonic"
58
+ change_type: removed
59
+ severity: medium
60
+ from_version: "1.5"
61
+ to_version: "2.0"
62
+ description: "is_monotonic removed, use is_monotonic_increasing"
63
+ replacement: "Index.is_monotonic_increasing"
64
+ has_deterministic_transform: true
65
+ transform_name: is_monotonic_to_increasing
66
+
67
+ - symbol: "Index.is_all_dates"
68
+ change_type: removed
69
+ severity: low
70
+ from_version: "1.5"
71
+ to_version: "2.0"
72
+ description: "is_all_dates removed"
73
+ replacement: "isinstance(index, pd.DatetimeIndex)"
74
+ has_deterministic_transform: false
75
+ notes: "Check index type directly instead"
76
+
77
+ # Datetime and timezone changes
78
+ - symbol: "DatetimeIndex.to_pydatetime()"
79
+ change_type: behavior_changed
80
+ severity: medium
81
+ from_version: "1.5"
82
+ to_version: "2.0"
83
+ description: "Returns array of datetime objects, not ndarray"
84
+ replacement: "DatetimeIndex.to_pydatetime()"
85
+ has_deterministic_transform: false
86
+ notes: "Return type changed but method signature same"
87
+
88
+ - symbol: "datetime64[ns]"
89
+ change_type: behavior_changed
90
+ severity: high
91
+ from_version: "1.5"
92
+ to_version: "2.0"
93
+ description: "datetime64 now supports multiple resolutions (s, ms, us, ns)"
94
+ replacement: "datetime64[ns] still supported but other resolutions available"
95
+ has_deterministic_transform: false
96
+ notes: "Check dtype explicitly if nanosecond precision required"
97
+
98
+ # Copy behavior changes
99
+ - symbol: "DataFrame.copy()"
100
+ change_type: behavior_changed
101
+ severity: high
102
+ from_version: "1.5"
103
+ to_version: "2.0"
104
+ description: "Copy-on-Write (CoW) mode introduced, changes copy semantics"
105
+ replacement: "Use .copy() explicitly when mutation intended"
106
+ has_deterministic_transform: false
107
+ notes: "Enable with pd.options.mode.copy_on_write = True"
108
+
109
+ - symbol: "DataFrame[col]"
110
+ change_type: behavior_changed
111
+ severity: high
112
+ from_version: "1.5"
113
+ to_version: "2.0"
114
+ description: "Indexing returns view by default, changes with CoW"
115
+ replacement: "Use .loc or .iloc for explicit selection"
116
+ has_deterministic_transform: false
117
+ notes: "CoW affects chained assignment detection"
118
+
119
+ # Groupby changes
120
+ - symbol: "GroupBy.apply()"
121
+ change_type: behavior_changed
122
+ severity: medium
123
+ from_version: "1.5"
124
+ to_version: "2.0"
125
+ description: "apply() no longer called twice on first group for inference"
126
+ replacement: "Same API but may need to update expected behavior"
127
+ has_deterministic_transform: false
128
+ notes: "Performance improvement, but side-effect behavior changes"
129
+
130
+ - symbol: "DataFrameGroupBy.mean(numeric_only=None)"
131
+ change_type: signature_changed
132
+ severity: medium
133
+ from_version: "1.5"
134
+ to_version: "2.0"
135
+ description: "numeric_only defaults to False instead of None"
136
+ replacement: "GroupBy.mean(numeric_only=True)"
137
+ has_deterministic_transform: true
138
+ transform_name: groupby_numeric_only
139
+ notes: "Explicitly set numeric_only for non-numeric columns"
140
+
141
+ - symbol: "DataFrameGroupBy.sum()"
142
+ change_type: signature_changed
143
+ severity: medium
144
+ from_version: "1.5"
145
+ to_version: "2.0"
146
+ description: "numeric_only defaults to False"
147
+ replacement: "GroupBy.sum(numeric_only=True)"
148
+ has_deterministic_transform: true
149
+ transform_name: groupby_sum_numeric_only
150
+
151
+ - symbol: "DataFrameGroupBy.prod()"
152
+ change_type: signature_changed
153
+ severity: medium
154
+ from_version: "1.5"
155
+ to_version: "2.0"
156
+ description: "numeric_only defaults to False"
157
+ replacement: "GroupBy.prod(numeric_only=True)"
158
+ has_deterministic_transform: true
159
+ transform_name: groupby_prod_numeric_only
160
+
161
+ # read_* function changes
162
+ - symbol: "pd.read_csv()"
163
+ change_type: behavior_changed
164
+ severity: medium
165
+ from_version: "1.5"
166
+ to_version: "2.0"
167
+ description: "Default dtype backend changed, considers nullable types"
168
+ replacement: "Explicitly set dtype_backend='numpy' for old behavior"
169
+ has_deterministic_transform: false
170
+ notes: "New nullable dtypes may be inferred"
171
+
172
+ - symbol: "pd.read_json()"
173
+ change_type: behavior_changed
174
+ severity: medium
175
+ from_version: "1.5"
176
+ to_version: "2.0"
177
+ description: "orient='table' with StringIO behavior changed"
178
+ replacement: "Pass string directly instead of StringIO"
179
+ has_deterministic_transform: false
180
+
181
+ - symbol: "pd.read_excel()"
182
+ change_type: behavior_changed
183
+ severity: low
184
+ from_version: "1.5"
185
+ to_version: "2.0"
186
+ description: "Default engine changed for .xls files"
187
+ replacement: "Specify engine='xlrd' explicitly for .xls files"
188
+ has_deterministic_transform: false
189
+
190
+ # Nullable dtypes
191
+ - symbol: "Int64"
192
+ change_type: behavior_changed
193
+ severity: medium
194
+ from_version: "1.5"
195
+ to_version: "2.0"
196
+ description: "Nullable Int64 dtype now more widely inferred"
197
+ replacement: "Same API, check for NA handling"
198
+ has_deterministic_transform: false
199
+ notes: "Better NA support but behavior may differ"
200
+
201
+ - symbol: "StringDtype"
202
+ change_type: behavior_changed
203
+ severity: low
204
+ from_version: "1.5"
205
+ to_version: "2.0"
206
+ description: "String dtype behavior improved with pyarrow backend"
207
+ replacement: "pd.StringDtype('pyarrow') for Arrow-backed strings"
208
+ has_deterministic_transform: false
209
+
210
+ # Sorting changes
211
+ - symbol: "DataFrame.sort_values(inplace=True)"
212
+ change_type: behavior_changed
213
+ severity: medium
214
+ from_version: "1.5"
215
+ to_version: "2.0"
216
+ description: "inplace operations deprecated in many contexts"
217
+ replacement: "df = df.sort_values(...)"
218
+ has_deterministic_transform: true
219
+ transform_name: remove_inplace_sort
220
+
221
+ # Method signature changes
222
+ - symbol: "DataFrame.to_csv(line_terminator=...)"
223
+ change_type: renamed
224
+ severity: low
225
+ from_version: "1.5"
226
+ to_version: "2.0"
227
+ description: "line_terminator renamed to lineterminator"
228
+ replacement: "to_csv(lineterminator='\\n')"
229
+ has_deterministic_transform: true
230
+ transform_name: line_terminator_rename
231
+
232
+ # Resample changes
233
+ - symbol: "Resampler.apply()"
234
+ change_type: behavior_changed
235
+ severity: medium
236
+ from_version: "1.5"
237
+ to_version: "2.0"
238
+ description: "Resample apply no longer calls func twice on first group"
239
+ replacement: "Same API, remove workarounds for double-call"
240
+ has_deterministic_transform: false
241
+
242
+ # Deprecated syntax
243
+ - symbol: "df.groupby(level=...)"
244
+ change_type: deprecated
245
+ severity: low
246
+ from_version: "1.5"
247
+ to_version: "2.0"
248
+ description: "level parameter deprecated in some contexts"
249
+ replacement: "Use df.groupby(df.index.get_level_values(level))"
250
+ has_deterministic_transform: false
251
+
252
+ # Index constructor changes
253
+ - symbol: "pd.Index([], dtype=object)"
254
+ change_type: behavior_changed
255
+ severity: low
256
+ from_version: "1.5"
257
+ to_version: "2.0"
258
+ description: "Empty Index dtype inference changed"
259
+ replacement: "Explicitly specify dtype for empty Index"
260
+ has_deterministic_transform: false
261
+
262
+ # DataFrame constructor changes
263
+ - symbol: "DataFrame(data, dtype=...)"
264
+ change_type: behavior_changed
265
+ severity: medium
266
+ from_version: "1.5"
267
+ to_version: "2.0"
268
+ description: "dtype parameter behavior with mixed types changed"
269
+ replacement: "Use astype() after construction for explicit conversion"
270
+ has_deterministic_transform: false
271
+
272
+ # String methods
273
+ - symbol: "Series.str.split(expand=True)"
274
+ change_type: behavior_changed
275
+ severity: low
276
+ from_version: "1.5"
277
+ to_version: "2.0"
278
+ description: "Split with expand returns nullable string dtype"
279
+ replacement: "Same API, check for NA handling in result"
280
+ has_deterministic_transform: false
281
+
282
+ # Window operations
283
+ - symbol: "Rolling.apply()"
284
+ change_type: behavior_changed
285
+ severity: low
286
+ from_version: "1.5"
287
+ to_version: "2.0"
288
+ description: "raw parameter default changed for numba engine"
289
+ replacement: "Explicitly set raw=True for numba"
290
+ has_deterministic_transform: false
291
+
292
+ # Removed deprecated features
293
+ - symbol: "DataFrame.swaplevel()"
294
+ change_type: signature_changed
295
+ severity: low
296
+ from_version: "1.5"
297
+ to_version: "2.0"
298
+ description: "axis parameter removed"
299
+ replacement: "Use df.swaplevel(i, j) without axis"
300
+ has_deterministic_transform: true
301
+ transform_name: swaplevel_remove_axis
302
+
303
+ - symbol: "DataFrame.reorder_levels()"
304
+ change_type: signature_changed
305
+ severity: low
306
+ from_version: "1.5"
307
+ to_version: "2.0"
308
+ description: "axis parameter deprecated"
309
+ replacement: "Use df.reorder_levels(order) without axis"
310
+ has_deterministic_transform: true
311
+ transform_name: reorder_levels_remove_axis
@@ -0,0 +1,253 @@
1
+ # Pydantic Knowledge Base
2
+ # Breaking changes from v1 to v2
3
+
4
+ name: pydantic
5
+ display_name: Pydantic
6
+ description: Data validation library using Python type annotations
7
+ migration_guide_url: https://docs.pydantic.dev/latest/migration/
8
+
9
+ supported_migrations:
10
+ - from: "1.0"
11
+ to: "2.0"
12
+
13
+ breaking_changes:
14
+ # Config class changes
15
+ - symbol: "BaseModel.Config"
16
+ change_type: renamed
17
+ severity: high
18
+ from_version: "1.0"
19
+ to_version: "2.0"
20
+ description: "Inner Config class replaced with model_config class attribute using ConfigDict"
21
+ replacement: "model_config = ConfigDict(...)"
22
+ has_deterministic_transform: true
23
+ transform_name: config_to_configdict
24
+ notes: "All Config options need to be mapped to ConfigDict keys"
25
+
26
+ - symbol: "Config.orm_mode"
27
+ change_type: renamed
28
+ severity: medium
29
+ from_version: "1.0"
30
+ to_version: "2.0"
31
+ description: "orm_mode renamed to from_attributes"
32
+ replacement: "from_attributes = True"
33
+ has_deterministic_transform: true
34
+ transform_name: orm_mode_to_from_attributes
35
+
36
+ - symbol: "Config.allow_mutation"
37
+ change_type: renamed
38
+ severity: medium
39
+ from_version: "1.0"
40
+ to_version: "2.0"
41
+ description: "allow_mutation=False replaced with frozen=True"
42
+ replacement: "frozen = True"
43
+ has_deterministic_transform: true
44
+ transform_name: allow_mutation_to_frozen
45
+
46
+ # Validator changes
47
+ - symbol: "@validator"
48
+ change_type: renamed
49
+ severity: high
50
+ from_version: "1.0"
51
+ to_version: "2.0"
52
+ description: "@validator decorator replaced with @field_validator"
53
+ replacement: "@field_validator with @classmethod"
54
+ has_deterministic_transform: true
55
+ transform_name: validator_to_field_validator
56
+ notes: "Requires adding @classmethod decorator"
57
+
58
+ - symbol: "@root_validator"
59
+ change_type: renamed
60
+ severity: high
61
+ from_version: "1.0"
62
+ to_version: "2.0"
63
+ description: "@root_validator decorator replaced with @model_validator"
64
+ replacement: "@model_validator(mode='before') with @classmethod"
65
+ has_deterministic_transform: true
66
+ transform_name: root_validator_to_model_validator
67
+ notes: "pre=True maps to mode='before', otherwise mode='after'"
68
+
69
+ # Method changes
70
+ - symbol: ".dict()"
71
+ change_type: renamed
72
+ severity: high
73
+ from_version: "1.0"
74
+ to_version: "2.0"
75
+ description: ".dict() method renamed to .model_dump()"
76
+ replacement: ".model_dump()"
77
+ has_deterministic_transform: true
78
+ transform_name: dict_to_model_dump
79
+
80
+ - symbol: ".json()"
81
+ change_type: renamed
82
+ severity: high
83
+ from_version: "1.0"
84
+ to_version: "2.0"
85
+ description: ".json() method renamed to .model_dump_json()"
86
+ replacement: ".model_dump_json()"
87
+ has_deterministic_transform: true
88
+ transform_name: json_to_model_dump_json
89
+
90
+ - symbol: ".schema()"
91
+ change_type: renamed
92
+ severity: medium
93
+ from_version: "1.0"
94
+ to_version: "2.0"
95
+ description: ".schema() class method renamed to .model_json_schema()"
96
+ replacement: ".model_json_schema()"
97
+ has_deterministic_transform: true
98
+ transform_name: schema_to_model_json_schema
99
+
100
+ - symbol: ".schema_json()"
101
+ change_type: renamed
102
+ severity: medium
103
+ from_version: "1.0"
104
+ to_version: "2.0"
105
+ description: ".schema_json() class method renamed to .model_json_schema() with json output"
106
+ replacement: "json.dumps(.model_json_schema())"
107
+ has_deterministic_transform: true
108
+ transform_name: schema_json_to_model_json_schema
109
+
110
+ - symbol: ".parse_obj()"
111
+ change_type: renamed
112
+ severity: high
113
+ from_version: "1.0"
114
+ to_version: "2.0"
115
+ description: ".parse_obj() class method renamed to .model_validate()"
116
+ replacement: ".model_validate()"
117
+ has_deterministic_transform: true
118
+ transform_name: parse_obj_to_model_validate
119
+
120
+ - symbol: ".parse_raw()"
121
+ change_type: renamed
122
+ severity: medium
123
+ from_version: "1.0"
124
+ to_version: "2.0"
125
+ description: ".parse_raw() class method renamed to .model_validate_json()"
126
+ replacement: ".model_validate_json()"
127
+ has_deterministic_transform: true
128
+ transform_name: parse_raw_to_model_validate_json
129
+
130
+ - symbol: ".parse_file()"
131
+ change_type: removed
132
+ severity: medium
133
+ from_version: "1.0"
134
+ to_version: "2.0"
135
+ description: ".parse_file() removed, use Path.read_text() with model_validate_json()"
136
+ replacement: "Model.model_validate_json(Path(file).read_text())"
137
+ has_deterministic_transform: false
138
+ notes: "Requires manual migration"
139
+
140
+ - symbol: ".copy()"
141
+ change_type: renamed
142
+ severity: medium
143
+ from_version: "1.0"
144
+ to_version: "2.0"
145
+ description: ".copy() method renamed to .model_copy()"
146
+ replacement: ".model_copy()"
147
+ has_deterministic_transform: true
148
+ transform_name: copy_to_model_copy
149
+
150
+ - symbol: ".update_forward_refs()"
151
+ change_type: renamed
152
+ severity: low
153
+ from_version: "1.0"
154
+ to_version: "2.0"
155
+ description: ".update_forward_refs() renamed to .model_rebuild()"
156
+ replacement: ".model_rebuild()"
157
+ has_deterministic_transform: true
158
+ transform_name: update_forward_refs_to_model_rebuild
159
+
160
+ # Field changes
161
+ - symbol: "Field(regex=...)"
162
+ change_type: renamed
163
+ severity: medium
164
+ from_version: "1.0"
165
+ to_version: "2.0"
166
+ description: "Field regex parameter renamed to pattern"
167
+ replacement: "Field(pattern=...)"
168
+ has_deterministic_transform: true
169
+ transform_name: field_regex_to_pattern
170
+
171
+ - symbol: "Field(const=...)"
172
+ change_type: removed
173
+ severity: medium
174
+ from_version: "1.0"
175
+ to_version: "2.0"
176
+ description: "Field const parameter removed, use Literal type instead"
177
+ replacement: "Literal[value]"
178
+ has_deterministic_transform: false
179
+ notes: "Requires analyzing the const value and converting to Literal"
180
+
181
+ - symbol: "Field(min_items=...)"
182
+ change_type: renamed
183
+ severity: low
184
+ from_version: "1.0"
185
+ to_version: "2.0"
186
+ description: "Field min_items parameter renamed to min_length"
187
+ replacement: "Field(min_length=...)"
188
+ has_deterministic_transform: true
189
+ transform_name: field_min_items_to_min_length
190
+
191
+ - symbol: "Field(max_items=...)"
192
+ change_type: renamed
193
+ severity: low
194
+ from_version: "1.0"
195
+ to_version: "2.0"
196
+ description: "Field max_items parameter renamed to max_length"
197
+ replacement: "Field(max_length=...)"
198
+ has_deterministic_transform: true
199
+ transform_name: field_max_items_to_max_length
200
+
201
+ # Import changes
202
+ - symbol: "pydantic.validator"
203
+ change_type: renamed
204
+ severity: high
205
+ from_version: "1.0"
206
+ to_version: "2.0"
207
+ description: "validator import renamed to field_validator"
208
+ replacement: "from pydantic import field_validator"
209
+ has_deterministic_transform: true
210
+ transform_name: import_validator_to_field_validator
211
+
212
+ - symbol: "pydantic.root_validator"
213
+ change_type: renamed
214
+ severity: high
215
+ from_version: "1.0"
216
+ to_version: "2.0"
217
+ description: "root_validator import renamed to model_validator"
218
+ replacement: "from pydantic import model_validator"
219
+ has_deterministic_transform: true
220
+ transform_name: import_root_validator_to_model_validator
221
+
222
+ # Generic model changes
223
+ - symbol: "GenericModel"
224
+ change_type: removed
225
+ severity: high
226
+ from_version: "1.0"
227
+ to_version: "2.0"
228
+ description: "GenericModel removed, BaseModel now supports generics directly"
229
+ replacement: "BaseModel with Generic[T]"
230
+ has_deterministic_transform: true
231
+ transform_name: generic_model_to_basemodel
232
+ notes: "Simply inherit from BaseModel instead"
233
+
234
+ # Other changes
235
+ - symbol: "__fields__"
236
+ change_type: renamed
237
+ severity: medium
238
+ from_version: "1.0"
239
+ to_version: "2.0"
240
+ description: "__fields__ attribute renamed to model_fields"
241
+ replacement: "model_fields"
242
+ has_deterministic_transform: true
243
+ transform_name: dunder_fields_to_model_fields
244
+
245
+ - symbol: "__validators__"
246
+ change_type: renamed
247
+ severity: low
248
+ from_version: "1.0"
249
+ to_version: "2.0"
250
+ description: "__validators__ attribute renamed to __pydantic_decorators__"
251
+ replacement: "__pydantic_decorators__"
252
+ has_deterministic_transform: true
253
+ transform_name: dunder_validators_rename
@@ -0,0 +1,263 @@
1
+ # Requests Knowledge Base
2
+ # Breaking changes and deprecations from 2.x versions
3
+
4
+ name: requests
5
+ display_name: Requests
6
+ description: Python HTTP library for humans
7
+ migration_guide_url: https://requests.readthedocs.io/en/latest/community/updates/
8
+
9
+ supported_migrations:
10
+ - from: "2.25"
11
+ to: "2.31"
12
+ - from: "2.x"
13
+ to: "2.32"
14
+
15
+ breaking_changes:
16
+ # Charset fallback changes (2.28+)
17
+ - symbol: "Response.text"
18
+ change_type: behavior_changed
19
+ severity: medium
20
+ from_version: "2.25"
21
+ to_version: "2.28"
22
+ description: "Response.text no longer falls back to ISO-8859-1 for text/* content types without charset"
23
+ replacement: "Explicitly handle encoding: response.encoding = 'utf-8' before accessing .text"
24
+ has_deterministic_transform: false
25
+ notes: "May cause UnicodeDecodeError for some responses"
26
+
27
+ - symbol: "Response.apparent_encoding"
28
+ change_type: behavior_changed
29
+ severity: low
30
+ from_version: "2.25"
31
+ to_version: "2.28"
32
+ description: "chardet replaced with charset_normalizer for encoding detection"
33
+ replacement: "Same API, different detection library"
34
+ has_deterministic_transform: false
35
+ notes: "May return different encoding guesses"
36
+
37
+ # SSL/TLS changes (2.29+)
38
+ - symbol: "requests.get(verify=True)"
39
+ change_type: behavior_changed
40
+ severity: medium
41
+ from_version: "2.25"
42
+ to_version: "2.29"
43
+ description: "Default CA bundle updated, may reject previously accepted certificates"
44
+ replacement: "Update server certificates or provide custom CA bundle"
45
+ has_deterministic_transform: false
46
+ notes: "certifi package updates may affect certificate verification"
47
+
48
+ # Urllib3 2.0 compatibility (2.29+)
49
+ - symbol: "from requests.packages import urllib3"
50
+ change_type: deprecated
51
+ severity: medium
52
+ from_version: "2.25"
53
+ to_version: "2.29"
54
+ description: "Importing urllib3 from requests.packages deprecated"
55
+ replacement: "import urllib3"
56
+ has_deterministic_transform: true
57
+ transform_name: urllib3_import_fix
58
+ notes: "Import urllib3 directly instead"
59
+
60
+ - symbol: "requests.packages.urllib3.disable_warnings()"
61
+ change_type: deprecated
62
+ severity: medium
63
+ from_version: "2.25"
64
+ to_version: "2.29"
65
+ description: "Accessing urllib3 through requests.packages deprecated"
66
+ replacement: "urllib3.disable_warnings()"
67
+ has_deterministic_transform: true
68
+ transform_name: urllib3_disable_warnings_fix
69
+
70
+ # Cookie handling changes (2.30+)
71
+ - symbol: "Session.cookies"
72
+ change_type: behavior_changed
73
+ severity: low
74
+ from_version: "2.25"
75
+ to_version: "2.30"
76
+ description: "Cookie handling improvements may affect some edge cases"
77
+ replacement: "Same API, review cookie-dependent code"
78
+ has_deterministic_transform: false
79
+
80
+ # Timeout parameter changes (2.31+)
81
+ - symbol: "requests.get(timeout=None)"
82
+ change_type: behavior_changed
83
+ severity: high
84
+ from_version: "2.25"
85
+ to_version: "2.31"
86
+ description: "None timeout warning added; explicit timeout recommended"
87
+ replacement: "requests.get(url, timeout=30)"
88
+ has_deterministic_transform: true
89
+ transform_name: add_explicit_timeout
90
+ notes: "Best practice to always set explicit timeout"
91
+
92
+ - symbol: "requests.post(timeout=None)"
93
+ change_type: behavior_changed
94
+ severity: high
95
+ from_version: "2.25"
96
+ to_version: "2.31"
97
+ description: "None timeout warning; explicit timeout recommended"
98
+ replacement: "requests.post(url, timeout=30)"
99
+ has_deterministic_transform: true
100
+ transform_name: post_add_explicit_timeout
101
+
102
+ - symbol: "requests.put(timeout=None)"
103
+ change_type: behavior_changed
104
+ severity: high
105
+ from_version: "2.25"
106
+ to_version: "2.31"
107
+ description: "None timeout warning; explicit timeout recommended"
108
+ replacement: "requests.put(url, timeout=30)"
109
+ has_deterministic_transform: true
110
+ transform_name: put_add_explicit_timeout
111
+
112
+ - symbol: "requests.delete(timeout=None)"
113
+ change_type: behavior_changed
114
+ severity: high
115
+ from_version: "2.25"
116
+ to_version: "2.31"
117
+ description: "None timeout warning; explicit timeout recommended"
118
+ replacement: "requests.delete(url, timeout=30)"
119
+ has_deterministic_transform: true
120
+ transform_name: delete_add_explicit_timeout
121
+
122
+ # Session context manager (2.31+)
123
+ - symbol: "requests.Session()"
124
+ change_type: behavior_changed
125
+ severity: low
126
+ from_version: "2.25"
127
+ to_version: "2.31"
128
+ description: "Session resource management improved, use context manager"
129
+ replacement: "with requests.Session() as session: ..."
130
+ has_deterministic_transform: true
131
+ transform_name: session_context_manager
132
+ notes: "Context manager ensures proper cleanup"
133
+
134
+ # JSON parameter changes
135
+ - symbol: "requests.post(json=...)"
136
+ change_type: behavior_changed
137
+ severity: low
138
+ from_version: "2.25"
139
+ to_version: "2.31"
140
+ description: "json parameter serialization updated for edge cases"
141
+ replacement: "Same API, check JSON serialization for custom objects"
142
+ has_deterministic_transform: false
143
+
144
+ # Auth handling
145
+ - symbol: "HTTPBasicAuth"
146
+ change_type: behavior_changed
147
+ severity: low
148
+ from_version: "2.25"
149
+ to_version: "2.31"
150
+ description: "Auth header generation improved for unicode"
151
+ replacement: "Same API, better unicode handling"
152
+ has_deterministic_transform: false
153
+
154
+ # Redirect handling (2.29+)
155
+ - symbol: "Session.max_redirects"
156
+ change_type: behavior_changed
157
+ severity: low
158
+ from_version: "2.25"
159
+ to_version: "2.29"
160
+ description: "Redirect loop detection improved"
161
+ replacement: "Same API, more robust redirect handling"
162
+ has_deterministic_transform: false
163
+
164
+ - symbol: "allow_redirects"
165
+ change_type: behavior_changed
166
+ severity: low
167
+ from_version: "2.25"
168
+ to_version: "2.29"
169
+ description: "Redirect behavior with POST/PUT methods clarified"
170
+ replacement: "Same API, review redirect expectations"
171
+ has_deterministic_transform: false
172
+
173
+ # Proxies handling (2.28+)
174
+ - symbol: "proxies"
175
+ change_type: behavior_changed
176
+ severity: medium
177
+ from_version: "2.25"
178
+ to_version: "2.28"
179
+ description: "SOCKS proxy handling updated, requires extras"
180
+ replacement: "pip install requests[socks] for SOCKS support"
181
+ has_deterministic_transform: false
182
+ notes: "Install with socks extra for SOCKS proxy support"
183
+
184
+ # File upload changes (2.31+)
185
+ - symbol: "files"
186
+ change_type: behavior_changed
187
+ severity: low
188
+ from_version: "2.25"
189
+ to_version: "2.31"
190
+ description: "File upload handling with generators improved"
191
+ replacement: "Same API, generator support improved"
192
+ has_deterministic_transform: false
193
+
194
+ # Connection pooling (urllib3 2.0)
195
+ - symbol: "HTTPAdapter"
196
+ change_type: behavior_changed
197
+ severity: medium
198
+ from_version: "2.25"
199
+ to_version: "2.29"
200
+ description: "Connection pooling behavior changed with urllib3 2.0"
201
+ replacement: "Same API, review pool_connections and pool_maxsize settings"
202
+ has_deterministic_transform: false
203
+ notes: "urllib3 2.0 has stricter connection handling"
204
+
205
+ # Deprecated features
206
+ - symbol: "requests.compat"
207
+ change_type: deprecated
208
+ severity: low
209
+ from_version: "2.25"
210
+ to_version: "2.31"
211
+ description: "Python 2/3 compatibility module deprecated"
212
+ replacement: "Use standard library equivalents"
213
+ has_deterministic_transform: false
214
+ notes: "Python 2 support removed"
215
+
216
+ - symbol: "from requests.compat import urljoin"
217
+ change_type: deprecated
218
+ severity: low
219
+ from_version: "2.25"
220
+ to_version: "2.31"
221
+ description: "Import from urllib.parse instead"
222
+ replacement: "from urllib.parse import urljoin"
223
+ has_deterministic_transform: true
224
+ transform_name: compat_urljoin_fix
225
+
226
+ - symbol: "from requests.compat import urlparse"
227
+ change_type: deprecated
228
+ severity: low
229
+ from_version: "2.25"
230
+ to_version: "2.31"
231
+ description: "Import from urllib.parse instead"
232
+ replacement: "from urllib.parse import urlparse"
233
+ has_deterministic_transform: true
234
+ transform_name: compat_urlparse_fix
235
+
236
+ # Exception changes
237
+ - symbol: "requests.exceptions.ConnectionError"
238
+ change_type: behavior_changed
239
+ severity: medium
240
+ from_version: "2.25"
241
+ to_version: "2.31"
242
+ description: "Connection error messages improved, may affect error parsing"
243
+ replacement: "Same exception, check error message parsing"
244
+ has_deterministic_transform: false
245
+
246
+ # Response iteration
247
+ - symbol: "Response.iter_content(decode_unicode=True)"
248
+ change_type: behavior_changed
249
+ severity: low
250
+ from_version: "2.25"
251
+ to_version: "2.31"
252
+ description: "Unicode decoding behavior improved"
253
+ replacement: "Same API, better unicode handling"
254
+ has_deterministic_transform: false
255
+
256
+ - symbol: "Response.iter_lines()"
257
+ change_type: behavior_changed
258
+ severity: low
259
+ from_version: "2.25"
260
+ to_version: "2.31"
261
+ description: "Line iteration memory efficiency improved"
262
+ replacement: "Same API, uses less memory"
263
+ has_deterministic_transform: false
@@ -0,0 +1,282 @@
1
+ # SQLAlchemy Knowledge Base
2
+ # Breaking changes from 1.x to 2.0
3
+
4
+ name: sqlalchemy
5
+ display_name: SQLAlchemy
6
+ description: The Python SQL Toolkit and Object Relational Mapper
7
+ migration_guide_url: https://docs.sqlalchemy.org/en/20/changelog/migration_20.html
8
+
9
+ supported_migrations:
10
+ - from: "1.4"
11
+ to: "2.0"
12
+
13
+ breaking_changes:
14
+ # Query API changes - most significant
15
+ - symbol: "session.query()"
16
+ change_type: deprecated
17
+ severity: high
18
+ from_version: "1.4"
19
+ to_version: "2.0"
20
+ description: "Legacy Query API deprecated in favor of select() statements"
21
+ replacement: "session.execute(select(Model))"
22
+ has_deterministic_transform: true
23
+ transform_name: query_to_select
24
+ notes: "This is the most significant change in SQLAlchemy 2.0"
25
+
26
+ - symbol: "Query.filter()"
27
+ change_type: deprecated
28
+ severity: high
29
+ from_version: "1.4"
30
+ to_version: "2.0"
31
+ description: "Query.filter() deprecated, use select().where()"
32
+ replacement: "select(Model).where(condition)"
33
+ has_deterministic_transform: true
34
+ transform_name: filter_to_where
35
+
36
+ - symbol: "Query.filter_by()"
37
+ change_type: deprecated
38
+ severity: high
39
+ from_version: "1.4"
40
+ to_version: "2.0"
41
+ description: "Query.filter_by() deprecated, use select().where()"
42
+ replacement: "select(Model).where(Model.column == value)"
43
+ has_deterministic_transform: true
44
+ transform_name: filter_by_to_where
45
+
46
+ - symbol: "Query.all()"
47
+ change_type: deprecated
48
+ severity: high
49
+ from_version: "1.4"
50
+ to_version: "2.0"
51
+ description: "Query.all() deprecated, use scalars().all()"
52
+ replacement: "session.execute(select(Model)).scalars().all()"
53
+ has_deterministic_transform: true
54
+ transform_name: query_all_to_scalars_all
55
+
56
+ - symbol: "Query.first()"
57
+ change_type: deprecated
58
+ severity: high
59
+ from_version: "1.4"
60
+ to_version: "2.0"
61
+ description: "Query.first() deprecated, use scalars().first()"
62
+ replacement: "session.execute(select(Model)).scalars().first()"
63
+ has_deterministic_transform: true
64
+ transform_name: query_first_to_scalars_first
65
+
66
+ - symbol: "Query.one()"
67
+ change_type: deprecated
68
+ severity: high
69
+ from_version: "1.4"
70
+ to_version: "2.0"
71
+ description: "Query.one() deprecated, use scalars().one()"
72
+ replacement: "session.execute(select(Model)).scalars().one()"
73
+ has_deterministic_transform: true
74
+ transform_name: query_one_to_scalars_one
75
+
76
+ - symbol: "Query.get()"
77
+ change_type: deprecated
78
+ severity: high
79
+ from_version: "1.4"
80
+ to_version: "2.0"
81
+ description: "Query.get(pk) deprecated, use Session.get()"
82
+ replacement: "session.get(Model, pk)"
83
+ has_deterministic_transform: true
84
+ transform_name: query_get_to_session_get
85
+
86
+ - symbol: "Query.count()"
87
+ change_type: deprecated
88
+ severity: medium
89
+ from_version: "1.4"
90
+ to_version: "2.0"
91
+ description: "Query.count() deprecated, use func.count()"
92
+ replacement: "session.execute(select(func.count()).select_from(Model)).scalar()"
93
+ has_deterministic_transform: true
94
+ transform_name: query_count_to_func_count
95
+
96
+ - symbol: "Query.join()"
97
+ change_type: deprecated
98
+ severity: high
99
+ from_version: "1.4"
100
+ to_version: "2.0"
101
+ description: "Query.join() deprecated, use select().join()"
102
+ replacement: "select(Model).join(OtherModel)"
103
+ has_deterministic_transform: true
104
+ transform_name: query_join_to_select_join
105
+
106
+ - symbol: "Query.outerjoin()"
107
+ change_type: deprecated
108
+ severity: medium
109
+ from_version: "1.4"
110
+ to_version: "2.0"
111
+ description: "Query.outerjoin() deprecated, use select().outerjoin()"
112
+ replacement: "select(Model).outerjoin(OtherModel)"
113
+ has_deterministic_transform: true
114
+ transform_name: query_outerjoin_to_select_outerjoin
115
+
116
+ # Engine and Connection changes
117
+ - symbol: "engine.execute()"
118
+ change_type: removed
119
+ severity: high
120
+ from_version: "1.4"
121
+ to_version: "2.0"
122
+ description: "engine.execute() removed, use with engine.connect()"
123
+ replacement: "with engine.connect() as conn: conn.execute()"
124
+ has_deterministic_transform: true
125
+ transform_name: engine_execute_to_connect
126
+
127
+ - symbol: "connection.execute(string)"
128
+ change_type: removed
129
+ severity: high
130
+ from_version: "1.4"
131
+ to_version: "2.0"
132
+ description: "Raw string execution removed, use text()"
133
+ replacement: "connection.execute(text('SQL string'))"
134
+ has_deterministic_transform: true
135
+ transform_name: string_execute_to_text
136
+
137
+ # Declarative changes
138
+ - symbol: "declarative_base()"
139
+ change_type: deprecated
140
+ severity: high
141
+ from_version: "1.4"
142
+ to_version: "2.0"
143
+ description: "declarative_base() deprecated in favor of DeclarativeBase class"
144
+ replacement: "class Base(DeclarativeBase): pass"
145
+ has_deterministic_transform: true
146
+ transform_name: declarative_base_to_class
147
+ notes: "Use DeclarativeBase class inheritance instead"
148
+
149
+ - symbol: "from sqlalchemy.ext.declarative import declarative_base"
150
+ change_type: deprecated
151
+ severity: high
152
+ from_version: "1.4"
153
+ to_version: "2.0"
154
+ description: "Import from sqlalchemy.orm instead"
155
+ replacement: "from sqlalchemy.orm import DeclarativeBase"
156
+ has_deterministic_transform: true
157
+ transform_name: import_declarative_base
158
+
159
+ # Column type changes
160
+ - symbol: "Column()"
161
+ change_type: deprecated
162
+ severity: high
163
+ from_version: "1.4"
164
+ to_version: "2.0"
165
+ description: "Column() deprecated for ORM, use mapped_column()"
166
+ replacement: "mapped_column()"
167
+ has_deterministic_transform: true
168
+ transform_name: column_to_mapped_column
169
+ notes: "Column() still valid for Core, mapped_column() preferred for ORM"
170
+
171
+ - symbol: "relationship(backref=...)"
172
+ change_type: deprecated
173
+ severity: medium
174
+ from_version: "1.4"
175
+ to_version: "2.0"
176
+ description: "backref parameter deprecated, use back_populates on both sides"
177
+ replacement: "Use back_populates='...' on both relationship definitions"
178
+ has_deterministic_transform: false
179
+ notes: "Requires adding relationship on both sides of the relation"
180
+
181
+ # Type annotation changes
182
+ - symbol: "Column(Integer)"
183
+ change_type: behavior_changed
184
+ severity: medium
185
+ from_version: "1.4"
186
+ to_version: "2.0"
187
+ description: "Type annotations now supported with Mapped[int]"
188
+ replacement: "column_name: Mapped[int] = mapped_column()"
189
+ has_deterministic_transform: true
190
+ transform_name: column_to_mapped_type
191
+ notes: "Provides better IDE support and type checking"
192
+
193
+ - symbol: "relationship(...)"
194
+ change_type: behavior_changed
195
+ severity: medium
196
+ from_version: "1.4"
197
+ to_version: "2.0"
198
+ description: "Type annotations supported with Mapped[RelatedModel]"
199
+ replacement: "related: Mapped['RelatedModel'] = relationship()"
200
+ has_deterministic_transform: true
201
+ transform_name: relationship_mapped_type
202
+
203
+ # Session changes
204
+ - symbol: "Session.autocommit"
205
+ change_type: removed
206
+ severity: high
207
+ from_version: "1.4"
208
+ to_version: "2.0"
209
+ description: "autocommit mode removed from Session"
210
+ replacement: "Use connection.begin() for transaction control"
211
+ has_deterministic_transform: false
212
+ notes: "Explicit transaction management now required"
213
+
214
+ - symbol: "Session.subtransactions"
215
+ change_type: removed
216
+ severity: medium
217
+ from_version: "1.4"
218
+ to_version: "2.0"
219
+ description: "subtransactions parameter removed"
220
+ replacement: "Use Session.begin_nested() for savepoints"
221
+ has_deterministic_transform: false
222
+
223
+ # Import changes
224
+ - symbol: "from sqlalchemy import create_engine"
225
+ change_type: behavior_changed
226
+ severity: low
227
+ from_version: "1.4"
228
+ to_version: "2.0"
229
+ description: "create_engine now requires future=True behavior by default"
230
+ replacement: "create_engine() (future mode is now default)"
231
+ has_deterministic_transform: true
232
+ transform_name: remove_future_flag
233
+
234
+ - symbol: "from sqlalchemy.orm import relationship, backref"
235
+ change_type: deprecated
236
+ severity: low
237
+ from_version: "1.4"
238
+ to_version: "2.0"
239
+ description: "backref function deprecated, define relationships on both sides"
240
+ replacement: "from sqlalchemy.orm import relationship"
241
+ has_deterministic_transform: true
242
+ transform_name: remove_backref_import
243
+
244
+ # Async support changes
245
+ - symbol: "AsyncSession.run_sync()"
246
+ change_type: behavior_changed
247
+ severity: medium
248
+ from_version: "1.4"
249
+ to_version: "2.0"
250
+ description: "run_sync behavior improved for greenlet contexts"
251
+ replacement: "Ensure proper async context usage"
252
+ has_deterministic_transform: false
253
+
254
+ # Result handling
255
+ - symbol: ".fetchone()"
256
+ change_type: behavior_changed
257
+ severity: medium
258
+ from_version: "1.4"
259
+ to_version: "2.0"
260
+ description: "Result.fetchone() returns Row objects, not tuples"
261
+ replacement: "Use result.one() or access as result.column_name"
262
+ has_deterministic_transform: false
263
+ notes: "Row objects now support named attribute access"
264
+
265
+ - symbol: ".fetchall()"
266
+ change_type: behavior_changed
267
+ severity: medium
268
+ from_version: "1.4"
269
+ to_version: "2.0"
270
+ description: "Result.fetchall() returns list of Row objects"
271
+ replacement: "Use result.all() for list of Rows or scalars().all() for values"
272
+ has_deterministic_transform: false
273
+
274
+ # Pool changes
275
+ - symbol: "pool_pre_ping"
276
+ change_type: behavior_changed
277
+ severity: low
278
+ from_version: "1.4"
279
+ to_version: "2.0"
280
+ description: "pool_pre_ping now enabled by default for most dialects"
281
+ replacement: "Set pool_pre_ping=False explicitly if not needed"
282
+ has_deterministic_transform: false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeshift
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: AI-powered CLI tool that migrates Python code to handle breaking dependency changes
5
5
  Author: PyResolve Team
6
6
  License: MIT
@@ -36,6 +36,11 @@ codeshift/knowledge/sources.py,sha256=4GA4z4gHADCAfeBTF3dAO2S6H4s9leUKoxKPK2Vcop
36
36
  codeshift/knowledge_base/__init__.py,sha256=-xiDpdKrizX-5FeA8NjnHxASkkv44BwiMORTYF29Vj4,368
37
37
  codeshift/knowledge_base/loader.py,sha256=xMOSJEtnlzA1sGHGqeWdwzv2rF-LvVfSgEx9Q5WMTGk,3484
38
38
  codeshift/knowledge_base/models.py,sha256=OwA9ts14aMW-PfWBi8GFcwHIGls5ERur7FCQXYcIU7k,3816
39
+ codeshift/knowledge_base/libraries/fastapi.yaml,sha256=i6dXGbEP1bn2k06XgqzgvqE2Wle_NZRhUBTk06KhW3Y,6419
40
+ codeshift/knowledge_base/libraries/pandas.yaml,sha256=cgu-dAaXIVyZivRr7swh3Df-GEpVfcxh5-J-6ow_pLc,10366
41
+ codeshift/knowledge_base/libraries/pydantic.yaml,sha256=nTleM2JaabzrcJoMPrIYhPbV93Gl3GZ1uQnQSeHBw_w,8150
42
+ codeshift/knowledge_base/libraries/requests.yaml,sha256=8Msjlt8v4mCEmTIdyvlpgtWsCXarpPqXNMPFlFd_Ojc,9035
43
+ codeshift/knowledge_base/libraries/sqlalchemy.yaml,sha256=YlIdPtZ7QOanIRvPwKR_P5sGjsjQm5kU9hPQpaIGajQ,9607
39
44
  codeshift/migrator/__init__.py,sha256=V5ATKxw4hV6Ec3g78IeHkP92-VM4l6OzH0gi-lnU09w,467
40
45
  codeshift/migrator/ast_transforms.py,sha256=fyySqSIFVHS8jTFledkbGWQ-_zcC5-S_rsv4sPu9jEA,7190
41
46
  codeshift/migrator/engine.py,sha256=Ko7YSzY1-ZBFlFunLDMxUvWjB_gKZKfiXoIbd_V0V7M,12428
@@ -57,9 +62,9 @@ codeshift/utils/llm_client.py,sha256=WkT3KftJi7rsj8MXH4MVJvznugicb2XpkKqnqRET1eo
57
62
  codeshift/validator/__init__.py,sha256=WRQSfJ7eLJdjR2_f_dXSaBtfawkvu1Dlu20Gh76D12c,280
58
63
  codeshift/validator/syntax_checker.py,sha256=FJeLIqhNhV7_Xj2RskHScJZks6A9fybaqv5Z1-MGDfo,5343
59
64
  codeshift/validator/test_runner.py,sha256=VX0OqkuI3AJxOUzRW2_BEjdDsMw1N4a0od-pPbSF6O8,6760
60
- codeshift-0.2.0.dist-info/licenses/LICENSE,sha256=SrjIFBfm7GQh90Giv7mEiPnYdgp1wsp0RnOTT6HkeVw,1066
61
- codeshift-0.2.0.dist-info/METADATA,sha256=OZ4Y2Y_oeAjGc9uNRkAc1lZas_ExzmL3DOszcqcd_ZM,13314
62
- codeshift-0.2.0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
63
- codeshift-0.2.0.dist-info/entry_points.txt,sha256=AlJ8V7a2pNyu-9UiRKUWiTMIJtaYAUnlg53Y-wFHiK0,53
64
- codeshift-0.2.0.dist-info/top_level.txt,sha256=Ct42mtGs5foZ4MyYSksd5rXP0qFhWSZz8Y8mON0EEds,10
65
- codeshift-0.2.0.dist-info/RECORD,,
65
+ codeshift-0.3.1.dist-info/licenses/LICENSE,sha256=SrjIFBfm7GQh90Giv7mEiPnYdgp1wsp0RnOTT6HkeVw,1066
66
+ codeshift-0.3.1.dist-info/METADATA,sha256=k5VGEuELfjBQ6pK9mQLec6GlNhRCtDUt9CZaWl38Nvo,13314
67
+ codeshift-0.3.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
68
+ codeshift-0.3.1.dist-info/entry_points.txt,sha256=AlJ8V7a2pNyu-9UiRKUWiTMIJtaYAUnlg53Y-wFHiK0,53
69
+ codeshift-0.3.1.dist-info/top_level.txt,sha256=Ct42mtGs5foZ4MyYSksd5rXP0qFhWSZz8Y8mON0EEds,10
70
+ codeshift-0.3.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5