amazon_shop / webshop_lite.py
John Yang
Add sim-to-real transfer
11d1f29
import os
from flask import render_template_string, Flask
from predict_help import Page
app=Flask(__name__)
app.debug=True
SESSION_ID = "ABC"
TEMPLATE_DIR = "templates/"
KEYWORDS = ["placeholder (not needed)"] # To Do: Does this matter?
QUERY = ""
product_map = {}
def read_html_template(path):
with open(path) as f:
template = f.read()
return template
@app.route('/', methods=['GET', 'POST'])
def index(session_id, **kwargs):
print("Hello world")
@app.route('/', methods=['GET', 'POST'])
def search_results(data):
path = os.path.join(TEMPLATE_DIR, 'results_page.html')
html = render_template_string(
read_html_template(path=path),
session_id=SESSION_ID,
products=data,
keywords=KEYWORDS,
page=1,
total=len(data),
instruction_text=QUERY,
)
return html
@app.route('/', methods=['GET', 'POST'])
def item_page(session_id, asin, keywords, page, options):
path = os.path.join(TEMPLATE_DIR, 'item_page.html')
html = render_template_string(
read_html_template(path=path),
session_id=session_id,
product_info=product_map[asin],
keywords=keywords,
page=page,
asin=asin,
options=options,
instruction_text=QUERY
)
return html
@app.route('/', methods=['GET', 'POST'])
def item_sub_page(session_id, asin, keywords, page, sub_page, options):
path = os.path.join(TEMPLATE_DIR, sub_page.value.lower() + "_page.html")
html = render_template_string(
read_html_template(path),
session_id=session_id,
product_info=product_map[asin],
keywords=keywords,
page=page,
asin=asin,
options=options,
instruction_text=QUERY
)
return html
@app.route('/', methods=['GET', 'POST'])
def done(asin, options, session_id, **kwargs):
path = os.path.join(TEMPLATE_DIR, 'done_page.html')
html = render_template_string(
read_html_template(path),
session_id=session_id,
reward=1,
asin=asin,
options=product_map[asin]["options"],
reward_info=kwargs.get('reward_info'),
goal_attrs=kwargs.get('goal_attrs'),
purchased_attrs=kwargs.get('purchased_attrs'),
goal=kwargs.get('goal'),
mturk_code=kwargs.get('mturk_code'),
query=kwargs.get('query'),
category=kwargs.get('category'),
product_category=kwargs.get('product_category'),
)
return html
# Project Dictionary Information onto Fake Amazon
def dict_to_fake_html(data, page_type, asin=None, sub_page_type=None, options=None, prod_map={}, query=""):
global QUERY, product_map
QUERY = query
product_map = prod_map
with app.app_context(), app.test_request_context():
if page_type == Page.RESULTS:
return search_results(data)
if page_type == Page.ITEM_PAGE:
return item_page(SESSION_ID, asin, KEYWORDS, 1, options)
if page_type == Page.SUB_PAGE:
if sub_page_type is not None:
return item_sub_page(SESSION_ID, asin, KEYWORDS, 1, sub_page_type, options)
else:
raise Exception("Sub page of type", sub_page_type, "unrecognized")