mirror of
https://github.com/Sheldan/gw2-tools.git
synced 2026-01-01 06:49:06 +00:00
passing through http codes from backend to frontend fixing path to environments repository in tiltfile
167 lines
5.7 KiB
Python
167 lines
5.7 KiB
Python
import logging
|
|
import os
|
|
|
|
import requests
|
|
from functools import wraps
|
|
from flask import Flask, render_template, request
|
|
|
|
FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
logging.basicConfig(encoding='utf-8', level=logging.INFO, format=FORMAT)
|
|
template_dir = os.path.abspath('resources')
|
|
app = Flask(__name__, static_url_path='', static_folder=template_dir, template_folder=template_dir)
|
|
|
|
backend_host = os.getenv('BACKEND_HOST')
|
|
backend_port = os.getenv('BACKEND_PORT')
|
|
base_url = f'http://{backend_host}:{backend_port}'
|
|
inventory_url = f'{base_url}/inventory'
|
|
shared_inventory_url = f'{base_url}/sharedInventory'
|
|
itemRates_url = f'{base_url}/itemRates'
|
|
wallet_url = f'{base_url}/wallet'
|
|
bank_url = f'{base_url}/bank'
|
|
materials_url = f'{base_url}/materials'
|
|
submission_templates_url = f'{base_url}/submissionTemplates'
|
|
characters_url = f'{base_url}/characters'
|
|
openings_url = f'{base_url}/openings'
|
|
|
|
api_key_header_name = 'gw2-api-key'
|
|
|
|
|
|
def api_key_required(f):
|
|
@wraps(f)
|
|
def decorated_function(*args, **kwargs):
|
|
if request.headers.get(api_key_header_name) is None:
|
|
return f'Provide api key with header "{api_key_header_name}"', 400
|
|
return f(*args, **kwargs)
|
|
return decorated_function
|
|
|
|
|
|
@app.route('/health')
|
|
def health():
|
|
return 'OK', 200
|
|
|
|
|
|
@app.route('/')
|
|
def gw2_tools_serving():
|
|
return render_template('index.html')
|
|
|
|
|
|
@app.route('/characters/')
|
|
@api_key_required
|
|
def get_account_characters():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("Loading characters")
|
|
characters_response = requests.get(f'{characters_url}', headers=headers)
|
|
return characters_response.text, characters_response.status_code
|
|
|
|
|
|
@app.route('/inventory/')
|
|
@api_key_required
|
|
def get_account_inventory():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("Rendering inventory of full account")
|
|
inventory_response = requests.get(f'{inventory_url}', headers=headers)
|
|
text = inventory_response.text, inventory_response.status_code
|
|
return text
|
|
|
|
|
|
@app.route('/wallet/')
|
|
@api_key_required
|
|
def get_account_wallet():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("Rendering wallet of account")
|
|
wallet_response = requests.get(f'{wallet_url}', headers=headers)
|
|
return wallet_response.text, wallet_response.status_code
|
|
|
|
|
|
@app.route('/bank/')
|
|
@api_key_required
|
|
def get_account_bank():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("Rendering bank of account")
|
|
bank_response = requests.get(f'{bank_url}', headers=headers)
|
|
return bank_response.text, bank_response.status_code
|
|
|
|
|
|
@app.route('/materials/')
|
|
@api_key_required
|
|
def get_materials():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("Rendering materials of account")
|
|
materials_response = requests.get(f'{materials_url}', headers=headers)
|
|
return materials_response.text, materials_response.status_code
|
|
|
|
|
|
@app.route('/sharedInventory/')
|
|
@api_key_required
|
|
def get_shared_inventory():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("Rendering shared inventory of account")
|
|
shared_inventory_response = requests.get(f'{shared_inventory_url}', headers=headers)
|
|
return shared_inventory_response.text, shared_inventory_response.status_code
|
|
|
|
|
|
@app.route('/submissionTemplates/')
|
|
def get_submission_templates():
|
|
logging.info("Rendering submission templates")
|
|
parameters_query = request.query_string.decode()
|
|
submission_templates_response = requests.get(f'{submission_templates_url}?{parameters_query}')
|
|
return submission_templates_response.text, submission_templates_response.status_code
|
|
|
|
|
|
@app.route('/itemRates/')
|
|
def get_item_rates():
|
|
logging.info("Rendering item rates")
|
|
item_rates_response = requests.get(f'{itemRates_url}')
|
|
return item_rates_response.text, item_rates_response.status_code
|
|
|
|
|
|
@app.route('/openings/', methods=['POST'])
|
|
def create_opening():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
body = request.data
|
|
headers = {'api-key': api_key, 'Content-Type': 'application/json'}
|
|
logging.info("Creating opening")
|
|
openings_response = requests.post(f'{openings_url}', body, headers=headers)
|
|
return openings_response.text, openings_response.status_code
|
|
|
|
|
|
@app.route('/openings/', methods=['GET'])
|
|
def get_openings():
|
|
api_key = request.headers.get(api_key_header_name)
|
|
parameters_query = request.query_string.decode()
|
|
headers = {'api-key': api_key}
|
|
logging.info("Loading openings")
|
|
bank_response = requests.get(f'{openings_url}?{parameters_query}', headers=headers)
|
|
return bank_response.text, bank_response.status_code
|
|
|
|
|
|
@app.route('/openings/<opening_id>', methods=['DELETE'])
|
|
def delete_opening(opening_id):
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info(f"Deleting opening {opening_id}")
|
|
bank_response = requests.delete(f'{openings_url}/{opening_id}', headers=headers)
|
|
return bank_response.text, bank_response.status_code
|
|
|
|
|
|
@app.route('/inventory/<character_name>/')
|
|
@api_key_required
|
|
def get_character_inventory(character_name):
|
|
api_key = request.headers.get(api_key_header_name)
|
|
headers = {'api-key': api_key}
|
|
logging.info("rendering inventory of individual character.")
|
|
inventory_response = requests.get(f'{inventory_url}/{character_name}', headers=headers)
|
|
return inventory_response.text, inventory_response.status_code
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from waitress import serve
|
|
|
|
serve(app, host="0.0.0.0", port=8080)
|