Api client example Python flask
in this example we will create a simple python flask application to list open hrmp channels that are connected to a user defined parachain
Requirements:
- Python 3
- requests and flask(
$ pip3 install flask requests
)
mkdir listchannels/
touch listchannels/app.py
Add the following to app.py
:
from flask import Flask
import requests
app = Flask(__name__)
api_endpoint = "http://localhost:8080" # set the address of the api address
# Lets make a class to talk with the api
class handle_chain():
def __init__(self):
self.api = api_endpoint
# check open hrmp channels based on source paraid
def check_openchannels(self, paraid):
return requests.post(self.api+'/polkadot/openchannels', json={"paraid": paraid}).json()
# interact with a premade scenario
def call_scenario(self, scenarioid, calldata):
return requests.post(self.api+'/call/scenario', json={"data":calldata}).text
# create the /hrmp/openchannels/chain page
@app.route('/hrmp/openchannels/<chain>/', methods=['GET'])
def chain_channels(chain):
# configure chain name and map it to paraid
some_chains = {'acala': 2000, 'assethub':1000 , 'hydradx': 2034}
# verify user input
if not some_chains.keys().__contains__(chain.lower()):
return flask.redirect('/', code=301)
# create a string buffer we will use to write the html to
output = ""
channels = handle_chain().check_openchannels(some_chains.get(chain.lower()))
for channel in channels.get('open_hrmp_channels', []):
output += "<p>Chain: {}</p></br>".format(channel)
# return our html string, if this is a production app we should configure a static template and render it with flask.render_template
return '<html><body><center>{} is connected to chains: {}</body></html>'.format(chain.title(), output)
@app.route('/')
def hello():
return 'Visit /hrmp/openchannels/assethub/'
if __name__ == "__main__":
# configure runtime variables such as port and host
app.run(host='0.0.0.0', port=8081)
Run it:
$ python3 app.py