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)
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
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
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)
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