def add(self, task, transactional=False): """Adds a Task to this Queue. Args: task: The Task to add. transactional: If false adds the task to a queue irrespectively to the enclosing transaction success or failure. (optional) Returns: The Task that was supplied to this method. Raises: BadTaskStateError if the Task has already been added to a queue. Error-subclass on application errors. """ if task.was_enqueued: raise BadTaskStateError('Task has already been enqueued') request = taskqueue_service_pb.TaskQueueAddRequest() response = taskqueue_service_pb.TaskQueueAddResponse() adjusted_url = task.url if task.on_queue_url: adjusted_url = self.__url + task.url request.set_queue_name(self.__name) request.set_eta_usec(int(time.mktime(task.eta.utctimetuple())) * 10**6) request.set_method(_METHOD_MAP.get(task.method)) request.set_url(adjusted_url) if task.name: request.set_task_name(task.name) else: request.set_task_name('') if task.payload: request.set_body(task.payload) for key, value in _flatten_params(task.headers): header = request.add_header() header.set_key(key) header.set_value(value) if transactional: from google.appengine.api import datastore datastore._MaybeSetupTransaction(request, []) if request.has_transaction() and task.name: raise InvalidTaskNameError('Task bound to a transaction cannot be named.') call_tuple = ('taskqueue', 'Add', request, response) apiproxy_stub_map.apiproxy.GetPreCallHooks().Call(*call_tuple) try: apiproxy_stub_map.MakeSyncCall(*call_tuple) except apiproxy_errors.ApplicationError, e: self.__TranslateError(e)
def add(self, task, transactional=False): """Adds a Task to this Queue. Args: task: The Task to add. transactional: If false adds the task to a queue irrespectively to the enclosing transaction success or failure. (optional) Returns: The Task that was supplied to this method. Raises: BadTaskStateError if the Task has already been added to a queue. Error-subclass on application errors. """ if task.was_enqueued: raise BadTaskStateError('Task has already been enqueued') request = taskqueue_service_pb.TaskQueueAddRequest() response = taskqueue_service_pb.TaskQueueAddResponse() adjusted_url = task.url if task.on_queue_url: adjusted_url = self.__url + task.url request.set_queue_name(self.__name) request.set_eta_usec(int(time.mktime(task.eta.utctimetuple())) * 10**6) request.set_method(_METHOD_MAP.get(task.method)) request.set_url(adjusted_url) if task.name: request.set_task_name(task.name) else: request.set_task_name('') if task.payload: request.set_body(task.payload) for key, value in _flatten_params(task.headers): header = request.add_header() header.set_key(key) header.set_value(value) if transactional: from google.appengine.api import datastore datastore._MaybeSetupTransaction(request, []) if request.has_transaction() and task.name: raise InvalidTaskNameError( 'Task bound to a transaction cannot be named.') call_tuple = ('taskqueue', 'Add', request, response) try: apiproxy_stub_map.MakeSyncCall(*call_tuple) except apiproxy_errors.ApplicationError, e: self.__TranslateError(e)
def make_call(self): keys, multiple = NormalizeAndTypeCheckKeys(self._keys) self.multiple = multiple # TODO handle #if multiple and not keys: # return [] req = datastore_pb.GetRequest() req.key_list().extend([key._Key__reference for key in keys]) _MaybeSetupTransaction(req, keys) resp = datastore_pb.GetResponse() self.rpc.make_call('Get', req, resp)
def __FillAddRequest(self, task, task_request, transactional): """Populates a TaskQueueAddRequest with the data from a Task instance. Args: task: The Task instance to use as a source for the data to be added to task_request. task_request: The taskqueue_service_pb.TaskQueueAddRequest to populate. transactional: If true then populates the task_request.transaction message with information from the enclosing transaction (if any). Raises: BadTaskStateError: If the task was already added to a Queue. BadTransactionStateError: If the transactional argument is True and there is no enclosing transaction. InvalidTaskNameError: If the transactional argument is True and the task is named. """ if task.was_enqueued: raise BadTaskStateError('Task has already been enqueued') adjusted_url = task.url if task.on_queue_url: adjusted_url = self.__url + task.url task_request.set_queue_name(self.__name) task_request.set_eta_usec(long(task.eta_posix * 1e6)) task_request.set_method(_METHOD_MAP.get(task.method)) task_request.set_url(adjusted_url) if task.name: task_request.set_task_name(task.name) else: task_request.set_task_name('') if task.payload: task_request.set_body(task.payload) for key, value in _flatten_params(task.headers): header = task_request.add_header() header.set_key(key) header.set_value(value) if task.retry_options: self.__FillTaskQueueRetryParameters( task.retry_options, task_request.mutable_retry_parameters()) if self._app: task_request.set_app_id(self._app) if transactional: from google.appengine.api import datastore if not datastore._MaybeSetupTransaction(task_request, []): raise BadTransactionStateError( 'Transactional adds are not allowed outside of transactions' ) if task_request.has_transaction() and task.name: raise InvalidTaskNameError( 'Task bound to a transaction cannot be named.')
def __FillAddRequest(self, task, task_request, transactional): """Populates a TaskQueueAddRequest with the data from a Task instance. Args: task: The Task instance to use as a source for the data to be added to task_request. task_request: The taskqueue_service_pb.TaskQueueAddRequest to populate. transactional: If true then populates the task_request.transaction message with information from the enclosing transaction (if any). Raises: BadTaskStateError: If the task was already added to a Queue. BadTransactionStateError: If the transactional argument is True and there is no enclosing transaction. InvalidTaskNameError: If the transactional argument is True and the task is named. """ if task.was_enqueued: raise BadTaskStateError('Task has already been enqueued') adjusted_url = task.url if task.on_queue_url: adjusted_url = self.__url + task.url task_request.set_queue_name(self.__name) task_request.set_eta_usec(long(task.eta_posix * 1e6)) task_request.set_method(_METHOD_MAP.get(task.method)) task_request.set_url(adjusted_url) if task.name: task_request.set_task_name(task.name) else: task_request.set_task_name('') if task.payload: task_request.set_body(task.payload) for key, value in _flatten_params(task.headers): header = task_request.add_header() header.set_key(key) header.set_value(value) if task.retry_options: self.__FillTaskQueueRetryParameters( task.retry_options, task_request.mutable_retry_parameters()) if self._app: task_request.set_app_id(self._app) if transactional: from google.appengine.api import datastore if not datastore._MaybeSetupTransaction(task_request, []): raise BadTransactionStateError( 'Transactional adds are not allowed outside of transactions') if task_request.has_transaction() and task.name: raise InvalidTaskNameError( 'Task bound to a transaction cannot be named.')
def make_call(self): entities, multiple = NormalizeAndTypeCheck(self._entities, Entity) self.multiple = multiple # TODO handle this #if multiple and not entities: # return [] for entity in entities: if not entity.kind() or not entity.app_id_namespace(): raise datastore_errors.BadRequestError( 'App and kind must not be empty, in entity: %s' % entity) req = datastore_pb.PutRequest() req.entity_list().extend([e._ToPb() for e in entities]) keys = [e.key() for e in entities] self.tx = _MaybeSetupTransaction(req, keys) resp = datastore_pb.PutResponse() self.rpc.make_call('Put', req, resp)
def __FillTaskCommon(self, task, task_request, transactional): """Fills common fields for both push tasks and pull tasks.""" if self._app: task_request.set_app_id(self._app) task_request.set_queue_name(self.__name) task_request.set_eta_usec(long(task.eta_posix * 1e6)) if task.name: task_request.set_task_name(task.name) else: task_request.set_task_name('') if transactional: from google.appengine.api import datastore if not datastore._MaybeSetupTransaction(task_request, []): raise BadTransactionStateError( 'Transactional adds are not allowed outside of transactions' ) if task_request.has_transaction() and task.name: raise InvalidTaskNameError( 'Task bound to a transaction cannot be named.')
def __FillTaskCommon(self, task, task_request, transactional): """Fills common fields for both push tasks and pull tasks.""" if self._app: task_request.set_app_id(self._app) task_request.set_queue_name(self.__name) task_request.set_eta_usec(long(task.eta_posix * 1e6)) if task.name: task_request.set_task_name(task.name) else: task_request.set_task_name('') if transactional: from google.appengine.api import datastore if not datastore._MaybeSetupTransaction(task_request, []): raise BadTransactionStateError( 'Transactional adds are not allowed outside of transactions') if task_request.has_transaction() and task.name: raise InvalidTaskNameError( 'Task bound to a transaction cannot be named.')