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 45 def get_system_fingerprint(self): 46 """See base class.""" 47 fingerprint = '' 48 with ZipFile(self.build_file) as zip_file: 49 with zip_file.open('SYSTEM/build.prop') as build_prop: 50 for line in build_prop: 51 line = line.decode('UTF-8') 52 if 'build.fingerprint' not in line: 53 continue 54 fingerprint = line.split('=')[1].strip() 55 break 56 return fingerprint 57