Distributed and decentralized pi calculation
at main 107 lines 3.7 kB view raw
1from flask import request, Flask # requires flask! please download before running :) 2from flask import render_template 3from dotenv import load_dotenv 4import os 5global pilen 6global pilength 7app = Flask(__name__) 8load_dotenv() 9name = os.getenv("NAME") 10email = os.getenv("EMAIL") 11multi = int(os.getenv("MULTI")) 12atEmail = email.replace("@", " at ") 13safeEmail = atEmail.replace(".", " dot ") 14@app.route('/api/getpi') 15def getpi(): 16 if request.method == 'GET': 17 try: 18 f = open("picalc/pi.txt", "r") 19 return f.read() 20 except: 21 return "picalc/pi.txt wasn't found! Contact " + name + " at " + email + " if this persists." 22 else: 23 return "Invaild method! /getpi is designed for GET requests, not " + request.method 24 25@app.route('/api/postpi', methods=['POST', 'GET']) 26def postpi(): 27 f = open("picalc/pi.txt", "r") 28 checkCorrectly = 3.14 * multi 29 if request.form['pi']: 30 if f.read() == "No clients have connected yet. Become one of the first!": 31 if request.form['pi'].startswith(str(checkCorrectly)) == True: 32 with open("picalc/pi.txt", "w") as f: 33 f.write(request.form['pi']) 34 else: 35 return "Invalid string!" 36 else: 37 if request.form['pi'].startswith(f.read()) == True: 38 with open("picalc/pi.txt", "w") as f: 39 f.write(request.form['pi']) 40 else: 41 return "Invalid string!" 42 else: 43 return "Request not found!" 44 45@app.route('/') 46def lander(): 47 try: 48 f = open("picalc/pi.txt", "r") 49 piresult = f.read() 50 if piresult == "No clients have connected yet. Become one of the first!": 51 piresult = "No clients have connected. Become one of the first!" 52 else: 53 try: 54 pilength = len(str(piresult)) 55 print(pilength) 56 pilen = "Current Pi length is " + str(pilength) + " digits!" 57 except: 58 pilen = "Current Pi length couldn't be calculated!" 59 piresult = "Current Pi count is " + piresult 60 except: 61 piresult = "picalc/pi.txt wasn't found on this server! It will be created now to fix this issue." 62 try: 63 with open("picalc/pi.txt", "w") as f: 64 f.write("No clients have connected yet. Become one of the first!") 65 except: 66 piresult = f"Couldn't create pi.txt! Please contact {name} at {safeEmail} to fix this!" 67 if request.method == 'GET': 68 ver = open("ver.txt", "r") 69 version = ver.read() 70 return render_template('index.html', pi=piresult, name=name, email=safeEmail, version=version, pilen="Current Pi length is " + str(pilength), multi=str(multi)) 71 else: 72 return "Please use GET to access this page." 73 74@app.route('/api/getlen') 75def getlen(): 76 f = open("picalc/pi.txt", "r") 77 piresult = f.read() 78 if not piresult == "No clients have connected yet. Become one of the first!": 79 pilength = len(str(piresult)) 80 return str(pilength) 81 else: 82 return "Length cannot be calculated due to Pi not being calculated yet." 83 84@app.route('/api/getver') 85def getver(): 86 try: 87 f = open("ver.txt", "r") 88 version = f.read() 89 return version 90 except: 91 return "ver.txt not found on server" 92 93@app.route('/api/getname') 94def getname(): 95 return name 96 97@app.route('/api/getemail') 98def getemail(): 99 return safeEmail 100 101@app.route('/api/getmultiplier') 102def getMultiply(): 103 return str(multi) 104 105@app.errorhandler(404) 106def page_not_found(error): 107 return render_template('404.html'), 404