Ejemplo n.º 1
0
def update_consumer(member):
    consumer_id = member.neoprofile.consumer_id
    # update changed attributes
    old_member = cache.get('neo_consumer_%s' % member.pk, None)
    wrapper = ConsumerWrapper()
    if old_member is not None:  # it should never be None
        for k in NEO_ATTR:
            # check where cached version and current version of member differ
            current = getattr(member, k, None)
            old = old_member.get(k, None)
            if current != old:
                # update attribute on Neo
                if old is None:
                    getattr(wrapper, "set_%s" % k)(current, mod_flag=modify_flag['INSERT'])
                elif current is None:
                    getattr(wrapper, "set_%s" % k)(old, mod_flag=modify_flag['DELETE'])
                else:
                    getattr(wrapper, "set_%s" % k)(current, mod_flag=modify_flag['UPDATE'])

        # check if address needs to change
        has_address = False
        had_address = False
        address_changed = False
        for k in ADDRESS_FIELDS:
            current = getattr(member, k, None)
            old = old_member.get(k, None)
            if current:
                has_address = True
            if old:
                had_address = True
            if current != old:
                address_changed = True
        # update address accordingly
        if address_changed:
            if not has_address:
                wrapper.set_address(old_member.address, old_member.city,
                                    old_member.province, old_member.zipcode, old_member.country,
                                    modify_flag['DELETE'])
            elif not had_address:
                wrapper.set_address(member.address, member.city,
                                    member.province, member.zipcode, member.country)
            else:
                wrapper.set_address(member.address, member.city,
                                    member.province, member.zipcode, member.country,
                                    mod_flag=modify_flag['UPDATE'])

    if not wrapper.is_empty:
        if not wrapper.profile_is_empty:
            wrapper.set_ids_for_profile(api.get_consumer_profile(consumer_id, username=member.neoprofile.login_alias,
                                                                 password=member.neoprofile.password))
        api.update_consumer(consumer_id, wrapper.consumer, username=member.neoprofile.login_alias, password=member.neoprofile.password)
Ejemplo n.º 2
0
def wrap_member(member, login_alias=None, password=None):
    """
    Return a `ConsumerWrapper` reflecting the given `Member`.
    """
    wrapper = ConsumerWrapper()
    for a in NEO_ATTR:
        getattr(wrapper, "set_%s" % a)(getattr(member, a))
    # Use a login_alias instead if specified
    # member.username.lower() is not guaranteed to be unique
    if login_alias:
        wrapper.set_username(login_alias)

    if password:
        wrapper.set_password(password)

    # assign address
    has_address = False
    for k in ADDRESS_FIELDS:
        if getattr(member, k, None):
            has_address = True
            break
    if has_address:
        wrapper.set_address(member.address, member.city,
                            member.province, member.zipcode, member.country)

    return wrapper
Ejemplo n.º 3
0
def create_consumer(member):
    wrapper = ConsumerWrapper()
    for a in NEO_ATTR:
        getattr(wrapper, "set_%s" % a)(getattr(member, a))
    wrapper.set_password(member.raw_password)
    del member.raw_password

    # assign address
    has_address = False
    for k in ADDRESS_FIELDS:
        if getattr(member, k, None):
            has_address = True
            break
    if has_address:
        wrapper.set_address(member.address, member.city,
            member.province, member.zipcode, member.country)

    consumer_id, uri = api.create_consumer(wrapper.consumer)
    api.complete_registration(consumer_id)  # activates the account
    return consumer_id
Ejemplo n.º 4
0
 def test_add_consumer_preferences(self):
     '''
     This test can fail due to the new promo code not having propagated in CIDB.
     To solve, one can put time.sleep(2) before get_consumer_preferences.
     '''
     member = self.immutable_member
     cw = ConsumerWrapper()
     cw._set_preference(answer=AnswerType(OptionID=2), category_id=10, question_id=112,
         mod_flag=constants.modify_flag['INSERT'])
     # the promo code for this particular question is mandatory
     cw.consumer.Preferences.PromoCode = 'special_preference_promo'
     api.update_consumer_preferences(member.neoprofile.consumer_id, cw.consumer.Preferences,
         username=member.username, password=member.neoprofile.password, category_id=10)
     #time.sleep(5)
     prefs = api.get_consumer_preferences(member.neoprofile.consumer_id, username=member.username,
         password=member.neoprofile.password, category_id=10)
     self.assertEqual(prefs.PromoCode, 'special_preference_promo')
     question = prefs.QuestionCategory[0].QuestionAnswers[0]
     self.assertEqual(question.QuestionID, 112)
     self.assertEqual(question.Answer[0].OptionID, 2)
Ejemplo n.º 5
0
def update_consumer(member):
    consumer_id = NeoProfile.objects.get(user=member).consumer_id
    if not USE_MCAL:
        # update changed attributes
        old_member = cache.get('neo_consumer_%s' % member.pk, None)
        wrapper = ConsumerWrapper()
        if old_member is not None:  # it should never be None
            for k in NEO_ATTR:
                # check where cached version and current version of member differ
                current = getattr(member, k, None)
                old = old_member.get(k, None)
                if current != old:
                    # update attribute on Neo
                    if old is None:
                        getattr(wrapper, "set_%s" % k)(current, mod_flag=modify_flag['INSERT'])
                    elif current is None:
                        getattr(wrapper, "set_%s" % k)(old, mod_flag=modify_flag['DELETE'])
                    else:
                        getattr(wrapper, "set_%s" % k)(current, mod_flag=modify_flag['UPDATE'])

        # check if address needs to change
        has_address = False
        had_address = False
        address_changed = False
        for k in ADDRESS_FIELDS:
            current = getattr(member, k, None)
            old = old_member.get(k, None)
            if current:
                has_address = True
            if old:
                had_address = True
            if current != old:
                address_changed = True
        # update address accordingly
        if address_changed:
            if not has_address:
                wrapper.set_address(old_member.address, old_member.city,
                    old_member.province, old_member.zipcode, old_member.country,
                    modify_flag['DELETE'])
            elif not had_address:
                wrapper.set_address(member.address, member.city,
                    member.province, member.zipcode, member.country)
            else:
                wrapper.set_address(member.address, member.city,
                    member.province, member.zipcode, member.country,
                    mod_flag=modify_flag['UPDATE'])

        if not wrapper.is_empty:
            if not wrapper.profile_is_empty:
                wrapper.set_ids_for_profile(api.get_consumer_profile(consumer_id))
            api.update_consumer(consumer_id, wrapper.consumer)
    
    # check if password needs to be changed
    raw_password = getattr(member, 'raw_password', None)
    if raw_password:
        old_password = getattr(member, 'old_password', None)
        if old_password:
            api.change_password(member.username, raw_password, old_password=old_password)
        else:
            api.change_password(member.username, raw_password, token=member.forgot_password_token)
    return consumer_id