コード例 #1
0
ファイル: api.py プロジェクト: zbidi/commcare-hq
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
コード例 #2
0
ファイル: api.py プロジェクト: LifeCoaching/commcare-hq
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
コード例 #3
0
ファイル: api.py プロジェクト: zbidi/commcare-hq
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
コード例 #4
0
ファイル: api.py プロジェクト: LifeCoaching/commcare-hq
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
コード例 #5
0
    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())
コード例 #6
0
ファイル: api.py プロジェクト: philipkaare/commcare-hq
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
コード例 #7
0
ファイル: api.py プロジェクト: zbidi/commcare-hq
        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):
コード例 #8
0
ファイル: api.py プロジェクト: rigambhir/commcare-hq
def get_randomized_message(case, order):
    return FRIRandomizedMessage.view("fri/randomized_message", key=[case.domain, case._id, order], include_docs=True).one()