我正在PythonyWhere上使用flask和web3.eth并连接到一个合约,但在返回一个智能合约函数的值时遇到问题。没有记录任何错误。我放置了几个打印语句以查看应用程序停止的位置,并发现当我调用智能合约函数时,应用程序停止
我还应该提到,我能够在本地运行这段代码,而不会出现任何问题
这是最有可能失败的功能:
def getDataFromTokenID(tokenid, contract):
print('getting uri')
uri = contract.functions.tokenURI(tokenid).call() # This is where it stops printing
print('PRINT:',uri)
html = requests.get(uri)
name, img_url = html.json()['name'], html.json()['image']
code = name[-5:]
return name, img_url, code
在以下蓝图中调用了上述函数:
@TokenInfo.route('/rarity/<int:tokenid>', methods=['GET'])
def sendTokenInfo(tokenid):
contract_address = ' ' # left empty for posting purposes
w3 = Web3(Web3.WebsocketProvider(' ')) # left empty purposefully as well
contract = w3.eth.contract(address=contract_address, abi=contract_abi.abi)
model = Shape_classifier()
model.load_state_dict(load(os.getcwd()+'/mysite/app/state_dict.pth'))
uri = current_app.config['MONGO_URI']
mongo.init_app(current_app, uri)
gs = mongo.db.gantomstone_info
try:
id_exists = [{"$match": {'_id': tokenid}}, {"$count": "count"}]
list(gs.aggregate(id_exists))[0]
except:
print('getting data from token id')
name, img_url, serial = getDataFromTokenID(tokenid, contract) ## Stops printing here
print('opening image')
img = Image.open(requests.get(img_url, stream=True).raw)
shape = getImageShape(img, model)
colors = getColors(getCounts(img))
rgb_count = getCounts(img)
serialTF = getCodeInfo(serial)
to_db = {'_id': tokenid, 'name': name, 'img_url': img_url, 'serial': serial,
'shape': shape, 'colors': colors, 'serialTF': serialTF, 'rgb_count': rgb_count}
gs.insert_one(to_db)
rarity = getRarity(gs, tokenid)
gs.update_one({'_id': tokenid}, {
'$set': {'rarity_values': rarity}}, upsert=True)
to_json = list(gs.find({'_id': tokenid}))[0]
return jsonify(to_json)
我尝试过将合同地址四处移动(从TokenInfo视图函数中移出,并放入函数文件中),但都没有效果。我还尝试更改函数输入以接收get请求args,而不是URL中的int,这也没有什么区别
如果有人知道如何使这项工作,那将是惊人的,我将非常感激
多谢各位
如果代码使用websockets,则当前无法在Pythonywhere上的web应用程序中运行
相关问题 更多 >
编程相关推荐