Skip to main content

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