openrewrite-migrate-python 0.20.0__py3-none-any.whl → 0.22.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.
- openrewrite_migrate_python/migrate/__init__.py +4 -1
- openrewrite_migrate_python/migrate/datetime_utc.py +25 -23
- openrewrite_migrate_python/migrate/mock_assertions.py +117 -0
- openrewrite_migrate_python/migrate/pipes_migrations.py +41 -0
- openrewrite_migrate_python/migrate/upgrade_to_python312.py +3 -0
- openrewrite_migrate_python/migrate/upgrade_to_python313.py +3 -1
- {openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/METADATA +1 -1
- {openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/RECORD +11 -10
- {openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/WHEEL +0 -0
- {openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/entry_points.txt +0 -0
- {openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/top_level.txt +0 -0
|
@@ -73,6 +73,7 @@ from .locale_deprecations import ReplaceLocaleResetlocale
|
|
|
73
73
|
from .locale_getdefaultlocale_deprecation import FindLocaleGetdefaultlocale
|
|
74
74
|
from .macpath_deprecations import FindMacpathModule
|
|
75
75
|
from .mailcap_migrations import FindMailcapModule
|
|
76
|
+
from .mock_assertions import AddMockAssertPrefix
|
|
76
77
|
from .module_cached_attribute import ReplaceModuleCachedAttribute
|
|
77
78
|
from .nntplib_migrations import FindNntplibModule
|
|
78
79
|
from .os_deprecations import FindOsPopen, FindOsSpawn
|
|
@@ -85,7 +86,7 @@ from .pep594_system_migrations import (
|
|
|
85
86
|
FindOssaudiodevModule,
|
|
86
87
|
FindSpwdModule,
|
|
87
88
|
)
|
|
88
|
-
from .pipes_migrations import FindPipesModule
|
|
89
|
+
from .pipes_migrations import FindPipesModule, ReplacePipesQuote
|
|
89
90
|
from .pkgutil_deprecations import ReplacePkgutilFindLoader, ReplacePkgutilGetLoader
|
|
90
91
|
from .profile_deprecations import FindProfileModule
|
|
91
92
|
from .pydantic_deprecations import (
|
|
@@ -192,6 +193,7 @@ __all__ = [
|
|
|
192
193
|
"FindInspectGetargspec",
|
|
193
194
|
"FindMacpathModule",
|
|
194
195
|
"FindMailcapModule",
|
|
196
|
+
"AddMockAssertPrefix",
|
|
195
197
|
"FindMsilibModule",
|
|
196
198
|
"FindNisModule",
|
|
197
199
|
"FindNntplibModule",
|
|
@@ -201,6 +203,7 @@ __all__ = [
|
|
|
201
203
|
"FindOssaudiodevModule",
|
|
202
204
|
"FindPathlibLinkTo",
|
|
203
205
|
"FindPipesModule",
|
|
206
|
+
"ReplacePipesQuote",
|
|
204
207
|
"ReplacePlatformPopen",
|
|
205
208
|
"ReplaceReTemplate",
|
|
206
209
|
"FindRemovedModules312",
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Recipes for migrating deprecated datetime.utcnow() and datetime.utcfromtimestamp() calls.
|
|
3
3
|
|
|
4
4
|
These methods are deprecated in Python 3.12+ because they return naive datetime objects
|
|
5
|
-
that don't carry timezone information. The
|
|
5
|
+
that don't carry timezone information. The replacements return the same naive value:
|
|
6
6
|
|
|
7
|
-
- datetime.utcnow() -> datetime.now(UTC)
|
|
8
|
-
- datetime.utcfromtimestamp(ts) -> datetime.fromtimestamp(ts, UTC)
|
|
7
|
+
- datetime.utcnow() -> datetime.now(UTC).replace(tzinfo=None)
|
|
8
|
+
- datetime.utcfromtimestamp(ts) -> datetime.fromtimestamp(ts, UTC).replace(tzinfo=None)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
An aware result never equals a naive datetime, raises ``TypeError`` when ordered against or
|
|
11
|
+
subtracted from one, and prints with a ``+00:00`` offset. Making the values aware is a change
|
|
12
|
+
of its own, not part of the upgrade.
|
|
12
13
|
|
|
13
14
|
See: https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow
|
|
14
15
|
"""
|
|
@@ -56,18 +57,18 @@ _DATETIME_MODULE = ("datetime", None)
|
|
|
56
57
|
|
|
57
58
|
@lru_cache(maxsize=None)
|
|
58
59
|
def _now_template(utc: str) -> Template:
|
|
59
|
-
return template(f"{_sel}.now({raw(utc)})")
|
|
60
|
+
return template(f"{_sel}.now({raw(utc)}).replace(tzinfo=None)")
|
|
60
61
|
|
|
61
62
|
|
|
62
63
|
@lru_cache(maxsize=None)
|
|
63
64
|
def _fromtimestamp_template(utc: str) -> Template:
|
|
64
|
-
return template(f"{_sel}.fromtimestamp({_ts}, {raw(utc)})")
|
|
65
|
+
return template(f"{_sel}.fromtimestamp({_ts}, {raw(utc)}).replace(tzinfo=None)")
|
|
65
66
|
|
|
66
67
|
|
|
67
68
|
class _DatetimeUtcVisitor(PythonVisitor[ExecutionContext]):
|
|
68
|
-
"""Rewrites a naive UTC constructor to its aware counterpart
|
|
69
|
-
file's own ``datetime`` imports allow. Those imports also
|
|
70
|
-
parse that attributes no types still supplies.
|
|
69
|
+
"""Rewrites a deprecated naive UTC constructor to its aware counterpart made naive again,
|
|
70
|
+
spelling UTC the way the file's own ``datetime`` imports allow. Those imports also
|
|
71
|
+
identify the receiver, which a parse that attributes no types still supplies.
|
|
71
72
|
"""
|
|
72
73
|
|
|
73
74
|
_target = ""
|
|
@@ -131,7 +132,7 @@ class _DatetimeUtcVisitor(PythonVisitor[ExecutionContext]):
|
|
|
131
132
|
@categorize(_Python312)
|
|
132
133
|
class ReplaceDatetimeUtcNow(Recipe):
|
|
133
134
|
"""
|
|
134
|
-
Replace ``datetime.utcnow()`` with ``datetime.now(UTC)``.
|
|
135
|
+
Replace ``datetime.utcnow()`` with ``datetime.now(UTC).replace(tzinfo=None)``.
|
|
135
136
|
|
|
136
137
|
The ``datetime.utcnow()`` method is deprecated in Python 3.12 because it returns
|
|
137
138
|
a naive datetime object that doesn't carry timezone information. This can lead
|
|
@@ -144,7 +145,7 @@ class ReplaceDatetimeUtcNow(Recipe):
|
|
|
144
145
|
|
|
145
146
|
After:
|
|
146
147
|
from datetime import datetime, UTC
|
|
147
|
-
now = datetime.now(UTC)
|
|
148
|
+
now = datetime.now(UTC).replace(tzinfo=None)
|
|
148
149
|
"""
|
|
149
150
|
|
|
150
151
|
@property
|
|
@@ -153,15 +154,15 @@ class ReplaceDatetimeUtcNow(Recipe):
|
|
|
153
154
|
|
|
154
155
|
@property
|
|
155
156
|
def display_name(self) -> str:
|
|
156
|
-
return "Replace `datetime.utcnow()` with `datetime.now(UTC)`"
|
|
157
|
+
return "Replace `datetime.utcnow()` with `datetime.now(UTC).replace(tzinfo=None)`"
|
|
157
158
|
|
|
158
159
|
@property
|
|
159
160
|
def description(self) -> str:
|
|
160
161
|
return (
|
|
161
162
|
"The `datetime.utcnow()` method is deprecated in Python 3.12. "
|
|
162
|
-
"Replace it with `datetime.now(UTC)`, importing `UTC` from
|
|
163
|
-
"name is not already in scope. The result is
|
|
164
|
-
"
|
|
163
|
+
"Replace it with `datetime.now(UTC).replace(tzinfo=None)`, importing `UTC` from "
|
|
164
|
+
"`datetime` where the name is not already in scope. The result is the naive UTC "
|
|
165
|
+
"datetime `utcnow()` returned, so it still compares with other naive values."
|
|
165
166
|
)
|
|
166
167
|
|
|
167
168
|
@property
|
|
@@ -193,7 +194,8 @@ class ReplaceDatetimeUtcNow(Recipe):
|
|
|
193
194
|
@categorize(_Python312)
|
|
194
195
|
class ReplaceDatetimeUtcFromTimestamp(Recipe):
|
|
195
196
|
"""
|
|
196
|
-
Replace ``datetime.utcfromtimestamp(ts)`` with
|
|
197
|
+
Replace ``datetime.utcfromtimestamp(ts)`` with
|
|
198
|
+
``datetime.fromtimestamp(ts, UTC).replace(tzinfo=None)``.
|
|
197
199
|
|
|
198
200
|
The ``datetime.utcfromtimestamp()`` method is deprecated in Python 3.12 because it
|
|
199
201
|
returns a naive datetime object.
|
|
@@ -205,7 +207,7 @@ class ReplaceDatetimeUtcFromTimestamp(Recipe):
|
|
|
205
207
|
|
|
206
208
|
After:
|
|
207
209
|
from datetime import datetime, UTC
|
|
208
|
-
dt = datetime.fromtimestamp(1234567890, UTC)
|
|
210
|
+
dt = datetime.fromtimestamp(1234567890, UTC).replace(tzinfo=None)
|
|
209
211
|
"""
|
|
210
212
|
|
|
211
213
|
@property
|
|
@@ -214,16 +216,16 @@ class ReplaceDatetimeUtcFromTimestamp(Recipe):
|
|
|
214
216
|
|
|
215
217
|
@property
|
|
216
218
|
def display_name(self) -> str:
|
|
217
|
-
return "Replace `datetime.utcfromtimestamp()` with `datetime.fromtimestamp(ts, UTC)`"
|
|
219
|
+
return "Replace `datetime.utcfromtimestamp()` with `datetime.fromtimestamp(ts, UTC).replace(tzinfo=None)`"
|
|
218
220
|
|
|
219
221
|
@property
|
|
220
222
|
def description(self) -> str:
|
|
221
223
|
return (
|
|
222
224
|
"The `datetime.utcfromtimestamp()` method is deprecated in Python 3.12. "
|
|
223
|
-
"Replace it with `datetime.fromtimestamp(ts, UTC)`, importing
|
|
224
|
-
"`datetime` where the name is not already in scope. The result is
|
|
225
|
-
"
|
|
226
|
-
"
|
|
225
|
+
"Replace it with `datetime.fromtimestamp(ts, UTC).replace(tzinfo=None)`, importing "
|
|
226
|
+
"`UTC` from `datetime` where the name is not already in scope. The result is the "
|
|
227
|
+
"naive UTC datetime `utcfromtimestamp()` returned, so it still compares with other "
|
|
228
|
+
"naive values."
|
|
227
229
|
)
|
|
228
230
|
|
|
229
231
|
@property
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Recipes for mock assertions that Python 3.12 rejects.
|
|
3
|
+
|
|
4
|
+
See: https://docs.python.org/3/whatsnew/3.12.html
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any, List
|
|
8
|
+
|
|
9
|
+
from rewrite import ExecutionContext, Preconditions, Recipe, TreeVisitor
|
|
10
|
+
from rewrite.category import CategoryDescriptor
|
|
11
|
+
from rewrite.decorators import categorize
|
|
12
|
+
from rewrite.marketplace import Python
|
|
13
|
+
from rewrite.java.support_types import JavaType, Space
|
|
14
|
+
from rewrite.java.tree import Assert, Block, J, MethodInvocation
|
|
15
|
+
from rewrite.python.preconditions import uses_method
|
|
16
|
+
from rewrite.python.type_utils import is_of_type_with_name
|
|
17
|
+
from rewrite.python.visitor import PythonVisitor
|
|
18
|
+
|
|
19
|
+
from openrewrite_code_quality_python.codequality._trivia import has_comments
|
|
20
|
+
|
|
21
|
+
_Python312 = [
|
|
22
|
+
*Python,
|
|
23
|
+
CategoryDescriptor(display_name="Migrate"),
|
|
24
|
+
CategoryDescriptor(display_name="Python 3.12"),
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
# `called` is a property, so a mock still answers it.
|
|
28
|
+
_UNPREFIXED = ("called_once", "called_with", "called_once_with", "any_call", "has_calls", "not_called")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _is_unprefixed_mock_call(tree: Any) -> bool:
|
|
32
|
+
if not isinstance(tree, MethodInvocation) or tree.select is None:
|
|
33
|
+
return False
|
|
34
|
+
if tree.name.simple_name not in _UNPREFIXED:
|
|
35
|
+
return False
|
|
36
|
+
# A mock stored on `self` in `setUp()` has no type the parser sees.
|
|
37
|
+
receiver = tree.select.type
|
|
38
|
+
return isinstance(receiver, JavaType.Unknown) or is_of_type_with_name(
|
|
39
|
+
receiver, True, lambda n: n.startswith(("unittest.mock.", "mock."))
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _prefixed(call: MethodInvocation, prefix: Space) -> MethodInvocation:
|
|
44
|
+
return call.replace(
|
|
45
|
+
_prefix=prefix,
|
|
46
|
+
_name=call.name.replace(_simple_name=f"assert_{call.name.simple_name}", _type=None, _field_type=None),
|
|
47
|
+
_method_type=None,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@categorize(_Python312)
|
|
52
|
+
class AddMockAssertPrefix(Recipe):
|
|
53
|
+
"""
|
|
54
|
+
Add the ``assert_`` prefix to mock assertions that lack it.
|
|
55
|
+
|
|
56
|
+
Example:
|
|
57
|
+
Before:
|
|
58
|
+
def test_cleanup(self):
|
|
59
|
+
self.callback.called_once_with(42)
|
|
60
|
+
|
|
61
|
+
After:
|
|
62
|
+
def test_cleanup(self):
|
|
63
|
+
self.callback.assert_called_once_with(42)
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def name(self) -> str:
|
|
68
|
+
return "org.openrewrite.python.migrate.AddMockAssertPrefix"
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def display_name(self) -> str:
|
|
72
|
+
return "Add the `assert_` prefix to mock assertions that lack it"
|
|
73
|
+
|
|
74
|
+
@property
|
|
75
|
+
def description(self) -> str:
|
|
76
|
+
return (
|
|
77
|
+
"Since Python 3.12 a mock raises `AttributeError` for `called_once_with()` and the "
|
|
78
|
+
"other assertion names without their `assert_` prefix. Before, such a call asserted "
|
|
79
|
+
"nothing. The prefix is added where the call is a statement of its own inside a "
|
|
80
|
+
"function, the whole condition of an `assert` without a message, or the only argument "
|
|
81
|
+
"of `assertTrue()`. The recipe matches the method name, and leaves a receiver whose "
|
|
82
|
+
"type resolves to a class other than a mock. A test that passed only because nothing "
|
|
83
|
+
"was asserted fails once it asserts."
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def tags(self) -> List[str]:
|
|
88
|
+
return ["python", "migration", "3.12", "unittest"]
|
|
89
|
+
|
|
90
|
+
def editor(self) -> TreeVisitor[Any, ExecutionContext]:
|
|
91
|
+
class Visitor(PythonVisitor[ExecutionContext]):
|
|
92
|
+
def visit_method_invocation(self, method: MethodInvocation, p: ExecutionContext) -> J:
|
|
93
|
+
m = super().visit_method_invocation(method, p)
|
|
94
|
+
if not isinstance(m, MethodInvocation) or not isinstance(
|
|
95
|
+
self.cursor.parent_tree_cursor().value, Block
|
|
96
|
+
):
|
|
97
|
+
return m
|
|
98
|
+
if _is_unprefixed_mock_call(m):
|
|
99
|
+
return _prefixed(m, m.prefix)
|
|
100
|
+
if m.name.simple_name != "assertTrue" or len(m.arguments) != 1:
|
|
101
|
+
return m
|
|
102
|
+
return self._replace_check(m, m.arguments[0])
|
|
103
|
+
|
|
104
|
+
def visit_assert(self, assert_: Assert, p: ExecutionContext) -> J:
|
|
105
|
+
a = super().visit_assert(assert_, p)
|
|
106
|
+
if not isinstance(a, Assert) or a.detail is not None:
|
|
107
|
+
return a
|
|
108
|
+
return self._replace_check(a, a.condition)
|
|
109
|
+
|
|
110
|
+
def _replace_check(self, check: J, condition: Any) -> J:
|
|
111
|
+
if not _is_unprefixed_mock_call(condition) or has_comments(check.replace(_prefix=Space.EMPTY)):
|
|
112
|
+
return check
|
|
113
|
+
return _prefixed(condition, check.prefix)
|
|
114
|
+
|
|
115
|
+
# A gate naming a mock type would drop the unknown receivers the visitor accepts.
|
|
116
|
+
gate = Preconditions.or_(*(uses_method(f"*..* {name}(..)") for name in _UNPREFIXED))
|
|
117
|
+
return Preconditions.check(gate, Visitor())
|
|
@@ -17,6 +17,7 @@ from rewrite import ExecutionContext, Recipe, TreeVisitor
|
|
|
17
17
|
from rewrite.category import CategoryDescriptor
|
|
18
18
|
from rewrite.decorators import categorize
|
|
19
19
|
from rewrite.marketplace import Python
|
|
20
|
+
from rewrite.python.recipes import ChangeImport
|
|
20
21
|
from ._module_imports import find_module_imports
|
|
21
22
|
|
|
22
23
|
# Define category path: Python > Migrate > Python 3.13
|
|
@@ -27,6 +28,46 @@ _Python313 = [
|
|
|
27
28
|
]
|
|
28
29
|
|
|
29
30
|
|
|
31
|
+
@categorize(_Python313)
|
|
32
|
+
class ReplacePipesQuote(Recipe):
|
|
33
|
+
"""
|
|
34
|
+
Replace ``pipes.quote()`` with ``shlex.quote()``.
|
|
35
|
+
|
|
36
|
+
``pipes.quote`` is ``shlex.quote`` re-exported, and the ``pipes`` module was removed in
|
|
37
|
+
Python 3.13.
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
Before:
|
|
41
|
+
import pipes
|
|
42
|
+
quoted = pipes.quote(path)
|
|
43
|
+
|
|
44
|
+
After:
|
|
45
|
+
import shlex
|
|
46
|
+
quoted = shlex.quote(path)
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def name(self) -> str:
|
|
51
|
+
return "org.openrewrite.python.migrate.ReplacePipesQuote"
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def display_name(self) -> str:
|
|
55
|
+
return "Replace `pipes.quote()` with `shlex.quote()`"
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def description(self) -> str:
|
|
59
|
+
return (
|
|
60
|
+
"`pipes.quote()` is `shlex.quote()` under another name, and the `pipes` module was "
|
|
61
|
+
"removed in Python 3.13. The `pipes` import stays where the file uses another of its "
|
|
62
|
+
"members."
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def tags(self) -> List[str]:
|
|
67
|
+
return ["python", "migration", "3.13", "PEP 594", "pipes"]
|
|
68
|
+
|
|
69
|
+
def recipe_list(self) -> List[Recipe]:
|
|
70
|
+
return [ChangeImport(old_module="pipes", old_name="quote", new_module="shlex")]
|
|
30
71
|
|
|
31
72
|
|
|
32
73
|
@categorize(_Python313)
|
|
@@ -62,6 +62,7 @@ class UpgradeToPython312(Recipe):
|
|
|
62
62
|
from .distutils_deprecations import FindDistutilsUsage
|
|
63
63
|
from .distutils_migrations import ReplaceDistutilsVersion
|
|
64
64
|
from .imp_migrations import FindImpUsage
|
|
65
|
+
from .mock_assertions import AddMockAssertPrefix
|
|
65
66
|
from .os_deprecations import FindOsPopen, FindOsSpawn
|
|
66
67
|
from .pathlib_deprecations import FindPathlibLinkTo
|
|
67
68
|
from .pkgutil_deprecations import ReplacePkgutilFindLoader, ReplacePkgutilGetLoader
|
|
@@ -101,6 +102,8 @@ class UpgradeToPython312(Recipe):
|
|
|
101
102
|
FindShutilRmtreeOnerror(),
|
|
102
103
|
# sys.last_type/last_value/last_traceback -> sys.last_exc
|
|
103
104
|
ReplaceSysLastExcInfo(),
|
|
105
|
+
# Mocks reject `called_once_with()` and the other unprefixed assertion names since 3.12
|
|
106
|
+
AddMockAssertPrefix(),
|
|
104
107
|
# Deprecated in 3.12, removed in 3.16 and 3.17
|
|
105
108
|
ReplaceBitwiseInversionOnBool(),
|
|
106
109
|
FindBitwiseInversionOnBool(),
|
|
@@ -80,7 +80,7 @@ class UpgradeToPython313(Recipe):
|
|
|
80
80
|
FindOssaudiodevModule,
|
|
81
81
|
FindSpwdModule,
|
|
82
82
|
)
|
|
83
|
-
from .pipes_migrations import FindPipesModule
|
|
83
|
+
from .pipes_migrations import FindPipesModule, ReplacePipesQuote
|
|
84
84
|
from .telnetlib_migrations import FindTelnetlibModule
|
|
85
85
|
from .upgrade_to_python312 import UpgradeToPython312
|
|
86
86
|
from .uu_migrations import FindUuModule
|
|
@@ -91,6 +91,8 @@ class UpgradeToPython313(Recipe):
|
|
|
91
91
|
UpgradeToPython312(),
|
|
92
92
|
# locale.resetlocale() removed in 3.13 (deprecated in 3.11)
|
|
93
93
|
ReplaceLocaleResetlocale(),
|
|
94
|
+
# Before FindPipesModule, which then marks only the imports still needed
|
|
95
|
+
ReplacePipesQuote(),
|
|
94
96
|
# PEP 594 "dead batteries" - removed modules (detection only)
|
|
95
97
|
FindAifcModule(),
|
|
96
98
|
FindAudioopModule(),
|
{openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/RECORD
RENAMED
|
@@ -51,7 +51,7 @@ openrewrite_code_quality_python/codequality/remove_unconditional_value_overwrite
|
|
|
51
51
|
openrewrite_code_quality_python/codequality/simplify_boolean_literal.py,sha256=mlid3xd0_6JaAGf0VHD8Xsh10ahp0QibnKfUKI44rCE,5983
|
|
52
52
|
openrewrite_code_quality_python/codequality/simplify_redundant_logical_expression.py,sha256=KuI-PbY6aqUw0OWifOoH_xulA3oNgR0y0iZJToGFUOo,3587
|
|
53
53
|
openrewrite_migrate_python/__init__.py,sha256=AUUYSi3ET9VBhwfF535k61ZTuH8nhJJ4oP9IyeLbftI,1211
|
|
54
|
-
openrewrite_migrate_python/migrate/__init__.py,sha256=
|
|
54
|
+
openrewrite_migrate_python/migrate/__init__.py,sha256=p_vcmUibNSzdh1bCHcYWjIu4FGk9eSrEgOK98NWp5b0,12467
|
|
55
55
|
openrewrite_migrate_python/migrate/_decorators.py,sha256=03DZoAa3LQ9fXZx3FFm_RSmr5tiEpZ1g2HL73qWSNzc,1191
|
|
56
56
|
openrewrite_migrate_python/migrate/_finders.py,sha256=RVmkMUOWLxxCWx4Ig8SUEbqPTVGqrAP2VVhiazBsCyM,4960
|
|
57
57
|
openrewrite_migrate_python/migrate/_langchain_tables.py,sha256=TF2A2iwkULa5uybo1rBxp_o2weziCxAmn5NLUcSAXqs,55153
|
|
@@ -74,7 +74,7 @@ openrewrite_migrate_python/migrate/cgi_parse_deprecations.py,sha256=8mat6Mp73L7t
|
|
|
74
74
|
openrewrite_migrate_python/migrate/collections_abc_migrations.py,sha256=VgTCsfYqPN7SyLcAFHMltpe4L-pge3aNWUv8Ncjg2DM,4792
|
|
75
75
|
openrewrite_migrate_python/migrate/configparser_deprecations.py,sha256=yuIc8yunDLbWpFre3ClCpFPZqwS1Amy7Kf-pPm7wIq0,4081
|
|
76
76
|
openrewrite_migrate_python/migrate/ctypes_deprecations.py,sha256=66Exo0Y6B6lentJiHH4ZpWE2TAVBuMXN8RRdKhmWbZw,1983
|
|
77
|
-
openrewrite_migrate_python/migrate/datetime_utc.py,sha256=
|
|
77
|
+
openrewrite_migrate_python/migrate/datetime_utc.py,sha256=oHdoqJH-rAaQ_tVziC3UHUB9BnEhsN2ak9KYXNAxgg0,11108
|
|
78
78
|
openrewrite_migrate_python/migrate/distutils_deprecations.py,sha256=oNi6_-O8JtFnbfyarQ4JBdTonXxKxI2Bzyq98WKyE6o,2530
|
|
79
79
|
openrewrite_migrate_python/migrate/distutils_migrations.py,sha256=w7Ody6TSEdHdYke_KBsuLdsKWSKXbLZbu9VLtiWIsoY,3705
|
|
80
80
|
openrewrite_migrate_python/migrate/functools_deprecations.py,sha256=KHm9CR8kaM7ERkvVOl83KgLvjA-GITtvfs4-7Q3E4R8,2945
|
|
@@ -94,12 +94,13 @@ openrewrite_migrate_python/migrate/locale_deprecations.py,sha256=_g-r4wnYD1wstAR
|
|
|
94
94
|
openrewrite_migrate_python/migrate/locale_getdefaultlocale_deprecation.py,sha256=epCCwMXFtsRI63H37WD2EWOXvrZkaA93-g_-q5mnqP8,3110
|
|
95
95
|
openrewrite_migrate_python/migrate/macpath_deprecations.py,sha256=anMZkSJwot8tDFIM7fsMfq08IvrJQluyOxnLvrjq1Gc,1797
|
|
96
96
|
openrewrite_migrate_python/migrate/mailcap_migrations.py,sha256=dKs3Dd22qgZLb8jQgwnUbJbs1k1ySxAxcFifJPKe1wQ,2144
|
|
97
|
+
openrewrite_migrate_python/migrate/mock_assertions.py,sha256=-FlBrgg-IDCmF-mgCAfiaQGahy2AEQ-KN018G7k3MNM,4694
|
|
97
98
|
openrewrite_migrate_python/migrate/module_cached_attribute.py,sha256=ZhTBxaRsnT4qpghY6YU5geCyPI5j9PXHhTfyzLTOxPI,3843
|
|
98
99
|
openrewrite_migrate_python/migrate/nntplib_migrations.py,sha256=aus4-ZztqEf6-pP7qXDjuBvasKTGlKEWgUMg-q7fkYM,2171
|
|
99
100
|
openrewrite_migrate_python/migrate/os_deprecations.py,sha256=2H3odqPJ02IZrHXWP2LR-xdy1RU-IB7BNyYcCBlxbe8,4607
|
|
100
101
|
openrewrite_migrate_python/migrate/pathlib_deprecations.py,sha256=yKUd6tQ1xpX3IDXlp19Md0YtCSWGxqjSdCFwpx6hY6M,5473
|
|
101
102
|
openrewrite_migrate_python/migrate/pep594_system_migrations.py,sha256=OU4aKVG2jZfjwuN850XT3qXDD62W1P-6arQjiy_v_WE,7496
|
|
102
|
-
openrewrite_migrate_python/migrate/pipes_migrations.py,sha256=
|
|
103
|
+
openrewrite_migrate_python/migrate/pipes_migrations.py,sha256=7n1N_M36ZEjvpZIzkcKyDGe30KmYmw5oqArYok8G6Nc,3444
|
|
103
104
|
openrewrite_migrate_python/migrate/pkgutil_deprecations.py,sha256=UgnyhyeJsfV0OSmqxtXdoTQ5hZcWoARoSgbXJZK9QkQ,5611
|
|
104
105
|
openrewrite_migrate_python/migrate/platform_deprecations.py,sha256=bJoWc28YdD4zHr8sbwsR-1k5knFzKwG2y4GRiYNAbTM,5443
|
|
105
106
|
openrewrite_migrate_python/migrate/profile_deprecations.py,sha256=DnYELDb-vPEul27PwHFstjbCQNP_VKR0ayhvQqE3mvc,2065
|
|
@@ -133,8 +134,8 @@ openrewrite_migrate_python/migrate/upgrade_to_pandas.py,sha256=LAcMWT9hn4uzXy3LP
|
|
|
133
134
|
openrewrite_migrate_python/migrate/upgrade_to_pydantic.py,sha256=WYKdE8d8hJ7rhd4sQldFzy05-w3ZOW471QZ5ssEUrBA,9676
|
|
134
135
|
openrewrite_migrate_python/migrate/upgrade_to_python310.py,sha256=iePD3K93vtRe1ELnPzuPqTa4DvtBe8cKWBcc9B7LjXU,3605
|
|
135
136
|
openrewrite_migrate_python/migrate/upgrade_to_python311.py,sha256=eiQXD3Yt75DnuldpcPgAN9Oql09l7JgmUY0G4lizFxE,4396
|
|
136
|
-
openrewrite_migrate_python/migrate/upgrade_to_python312.py,sha256=
|
|
137
|
-
openrewrite_migrate_python/migrate/upgrade_to_python313.py,sha256=
|
|
137
|
+
openrewrite_migrate_python/migrate/upgrade_to_python312.py,sha256=vpPaEtQiBJ0Wpar2mJeFFq_j2RcJ5ual3jZmueXnnSg,5082
|
|
138
|
+
openrewrite_migrate_python/migrate/upgrade_to_python313.py,sha256=O1gt5QR2f_8EVOUArglQkQETJxVIw1hq2Vi55FeT8xA,5061
|
|
138
139
|
openrewrite_migrate_python/migrate/upgrade_to_python314.py,sha256=ix0Fv257epgBnZLNrx4nBXPOhL-QGbCJ-IfsFowKCiw,3639
|
|
139
140
|
openrewrite_migrate_python/migrate/upgrade_to_python315.py,sha256=v6VHibstcfbPusKtlyRkCwNPSPivabK0BbGNHtwCBww,4305
|
|
140
141
|
openrewrite_migrate_python/migrate/upgrade_to_python38.py,sha256=Zoo8LlILVoqk4k-oSv30B5qGPSRK82X7zGk2-XnykC0,4144
|
|
@@ -145,8 +146,8 @@ openrewrite_migrate_python/migrate/wave_deprecations.py,sha256=QcjcFNpb2mQ4v8VdY
|
|
|
145
146
|
openrewrite_migrate_python/migrate/webbrowser_deprecations.py,sha256=2ENvVuz5fcKAxnoMQVWIC62ipFeRy2_Ah_WEUushASM,2205
|
|
146
147
|
openrewrite_migrate_python/migrate/xdrlib_migrations.py,sha256=khHPyP1TctExRMl1w_sR9d2fh5_QD04WQDNCqN3wUh4,2140
|
|
147
148
|
openrewrite_migrate_python/migrate/xml_deprecations.py,sha256=mvyEUhVGPQTsjE81OkxBqKQCmis5xqTNg6LcUX1ipp4,7613
|
|
148
|
-
openrewrite_migrate_python-0.
|
|
149
|
-
openrewrite_migrate_python-0.
|
|
150
|
-
openrewrite_migrate_python-0.
|
|
151
|
-
openrewrite_migrate_python-0.
|
|
152
|
-
openrewrite_migrate_python-0.
|
|
149
|
+
openrewrite_migrate_python-0.22.0.dist-info/METADATA,sha256=eddBUlZ9EZKZtnesOrIv4ZYYf4z6II1u3QSaO7Xi-gE,1450
|
|
150
|
+
openrewrite_migrate_python-0.22.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
151
|
+
openrewrite_migrate_python-0.22.0.dist-info/entry_points.txt,sha256=SuygzlMJiKIW19FYJVxx0hhRyzW6HTDCweY7584XpXw,138
|
|
152
|
+
openrewrite_migrate_python-0.22.0.dist-info/top_level.txt,sha256=y8dKeC9kb5GUzFraB-OhJGxjPemM3GaPdrAygz2RP0U,59
|
|
153
|
+
openrewrite_migrate_python-0.22.0.dist-info/RECORD,,
|
{openrewrite_migrate_python-0.20.0.dist-info → openrewrite_migrate_python-0.22.0.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|