text: # Copyright (c) 2012 The Chromium Authors. All rights reserved.
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  """Enforces json format.
  
  See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
  for more details on the presubmit API built into depot_tools.
  """
  
  PRESUBMIT_VERSION = '2.0.0'
  USE_PYTHON3 = True
  
  _IGNORE_FREEZE_FOOTER = 'Ignore-Freeze'
  
  # The time module's handling of timezones is abysmal, so the boundaries are
  # precomputed in UNIX time
  _FREEZE_START = 1639641600  # 2021/12/16 00:00 -0800
  _FREEZE_END = 1641196800  # 2022/01/03 00:00 -0800
  
  
  def CheckFreeze(input_api, output_api):
    if _FREEZE_START <= input_api.time.time() < _FREEZE_END:
      footers = input_api.change.GitFootersFromDescription()
      if _IGNORE_FREEZE_FOOTER not in footers:
  
        def convert(t):
          ts = input_api.time.localtime(t)
          return input_api.time.strftime('%Y/%m/%d %H:%M %z', ts)
  
        return [
            output_api.PresubmitError(
                'There is a prod freeze in effect from {} until {},'
                ' files in //testing/buildbot cannot be modified'.format(
                    convert(_FREEZE_START), convert(_FREEZE_END)))
        ]
  
    return []
  
  
  def CheckSourceSideSpecs(input_api, output_api):
    return input_api.RunTests([
        input_api.Command(name='check source side specs',
                          cmd=[
                              input_api.python3_executable,
                              'generate_buildbot_json.py', '--check', '--verbose'
                          ],
                          kwargs={},
                          message=output_api.PresubmitError),
    ])
  
  
  def CheckTests(input_api, output_api):
    glob = input_api.os_path.join(input_api.PresubmitLocalPath(), '*test.py')
    tests = input_api.canned_checks.GetUnitTests(input_api,
                                                 output_api,
                                                 input_api.glob(glob),
                                                 run_on_python2=False,
                                                 run_on_python3=True,
                                                 skip_shebang_check=True)
    return input_api.RunTests(tests)
  
  
  def CheckManageJsonFiles(input_api, output_api):
    return input_api.RunTests([
        input_api.Command(
            name='manage JSON files',
            cmd=[input_api.python3_executable, 'manage.py', '--check'],
            kwargs={},
            message=output_api.PresubmitError),
    ])
  