# About this Python Sample App
This sample app is a very simple Python application that does the following:
- Launches your system browser to Authenticate using OAUTH2
- Saves the credentials to the filesystem
- Launches a simple local flask app to allow you to then download device data.
There are comments in the code that describe high-level what is happening.
You can copy the sample code below. Ensure that you install the referenced imported packages that are not part of the standard library.
# How to Run
-
Install the requirements with:
pip install flask requests
-
Run the Sample App with:
python app.py
Problems Running the Code?
If you have any problems running the code then reach out to us in our Community Forum.
Sample Code
from flask import Flask, request import pickle import requests import json import webbrowser app = Flask(__name__) # Insert your own info here as you defined when you created your APP CLIENT_ID = "" CLIENT_SECRET = "" REDIRECT_URI = "http://127.0.0.1:5000/" # for this example APP, this needs to be your redirect URI STATE = "" # A webpage that is amazing in its simplicity AMAZING_WEB_PAGE = """ <p>You have been Authenticated with the API.</p> <p> </p> <p>What do you want to do now?</p> <ul> <form action="/inventory" target="_blank"> <input type="submit" value="Get Inventory"> </form> <p>Note: Pulling down all of your inventory may take some time. Check your console for the progress.</p> </ul> <p> </p> """ webbrowser.open(f'https://daas.api.hp.com/oauth/v1/authorize?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&response_type=code&scope=Read&state={STATE}') total_inventory = None @app.route('/') def authorize(): temp_code = request.args.get('code','') # Now lets get our authorization token url = "https://daas.api.hp.com/oauth/v1/token" body = { 'grant_type': "authorization_code", 'code': temp_code, 'redirect_uri': REDIRECT_URI, 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, # 'Content-Type': "application/x-www-form-urlencoded" } response = requests.request("POST", url, data=body) response = json.loads(response.text) # don't do this in a real app obviously with open('temp', 'wb') as f: pickle.dump(response, f) return AMAZING_WEB_PAGE @app.route('/inventory') def get_full_inventory(): global total_inventory with open('temp', 'rb') as f: response = pickle.load(f) access_token = response['access_token'] url = "https://daas.api.hp.com/analytics/v1/reports/hwinv/details/type/grid" headers = { 'Content-Type': "application/json", 'Authorization': f"Bearer {access_token}", } start_index = 1 total_inventory = [] total_results = -1 while total_results != 0: querystring = {"startIndex": f"{start_index}", "count": "1000"} response = requests.request("POST", url, headers=headers, params=querystring) inventory = json.loads(response.text) total_results = inventory['totalResults'] total_inventory += inventory['resources'] start_index += 1 print(f'Devices Downloaded: {len(total_inventory)}') with open('inventory.json', 'w+') as f: f.write(json.dumps(total_inventory, indent=4, sort_keys=True)) return AMAZING_WEB_PAGE if __name__ == '__main__': app.run()