Commit a209c863 authored by Alec Douglas's avatar Alec Douglas Committed by Commit Bot

Make extract_actions.py Python 3 compatible

This commit makes extract_actions.py and its dependencies compatible
with Python 3.8+.

extract_actions.py and its dependencies are still Python 2
compatible.

Bug: 941669
Change-Id: I4038e49449ef0cda8e7801ea49aef7e80a53c9bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2531120
Commit-Queue: Dirk Pranke <dpranke@google.com>
Reviewed-by: default avatarDirk Pranke <dpranke@google.com>
Cr-Commit-Position: refs/heads/master@{#827107}
parent beee6c00
......@@ -25,7 +25,6 @@ from __future__ import print_function
__author__ = 'evanm (Evan Martin)'
from HTMLParser import HTMLParser
import logging
import os
import re
......@@ -33,6 +32,11 @@ import shutil
import sys
from xml.dom import minidom
if sys.version_info.major == 2:
from HTMLParser import HTMLParser
else:
from html.parser import HTMLParser
import action_utils
import actions_model
......@@ -372,7 +376,7 @@ def GrepForActions(path, actions):
if not action_name:
break
actions.add(action_name)
except InvalidStatementException, e:
except InvalidStatementException as e:
logging.warning(str(e))
if action_re != USER_METRICS_ACTION_RE:
......@@ -439,7 +443,7 @@ def GrepForWebUIActions(path, actions):
# ensure the path of the file being parsed gets printed if that happens.
close_called = True
parser.close()
except Exception, e:
except Exception as e:
print("Error encountered for path %s" % path)
raise e
finally:
......@@ -468,7 +472,7 @@ def GrepForDevToolsActions(path, actions):
if not action_name:
break
actions.add(action_name)
except InvalidStatementException, e:
except InvalidStatementException as e:
logging.warning(str(e))
def WalkDirectory(root_path, actions, extensions, callback):
......
......@@ -10,6 +10,7 @@ from __future__ import print_function
import logging
import os
import sys
import webbrowser
from difflib import HtmlDiff
......@@ -38,11 +39,15 @@ def PromptUserToAcceptDiff(old_text, new_text, prompt):
todesc='Updated', context=True, numlines=5)
temp = NamedTemporaryFile(suffix='.html', delete=False)
try:
html_diff = html_diff.encode()
temp.write(html_diff)
temp.close() # Close the file so the browser process can access it.
webbrowser.open('file://' + temp.name)
print(prompt)
if sys.version_info.major == 2:
response = raw_input('(Y/n): ').strip().lower()
else:
response = input('(Y/n): ').strip().lower()
finally:
temp.close() # May be called on already closed file.
os.remove(temp.name)
......
......@@ -4,6 +4,7 @@
"""Utility functions for parsing XML strings into ElementTree nodes."""
import sys
import xml.etree.ElementTree as ET
import xml.sax
......@@ -49,7 +50,7 @@ class _FirstTagFinder(xml.sax.ContentHandler):
class _CommentedXMLParser(ET.XMLParser):
"""An ElementTree builder that preserves comments."""
"""A Python 2 compatible ElementTree builder that preserves comments."""
def __init__(self, *args, **kwargs):
super(_CommentedXMLParser, self).__init__(*args, **kwargs)
......@@ -91,4 +92,8 @@ def GetTopLevelContent(file_content):
def ParseXMLString(raw_xml):
"""Parses raw_xml and returns an ElementTree node that includes comments."""
if sys.version_info.major == 2:
return ET.fromstring(raw_xml, _CommentedXMLParser())
else:
return ET.fromstring(
raw_xml, ET.XMLParser(target=ET.TreeBuilder(insert_comments=True)))
......@@ -62,11 +62,13 @@ def DoPresubmit(argv,
original_xml = f.read()
# Check there are no CR ('\r') characters in the file.
if '\r' in original_xml:
if b'\r' in original_xml:
logging.error('DOS-style line endings (CR characters) detected - these are '
'not allowed. Please run dos2unix %s', original_filename)
return 1
original_xml = original_xml.decode('utf-8')
try:
pretty = prettyFn(original_xml)
except Exception as e:
......@@ -98,6 +100,7 @@ def DoPresubmit(argv,
logging.info('Creating backup file: %s', backup_filename)
shutil.move(xml_path, os.path.join(xml_dir, backup_filename))
pretty = pretty.encode('utf-8')
with open(xml_path, 'wb') as f:
f.write(pretty)
logging.info('Updated %s. Don\'t forget to add it to your changelist',
......
......@@ -78,7 +78,7 @@ def MaybeMakeDirectory(*path):
file_path = os.path.join(*path)
try:
os.makedirs(file_path)
except OSError, e:
except OSError as e:
# errno.EEXIST is "File exists". If we see another error, re-raise.
if e.errno != errno.EEXIST:
raise
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment