codeshift 0.2.0__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.
Files changed (65) hide show
  1. codeshift/__init__.py +8 -0
  2. codeshift/analyzer/__init__.py +5 -0
  3. codeshift/analyzer/risk_assessor.py +388 -0
  4. codeshift/api/__init__.py +1 -0
  5. codeshift/api/auth.py +182 -0
  6. codeshift/api/config.py +73 -0
  7. codeshift/api/database.py +215 -0
  8. codeshift/api/main.py +103 -0
  9. codeshift/api/models/__init__.py +55 -0
  10. codeshift/api/models/auth.py +108 -0
  11. codeshift/api/models/billing.py +92 -0
  12. codeshift/api/models/migrate.py +42 -0
  13. codeshift/api/models/usage.py +116 -0
  14. codeshift/api/routers/__init__.py +5 -0
  15. codeshift/api/routers/auth.py +440 -0
  16. codeshift/api/routers/billing.py +395 -0
  17. codeshift/api/routers/migrate.py +304 -0
  18. codeshift/api/routers/usage.py +291 -0
  19. codeshift/api/routers/webhooks.py +289 -0
  20. codeshift/cli/__init__.py +5 -0
  21. codeshift/cli/commands/__init__.py +7 -0
  22. codeshift/cli/commands/apply.py +352 -0
  23. codeshift/cli/commands/auth.py +842 -0
  24. codeshift/cli/commands/diff.py +221 -0
  25. codeshift/cli/commands/scan.py +368 -0
  26. codeshift/cli/commands/upgrade.py +436 -0
  27. codeshift/cli/commands/upgrade_all.py +518 -0
  28. codeshift/cli/main.py +221 -0
  29. codeshift/cli/quota.py +210 -0
  30. codeshift/knowledge/__init__.py +50 -0
  31. codeshift/knowledge/cache.py +167 -0
  32. codeshift/knowledge/generator.py +231 -0
  33. codeshift/knowledge/models.py +151 -0
  34. codeshift/knowledge/parser.py +270 -0
  35. codeshift/knowledge/sources.py +388 -0
  36. codeshift/knowledge_base/__init__.py +17 -0
  37. codeshift/knowledge_base/loader.py +102 -0
  38. codeshift/knowledge_base/models.py +110 -0
  39. codeshift/migrator/__init__.py +23 -0
  40. codeshift/migrator/ast_transforms.py +256 -0
  41. codeshift/migrator/engine.py +395 -0
  42. codeshift/migrator/llm_migrator.py +320 -0
  43. codeshift/migrator/transforms/__init__.py +19 -0
  44. codeshift/migrator/transforms/fastapi_transformer.py +174 -0
  45. codeshift/migrator/transforms/pandas_transformer.py +236 -0
  46. codeshift/migrator/transforms/pydantic_v1_to_v2.py +637 -0
  47. codeshift/migrator/transforms/requests_transformer.py +218 -0
  48. codeshift/migrator/transforms/sqlalchemy_transformer.py +175 -0
  49. codeshift/scanner/__init__.py +6 -0
  50. codeshift/scanner/code_scanner.py +352 -0
  51. codeshift/scanner/dependency_parser.py +473 -0
  52. codeshift/utils/__init__.py +5 -0
  53. codeshift/utils/api_client.py +266 -0
  54. codeshift/utils/cache.py +318 -0
  55. codeshift/utils/config.py +71 -0
  56. codeshift/utils/llm_client.py +221 -0
  57. codeshift/validator/__init__.py +6 -0
  58. codeshift/validator/syntax_checker.py +183 -0
  59. codeshift/validator/test_runner.py +224 -0
  60. codeshift-0.2.0.dist-info/METADATA +326 -0
  61. codeshift-0.2.0.dist-info/RECORD +65 -0
  62. codeshift-0.2.0.dist-info/WHEEL +5 -0
  63. codeshift-0.2.0.dist-info/entry_points.txt +2 -0
  64. codeshift-0.2.0.dist-info/licenses/LICENSE +21 -0
  65. codeshift-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,326 @@
1
+ Metadata-Version: 2.4
2
+ Name: codeshift
3
+ Version: 0.2.0
4
+ Summary: AI-powered CLI tool that migrates Python code to handle breaking dependency changes
5
+ Author: PyResolve Team
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/youssefragab/PyResolve
8
+ Project-URL: Repository, https://github.com/youssefragab/PyResolve
9
+ Project-URL: Issues, https://github.com/youssefragab/PyResolve/issues
10
+ Keywords: migration,dependencies,ast,refactoring,pydantic
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: click>=8.0
23
+ Requires-Dist: libcst>=1.0
24
+ Requires-Dist: anthropic>=0.20
25
+ Requires-Dist: pyyaml>=6.0
26
+ Requires-Dist: rich>=13.0
27
+ Requires-Dist: toml>=0.10
28
+ Requires-Dist: packaging>=23.0
29
+ Requires-Dist: httpx>=0.25
30
+ Requires-Dist: pytest>=8.4.2
31
+ Requires-Dist: nox>=2025.11.12
32
+ Requires-Dist: black>=24.10.0
33
+ Requires-Dist: mypy>=1.19.1
34
+ Requires-Dist: supabase>=2.27.2
35
+ Requires-Dist: pre-commit>=4.5.1
36
+ Provides-Extra: api
37
+ Requires-Dist: fastapi>=0.109.0; extra == "api"
38
+ Requires-Dist: uvicorn>=0.27.0; extra == "api"
39
+ Requires-Dist: supabase>=2.3.0; extra == "api"
40
+ Requires-Dist: stripe>=7.0.0; extra == "api"
41
+ Requires-Dist: pydantic-settings>=2.1.0; extra == "api"
42
+ Requires-Dist: email-validator>=2.0.0; extra == "api"
43
+ Provides-Extra: dev
44
+ Requires-Dist: pytest>=7.0; extra == "dev"
45
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
46
+ Requires-Dist: black<25.0,>=24.0; extra == "dev"
47
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
48
+ Requires-Dist: mypy>=1.0; extra == "dev"
49
+ Requires-Dist: nox>=2024.0; extra == "dev"
50
+ Requires-Dist: pre-commit>=3.6.0; extra == "dev"
51
+ Requires-Dist: types-toml>=0.10; extra == "dev"
52
+ Requires-Dist: types-PyYAML>=6.0; extra == "dev"
53
+ Provides-Extra: all
54
+ Requires-Dist: codeshift[api,dev]; extra == "all"
55
+ Dynamic: license-file
56
+
57
+ # PyResolve
58
+
59
+ [![CI](https://github.com/youssefragab/PyResolve/actions/workflows/ci.yml/badge.svg)](https://github.com/youssefragab/PyResolve/actions/workflows/ci.yml)
60
+ [![PyPI version](https://badge.fury.io/py/pyresolve.svg)](https://pypi.org/project/pyresolve/)
61
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
62
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
63
+
64
+ **Don't just flag the update. Fix the break.**
65
+
66
+ PyResolve is an AI-powered CLI tool that migrates Python code to handle breaking dependency changes. Unlike Dependabot/Renovate which just bump versions, PyResolve actually rewrites code to be compatible with new library versions.
67
+
68
+ ## Features
69
+
70
+ - **Auto-generated knowledge bases** - Fetches changelogs and migration guides from GitHub, parses them with LLM to detect breaking changes
71
+ - **Tiered migration approach** - Deterministic AST transforms for known patterns, KB-guided LLM for medium confidence, pure LLM fallback for complex cases
72
+ - **Confidence-based change detection** - Shows HIGH/MEDIUM/LOW confidence breaking changes before migration
73
+ - **Local test execution** to validate changes before applying
74
+ - **Beautiful diff output** with explanations for each change
75
+
76
+ ## Supported Libraries
77
+
78
+ ### Tier 1 Libraries (Deterministic AST Transforms)
79
+
80
+ | Library | Migration Path | Status |
81
+ |---------|---------------|--------|
82
+ | Pydantic | v1 → v2 | ✅ Full support |
83
+ | FastAPI | 0.x → 0.100+ | ✅ Supported |
84
+ | SQLAlchemy | 1.4 → 2.0 | ✅ Supported |
85
+ | Pandas | 1.x → 2.x | ✅ Supported |
86
+ | Requests | Various | ✅ Supported |
87
+
88
+ ### Any Library (Auto-Generated Knowledge Base)
89
+
90
+ PyResolve can migrate **any Python library** by automatically fetching changelogs from GitHub and detecting breaking changes. For libraries not in Tier 1, it uses KB-guided or pure LLM migration.
91
+
92
+ ## Installation
93
+
94
+ ```bash
95
+ pip install pyresolve
96
+ ```
97
+
98
+ ## Quick Start
99
+
100
+ ```bash
101
+ # Scan your project for all possible migrations
102
+ pyresolve scan
103
+
104
+ # Scan with detailed breaking change analysis
105
+ pyresolve scan --fetch-changes
106
+
107
+ # Analyze and propose changes for a specific library
108
+ pyresolve upgrade pydantic --target 2.5.0
109
+
110
+ # View detailed diff of proposed changes
111
+ pyresolve diff
112
+
113
+ # Apply changes to your files
114
+ pyresolve apply
115
+ ```
116
+
117
+ ### Example Output
118
+
119
+ ```bash
120
+ $ pyresolve upgrade pydantic --target 2.5.0
121
+
122
+ ╭──────────────────────── PyResolve Migration ─────────────────────────╮
123
+ │ Upgrading Pydantic to version 2.5.0 │
124
+ │ Migration guide: https://docs.pydantic.dev/latest/migration/ │
125
+ ╰──────────────────────────────────────────────────────────────────────╯
126
+
127
+ Fetching knowledge sources...
128
+ ✓ GitHub: CHANGELOG.md
129
+ ✓ GitHub: docs/migration.md
130
+
131
+ Breaking changes detected:
132
+
133
+ HIGH CONFIDENCE:
134
+ ├── .dict() → .model_dump()
135
+ ├── @validator → @field_validator
136
+ └── class Config → model_config = ConfigDict()
137
+
138
+ MEDIUM CONFIDENCE:
139
+ ├── .json() → .model_dump_json()
140
+ └── parse_obj() → model_validate()
141
+
142
+ Scanning for library usage...
143
+ Found 12 imports from pydantic
144
+ Found 45 usages of pydantic symbols
145
+
146
+ ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
147
+ ┃ File ┃ Changes ┃ Status ┃
148
+ ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━┩
149
+ │ src/models/user.py │ 5 │ Ready │
150
+ │ src/api/schemas.py │ 3 │ Ready │
151
+ └────────────────────┴─────────┴────────┘
152
+
153
+ Total: 8 changes across 2 files
154
+ ```
155
+
156
+ ## Usage
157
+
158
+ ### Scan Command
159
+
160
+ Scan your entire project for possible dependency migrations:
161
+
162
+ ```bash
163
+ pyresolve scan
164
+
165
+ # Options:
166
+ # --path, -p Path to scan (default: current directory)
167
+ # --fetch-changes Fetch changelogs and detect breaking changes (slower)
168
+ # --major-only Only show major version upgrades
169
+ # --json-output Output results as JSON
170
+ # --verbose, -v Show detailed output
171
+ ```
172
+
173
+ Example output:
174
+
175
+ ```bash
176
+ $ pyresolve scan
177
+
178
+ Found 13 dependencies
179
+
180
+ Outdated Dependencies (5)
181
+ ┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┳━━━━━━━┳━━━━━━━━━━┓
182
+ ┃ Package ┃ Current ┃ Latest ┃ Type ┃ Tier ┃
183
+ ┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━╇━━━━━━━╇━━━━━━━━━━┩
184
+ │ pydantic │ 1.0 │ 2.5.0 │ Major │ Tier 1 │
185
+ │ rich │ 13.0 │ 14.0.0 │ Major │ Tier 2/3 │
186
+ └────────────┴─────────┴────────┴───────┴──────────┘
187
+
188
+ Suggested Migrations (2)
189
+ pydantic 1.0 → 2.5.0 (Tier 1 - deterministic)
190
+ rich 13.0 → 14.0.0 (Tier 2/3 - LLM-assisted)
191
+
192
+ Quick commands:
193
+ pyresolve upgrade pydantic --target 2.5.0
194
+ pyresolve upgrade rich --target 14.0.0
195
+ ```
196
+
197
+ ### Upgrade Command
198
+
199
+ Analyze your codebase and propose changes for a library upgrade:
200
+
201
+ ```bash
202
+ pyresolve upgrade <library> --target <version>
203
+
204
+ # Options:
205
+ # --target, -t Target version to upgrade to
206
+ # --path, -p Path to analyze (default: current directory)
207
+ # --dry-run Show what would be changed without saving state
208
+ ```
209
+
210
+ ### Diff Command
211
+
212
+ View the detailed diff of proposed changes:
213
+
214
+ ```bash
215
+ pyresolve diff
216
+
217
+ # Options:
218
+ # --file, -f Show diff for specific file only
219
+ # --no-color Disable colored output
220
+ ```
221
+
222
+ ### Apply Command
223
+
224
+ Apply the proposed changes to your files:
225
+
226
+ ```bash
227
+ pyresolve apply
228
+
229
+ # Options:
230
+ # --backup Create backup files before applying changes
231
+ # --file, -f Apply changes to specific file only
232
+ ```
233
+
234
+ ## How It Works
235
+
236
+ ```text
237
+ ┌─────────────────────────────────────────────────────────────────────┐
238
+ │ Knowledge Acquisition Pipeline │
239
+ │ ┌─────────────┐ ┌──────────────────┐ ┌─────────────────────┐ │
240
+ │ │ Local Cache │──▶│ On-Demand Gen │──▶│ LLM Parser │ │
241
+ │ │ (instant) │ │ (fetches sources)│ │ (breaking changes) │ │
242
+ │ └─────────────┘ └──────────────────┘ └─────────────────────┘ │
243
+ │ │ │
244
+ │ ┌───────────────┴───────────────┐ │
245
+ │ │ Source Fetchers │ │
246
+ │ │ ├── GitHub (CHANGELOG.md) │ │
247
+ │ │ ├── Docs (migration guides) │ │
248
+ │ │ └── Release notes │ │
249
+ │ └───────────────────────────────┘ │
250
+ └─────────────────────────────────────────────────────────────────────┘
251
+
252
+
253
+ ┌─────────────────────────────────────────────────────────────────────┐
254
+ │ Migration Engine (Tiered) │
255
+ │ Tier 1: AST Transforms │ Tier 2: KB-Guided │ Tier 3: LLM │
256
+ │ (deterministic) │ (context + LLM) │ (fallback) │
257
+ └─────────────────────────────────────────────────────────────────────┘
258
+ ```
259
+
260
+ 1. **Fetch Knowledge**: Discovers and fetches changelogs, migration guides from GitHub/PyPI
261
+ 2. **Parse Changes**: Uses LLM to extract breaking changes with confidence levels (HIGH/MEDIUM/LOW)
262
+ 3. **Scan Codebase**: Finds imports and usage of the target library
263
+ 4. **Tiered Migration**:
264
+ - **Tier 1**: Deterministic AST transforms for known libraries (pydantic, fastapi, sqlalchemy, pandas, requests)
265
+ - **Tier 2**: Knowledge base guided migration with LLM assistance
266
+ - **Tier 3**: Pure LLM migration for unknown patterns
267
+ 5. **Validate**: Runs syntax checks and optionally your test suite
268
+ 6. **Report**: Shows a detailed diff with explanations for each change
269
+
270
+ ## Pydantic v1 → v2 Transforms
271
+
272
+ PyResolve handles the following Pydantic migrations automatically:
273
+
274
+ - `Config` class → `model_config = ConfigDict(...)`
275
+ - `@validator` → `@field_validator` with `@classmethod`
276
+ - `@root_validator` → `@model_validator`
277
+ - `.dict()` → `.model_dump()`
278
+ - `.json()` → `.model_dump_json()`
279
+ - `.schema()` → `.model_json_schema()`
280
+ - `.parse_obj()` → `.model_validate()`
281
+ - `orm_mode = True` → `from_attributes = True`
282
+ - `Field(regex=...)` → `Field(pattern=...)`
283
+
284
+ ## Configuration
285
+
286
+ PyResolve can be configured via `pyproject.toml`:
287
+
288
+ ```toml
289
+ [tool.pyresolve]
290
+ # Path patterns to exclude from scanning (defaults: .pyresolve/*, tests/*, .venv/*, venv/*)
291
+ exclude = ["tests/*", "migrations/*"]
292
+
293
+ # Enable/disable LLM fallback
294
+ use_llm = true
295
+
296
+ # Anthropic API key (can also use ANTHROPIC_API_KEY env var)
297
+ # anthropic_api_key = "sk-..."
298
+ ```
299
+
300
+ ## Pricing
301
+
302
+ PyResolve uses a tiered pricing model:
303
+
304
+ | Tier | Price | Features |
305
+ |------|-------|----------|
306
+ | **Free** | $0/month | Tier 1 deterministic transforms (Pydantic, FastAPI, SQLAlchemy, Pandas, Requests) |
307
+ | **Pro** | $19/month | Tier 2 KB-guided LLM migrations for any library |
308
+ | **Unlimited** | $49/month | Tier 3 pure LLM migrations + priority support |
309
+
310
+ **How it works:**
311
+ - **Tier 1 (Free)**: Runs entirely locally using deterministic AST transforms. No account required.
312
+ - **Tier 2/3 (Paid)**: LLM-powered migrations are processed through the PyResolve API to ensure quality and manage costs.
313
+
314
+ ```bash
315
+ # Login to access Pro/Unlimited features
316
+ pyresolve login
317
+
318
+ # Check your current plan and usage
319
+ pyresolve quota
320
+ ```
321
+
322
+ ## License
323
+
324
+ This software is licensed under the [MIT License](LICENSE).
325
+
326
+ You are free to use, modify, and distribute this software. The CLI tool and all transforms are fully open source.
@@ -0,0 +1,65 @@
1
+ codeshift/__init__.py,sha256=rDp65Hj8u9ubLT3_gkhrKfdSBIlXKBQays3n_eLXl0s,202
2
+ codeshift/analyzer/__init__.py,sha256=m61k8rtOyHQNoPLDeoe0S9WSy9syvCyMgLZ07ojpoNU,188
3
+ codeshift/analyzer/risk_assessor.py,sha256=nKplyymbsqcbsZyDLVZ2zukpQlPD5KIvO-FBJ4AZFYc,13422
4
+ codeshift/api/__init__.py,sha256=jlBP8FeFfOkITfWFAK9Wqc0UHt6kyYAqVXzfvT_EQMk,29
5
+ codeshift/api/auth.py,sha256=37wWEr4rvGbEB4HQIxI-m-uWa6HgjHQdCWCaaDwOpOA,5565
6
+ codeshift/api/config.py,sha256=QYCSKT9t4D_mSQHIsEmaFXvQhy7yZW7EJNUqmRB8T5E,1989
7
+ codeshift/api/database.py,sha256=VIsau8ccQ1ZRQAeQWF85GsdkqaDabTOnMlpgiJcLMLU,7171
8
+ codeshift/api/main.py,sha256=Q6rVpUhEeX-4KBbUXliUgQ5RGTjHKPyiPggVfZVHmvg,2877
9
+ codeshift/api/models/__init__.py,sha256=IXaCQUxh0hF03nh_3-fP0vpYdRab-RsI5LtKv9okELA,1143
10
+ codeshift/api/models/auth.py,sha256=vbSspwn1UR0km_nC4dD08JCib56IDFQwAQqXiHZ6_t4,2435
11
+ codeshift/api/models/billing.py,sha256=6Q0RMiYYqOAAvOPzJqnJ6FgV0mylPD0_GiguocO-Uo0,2107
12
+ codeshift/api/models/migrate.py,sha256=XkFQ3bZWlXngnkbE3im3eZo5WnoPt1BCHpKSp38PIMY,1353
13
+ codeshift/api/models/usage.py,sha256=YuP3XM9UsHE6OWHcXHY1jTWDirtln5Sx-0-VaDo6p8M,2911
14
+ codeshift/api/routers/__init__.py,sha256=kh9jmNdH0v_A70KN2GbAb4zhHBnl992pK3m_aEDYtEw,171
15
+ codeshift/api/routers/auth.py,sha256=1mJ3Hx7ARuZGA9iuglOUDXE8khScQfjMcL5naLE6MfM,13106
16
+ codeshift/api/routers/billing.py,sha256=imG1W89cv204IojrGePd9-wXEIavsGZBa1_Obzuu9Qc,12322
17
+ codeshift/api/routers/migrate.py,sha256=2FddO-XAHOVIoGGh7nGwVCd17jYl_FY-x7YnjKlYnxc,8945
18
+ codeshift/api/routers/usage.py,sha256=sLaefM9T-3Kw-OGKOIERS_Z3btZTDx8Mxu-6zAuvF-w,9197
19
+ codeshift/api/routers/webhooks.py,sha256=oHn-Fie4KxbPnfP7hdSe8yfp8JHNDkdyBBj2kGnbnfA,8733
20
+ codeshift/cli/__init__.py,sha256=khf471pmz_J7-MGnarVWvmM0mCKFvdXpaPSJgx-KvD4,87
21
+ codeshift/cli/main.py,sha256=iHNfLciYfq2F_QF-7hBFQvT7ezbIFg0zPJesWoKPT3Y,6983
22
+ codeshift/cli/quota.py,sha256=zBiY3zqCGEyxbS3vnoQdgBld1emMQzLc0_5cUOWy9U8,5989
23
+ codeshift/cli/commands/__init__.py,sha256=phw462By4_CzFoJQUdON73qF5-5Mv45GwUEOX_5SbLc,218
24
+ codeshift/cli/commands/apply.py,sha256=I9kcv545tCcy8XqfBVrLOZJgmvjo30wBnCK2ZsamFL4,9940
25
+ codeshift/cli/commands/auth.py,sha256=uXUtNEtAH17vhSlANfcFR5pCP8NQmFJ7Uw0bN30rYlM,28066
26
+ codeshift/cli/commands/diff.py,sha256=4LjrVRu4lhj-aOBvClOnEnN0l2nZEU5S1_qzYoXL4dQ,6357
27
+ codeshift/cli/commands/scan.py,sha256=JXR3MMKWOh1dlAEJ-OXh-EjCDBrBMxqzI6snZcBirqU,11386
28
+ codeshift/cli/commands/upgrade.py,sha256=_V1BP15BJR6OZHg7jdq90kfdUpjquf_FoWNNEWNzrnI,15874
29
+ codeshift/cli/commands/upgrade_all.py,sha256=Ef5xj0f-MHmmrFBpjD-UjDD6FEf7YDx3kWfyS-N6ebU,18103
30
+ codeshift/knowledge/__init__.py,sha256=_YwrLgjvsJQuYajfnIhUQqFeircF0MfkI9zJBPZTupc,1221
31
+ codeshift/knowledge/cache.py,sha256=aEx9aNDfrzCYMzlPRBzBOYiFIAGDcZJfQvcXroa5vsA,4837
32
+ codeshift/knowledge/generator.py,sha256=dFmvkg1PH73fvImuoFq8iykD2wVgmkOGbcD9tH-ruCs,7222
33
+ codeshift/knowledge/models.py,sha256=tvM6dnZJ00nJttIDMYxKlc8fYadgCdP2bqMVTA7o3HY,5157
34
+ codeshift/knowledge/parser.py,sha256=uWm8IjOYoV06Sx5_odyrLB93XL1GNRHdzuNVSFM-fMA,8493
35
+ codeshift/knowledge/sources.py,sha256=4GA4z4gHADCAfeBTF3dAO2S6H4s9leUKoxKPK2Vcopk,12280
36
+ codeshift/knowledge_base/__init__.py,sha256=-xiDpdKrizX-5FeA8NjnHxASkkv44BwiMORTYF29Vj4,368
37
+ codeshift/knowledge_base/loader.py,sha256=xMOSJEtnlzA1sGHGqeWdwzv2rF-LvVfSgEx9Q5WMTGk,3484
38
+ codeshift/knowledge_base/models.py,sha256=OwA9ts14aMW-PfWBi8GFcwHIGls5ERur7FCQXYcIU7k,3816
39
+ codeshift/migrator/__init__.py,sha256=V5ATKxw4hV6Ec3g78IeHkP92-VM4l6OzH0gi-lnU09w,467
40
+ codeshift/migrator/ast_transforms.py,sha256=fyySqSIFVHS8jTFledkbGWQ-_zcC5-S_rsv4sPu9jEA,7190
41
+ codeshift/migrator/engine.py,sha256=Ko7YSzY1-ZBFlFunLDMxUvWjB_gKZKfiXoIbd_V0V7M,12428
42
+ codeshift/migrator/llm_migrator.py,sha256=dyxVNu8Rf0FPM7Q_4TXt8f5nbbMqOHOIc_zbMsRm3RU,10373
43
+ codeshift/migrator/transforms/__init__.py,sha256=6wubI17Ay7GW6_twRsyvb-x3hYR4IOoymbqOqnTXDxM,688
44
+ codeshift/migrator/transforms/fastapi_transformer.py,sha256=IP_VjtM_RaapaAqkqbbW-BYQ_uKdAUcIx5EqWgiwCYg,7110
45
+ codeshift/migrator/transforms/pandas_transformer.py,sha256=93WoeY9FOLChAWKr9xTbkQCpOS1kwajzNfWqfrNE-bY,8905
46
+ codeshift/migrator/transforms/pydantic_v1_to_v2.py,sha256=PpyaLbxO2nTx3PDjqEsIANT71_XwarDRHXJNHP9NNPQ,25004
47
+ codeshift/migrator/transforms/requests_transformer.py,sha256=3HWT7OY-BJOrhwLXoPvC3OVq8iMuDO0FxfLq__E0X8I,9306
48
+ codeshift/migrator/transforms/sqlalchemy_transformer.py,sha256=VEt50K8Aok0NGB63RvIvSaXP7EG0LBSyXGA3jiNNayA,7143
49
+ codeshift/scanner/__init__.py,sha256=GFx9yMPZVuxBC8mGOPZoINsCsJgHV4TSjiV4KSF3fPU,300
50
+ codeshift/scanner/code_scanner.py,sha256=YGuHVI1FN0h8cGSARFlF5duFd8WBCJUSVMcqCbsjqEQ,12859
51
+ codeshift/scanner/dependency_parser.py,sha256=JzIfg_yUVmh3exzbXowhWuN_W8dbVTmY3bTGgAojc08,15372
52
+ codeshift/utils/__init__.py,sha256=dNtKUzFwoMxuEl41d_V0Zggv5lprZnOowB8Qt_THwbg,148
53
+ codeshift/utils/api_client.py,sha256=RUbKiox9dc_xc4z7IcrZ7plObYkkaKFa7Dw4qi75KGw,8010
54
+ codeshift/utils/cache.py,sha256=WHwNToQVmzhLgmHvt9nWUlzDFmVLBp_Sax7R4rrQfOg,8793
55
+ codeshift/utils/config.py,sha256=8x-rEh4q99K0HvT4ZQHDQAeUT8Tc_HATkZOomBGVyIA,2454
56
+ codeshift/utils/llm_client.py,sha256=WkT3KftJi7rsj8MXH4MVJvznugicb2XpkKqnqRET1eo,6369
57
+ codeshift/validator/__init__.py,sha256=WRQSfJ7eLJdjR2_f_dXSaBtfawkvu1Dlu20Gh76D12c,280
58
+ codeshift/validator/syntax_checker.py,sha256=FJeLIqhNhV7_Xj2RskHScJZks6A9fybaqv5Z1-MGDfo,5343
59
+ 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,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ codeshift = codeshift.cli.main:cli
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 PyResolve
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ codeshift