Spaces:
Sleeping
Sleeping
| import flask # for the UI and API | |
| import time # for rate limiting | |
| import json # for listing, CORRECTLY | |
| app = flask.Flask(__name__) | |
| # woah, VS, it's python, not whatever that down arrow is | |
| vars = {} # a dictionary of variables | |
| ips = {} # a dictionary of IPs and the last time they made a request | |
| # get a variable | |
| def get(var): | |
| try: | |
| global ips | |
| ips[flask.request.remote_addr] = time.time() | |
| global vars | |
| return vars[var] | |
| except Exception as e: | |
| return str(e), 404 # we all know this means "not found" | |
| # set a variable | |
| def set(var, val): | |
| try: | |
| global ips | |
| ips[flask.request.remote_addr] = time.time() | |
| global vars | |
| vars[var] = val | |
| return vars[var] # return the value of the variable, just in case it fails | |
| except Exception as e: | |
| return str(e), 404 | |
| # delete a variable, making it return 404 | |
| def delete(var): | |
| try: | |
| global vars | |
| del vars[var] | |
| global ips | |
| ip = flask.request.remote_addr | |
| if ip not in ips: | |
| ips[ip] = 0 | |
| if time.time() - ips[ip] < 0.1: | |
| time.sleep(1) # rate limiting (10 requests per second, but lower if you're exceeding it) | |
| # should you use a scratch project and port it, you should be fine so long as you abide by their rate limits | |
| # otherwise, this is significantly more strict, it's kind of just a "don't wipe the database" thing | |
| return vars[var], 429 # too many requests, but also success | |
| return vars[var] | |
| except Exception as e: | |
| return str(e), 404 | |
| # list all variables | |
| def list(): | |
| # this uses ACTUAL JSON | |
| # NOT the fake json used by joecooldo | |
| # (he makes a cool library) | |
| # "error: json does not allow single quotes (')" | |
| global vars | |
| return json.dumps(vars) | |
| # list ips | |
| def listips(): | |
| global ips | |
| return json.dumps(ips) | |
| # run the app | |
| app.run(port=7860) |