Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0364846a authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Apply pylint to remaining scripts in hiddenapi"

parents deee92ca 2c2219b6
Loading
Loading
Loading
Loading
+47 −24
Original line number Diff line number Diff line
@@ -13,8 +13,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Merge multiple CSV files, possibly with different columns.
"""Merge multiple CSV files, possibly with different columns.
"""

import argparse
@@ -26,34 +25,52 @@ import operator

from zipfile import ZipFile

args_parser = argparse.ArgumentParser(description='Merge given CSV files into a single one.')
args_parser.add_argument('--header', help='Comma separated field names; '
                                          'if missing determines the header from input files.')
args_parser.add_argument('--zip_input', help='Treat files as ZIP archives containing CSV files to merge.',
                         action="store_true")
args_parser.add_argument('--key_field', help='The name of the field by which the rows should be sorted. '
args_parser = argparse.ArgumentParser(
    description='Merge given CSV files into a single one.'
)
args_parser.add_argument(
    '--header',
    help='Comma separated field names; '
    'if missing determines the header from input files.',
)
args_parser.add_argument(
    '--zip_input',
    help='Treat files as ZIP archives containing CSV files to merge.',
    action="store_true",
)
args_parser.add_argument(
    '--key_field',
    help='The name of the field by which the rows should be sorted. '
    'Must be in the field names. '
    'Will be the first field in the output. '
                                             'All input files must be sorted by that field.')
args_parser.add_argument('--output', help='Output file for merged CSV.',
                         default='-', type=argparse.FileType('w'))
    'All input files must be sorted by that field.',
)
args_parser.add_argument(
    '--output',
    help='Output file for merged CSV.',
    default='-',
    type=argparse.FileType('w'),
)
args_parser.add_argument('files', nargs=argparse.REMAINDER)
args = args_parser.parse_args()


def dict_reader(input):
    return csv.DictReader(input, delimiter=',', quotechar='|')
def dict_reader(csvfile):
    return csv.DictReader(csvfile, delimiter=',', quotechar='|')


csv_readers = []
if not(args.zip_input):
if not args.zip_input:
    for file in args.files:
        csv_readers.append(dict_reader(open(file, 'r')))
else:
    for file in args.files:
        with ZipFile(file) as zip:
            for entry in zip.namelist():
        with ZipFile(file) as zipfile:
            for entry in zipfile.namelist():
                if entry.endswith('.uau'):
                    csv_readers.append(dict_reader(io.TextIOWrapper(zip.open(entry, 'r'))))
                    csv_readers.append(
                        dict_reader(io.TextIOWrapper(zipfile.open(entry, 'r')))
                    )

if args.header:
    fieldnames = args.header.split(',')
@@ -73,8 +90,8 @@ if len(csv_readers) > 0:
    keyField = args.key_field
    if keyField:
        assert keyField in fieldnames, (
            "--key_field {} not found, must be one of {}\n").format(
            keyField, ",".join(fieldnames))
            "--key_field {} not found, must be one of {}\n"
        ).format(keyField, ",".join(fieldnames))
        # Make the key field the first field in the output
        keyFieldIndex = fieldnames.index(args.key_field)
        fieldnames.insert(0, fieldnames.pop(keyFieldIndex))
@@ -83,8 +100,14 @@ if len(csv_readers) > 0:
        all_rows = heapq.merge(*csv_readers, key=operator.itemgetter(keyField))

# Write all rows from the input files to the output:
writer = csv.DictWriter(args.output, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL,
                        dialect='unix', fieldnames=fieldnames)
writer = csv.DictWriter(
    args.output,
    delimiter=',',
    quotechar='|',
    quoting=csv.QUOTE_MINIMAL,
    dialect='unix',
    fieldnames=fieldnames,
)
writer.writeheader()

# Read all the rows from the input and write them to the output in the correct
+21 −8
Original line number Diff line number Diff line
@@ -13,22 +13,26 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Generate a set of signature patterns from the modular flags generated by a
"""Generate a set of signature patterns from the modular flags generated by a
bootclasspath_fragment that can be used to select a subset of monolithic flags
against which the modular flags can be compared.
"""

import argparse
import csv
import sys

def dict_reader(csvfile):
    return csv.DictReader(
        csvfile, delimiter=',', quotechar='|', fieldnames=['signature']
    )

def dict_reader(input):
    return csv.DictReader(input, delimiter=',', quotechar='|', fieldnames=['signature'])

def produce_patterns_from_file(file):
    with open(file, 'r') as f:
        return produce_patterns_from_stream(f)


def produce_patterns_from_stream(stream):
    # Read in all the signatures into a list and remove member names.
    patterns = set()
@@ -38,18 +42,26 @@ def produce_patterns_from_stream(stream):
        # Remove the class specific member signature
        pieces = text.split(";->")
        qualifiedClassName = pieces[0]
            # Remove inner class names as they cannot be separated from the containing outer class.
        # Remove inner class names as they cannot be separated
        # from the containing outer class.
        pieces = qualifiedClassName.split("$", maxsplit=1)
        pattern = pieces[0]
        patterns.add(pattern)

    patterns = list(patterns)
    patterns = list(patterns) #pylint: disable=redefined-variable-type
    patterns.sort()
    return patterns


def main(args):
    args_parser = argparse.ArgumentParser(description='Generate a set of signature patterns that select a subset of monolithic hidden API files.')
    args_parser.add_argument('--flags', help='The stub flags file which contains an entry for every dex member')
    args_parser = argparse.ArgumentParser(
        description='Generate a set of signature patterns '
        'that select a subset of monolithic hidden API files.'
    )
    args_parser.add_argument(
        '--flags',
        help='The stub flags file which contains an entry for every dex member',
    )
    args_parser.add_argument('--output', help='Generated signature prefixes')
    args = args_parser.parse_args(args)

@@ -62,5 +74,6 @@ def main(args):
            outputFile.write(pattern)
            outputFile.write("\n")


if __name__ == "__main__":
    main(sys.argv[1:])
+11 −6
Original line number Diff line number Diff line
@@ -18,21 +18,25 @@
import io
import unittest

from signature_patterns import *
from signature_patterns import * #pylint: disable=unused-wildcard-import,wildcard-import

class TestGeneratedPatterns(unittest.TestCase):

    def produce_patterns_from_string(self, csv):
        with io.StringIO(csv) as f:
class TestGeneratedPatterns(unittest.TestCase):
    def produce_patterns_from_string(self, csvdata):
        with io.StringIO(csvdata) as f:
            return produce_patterns_from_stream(f)

    def test_generate(self):
        patterns = self.produce_patterns_from_string('''
        #pylint: disable=line-too-long
        patterns = self.produce_patterns_from_string(
            '''
Ljava/lang/ProcessBuilder$Redirect$1;-><init>()V,blocked
Ljava/lang/Character$UnicodeScript;->of(I)Ljava/lang/Character$UnicodeScript;,public-api
Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
Ljava/lang/Object;->toString()Ljava/lang/String;,blocked
''')
'''
        )
        #pylint: enable=line-too-long
        expected = [
            "java/lang/Character",
            "java/lang/Object",
@@ -40,5 +44,6 @@ Ljava/lang/Object;->toString()Ljava/lang/String;,blocked
        ]
        self.assertEqual(expected, patterns)


if __name__ == '__main__':
    unittest.main(verbosity=2)