910e62b5创建于 1月15日历史提交
#!/usr/bin/env python3
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

'''Removes the file and directory names of Downloaded items from within a
Sandbox File Statistics json output file.
'''

import argparse
import json
import os
import sys

def clean(stats_json):
  for item in stats_json:
    for attribute, value in item.items():
      if attribute == 'name':
        item['name'] = '##DOWNLOADED_ITEM##'
      elif attribute == 'contents':
        clean(item['contents'])

def main():
  description = 'Removes file names in downloads directory stats.'
  parser = argparse.ArgumentParser(description=description)

  parser.add_argument('stats_json_path', nargs=1,
                      help='path to file statistics json file')

  options, extra_options = parser.parse_known_args()
  if len(extra_options):
    print >> sys.stderr, 'Unknown options: ', extra_options
    return 1

  stats_json_path = options.stats_json_path[0]

  if not os.path.isfile(stats_json_path):
    print('The input file does not exist: ' + stats_json_path, file=sys.stderr)
    return 1

  stats_json_splitext = os.path.splitext(stats_json_path)
  out_json_path = stats_json_splitext[0] + '_clean' + stats_json_splitext[1]

  if os.path.exists(out_json_path):
    print('The output file already exists: ' + out_json_path, file=sys.stderr)
    return 1

  stats_json = None
  with open(stats_json_path, 'r') as json_it:
    stats_json = json.load(json_it)
    for item in stats_json['contents']:
      if item['name'] == 'Documents':
        clean(item['contents'])

  with open(out_json_path, 'x') as out_file:
    json.dump(stats_json, out_file)

  return 0

if __name__ == '__main__':
  sys.exit(main())