Skip to content

Commit 09d77d9

Browse files
committed
Replace lambdas by partial function applications because lambdas cant be pickled, thus making the codemod fail when running against more than a single file
1 parent 1acce32 commit 09d77d9

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

piranha_python/codemods.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import functools
12
import importlib.util
23

34
from libcst import FlattenSentinel, RemoveFromParent, matchers
@@ -57,7 +58,7 @@ def __init__(self, context, flag_name, flag_resolution_methods, ignored_module_c
5758

5859
self.flag_resolution_matcher = matchers.Call(
5960
func=matchers.Name(self.method_resolution_name),
60-
args=matchers.MatchIfTrue(lambda a: matchers.matches(a[0].value, matchers.Name(self.flag_name))),
61+
args=matchers.MatchIfTrue(functools.partial(_matches_flag_name, self.flag_name)),
6162
)
6263

6364
def visit_Module(self, node):
@@ -66,7 +67,7 @@ def visit_Module(self, node):
6667
def leave_Module(self, original_node, updated_node):
6768
self.flag_resolution_matcher = matchers.Call(
6869
func=matchers.Name(self.method_resolution_name),
69-
args=matchers.MatchIfTrue(lambda a: matchers.matches(a[0].value, matchers.Name(self.flag_name))),
70+
args=matchers.MatchIfTrue(functools.partial(_matches_flag_name, self.flag_name)),
7071
)
7172

7273
return updated_node
@@ -76,7 +77,7 @@ def leave_ImportFrom(self, original_node, updated_node):
7677
if aliased_flag_name is not None:
7778
self.flag_resolution_matcher = matchers.Call(
7879
func=matchers.Name(self.method_resolution_name),
79-
args=matchers.MatchIfTrue(lambda a: matchers.matches(a[0].value, matchers.Name(aliased_flag_name))),
80+
args=matchers.MatchIfTrue(functools.partial(_matches_flag_name, aliased_flag_name)),
8081
)
8182

8283
imported_names_after_removing_flag = [
@@ -95,7 +96,7 @@ def leave_Import(self, original_node, updated_node):
9596
aliased_flag_name = flag_imports_nodes[0].asname.name.value
9697
self.flag_resolution_matcher = matchers.Call(
9798
func=matchers.Name(self.method_resolution_name),
98-
args=matchers.MatchIfTrue(lambda a: matchers.matches(a[0].value, matchers.Name(aliased_flag_name))),
99+
args=matchers.MatchIfTrue(functools.partial(_matches_flag_name, aliased_flag_name)),
99100
)
100101

101102
imported_names_after_removing_flag = [
@@ -196,6 +197,10 @@ def _updated_tuple_assignment(self, updated_node):
196197
)
197198

198199

200+
def _matches_flag_name(flag_name, n):
201+
return matchers.matches(n[0].value, matchers.Name(flag_name))
202+
203+
199204
def _is_tuple_assignment(updated_node):
200205
return len(updated_node.targets) == 1 and matchers.matches(
201206
updated_node.targets[0].target, matchers.TypeOf(matchers.Tuple)

0 commit comments

Comments
 (0)