Shared_Processors/SHAChecksum.py (41 lines of code) (raw):

#!/usr/bin/python # # Copyright (c) 2015, Facebook, Inc. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. An additional grant # of patent rights can be found in the PATENTS file in the same directory. """See docstring for SHAChecksum class""" # Disabling warnings for env members and imports that only affect recipe- # specific processors. # pylint: disable=e1101,f0401 import subprocess from autopkglib import Processor, ProcessorError __all__ = ["SHAChecksum"] class SHAChecksum(Processor): """Calculate checksum for a file""" description = __doc__ input_variables = { "source_file": { "required": True, "description": ("Path to file to calculate checksum on."), }, "checksum_type": { "required": False, "description": ( "Checksum type, will be passed directly to ", "shasum -a. See manpage for available options. " "Defaults to SHA1.", ), }, } output_variables = { "checksum": { "description": "Version returned from pkg-info field in PackageInfo." } } __doc__ = description def main(self): sha_args = self.env.get("checksum_type", None) cmd = ["/usr/bin/shasum"] if sha_args: cmd.append("-a") cmd.append(sha_args) cmd.append(self.env["source_file"]) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (shaout, shaerr) = proc.communicate() if shaerr: raise ProcessorError(shaerr) self.output(shaout) self.env["checksum"] = shaout.split()[0].decode("utf-8") if __name__ == "__main__": PROCESSOR = SHAChecksum() PROCESSOR.execute_shell()