14a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair#!/usr/bin/env python
24a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair#
34a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Copyright 2010 Google Inc.
44a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair#
54a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Licensed under the Apache License, Version 2.0 (the "License");
64a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# you may not use this file except in compliance with the License.
74a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# You may obtain a copy of the License at
84a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair#
94a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair#     http://www.apache.org/licenses/LICENSE-2.0
104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair#
114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Unless required by applicable law or agreed to in writing, software
124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# distributed under the License is distributed on an "AS IS" BASIS,
134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# See the License for the specific language governing permissions and
154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# limitations under the License.
164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair"""DB-related operations."""
184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair__all__ = ['Put', 'Delete']
224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom mapreduce.operation import base
254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# pylint: disable=protected-access
274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairclass Put(base.Operation):
304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  """Put entity into datastore via mutation_pool.
314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  See mapreduce.context._MutationPool.
334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  """
344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def __init__(self, entity):
364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """Constructor.
374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    Args:
394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair      entity: an entity to put.
404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """
414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.entity = entity
424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def __call__(self, context):
444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """Perform operation.
454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    Args:
474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair      context: mapreduce context as context.Context.
484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """
494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    context._mutation_pool.put(self.entity)
504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairclass Delete(base.Operation):
534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  """Delete entity from datastore via mutation_pool.
544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  See mapreduce.context._MutationPool.
564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  """
574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def __init__(self, entity):
594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """Constructor.
604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    Args:
624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair      entity: a key or model instance to delete.
634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """
644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.entity = entity
654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def __call__(self, context):
674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """Perform operation.
684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    Args:
704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair      context: mapreduce context as context.Context.
714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """
724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    context._mutation_pool.delete(self.entity)
73