11"""
22main entry point for example framelib flask app
33"""
4- import json
5- import time
6- from flask import Flask , render_template , url_for , request , make_response , jsonify
7- from framelib .models import FrameMessage
4+ import os
5+ from flask import Flask , url_for , jsonify
6+ from framelib import render_frame , message , validate_message_or_mock_vercel
87
98app = Flask (__name__ )
109
1110
12- class BadRequest (Exception ):
13- pass
14-
15-
16- @app .errorhandler (BadRequest )
11+ @app .errorhandler (ValueError )
1712def handle_invalid_usage (e ):
1813 response = jsonify ({'status_code' : 403 , 'message' : str (e )})
1914 response .status_code = 403
@@ -22,9 +17,34 @@ def handle_invalid_usage(e):
2217
2318@app .route ('/' , methods = ['GET' , 'POST' ])
2419def home ():
25- return jsonify ({'status_code' : 200 , 'message' : 'hello world' })
20+ # initial frame
21+ return render_frame (
22+ image = 'https://opengraph.githubassets.com/0x/devinaconley/python-frames' ,
23+ button1 = 'hello \U0001F44B ' ,
24+ post_url = url_for ('second_page' , _external = True ),
25+ button2 = 'github' ,
26+ button2_action = 'link' ,
27+ button2_target = 'https://github.com/devinaconley/python-frames'
28+ )
2629
2730
2831@app .route ('/page2' , methods = ['POST' ])
2932def second_page ():
30- return jsonify ({'status_code' : 200 , 'message' : 'hello world, page 2' })
33+ # parse frame message
34+ msg = message ()
35+ print (f'received frame message, fid: { msg .untrustedData .fid } , button: { msg .untrustedData .buttonIndex } ' )
36+
37+ # validate frame message with neynar
38+ api_key = os .getenv ('NEYNAR_KEY' )
39+ msg_val = validate_message_or_mock_vercel (msg , api_key )
40+ print (f'validated frame message, fid: { msg_val .interactor .fid } , button: { msg_val .tapped_button } ' )
41+
42+ return render_frame (
43+ image = 'https://opengraph.githubassets.com/0x/devinaconley/python-frames' ,
44+ button1 = 'back \U0001F519 ' ,
45+ post_url = url_for ('home' , _external = True ),
46+ input_text = f'hello { msg_val .interactor .username } !' ,
47+ button2 = 'github' ,
48+ button2_action = 'link' ,
49+ button2_target = 'https://github.com/devinaconley/python-frames'
50+ )
0 commit comments