blob: c3bca3f970e2738d437c389edee9863fa2999a4a [file] [log] [blame]
# Copyright 2011 the Melange authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Functions that help with duplicate detection.
"""
from google.appengine.ext import db
from soc.modules.gsoc.models.proposal_duplicates import GSoCProposalDuplicate
from soc.modules.gsoc.models.proposal_duplicates_status import \
GSoCProposalDuplicatesStatus
def getOrCreateStatusForProgram(program_entity):
"""Returns the ProposalDuplicatesStatus entity belonging to the given
program or creates a new one.
Args:
program_entity: Program entity to get or create the
ProposalDuplicatesStatus for.
"""
q = GSoCProposalDuplicatesStatus.all().filter('program', program_entity)
pds_entity = q.get()
if not pds_entity:
pds_entity = GSoCProposalDuplicatesStatus(program=program_entity)
pds_entity.put()
return pds_entity
def deleteAllForProgram(program_entity, non_dupes_only=False):
"""Deletes all ProposalDuplicates for a given program.
Args:
program_entity: Program to delete the ProposalDuplicatesFor
non_dupes_only: Iff True removes only the ones which have is_duplicate
set to False. False by default.
"""
q = GSoCProposalDuplicate.all()
q.filter('program', program_entity)
if non_dupes_only:
q.filter('is_duplicate', False)
# can not delete more then 500 entities in one call
proposal_duplicates = q.fetch(500)
while proposal_duplicates:
db.delete(proposal_duplicates)
proposal_duplicates = q.fetch(500)