1# Copyright 2017 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5
6# TODO(borenet): This module was copied from build.git and heavily modified to
7# remove dependencies on other modules in build.git.  It belongs in a different
8# repo. Remove this once it has been moved.
9
10
11class State(object):
12  """Copied from appengine/swarming/server/task_result.py.
13
14  KEEP IN SYNC.
15
16  Used to parse the 'state' value in task result.
17  """
18  RUNNING = 0x10    # 16
19  PENDING = 0x20    # 32
20  EXPIRED = 0x30    # 48
21  TIMED_OUT = 0x40  # 64
22  BOT_DIED = 0x50   # 80
23  CANCELED = 0x60   # 96
24  COMPLETED = 0x70  # 112
25
26  STATES = (
27      RUNNING, PENDING, EXPIRED, TIMED_OUT, BOT_DIED, CANCELED, COMPLETED)
28  STATES_RUNNING = (RUNNING, PENDING)
29  STATES_NOT_RUNNING = (EXPIRED, TIMED_OUT, BOT_DIED, CANCELED, COMPLETED)
30  STATES_DONE = (TIMED_OUT, COMPLETED)
31  STATES_ABANDONED = (EXPIRED, BOT_DIED, CANCELED)
32
33  _NAMES = {
34    RUNNING: 'Running',
35    PENDING: 'Pending',
36    EXPIRED: 'Expired',
37    TIMED_OUT: 'Execution timed out',
38    BOT_DIED: 'Bot died',
39    CANCELED: 'User canceled',
40    COMPLETED: 'Completed',
41  }
42
43  @classmethod
44  def to_string(cls, state):
45    """Returns a user-readable string representing a State."""
46    return cls._NAMES[state]
47