"""Classes for JSON documents used in upstream communication.""" import attr @attr.s class Activity: """Activity on a task.""" activity = attr.ib(default='', validator=attr.validators.instance_of(str)) current_command_idx = attr.ib(default=0, validator=attr.validators.instance_of(int)) task_progress_percentage = attr.ib(default=0, validator=attr.validators.instance_of(int)) command_progress_percentage = attr.ib(default=0, validator=attr.validators.instance_of(int)) @attr.s class MayKeepRunningResponse: """Response from the /may-i-run/{task-id} endpoint""" may_keep_running = attr.ib( validator=attr.validators.instance_of(bool)) reason = attr.ib( default=None, validator=attr.validators.optional(attr.validators.instance_of(str))) status_requested = attr.ib( default=None, validator=attr.validators.optional(attr.validators.instance_of(str))) @attr.s class StatusChangeRequest: """Response from the /task endpoint when we're requested to change our status""" status_requested = attr.ib(validator=attr.validators.instance_of(str))