def __init__(self, body, on_ack=noop, hostname=None, eventer=None, app=None, connection_errors=None, request_dict=None, delivery_info=None, task=None, **opts): self.app = app or app_or_default(app) name = self.name = body['task'] self.id = body['id'] self.args = body.get('args', []) self.kwargs = body.get('kwargs', {}) try: self.kwargs.items except AttributeError: raise exceptions.InvalidTaskError( 'Task keyword arguments is not a mapping') if NEEDS_KWDICT: self.kwargs = kwdict(self.kwargs) eta = body.get('eta') expires = body.get('expires') utc = body.get('utc', False) self.on_ack = on_ack self.hostname = hostname or socket.gethostname() self.eventer = eventer self.connection_errors = connection_errors or () self.task = task or self.app.tasks[name] self.acknowledged = self._already_revoked = False self.time_start = self.worker_pid = self._terminate_on_ack = None self._tzlocal = None # timezone means the message is timezone-aware, and the only timezone # supported at this point is UTC. if eta is not None: tz = tz_utc if utc else self.tzlocal self.eta = tz_to_local(maybe_iso8601(eta), self.tzlocal, tz) else: self.eta = None if expires is not None: tz = tz_utc if utc else self.tzlocal self.expires = tz_to_local(maybe_iso8601(expires), self.tzlocal, tz) else: self.expires = None delivery_info = {} if delivery_info is None else delivery_info self.delivery_info = { 'exchange': delivery_info.get('exchange'), 'routing_key': delivery_info.get('routing_key'), 'priority': delivery_info.get('priority'), } # amqplib transport adds the channel here for some reason, so need # to remove it. self.delivery_info.pop('channel', None) self.request_dict = body
def __init__(self, body, on_ack=noop, hostname=None, eventer=None, app=None, connection_errors=None, request_dict=None, delivery_info=None, task=None, **opts): self.app = app or app_or_default(app) name = self.name = body["task"] self.id = body["id"] self.args = body.get("args", []) self.kwargs = body.get("kwargs", {}) try: self.kwargs.items except AttributeError: raise exceptions.InvalidTaskError( "Task keyword arguments is not a mapping") if NEEDS_KWDICT: self.kwargs = kwdict(self.kwargs) eta = body.get("eta") expires = body.get("expires") utc = body.get("utc", False) self.on_ack = on_ack self.hostname = hostname or socket.gethostname() self.eventer = eventer self.connection_errors = connection_errors or () self.task = task or self.app.tasks[name] self.acknowledged = self._already_revoked = False self.time_start = self.worker_pid = self._terminate_on_ack = None self._tzlocal = None # timezone means the message is timezone-aware, and the only timezone # supported at this point is UTC. if eta is not None: tz = tz_utc if utc else self.tzlocal self.eta = tz_to_local(maybe_iso8601(eta), self.tzlocal, tz) else: self.eta = None if expires is not None: tz = tz_utc if utc else self.tzlocal self.expires = tz_to_local(maybe_iso8601(expires), self.tzlocal, tz) else: self.expires = None delivery_info = {} if delivery_info is None else delivery_info self.delivery_info = { "exchange": delivery_info.get("exchange"), "routing_key": delivery_info.get("routing_key"), } ## shortcuts self._does_debug = logger.isEnabledFor(logging.DEBUG) self._does_info = logger.isEnabledFor(logging.INFO) self.request_dict = body
def _raise_if_state_not_valid(expected_state, lab_info, state_id, testing_enabled, lab_whitelisted): lab_name = lab_info['lab_name'] log.info("Snapshot validation for lab=%s and state=%s [expected %s]" % (lab_name, state_id, expected_state)) log.info("Lab is white listed? %s" % (lab_whitelisted)) log.info("STATE_SERVICE_TESTING_ENABLED: {}".format(testing_enabled)) if not (lab_whitelisted or testing_enabled): raise exceptions.TaskError( "Lab cannot be used for reverting snapshots") if not _state_is_expected(state_id, expected_state): raise exceptions.InvalidTaskError("State %s is not expected %s" % (state_id, expected_state)) if not lab_info.get('reservation'): raise exceptions.InvalidTaskError("Lab %s is not reserved" % (lab_name)) log.info("Snapshot validation OK")