Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions Lib/lib2to3/fixes/fix_unicode_dundermethods.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""Fixer to convert name of __unicode__ class methods to __str__, unless it exists already.
"""
# Author: Bart Broere


from lib2to3.fixer_base import BaseFix
from lib2to3.pytree import Leaf


class FixUnicodeDundermethods(BaseFix):
def match(self, node):
if isinstance(node, Leaf):
try:
if node.value == "__unicode__" and node.prev_sibling.value == "def":
return True
except AttributeError:
return False
return False

def transform(self, node, results):
try:
for element in node.parent.parent.parent.leaves():
if element.value == "class":
if not self._method_exists(node.parent.parent.parent, "__str__"):
node.value = "__str__"
return node
break
except AttributeError:
return None
return None

def _method_exists(self, class_node, method_name):
for element in class_node.leaves():
for element_j in element.leaves():
if element_j.value == "def":
if element_j.next_sibling.value == method_name:
return True
return False
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Add a fixer to the 2to3 library that converts ``__unicode__`` methods
to ``__str__``, if this can be done safely.