Rev 13487 | Blame | Compare with Previous | Last modification | View Log | RSS feed
from elixir import *from shop2020.config.client.ConfigClient import ConfigClientfrom shop2020.model.v1.order.impl import DataServicefrom shop2020.model.v1.order.impl.DataService import MobileActivationRecord, Order, LineItemfrom shop2020.thriftpy.model.v1.order.ttypes import OrderStatus, OrderSource, OrderTypefrom requests import requestimport datetimeconfig_client = ConfigClient()host = config_client.get_property('transaction_service_db_hostname')DataService.initialize(db_hostname=host)startDate = datetime.datetime.strptime('20-09-2014 00:00:00', '%d-%m-%Y %H:%M:%S')base_url = 'http://channel.spicemobile.in/tr/PullActivationDate?imei='class __Details:def __init__(self,source,orderId,serial_number,deviceNumber,circle, operator, activationTime):self.source = sourceself.orderId = orderIdself.serial_number = serial_numberdef getActivatedDevices():activatedIds = session.query(MobileActivationRecord.orderId).all()if len(activatedIds) > 0:return list(zip(*activatedIds)[0])return activatedIdsdef populateNewRecords(activatedIds):records = []try:query = session.query(Order) \.join((LineItem,Order.id==LineItem.order_id)).filter(LineItem.brand=='Spice').filter(Order.created_timestamp>startDate).filter(Order.status.in_((OrderStatus.DELIVERY_SUCCESS,OrderStatus.SHIPPED_FROM_WH)))if len(activatedIds) > 0:orders = query.filter(~Order.id.in_((activatedIds))).all()else:orders = query.all()for order in orders:if order.lineitems[0].serial_number is None:continueif (order.source in (OrderSource.WEBSITE, OrderSource.SNAPDEAL, OrderSource.AMAZON, OrderSource.FLIPKART)) and order.status == OrderStatus.DELIVERY_SUCCESS:det = __Details(order.source,order.id,(order.lineitems[0].serial_number).strip(),None,None,None,None)records.append(det)elif (order.source in( OrderSource.EBAY, OrderSource.HOMESHOP18)) and order.status in (OrderStatus.SHIPPED_FROM_WH,OrderStatus.DELIVERY_SUCCESS):det = __Details(order.source,order.id,(order.lineitems[0].serial_number).strip(),None,None,None,None)records.append(det)else:continuereturn recordsfinally:session.close()def main():activatedIds = getActivatedDevices()records = populateNewRecords(activatedIds)print "Getting activation details for ",len(records)for rec in records:serial_number_list = rec.serial_number.split(',')for serial_number in serial_number_list:url = base_url+serial_numberresponse = request('GET', url)#Response is pretty bad, can expect this from Spice services.try:activationRec = response.text.splitlines()[0]if not(serial_number == activationRec.split(',')[0].strip()):print "Requested Serial Number ",serial_numberprint "Response ",activationRec.split(',')[0].strip()print "Requested serial_number different from response"continued_mobileActivationRecord = MobileActivationRecord()d_mobileActivationRecord.orderId = rec.orderIdd_mobileActivationRecord.deviceNumber = activationRec.split(',')[2].strip()d_mobileActivationRecord.serialNumber = serial_numberd_mobileActivationRecord.circle = activationRec.split(',')[3].strip()d_mobileActivationRecord.operator = activationRec.split(',')[4].strip()d_mobileActivationRecord.activationTime = datetime.datetime.strptime(activationRec.split(',')[5].strip(), '%m/%d/%Y %I:%M:%S %p')except Exception as e:print "Exception ****"print econtinuesession.commit()session.close()if __name__=='__main__':main()