-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWebApp_sample.py
144 lines (127 loc) · 5.17 KB
/
WebApp_sample.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import datetime, time, traceback
from google.appengine.ext import ndb
from flask import Flask, render_template, request
import helpers as hp
app = Flask(__name__,
static_path=None,
static_url_path=None,
static_folder='static',
template_folder='www')
# change to False in production
app.config['DEBUG'] = True
# define Datastore model
class OurProds(ndb.Model):
time = ndb.IntegerProperty('t')
price = ndb.FloatProperty('p')
sku = ndb.StringProperty('k')
marketplace = ndb.StringProperty('r')
stock = ndb.IntegerProperty('s')
pass
# use the default bucket
GCS_BUCKET = 'GAE-Project-Name.appspot.com'
# return a HTML template with a list of orders downloaded via API request
@app.route('/orders_table', methods = ['GET', 'POST'])
def return_orders_table(no_template = False):
prodList = []
yesterday = datetime.datetime.now() - datetime.timedelta(1)
yesterday = yesterday.strftime("%Y-%m-%dT%H:%M:%S%z")
kwargs = {
'Status':'pending'
}
custom_heads = [
'CustomerFirstName',
'ItemsCount',
'OrderNumber',
'AddressShipping',
'Statuses'
]
if request.method=='POST':
try:
custom_heads = request.form.get(['custom_heads'])
if custom_heads:
custom_heads = custom_heads.strip().split(',')
custom_filters = request.form.get(['custom_filters'])
if custom_filters:
custom_filters = custom_filters.split(',')
for custom_filter in custom_filters:
key, value = custom_filter.split('=')
kwargs[key] = value
except:
traceback.print_exc()
return render_template('base.html',
content = "Error in Custom Filters or Headers format",
title = "Orders - Error")
prodList = hp.call_lazada(action = 'GetOrders',
limit = '100',
kwargs = kwargs)
prodList = prodList['SuccessResponse']['Body']['Orders']
if no_template:
return hp.HTML_table_from_list_of_dicts(prodList, custom_heads)
else:
content = """
<form action='/orderslist' method='post'>
<label for="custom_filters">Additional Info</label>
<input name='custom_filters' placeholder = 'e.g. Limit=500,Offset=100,Status=ready_to_ship,SortBy=created_at,SortDirection=ASC'type='text'>
<label for="custom_heads">Custom Headers</label>
<input name='custom_heads' placeholder = 'e.g. PaymentMethod,Price,CreatedAt,NationalRegistrationNumber'type='text'>
<input type="submit" value="Submit">
</form>
"""
content += hp.HTML_table_from_list_of_dicts(prodList, custom_heads)
return render_template('base.html',
content = content,
title = "Orders")
# given a list of products update the noSQL database of products
@app.route('/update_prods', methods = ['GET'])
def update_prods(spider = 'lazada',prodList = []):
if not prodList:
return "Empty Product List"
prods =[]
for product in prodList:
if spider =='lazada':
model = product['Attributes']['model']
if product['Skus'][0]['special_price']:
price = product['Skus'][0]['special_price']
else:
price = product['Skus'][0]['price']
qty = int(product['Skus'][0]['quantity'])
if spider =='qb':
model = product['ManufacturerPartNumber']
price = product['SalesPrice']
qty = int(product['QuantityOnHand'])
if spider =='plugins':
model = product['sku']
if product['sale_price']:
price = float(product['sale_price'])
else:
price = float(product['regular_price'])
if product['in_stock']=='True':
qty = 1
else:
qty = 0
searchstring = "select * from OurProds where k ='"+ model + "'"
data = ndb.gql(searchstring).filter(OurProds.marketplace == spider).fetch()
if len(data)>0:
try:
if data[0].price != price:
data[0].price = price
data[0].time = int(time.time())
prods.append(data[0])
if data[0].stock != qty:
data[0].stock = qty
data[0].time = int(time.time())
prods.append(data[0])
except:
traceback.print_exc()
else:
new_Prod = OurProds(sku = model,
price = price,
marketplace = spider,
time = int(time.time()),
stock = qty)
prods.append(new_Prod)
if len(prods) > 10:
ndb.put_multi_async(prods)
if len(prods) > 0:
ndb.put_multi(prods)
return 'Done!'