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