| Line 10... |
Line 10... |
| 10 |
from dtr.api.Order import process_rejects
|
10 |
from dtr.api.Order import process_rejects
|
| 11 |
from dtr.dao import Order, SubOrder, AmazonAffiliateInfo
|
11 |
from dtr.dao import Order, SubOrder, AmazonAffiliateInfo
|
| 12 |
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
|
12 |
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
|
| 13 |
ungzipResponse, tprint
|
13 |
ungzipResponse, tprint
|
| 14 |
from dtr.sources.flipkart import todict, AFF_REPORT_URL
|
14 |
from dtr.sources.flipkart import todict, AFF_REPORT_URL
|
| 15 |
from dtr.storage.DataService import OrdersRaw, Orders, Order_Parse_Info,\
|
15 |
from dtr.storage.DataService import OrdersRaw, Orders, Order_Parse_Info, \
|
| 16 |
All_user_addresses
|
16 |
All_user_addresses
|
| 17 |
from dtr.storage.Mongo import getDealRank
|
17 |
from dtr.storage.Mongo import getDealRank
|
| - |
|
18 |
from dtr.utils import utils
|
| 18 |
from dtr.utils.utils import fetchResponseUsingProxy, readSSh
|
19 |
from dtr.utils.utils import fetchResponseUsingProxy, readSSh
|
| 19 |
from elixir import *
|
20 |
from elixir import *
|
| 20 |
import base64
|
21 |
import base64
|
| 21 |
import dtr
|
22 |
import dtr
|
| 22 |
import gzip
|
23 |
import gzip
|
| Line 448... |
Line 449... |
| 448 |
f.close() # you can omit in most cases as the destructor will call if
|
449 |
f.close() # you can omit in most cases as the destructor will call if
|
| 449 |
soup = BeautifulSoup(rawHtml)
|
450 |
soup = BeautifulSoup(rawHtml)
|
| 450 |
allOrders = soup.find(id="ordersContainer").findAll('div', {'class':'a-box-group a-spacing-base order'})
|
451 |
allOrders = soup.find(id="ordersContainer").findAll('div', {'class':'a-box-group a-spacing-base order'})
|
| 451 |
bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
|
452 |
bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
|
| 452 |
for activeOrder in activeOrders:
|
453 |
for activeOrder in activeOrders:
|
| - |
|
454 |
matched=False
|
| 453 |
for orderEle in allOrders:
|
455 |
for orderEle in allOrders:
|
| 454 |
deliveredOn = None
|
456 |
deliveredOn = None
|
| 455 |
deliveryEstimate = None
|
457 |
deliveryEstimate = None
|
| 456 |
shippingEstimate = None
|
458 |
shippingEstimate = None
|
| 457 |
orderdiv = orderEle.find('div', {'class':'a-box a-color-offset-background order-info'}).find('div', {'class':'a-fixed-right-grid-col actions a-col-right'})
|
459 |
orderdiv = orderEle.find('div', {'class':'a-box a-color-offset-background order-info'}).find('div', {'class':'a-fixed-right-grid-col actions a-col-right'})
|
| 458 |
merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
|
460 |
merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
|
| 459 |
if merchantOrderId==activeOrder['merchantOrderId']:
|
461 |
if merchantOrderId==activeOrder['merchantOrderId']:
|
| - |
|
462 |
matched=True
|
| 460 |
closed = True
|
463 |
closed = True
|
| 461 |
orderStatusDesc = None
|
- |
|
| 462 |
shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
|
464 |
shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
|
| 463 |
shipments.pop(0)
|
465 |
shipments.pop(0)
|
| 464 |
for shipment in shipments:
|
466 |
for shipment in shipments:
|
| - |
|
467 |
orderStatusDesc = None
|
| 465 |
shipdiv = shipment.find('div', {'class':'a-box-inner'})
|
468 |
shipdiv = shipment.find('div', {'class':'a-box-inner'})
|
| 466 |
sdivs = shipment.div.div.findAll('div', recursive=False)
|
469 |
sdivs = shipment.div.div.findAll('div', recursive=False)
|
| 467 |
try:
|
470 |
try:
|
| 468 |
orderStatus = sdivs[0].span.text.strip()
|
471 |
orderStatus = sdivs[0].span.text.strip()
|
| 469 |
status = self._getStatusFromDetailedStatus(orderStatus)
|
472 |
status = self._getStatusFromDetailedStatus(orderStatus)
|
| Line 484... |
Line 487... |
| 484 |
orderStatusDesc = sdivs[0].findAll('div')[1].div.text.strip()
|
487 |
orderStatusDesc = sdivs[0].findAll('div')[1].div.text.strip()
|
| 485 |
except:
|
488 |
except:
|
| 486 |
try:
|
489 |
try:
|
| 487 |
orderStatusDesc = sdivs[0].findAll('div')[1].text.strip()
|
490 |
orderStatusDesc = sdivs[0].findAll('div')[1].text.strip()
|
| 488 |
except:
|
491 |
except:
|
| 489 |
pass
|
492 |
print "Order Status Description None or empty for", merchantOrderId, "and User", userId
|
| 490 |
|
493 |
|
| 491 |
if orderStatusDesc:
|
494 |
if orderStatusDesc:
|
| 492 |
try:
|
495 |
try:
|
| 493 |
if "Dispatch estimate" in orderStatusDesc:
|
496 |
if "Dispatch estimate" in orderStatusDesc:
|
| 494 |
shippingEstimate = orderStatus.split("Dispatch estimate").split("-")[0].strip()
|
497 |
shippingEstimate = orderStatus.split("Dispatch estimate").split("-")[0].strip()
|
| Line 498... |
Line 501... |
| 498 |
deliveryEstimate = datetime.strftime(getDateStringArriving(orderStatus.split("Arriving")[1].strip().split("by")[0].strip()), '%d-%b-%y')
|
501 |
deliveryEstimate = datetime.strftime(getDateStringArriving(orderStatus.split("Arriving")[1].strip().split("by")[0].strip()), '%d-%b-%y')
|
| 499 |
except:
|
502 |
except:
|
| 500 |
print "Could not find anything relevent for merchantOrder", merchantOrderId, "and User", userId
|
503 |
print "Could not find anything relevent for merchantOrder", merchantOrderId, "and User", userId
|
| 501 |
closed=False
|
504 |
closed=False
|
| 502 |
status = None
|
505 |
status = None
|
| 503 |
else:
|
- |
|
| 504 |
print "Order Status Description None or empty for", merchantOrderId, "and User", userId
|
- |
|
| 505 |
|
506 |
|
| 506 |
productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
|
507 |
productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
|
| 507 |
trackingUrl = None
|
508 |
trackingUrl = None
|
| 508 |
for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
|
509 |
for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
|
| 509 |
if buttonDiv.find('a').text.strip()=='Track package':
|
510 |
if buttonDiv.find('a').text.strip()=='Track package':
|
| Line 514... |
Line 515... |
| 514 |
for prodDiv in productDivs:
|
515 |
for prodDiv in productDivs:
|
| 515 |
prodDiv.find('div', {'class':'a-fixed-left-grid-inner'})
|
516 |
prodDiv.find('div', {'class':'a-fixed-left-grid-inner'})
|
| 516 |
productTitle = prodDiv.find('div', {'class':'a-fixed-left-grid-inner'}).find("div", {'class':'a-row'}).find('a').text.strip()
|
517 |
productTitle = prodDiv.find('div', {'class':'a-fixed-left-grid-inner'}).find("div", {'class':'a-row'}).find('a').text.strip()
|
| 517 |
imgUrl = prodDiv.find("img")["src"]
|
518 |
imgUrl = prodDiv.find("img")["src"]
|
| 518 |
for subOrder in activeOrder['subOrders']:
|
519 |
for subOrder in activeOrder['subOrders']:
|
| - |
|
520 |
if subOrder['closed']==True:
|
| - |
|
521 |
continue
|
| 519 |
if subOrder['productTitle'] in productTitle:
|
522 |
if subOrder['productTitle'] in productTitle:
|
| 520 |
findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId")}
|
523 |
findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId")}
|
| 521 |
updateMap = {}
|
524 |
updateMap = {}
|
| 522 |
closedStatus = False
|
525 |
closedStatus = False
|
| 523 |
updateMap['subOrders.$.imgUrl'] = imgUrl
|
526 |
updateMap['subOrders.$.imgUrl'] = imgUrl
|
| Line 546... |
Line 549... |
| 546 |
updateMap['subOrders.$.trackingUrl'] = trackingUrl
|
549 |
updateMap['subOrders.$.trackingUrl'] = trackingUrl
|
| 547 |
if shippingEstimate:
|
550 |
if shippingEstimate:
|
| 548 |
updateMap['subOrders.$.estimatedShippingDate'] = shippingEstimate
|
551 |
updateMap['subOrders.$.estimatedShippingDate'] = shippingEstimate
|
| 549 |
if not closedStatus:
|
552 |
if not closedStatus:
|
| 550 |
closed = False
|
553 |
closed = False
|
| - |
|
554 |
#{"subOrders.closed":False,"subOrders.trackingUrl":{"$exists":False},"subOrders.trackAfter":{"$lt":utils.getCurrTimeStamp()}
|
| 551 |
bulk.find(findMap).update({'$set' : updateMap})
|
555 |
bulk.find(findMap).update({'$set' : updateMap})
|
| 552 |
break
|
556 |
break
|
| 553 |
bulk.find({'orderId': activeOrder['orderId']}).update({'$set':{'closed': closed}})
|
557 |
bulk.find({'orderId': activeOrder['orderId']}).update({'closed':closed})
|
| - |
|
558 |
break
|
| - |
|
559 |
if not matched:
|
| - |
|
560 |
updateMap = {'subOrders.$.trackMissing': False}
|
| - |
|
561 |
for subOrder in activeOrder['subOrders']:
|
| - |
|
562 |
if subOrder['closed']==True:
|
| - |
|
563 |
continue
|
| - |
|
564 |
findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId"),
|
| - |
|
565 |
"subOrders.trackAfter":{"$lt":utils.getCurrTimeStamp()}}
|
| - |
|
566 |
bulk.find({'orderId': activeOrder['orderId']})
|
| - |
|
567 |
bulk.find(findMap).update({'$set':updateMap})
|
| 554 |
bulk.execute()
|
568 |
bulk.execute()
|
| 555 |
return 'PARSED_SUCCESS'
|
569 |
return 'PARSED_SUCCESS'
|
| 556 |
else:
|
570 |
else:
|
| 557 |
merchantOrderId = re.findall(r'https://www.amazon.in/gp/css/summary/edit.html\?orderID=(.*)?', url, re.IGNORECASE)[0]
|
571 |
merchantOrderId = re.findall(r'https://www.amazon.in/gp/css/summary/edit.html\?orderID=(.*)?', url, re.IGNORECASE)[0]
|
| 558 |
print "merchantOrderId", merchantOrderId
|
572 |
print "merchantOrderId", merchantOrderId
|
| Line 625... |
Line 639... |
| 625 |
soup = BeautifulSoup(page)
|
639 |
soup = BeautifulSoup(page)
|
| 626 |
header1 = soup.find("h1")
|
640 |
header1 = soup.find("h1")
|
| 627 |
if header1:
|
641 |
if header1:
|
| 628 |
if header1.text=="Sign In":
|
642 |
if header1.text=="Sign In":
|
| 629 |
print "Login page is displayed for order id", orderId
|
643 |
print "Login page is displayed for order id", orderId
|
| 630 |
self.merchantOrder.update({"orderId":orderId}, {"$set":{"trackError":True}})
|
644 |
self.db.merchantOrder.update({"orderId":orderId}, {"$set":{"trackError":True}})
|
| 631 |
return subOrder
|
645 |
return subOrder
|
| 632 |
try:
|
646 |
try:
|
| 633 |
print "Tracking page is displayed for order id", orderId
|
647 |
print "Tracking page is displayed for order id", orderId
|
| 634 |
detailedStatus = soup.find("div", {"class":"top"}).span.text.strip()
|
648 |
detailedStatus = soup.find("div", {"class":"top"}).span.text.strip()
|
| 635 |
try:
|
649 |
try:
|
| Line 830... |
Line 844... |
| 830 |
|
844 |
|
| 831 |
finally:
|
845 |
finally:
|
| 832 |
session.close()
|
846 |
session.close()
|
| 833 |
|
847 |
|
| 834 |
if __name__ == '__main__':
|
848 |
if __name__ == '__main__':
|
| 835 |
#readSSh("/AmazonTrack/User8110/orderSummary15-10:14:43:25")
|
849 |
readSSh("/AmazonTrack/User8925/orderSummary14-10:18:29:25")
|
| 836 |
main()
|
850 |
#main()
|
| 837 |
#getDateStringArriving()
|
851 |
#getDateStringArriving()
|
| 838 |
|
852 |
|