def already_randomized(case): any_message = FRIRandomizedMessage.view( "fri/randomized_message", startkey=[case.domain, case.case_id], endkey=[case.domain, case.case_id, {}], include_docs=True).first() return any_message is not None
def already_randomized(case): any_message = FRIRandomizedMessage.view( "fri/randomized_message", startkey=[case.domain, case._id], endkey=[case.domain, case._id, {}], include_docs=True ).first() return any_message is not None
def randomize_messages(case): """ Create a randomized list of 280 messages for the case, based on its risk profile. """ message_list = [] risk_profiles = case.get_case_property("risk_profiles").upper() # Add messages specific to each risk profile if PROFILE_A in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_A) if PROFILE_B in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_B) if PROFILE_C in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_C) if PROFILE_D in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_D) if PROFILE_E in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_E) if PROFILE_F in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_F) # Add generic messages to get to 280 additional_messages_required = 280 - len(message_list) if additional_messages_required > 0: generic_messages = get_message_bank(case.domain, risk_profile=PROFILE_G) random.shuffle(generic_messages) for i in range(additional_messages_required): message_list.append(generic_messages[i]) # Randomize the list, and save random.shuffle(message_list) order = 0 for message in message_list: randomized_message = FRIRandomizedMessage( domain=case.domain, case_id=case.case_id, message_bank_message_id=message._id, order=order, ) randomized_message.save() order += 1
def randomize_messages(case): """ Create a randomized list of 280 messages for the case, based on its risk profile. """ message_list = [] risk_profiles = case.get_case_property("risk_profiles").upper() # Add messages specific to each risk profile if PROFILE_A in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_A) if PROFILE_B in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_B) if PROFILE_C in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_C) if PROFILE_D in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_D) if PROFILE_E in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_E) if PROFILE_F in risk_profiles: message_list += get_message_bank(case.domain, risk_profile=PROFILE_F) # Add generic messages to get to 280 additional_messages_required = 280 - len(message_list) if additional_messages_required > 0: generic_messages = get_message_bank(case.domain, risk_profile=PROFILE_G) random.shuffle(generic_messages) for i in range(additional_messages_required): message_list.append(generic_messages[i]) # Randomize the list, and save random.shuffle(message_list) order = 0 for message in message_list: randomized_message = FRIRandomizedMessage( domain = case.domain, case_id = case._id, message_bank_message_id = message._id, order = order, ) randomized_message.save() order += 1
def handle(self, **options): self.delete_docs( 'FRIMessageBankMessage', FRIMessageBankMessage.view('fri/message_bank', include_docs=True).all()) self.delete_docs( 'FRIRandomizedMessage', FRIRandomizedMessage.view('fri/randomized_message', include_docs=True).all()) self.delete_docs( 'FRIExtraMessage', FRIExtraMessage.view('fri/extra_message', include_docs=True).all())
def get_randomized_message(case, order): if order >= 0 and order <= 279: client = get_redis_client() lock = client.lock("fri-randomization-%s" % case._id, timeout=300) lock.acquire(blocking=True) if not already_randomized(case): randomize_messages(case) release_lock(lock, True) message = FRIRandomizedMessage.view( "fri/randomized_message", key=[case.domain, case._id, order], include_docs=True ).one() return message else: return None
include_docs=True).first() return any_message is not None def get_randomized_message(case, order): if order >= 0 and order <= 279: client = get_redis_client() lock = client.lock("fri-randomization-%s" % case.case_id, timeout=300) lock.acquire(blocking=True) if not already_randomized(case): randomize_messages(case) release_lock(lock, True) message = FRIRandomizedMessage.view( "fri/randomized_message", key=[case.domain, case.case_id, order], include_docs=True).one() return message else: return None def get_date(case, prop): value = case.get_case_property(prop) # A datetime is a date, but a date is not a datetime if isinstance(value, datetime): return datetime.date() elif isinstance(value, date): return value elif isinstance(value, basestring):
def get_randomized_message(case, order): return FRIRandomizedMessage.view("fri/randomized_message", key=[case.domain, case._id, order], include_docs=True).one()