Rev 873 | Rev 900 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 28-Apr-2010@author: ashish'''from shop2020.model.v1.user.impl import Dataservicefrom shop2020.utils.Utils import log_entry, to_py_date, to_java_datefrom shop2020.model.v1.user.impl.Dataservice import User, IPMap,\Address, SocialHandle, UserState, InternalInfo, SocialServicefrom shop2020.thriftpy.model.v1.user.ttypes import UserContextException,\AuthenticationException, AccountStatus, Sexfrom shop2020.clients.HelperClient import HelperClientfrom elixir import sessionimport datetime, random, stringfrom shop2020.thriftpy.utils.ttypes import Maildef initialize():log_entry("initialize@DataAccessor", "Initializing data service")Dataservice.initialize()def create_anonymous_user(jsession_id, cart):user=User.get_by(jsession_id=jsession_id)if not user is None:return useruser = User()anonymous_str = "anonymous"user.email = jsession_id + "@anonymous.com"user.password = anonymous_struser.name = anonymous_struser.communication_email = jsession_id + "@anonymous.com"user.jsession_id = jsession_iduser.is_anonymous = Trueuser.sex = Sex.WONT_SAYuser.active_cart_id = cart.id#initialize userStateuser_state = UserState()user_state.is_email_verified = Falseuser_state.is_sms_verified = Falseuser_state.account_status = AccountStatus.ACTIVEuser_state.ip_list = []user_state.active_since = datetime.datetime.now()user_state.user = usersession.commit()cart.user_id = user.idsession.commit()return userdef get_user_by_id(user_id):return User.get_by(id=user_id)def create_user(user_to_add, cart):if user_to_add.userId:raise UserContextException(109, "id is set, user cannot be created")user = User()user.email = user_to_add.emailuser.password = user_to_add.passworduser.name = user_to_add.nameuser.communication_email = user_to_add.communicationEmailuser.jsession_id = user_to_add.jsessionIduser.is_anonymous = Falseuser.sex = user_to_add.sexuser.date_of_birth = user_to_add.dateOfBirthuser.active_cart_id = cart.iduser.mobile_number = user_to_add.mobileNumber#initialize userStateuser_state = UserState()user_state.is_email_verified = Falseuser_state.is_sms_verified = Falseuser_state.account_status = AccountStatus.ACTIVEuser_state.ip_list = []user_state.active_since = datetime.datetime.now()user_state.user = usersession.commit()#Now create the user phones. Mostly, this should only be a mobile numbercart.user_id = user.idsession.commit()return user#===============================================================================# Need to provide the update apis here for relevant fields in PrimaryInfo.#===============================================================================def update_user(user_to_update):if not user_to_update.userId:raise UserContextException(110, "user does not exist")user = get_user_by_id(user_to_update.userId)user.email = user_to_update.emailuser.password = user_to_update.passworduser.name = user_to_update.nameuser.communication_email = user_to_update.communicationEmailuser.jsession_id = user_to_update.jsessionIduser.is_anonymous = user_to_update.isAnonymoususer.sex = user_to_update.sexuser.date_of_birth = user_to_update.dateOfBirthuser.active_cart_id = user_to_update.activeCartIduser.mobile_number = user_to_update.mobileNumbersession.commit()return userdef delete_user(user_id):user = get_user_by_id(user_id)if not user:raise_user_exception(user_id)user.state.account_status = AccountStatus.DELETEDsession.commit()return Truedef get_user_state(user_id):userstate = UserState.get_by(user_id=user_id)return userstatedef get_internal_info(user_id):info = InternalInfo.get_by(user_id=user_id)return infodef authenticate_user(user_handle, password):user = User.get_by(email=user_handle)if not user:raise AuthenticationException("This email address is not registered.", 102)if user.password == get_db_password(password):return userelse:raise AuthenticationException("Wrong username or password", 102)def user_exists(email):try:user = User.get_by(email=email)if user:return Trueelse:return Falseexcept:return Falsedef add_address_for_user(address, user_id, set_default):user = get_user_by_id(user_id)if not user:raise_user_exception(user_id)if not address:raise UserContextException(103,"Address cannot be null")address_to_add = Address()address_to_add.line_1 = address.line1address_to_add.line_2 = address.line2address_to_add.landmark = address.landmarkaddress_to_add.city = address.cityaddress_to_add.country = address.countryaddress_to_add.state = address.stateaddress_to_add.pin = address.pinaddress_to_add.type = address.typeaddress_to_add.name = address.nameaddress_to_add.phone = address.phoneaddress_to_add.added_on = to_py_date(address.addedOn)address_to_add.enabled = Trueaddress_to_add.user = usersession.commit()if set_default is True:user.default_address_id = address_to_add.id#set default address if nothing is defaultif user.default_address_id is None:user.default_address_id = address_to_add.idsession.commit()return address_to_add.iddef remove_address_for_user(user_id, address_id):address = get_address(address_id)if not address:raise UserContextException(103, "Address not found")if address.user.id != user_id:raise UserContextException(104, "This address belongs to some other user")address.enabled = Falsesession.commit()return Truedef set_user_as_logged_in(user_id, time_stamp):user_state = UserState.get_by(user_id=user_id)#user = get_user_by_id(user_id)if not user_state:raise_user_exception(user_id)if not time_stamp:user_state.last_login = datetime.datetime.now()else:user_state.last_login = to_py_date(time_stamp)session.commit()return Truedef set_user_as_logged_out(user_id, time_stamp):user_state = UserState.get_by(user_id=user_id)if not user_state:raise_user_exception(user_id)if not time_stamp:user_state.last_logout = datetime.datetime.now()else:user_state.last_logout = to_py_date(time_stamp)session.commit()return Truedef set_default_address(user_id, address_id):user = get_user_by_id(user_id)address = Address.get_by(id=address_id)if not user:raise_user_exception(user_id)if not address:raise UserContextException(103, "Address not found")if address.user.id != user.id:raise UserContextException(104, "This address belongs to some other user")user.default_address_id = address_idsession.commit()def update_password(user_id, old_password, new_password):user = get_user_by_id(user_id)if not user:raise_user_exception(user_id)if user.password != old_password:return Falseif check_for_valid_password(new_password):user.password = get_db_password(new_password)session.commit()return Trueelse:return Falsedef get_address(address_id):address = Address.get_by(id=address_id)return addressdef get_social_service(service_id):service = SocialService.get_by(service_id)return servicedef add_ip_address_for_user(ip_address, time_stamp, user_id):user = get_user_by_id(user_id)if not user:raise_user_exception(user_id)#user exists create an IP address objectip_address = IPMap()ip_address.ip = ip_addressip_address.timestamp = to_py_date(time_stamp)ip_address.user_state = user.statesession.commit()return Truedef get_social_service_by_name(service_name):service = SocialService.get_by(name=service_name)if not service:raise UserContextException(106, "No such social service exists")return servicedef add_social_handle(user_id, social_service, handle):user = get_user_by_id(user_id)if not user:raise_user_exception(user_id)service = get_social_service_by_name(social_service)#get if use already has this service.social_handle = SocialHandle.filter(service=service).filter(user=user).one()if not social_handle:#create a new handlesocial_handle = SocialHandle()social_handle.service = servicesocial_handle.user = usersocial_handle.handle = handleelse:social_handle.handle = handlesession.commit()return Truedef forgot_password(email, password):try:user = User.get_by(email=email)if user:user.password = passwordreturn Trueelse:return Falseexcept:return False'''def forgot_password(email):try:user = User.get_by(email=email)if user:new_password = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(8))mail = Mail()mail.to = []mail.to.append(email)mail.sender = ""mail.password = ""mail.data = "Your new password is " + user.passwordhelper_client = HelperClient()helper_client.__start__()client = helper_client.get_client()client.sendMail(mail);return Trueelse:return Falseexcept:return False'''def get_all_addresses_for_user(userId):query = Address.query.filter(Address.user.has(id = userId))query = query.filter(Address.enabled == True)return query.all()def get_default_address_id(userId):user = get_user_by_id(userId);if user.default_address_id is None:return 0return user.default_address_iddef get_default_pincode(user_id):user = get_user_by_id(user_id)if not user:raise_user_exception(user_id)default_address_id = user.default_address_idif default_address_id:address = Address.get_by(id=default_address_id)default_pincode = address.pinelse:default_pincode = '110001'return default_pincode#=============================================================================# Helper functions#============================================================================='''This function returns the password as stored in the db'''def get_db_password(password):return passworddef check_for_valid_password(password):if not password:raise UserContextException(105,"password cannot be null")return True#------------------------------------------------------------------------------#===============================================================================# raises the UserContextException#===============================================================================def raise_user_exception(user_id):raise UserContextException(101, "no such user in system %d" %(user_id))def close_session():if session.is_active:print "session is active. closing it."session.close()