1#!/usr/bin/env python3 2# 3# Copyright 2021 - The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17"""File handler that reads target files.""" 18 19from abstract_build_file_handler import * 20from zipfile import ZipFile 21 22class TargetFileHandler(AbstractBuildFileHandler): 23 """Reads file's content from target files.""" 24 25 def __init__(self, build_file): 26 super().__init__(build_file) 27 28 def get_file_hash(self, file_names, hash_func=None): 29 """See base class.""" 30 hash_dict = dict() 31 with ZipFile(self.build_file) as zip_file: 32 for file_name in file_names: 33 # Convert top directory's name to upper case. 34 idx = file_name[1:].find('/')+1 35 real_file_name = file_name[1:idx].upper()+file_name[idx:] 36 if real_file_name not in zip_file.namelist(): 37 continue 38 with zip_file.open(real_file_name) as f: 39 if hash_func: 40 hash_dict[file_name] = hash_func(f.read()) 41 else: 42 hash_dict[file_name] = hash(f.read()) 43 return hash_dict 44