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.
- codeshift/knowledge_base/libraries/fastapi.yaml +190 -0
- codeshift/knowledge_base/libraries/pandas.yaml +311 -0
- codeshift/knowledge_base/libraries/pydantic.yaml +253 -0
- codeshift/knowledge_base/libraries/requests.yaml +263 -0
- codeshift/knowledge_base/libraries/sqlalchemy.yaml +282 -0
- {codeshift-0.2.0.dist-info → codeshift-0.3.1.dist-info}/METADATA +1 -1
- {codeshift-0.2.0.dist-info → codeshift-0.3.1.dist-info}/RECORD +11 -6
- {codeshift-0.2.0.dist-info → codeshift-0.3.1.dist-info}/WHEEL +1 -1
- {codeshift-0.2.0.dist-info → codeshift-0.3.1.dist-info}/entry_points.txt +0 -0
- {codeshift-0.2.0.dist-info → codeshift-0.3.1.dist-info}/licenses/LICENSE +0 -0
- {codeshift-0.2.0.dist-info → codeshift-0.3.1.dist-info}/top_level.txt +0 -0
|
@@ -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
|
|
@@ -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.
|
|
61
|
-
codeshift-0.
|
|
62
|
-
codeshift-0.
|
|
63
|
-
codeshift-0.
|
|
64
|
-
codeshift-0.
|
|
65
|
-
codeshift-0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|