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