diff --git a/app/__init__.py b/app/__init__.py index 2a177fa..90354d7 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -9,6 +9,7 @@ ResolveSchema ) from app.constants import CAIP10, Web +from app.resources.daodao import fetch_juno_daos, fetch_osmosis_daos, fetch_stargaze_daos main = Flask('DAOstar API') api = Api(main) @@ -25,6 +26,19 @@ def landing_page(): @main.route('/chains') def get_chains(): return CAIP10.valid_chain_ids +# New routes to fetch DAODAO DAO's securly +@main.route('/fetch_juno_daos', methods=['GET']) +def get_juno_daos(): + return fetch_juno_daos() + +@main.route('/fetch_osmosis_daos', methods=['GET']) +def get_osmosis_daos(): + return fetch_osmosis_daos() + +@main.route('/fetch_stargaze_daos', methods=['GET']) +def get_stargaze_daos(): + return fetch_stargaze_daos() + api.add_resource(CreateMutableSchema, '/mutable', '/mutable/') api.add_resource(InteractMutableSchema, '/mutable/') diff --git a/app/constants/__init__.py b/app/constants/__init__.py index 2a95d53..fcf5836 100644 --- a/app/constants/__init__.py +++ b/app/constants/__init__.py @@ -26,6 +26,15 @@ class Pinata: API_KEY = os.getenv('PINATA_API_KEY') SECRET_API_KEY = os.getenv('PINATA_SECRET_API_KEY') +class DaoDao: + JUNO_URL = 'https://search.daodao.zone/indexes/daos/documents', + OSMOSIS_URL = 'https://search.daodao.zone/indexes/osmosis_daos/documents', + STARGAZE_URL = 'https://search.daodao.zone/indexes/stargaze_daos/search?filter=value.config.name%20EXISTS', + API_KEY = os.getenv('DAODAO_API_KEY') + SEARCH_API_KEY = os.getenv('DAODAO_SEARCH_API_KEY') + + + class Alchemy: MAINNET_BASE_URL = 'https://eth-mainnet.g.alchemy.com/v2/' RINKEBY_BASE_URL = 'https://eth-rinkeby.alchemyapi.io/v2/' diff --git a/app/resources/__init__.py b/app/resources/__init__.py index eda725e..3ff7674 100644 --- a/app/resources/__init__.py +++ b/app/resources/__init__.py @@ -1,3 +1,4 @@ from app.resources.mutable import CreateMutableSchema, InteractMutableSchema from app.resources.immutable import CreateImmutableSchema, ViewImmutableSchema -from app.resources.resolve import ResolveSchema \ No newline at end of file +from app.resources.resolve import ResolveSchema +from app.resources.daodao import fetch_juno_daos, fetch_osmosis_daos, fetch_stargaze_daos \ No newline at end of file diff --git a/app/resources/daodao.py b/app/resources/daodao.py new file mode 100644 index 0000000..be18e20 --- /dev/null +++ b/app/resources/daodao.py @@ -0,0 +1,35 @@ +from flask import Flask, jsonify, request +from app.constants import DaoDao +import requests + +def fetch_juno_daos(): + limit = request.args.get('limit', '500') # Default limit to 500 if not specified + url = f"{DaoDao.JUNO_URL}?limit={limit}" + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {DaoDao.API_KEY}" + } + response = requests.get(url, headers=headers) + return jsonify(response.json()), response.status_code + +def fetch_osmosis_daos(): + limit = request.args.get('limit', '500') # Default limit to 500 if not specified + url = f"{DaoDao.OSMOSIS_URL}?limit={limit}" + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {DaoDao.API_KEY}" + } + response = requests.get(url, headers=headers) + return jsonify(response.json()), response.status_code + +def fetch_stargaze_daos(): + limit = request.args.get('limit', '500') # Default limit to 500 if not specified + url = f"{DaoDao.STARGAZE_URL}&limit={limit}" + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {DaoDao.SEARCH_API_KEY}" + } + response = requests.get(url, headers=headers) + return jsonify(response.json()), response.status_code + +