Rev 22364 | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 28-Apr-2010@author: ashish'''from elixir import sessionfrom shop2020.model.v1.user.impl import Dataservicefrom shop2020.model.v1.user.impl.CartDataAccessors import create_cartfrom shop2020.model.v1.user.impl.Dataservice import User, UserCommunication, \Address, Affiliate, Tracker, TrackLog, MasterAffiliate, UserWidgetItem, \FacebookUser, UserSource, PrivateDealUser, Counter, AccessTokenizer, PrivateDealUserAddressMapping, \Linefrom shop2020.thriftpy.model.v1.user.ttypes import UserContextException, \AuthenticationException, Sex, WidgetType as WTypefrom shop2020.utils.Utils import log_entry, to_py_datefrom sqlalchemy import desc, selectfrom sqlalchemy.sql import and_from sqlalchemy.sql.expression import or_import datetimeimport os, binasciifrom shop2020.model.v1.user.impl.Converters import to_t_linetinStates = ['Delhi']CounterStateMap = {"Andhra Pradesh":"AP","Arunachal Pradesh":"AR","Assam":"AS","Bihar":"BR","Chhattisgarh":"CT","Goa":"GA","Gujarat":"GJ","Haryana":"HR","Himachal Pradesh":"HP","Jammu and Kashmir":"JK","Jharkhand":"JH","Karnataka":"KA","Kerala":"KL","Madhya Pradesh":"MP","Maharashtra":"MH","Manipur":"MN","Meghalaya":"ML","Mizoram":"MZ","Nagaland":"NL","Odisha":"OR","Punjab":"PB","Rajasthan":"RJ","Sikkim":"SK","Tamil Nadu":"TN","Telangana":"TS","Tripura":"TR","Uttarakhand":"UT","Uttar Pradesh":"UP","West Bengal":"WB","Andaman and Nicobar Islands":"AN","Chandigarh":"CH","Dadra and Nagar Haveli":"DN","Daman and Diu":"DD","Delhi":"DL","Lakshadweep":"LD","Puducherry":"PY","Pondicherry":"PY"}def initialize(dbname='user', db_hostname="localhost"):log_entry("initialize@DataAccessor", "Initializing data service")Dataservice.initialize(dbname, db_hostname)#lets not commit cart and set id to -1def create_anonymous_user(jsession_id):user=User.get_by(jsession_id=jsession_id)#user=User.query.with_lockmode("update").filter_by(jsession_id=jsession_id)if not user is None:return usercart = create_cart()user = 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 = cartuser.trust_level = 0user.active_since = datetime.datetime.now()user.id = -1#session.commit()return userdef get_user_by_id(user_id):return User.get_by(id=user_id)def get_user_by_cart_id(cart_id):return User.get_by(active_cart_id=cart_id)def get_user_by_mobile_number(mobile_number):return User.get_by(mobile_number=mobile_number)def get_user_by_email(email):return User.get_by(email=email)def create_user(user_to_add):user = User.get_by(email=user_to_add.email)if user:if user.password == user_to_add.password or user_to_add.password == "":if user_to_add.password == "":add_private_deal_user(user.id)return userelse:raise UserContextException(109, "User already exists with this email id.")cart = create_cart()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 = cartuser.mobile_number = user_to_add.mobileNumberuser.source = user_to_add.sourceuser.source_start_time = to_py_date(user_to_add.sourceStartTime)user.trust_level = 0user.active_since = datetime.datetime.now()addresses = []if user_to_add.addresses:address = user_to_add.addresses[0]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 = useraddress_to_add.type = 1address_to_add.added_on = datetime.datetime.now()addresses.append(address_to_add)user.addresses = addressesus = UserSource()us.user = userus.source_id = 1if user_to_add.sourceId:us.source_id = user_to_add.sourceIdif user_to_add.isFacebookUser:fuser = FacebookUser()fuser.facebook_access_token = user_to_add.facebookAccessTokenfuser.facebook_id = user_to_add.facebookIdfuser.user = usersession.commit()if user_to_add.addresses:user.default_address_id = user.addresses[0].idsession.commit()if user_to_add.password == "":add_private_deal_user(user.id)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.mobile_number = user_to_update.mobileNumberif user_to_update.isFacebookUser:if user.fbusers and user.fbusers[0]:fuser = user.fbusers[0]else:fuser = FacebookUser()if user_to_update.facebookAccessToken is not None:fuser.facebook_access_token = user_to_update.facebookAccessTokenif user_to_update.facebookId is not None:fuser.facebook_id = user_to_update.facebookIdfuser.user = usersession.commit()return userdef 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 = datetime.datetime.now()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, a, b = 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 = Falseuser = User.get_by(id=user_id)if user.default_address_id == address_id:firstValidAddress = Address.query.filter_by(user_id = user_id, enabled=True).first()if firstValidAddress is None:user.default_address_id = Noneelse:user.default_address_id = firstValidAddress.idsession.commit()return Truedef set_user_as_logged_in(user_id, time_stamp):user = User.get_by(id=user_id)if not user:raise_user_exception(user_id)if not time_stamp:user.last_login = datetime.datetime.now()else:user.last_login = to_py_date(time_stamp)session.commit()return Truedef set_user_as_logged_out(user_id, time_stamp):user = User.get_by(id=user_id)if not user:raise_user_exception(user_id)if not time_stamp:user.last_logout = datetime.datetime.now()else:user.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 create_user_communication(user_id, email, communication_type, order_id, awb, product, subject, message):user_communication = UserCommunication()user_communication.user_id = user_iduser_communication.communication_type = communication_typeif order_id > 0:user_communication.order_id = order_iduser_communication.airwaybill_no = awbuser_communication.reply_to = emailuser_communication.product_name = productuser_communication.subject = subjectuser_communication.message = messageuser_communication.communication_timestamp = datetime.datetime.now()session.commit()return Truedef get_user_communication_by_id(user_communication_id):return UserCommunication.get_by(id = user_communication_id)def get_user_communication_by_user(user_communication_user_id):return UserCommunication.query.filter_by(user_id = user_communication_user_id).order_by(-UserCommunication.id).all()def get_all_user_communications():return UserCommunication.query.order_by(-UserCommunication.id).all()def remove_user_communication(commId):UserCommunication.query.filter_by(id=commId).delete()session.commit()def create_master_affiliate(name, added_on):master_affiliate = MasterAffiliate()master_affiliate.name = namemaster_affiliate.added_on = to_py_date(added_on)session.commit()return master_affiliatedef get_all_master_affiliates():return MasterAffiliate.query.all()def get_master_affiliate_by_id(id):return MasterAffiliate.get_by(id = id)def get_master_affiliate_by_name(name):return MasterAffiliate.get_by(name = name)def create_affiliate(name, url, master_affiliate_id, added_on):affiliate = Affiliate()affiliate.name = nameif url is not None:affiliate.url = urlaffiliate.master_affiliate_id = master_affiliate_idaffiliate.added_on = to_py_date(added_on)session.commit()return affiliatedef get_affiliate_by_id(id):return Affiliate.get_by(id = id)def get_affiliate_by_name(name):return Affiliate.get_by(name = name)def get_affiliates_by_master_affiliate(master_affiliate_id):return MasterAffiliate.get_by(id = master_affiliate_id).affiliatesdef get_tracker_by_id(id):return Tracker.get_by(id = id)def add_track_log(affiliate_id, user_id, event, url, data, added_on):track_log = TrackLog()track_log.affiliate_id = affiliate_idif user_id:track_log.user_id = user_idtrack_log.event_id = eventif url:track_log.url = urlif data:track_log.data = datatrack_log.added_on = to_py_date(added_on)session.commit()return track_log.iddef get_track_log_by_id(id):return TrackLog.get_by(id = id)def get_track_logs_by_affiliate(affiliate_id, start_date, end_date):query = TrackLog.queryif affiliate_id:query = query.filter(TrackLog.affiliate_id == affiliate_id)if start_date:query = query.filter(TrackLog.added_on >= to_py_date(start_date))if end_date:query = query.filter(TrackLog.added_on <= to_py_date(end_date))return query.all()def get_track_logs_by_user(user_id):return TrackLog.query.filter(TrackLog.user_id == user_id).all()def get_track_logs(affiliate_id, user_id, event, url):query = TrackLog.queryif affiliate_id:query = query.filter(TrackLog.affiliate_id == affiliate_id)if user_id:query = query.filter(TrackLog.user_id == user_id)if event:query = query.filter(TrackLog.event == event)if url:query = query.filter(TrackLog.url == url)return query.all()def get_address(address_id):address = Address.get_by(id=address_id)addressMapping = PrivateDealUserAddressMapping.query.filter_by(user_id = address.user_id,address_id=address_id).first()if addressMapping is None:return address, {}, {}else:return address, {address_id:addressMapping.taxInvoiceAvailable}, {address_id:addressMapping.creditOptionAvailable}def get_counter_name(user_ids):result = session.query(PrivateDealUserAddressMapping,Address).join((Address,PrivateDealUserAddressMapping.address_id==Address.id)).filter(PrivateDealUserAddressMapping.user_id.in_(user_ids)).filter(PrivateDealUserAddressMapping.creditOptionAvailable==1).all()userCounterMap = {}if result is not None:for r in result:if userCounterMap.has_key(r.PrivateDealUserAddressMapping.user_id):passelse:userCounterMap[r.PrivateDealUserAddressMapping.user_id] = r.Address.namereturn userCounterMapdef forgot_password(email, password):try:user = User.get_by(email=email)if user:user.password = passwordsession.commit()return Trueelse:return Falseexcept:return Falsedef get_all_addresses_for_user(userId):addresses = Address.query.filter_by(user_id = userId, enabled=True).all()privateDealUser = get_private_deal_user(userId)taxInvoiceMap = {}creditOptionMap = {}if privateDealUser is None:return addresses, taxInvoiceMap, creditOptionMapelse:addressMappings = PrivateDealUserAddressMapping.query.filter_by(user_id = userId).all()for mapping in addressMappings:taxInvoiceMap[mapping.address_id] = mapping.taxInvoiceAvailablecreditOptionMap[mapping.address_id] = mapping.creditOptionAvailablefor address in addresses:if not taxInvoiceMap.has_key(address.id):taxInvoiceMap[address.id] = Falseif not creditOptionMap.has_key(address.id):creditOptionMap[address.id] = Falsereturn addresses, taxInvoiceMap, creditOptionMap'''privateDealUser = get_private_deal_user(userId)if privateDealUser is None:return Address.query.filter_by(user_id = userId, enabled=True).all()else:if privateDealUser.counter:if privateDealUser.counter.documentVerified:return Address.query.filter_by(user_id = userId, enabled=True).all()else:return Address.query.filter_by(id=privateDealUser.counter.addressId).all()return Address.query.filter_by(user_id = userId, enabled=True).all()'''def get_default_address_id(userId):user = get_user_by_id(userId)if user is None:return 0if user.default_address_id is None:return 0return user.default_address_id'''privateDealUser = get_private_deal_user(userId)if privateDealUser is None:if user.default_address_id is None:return 0else:if privateDealUser.counter:return privateDealUser.counter.addressIdelse:if user.default_address_id is None:return 0return user.default_address_id'''def 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'''default_address_id = get_default_address_id(user_id)if default_address_id:address = Address.get_by(id=default_address_id)default_pincode = address.pinelse:default_pincode = '110001'return default_pincode'''def get_user_count(user_type):if user_type is None:return User.query.count()else:return User.query.filter_by(is_anonymous = user_type).count()def get_users(user_type, start_date, end_date):query = session.query(User)if start_date != -1:query = query.filter(User.active_since >= to_py_date(start_date))if end_date != -1:query = query.filter(User.active_since <= to_py_date(end_date))if user_type is not None:query = query.filter(User.is_anonymous == user_type)return query.all()#=============================================================================# 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 get_my_research_items(userId):query = UserWidgetItem.query.filter_by(userId=userId)query = query.filter_by(widgetId=WType.MY_RESEARCH)query = query.order_by(desc(UserWidgetItem.addedOn))widgetItems = query.all()return [widgetItem.itemId for widgetItem in widgetItems]def get_browse_history_items(userId):query = UserWidgetItem.query.filter_by(userId=userId)query = query.filter_by(widgetId=WType.BROWSE_HISTORY)query = query.order_by(desc(UserWidgetItem.addedOn)).limit(10)widgetItems = query.all()return [widgetItem.itemId for widgetItem in widgetItems]def update_my_research(userId, itemId):isNew = Falsequery = UserWidgetItem.query.filter_by(userId=userId)query = query.filter_by(widgetId=WType.MY_RESEARCH)query = query.filter_by(itemId=itemId)widgetItem = query.first()if not widgetItem:isNew = TruewidgetItem = UserWidgetItem()widgetItem.userId = userIdwidgetItem.widgetId = WType.MY_RESEARCHwidgetItem.itemId = itemIdwidgetItem.addedOn = datetime.datetime.now()session.commit()return isNewdef update_browse_history(userId, itemId):query = UserWidgetItem.query.filter_by(userId=userId)query = query.filter_by(widgetId=WType.BROWSE_HISTORY)query = query.filter_by(itemId=itemId)widgetItem = query.first()if not widgetItem:widgetItem = UserWidgetItem()widgetItem.userId = userIdwidgetItem.widgetId = WType.BROWSE_HISTORYwidgetItem.itemId = itemIdwidgetItem.addedOn = datetime.datetime.now()session.commit()def delete_item_from_my_research(userId, itemId):query = UserWidgetItem.query.filter_by(userId=userId)query = query.filter_by(widgetId=WType.MY_RESEARCH)query = query.filter_by(itemId=itemId)widgetItem = query.first()if widgetItem:widgetItem.delete()session.commit()else:print "Not item in my research to delete with itemId " + str(itemId)def increase_trust_level(userId, trustLevelDelta):user = User.query.filter_by(id = userId).with_lockmode('update').first()user.trust_level += trustLevelDeltasession.commit()def get_trust_level(userId):user = User.query.filter_by(id = userId).first()return user.trust_leveldef get_user_emails(start_date, end_date):emails = select([User.table.c.communication_email], and_(User.table.c.active_since >= start_date, User.table.c.active_since <= end_date, User.table.c.is_anonymous==0)).execute()email_addresses = []for email in emails:email_addresses.append(str(email[0]))return email_addressesdef is_private_deal_user(userId):try:user = PrivateDealUser.get_by(id=userId)if user is None:return Falseelif not user.isActive:return Falseelse:return Trueexcept:print("Error : Unable to get details for User Id : " + str(userId))return Falsefinally:close_session()def add_private_deal_user(userId):user = PrivateDealUser.get_by(id=userId)if user is None:try:pd = PrivateDealUser()pd.id = userIdpd.created_on = datetime.datetime.now()pd.isActive = Truepd.bulkShipmentAmountLimit=50000pd.creditorAssigned = Falsepd.tinVerified = Falsesession.commit()return Trueexcept Exception as e:print "Unable to add user to private deals",ereturn Falseelse:return Truedef change_private_deal_user_status(userId,isActive):user = PrivateDealUser.get_by(id=userId)if user is None:return Falseelse:user.isActive = isActivesession.commit()return Truedef get_private_deal_user(userId):return PrivateDealUser.get_by(id=userId)def register_counter(tCounter, userId):try:firstValidAddress = Address.query.filter_by(id=tCounter.address).first()except:passif not firstValidAddress:firstValidAddress = Address.query.filter_by(user_id = userId, enabled=True).first()counter = Counter()_setCounter(counter, tCounter, firstValidAddress)pDealUser = PrivateDealUser.query.filter_by(id=userId).first()if not pDealUser:pDealUser = PrivateDealUser()pDealUser.created_on = datetime.datetime.now()pDealUser.bulkShipmentAmountLimit=50000pDealUser.counter = counterpDealUser.tinVerified = True if tCounter.documentVerified else FalsepDealUser.tin = tCounter.tinpDealUser.isActive = Truesession.commit()m = {}m['counter_code'] = counter.codereturn mdef _setCounter(counter,tCounter,address):counter.name = tCounter.namecounter.ownerName = tCounter.ownerNamecounter.createdOn = datetime.datetime.now()counter.email = tCounter.emailcounter.mobile = tCounter.mobilecounter.addressId = address.idcounter.dob = tCounter.dobcounter.gstin = tCounter.gstincounter.documentVerified = tCounter.documentVerified# if counter.documentVerified:# pduaddress = PrivateDealUserAddressMapping()# pduaddress.address_id = address.id# pduaddress.creditOptionAvailable = False# pduaddress.user_id = address.user_id# if address.state in tinStates:# pduaddress.taxInvoiceAvailable = True# else:# pduaddress.taxInvoiceAvailable = Falsecounter.verificationType = tCounter.verificationTypecounter.verifiedOn = datetime.datetime.now()query = Counter.query.filter(Counter.code.like(CounterStateMap[address.state] + '%')).order_by(Counter.id.desc())lastStateCounter = query.first()if lastStateCounter:counter.code = CounterStateMap[address.state] + str(int(lastStateCounter.code[2:])+1).zfill(6)else:counter.code = CounterStateMap[address.state] + "000001"counter.striker = tCounter.strikerif tCounter.alternateMobile:counter.alternateMobile = tCounter.alternateMobileif tCounter.spCounterSize:counter.spCounterSize = tCounter.spCounterSizeif tCounter.fpCounterSize:counter.fpCounterSize = tCounter.fpCounterSizedef search_counter(type1, searchString):if type1=="counter_code":return Counter.query.filter(Counter.code==searchString).all()elif type1=="mobile":return Counter.query.filter(or_(Counter.alternateMobile==searchString, Counter.mobile==searchString)).all()elif type1=="email":return Counter.query.filter(Counter.email==searchString).all()elif type1=="counter_name":return Counter.query.filter(Counter.name.like("%" + searchString + "%")).all()elif type1=="tin":return Counter.query.filter(Counter.tin==searchString).all()else:return []def get_counter_by_user_id(user_id):pdu = PrivateDealUser.query.filter(PrivateDealUser.id==user_id).first()if pdu is None:return Noneelse:return pdu.counterdef get_all_users_by_counter(counterid):dealers = PrivateDealUser.query.filter(PrivateDealUser.counter_id == counterid).all()dealerids = [dealer.id for dealer in dealers]print dealeridsif len(dealerids) > 0:return User.query.filter(User.id.in_(dealerids)).all()return []def get_active_access_token_for_user(userId, source):user = get_private_deal_user(userId)if user is not None:accessTokenObj = AccessTokenizer.query.filter(AccessTokenizer.userId==userId).filter(AccessTokenizer.source==source).filter(AccessTokenizer.expired==False).filter(AccessTokenizer.expiredTime>datetime.datetime.now()).first()if accessTokenObj is not None:return accessTokenObj.tokenStringelse:accessTokenObj = AccessTokenizer()accessTokenObj.userId = userIdaccessTokenObj.source = sourceaccessTokenObj.tokenString = binascii.b2a_hex(os.urandom(15))accessTokenObj.expiredTime = datetime.datetime.now()+datetime.timedelta(minutes=10)accessTokenObj.expired = Falsesession.commit()return accessTokenObj.tokenStringelse:return 'Invalid User'def validate_access_token(accessToken):accessTokenObj = AccessTokenizer.query.filter(AccessTokenizer.tokenString==accessToken).filter(AccessTokenizer.expired==False).filter(AccessTokenizer.expiredTime>datetime.datetime.now()).first()if accessTokenObj is not None:accessTokenObj.expired = Truesession.commit()return Trueelse:return Falsedef is_address_editable_for_counter(userId):privateDealUser = get_private_deal_user(userId)if privateDealUser is None:return Trueelse:if privateDealUser.counter:if privateDealUser.counter.documentVerified:return Trueelse:return Falsereturn Truedef get_billing_address_for_user(userId):privateDealUser = get_private_deal_user(userId)if privateDealUser is None:return None, {}, {}if privateDealUser.counter:return get_address(privateDealUser.counter.addressId)else:return None, {}, {}def is_creditor_assigned(userId):try:privateDealUser = get_private_deal_user(userId)if privateDealUser.creditorAssigned:return Trueelse:return Falseexcept:return Falsedef is_tax_invoice_enabled_user(userId):try:privateDealUser = get_private_deal_user(userId)if privateDealUser.tin and privateDealUser.tinVerified:return Trueelse:return Falseexcept:return Falsedef tax_invoice_available(address_id):addressMapping = PrivateDealUserAddressMapping.query.filter_by(address_id=address_id).first()return True if addressMapping and addressMapping.taxInvoiceAvailable else Falsedef update_address(t_address):address, o1, o2 = get_address(t_address.id)if address:address.line_1 = t_address.line1address.line_2 = t_address.line2address.city = t_address.cityaddress.pin = t_address.pinaddress.state = t_address.statesession.commit()return Truereturn Falsedef update_counter(t_counter):counter=Counter.get_by(id=t_counter.id)if counter:counter.gstin = t_counter.gstincounter.documentVerified = t_counter.documentVerifiedsession.commit()return Truereturn Falsedef get_cart_by_value(cartIds):returnMap = {}lines = Line.query.filter(Line.cart_id.in_(cartIds)).all()for line in lines:if returnMap.has_key(line.cart_id):returnMap.get(line.cart_id).append(to_t_line(line))else:returnMap[line.cart_id] = [to_t_line(line)]return returnMapdef close_session():if session.is_active:print "session is active. closing it."session.close()def is_alive():try:session.query(User.id).limit(1).one()return Trueexcept:return Falseif __name__ == '__main__':Dataservice.initialize()print (get_cart_by_value([1005394]))