Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -15,7 +15,7 @@ logging.basicConfig(level=logging.DEBUG)
|
|
| 15 |
|
| 16 |
# Set up rate limiter
|
| 17 |
limiter = Limiter(
|
| 18 |
-
get_remote_address,
|
| 19 |
app=app,
|
| 20 |
default_limits=["5 per minute"],
|
| 21 |
storage_uri="memory://"
|
|
@@ -119,11 +119,17 @@ html_template = """
|
|
| 119 |
input[type="submit"]:hover, #regenerate:hover {
|
| 120 |
background-color: #2980b9;
|
| 121 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
</style>
|
| 123 |
</head>
|
| 124 |
<body>
|
| 125 |
<h1>Silly Detention Letter Generator</h1>
|
| 126 |
<div id="letter"></div>
|
|
|
|
| 127 |
<button id="regenerate" style="display: none;" onclick="regenerateLetter()">Regenerate Letter</button>
|
| 128 |
<form id="letterForm" onsubmit="generateLetter(event)">
|
| 129 |
<input type="text" name="parent_name" placeholder="Parent's Name" required>
|
|
@@ -145,11 +151,18 @@ html_template = """
|
|
| 145 |
method: 'POST',
|
| 146 |
body: formData
|
| 147 |
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
.then(response => {
|
| 149 |
const reader = response.body.getReader();
|
| 150 |
const decoder = new TextDecoder();
|
| 151 |
const letterDiv = document.getElementById('letter');
|
| 152 |
letterDiv.innerHTML = '';
|
|
|
|
| 153 |
|
| 154 |
function read() {
|
| 155 |
reader.read().then(({ done, value }) => {
|
|
@@ -164,6 +177,9 @@ html_template = """
|
|
| 164 |
}
|
| 165 |
|
| 166 |
read();
|
|
|
|
|
|
|
|
|
|
| 167 |
});
|
| 168 |
}
|
| 169 |
|
|
@@ -181,7 +197,7 @@ def home():
|
|
| 181 |
return render_template_string(html_template)
|
| 182 |
|
| 183 |
@app.route("/generate", methods=["POST"])
|
| 184 |
-
@limiter.limit("5
|
| 185 |
def generate():
|
| 186 |
parent_name = request.form["parent_name"]
|
| 187 |
child_name = request.form["child_name"]
|
|
|
|
| 15 |
|
| 16 |
# Set up rate limiter
|
| 17 |
limiter = Limiter(
|
| 18 |
+
key_func=get_remote_address,
|
| 19 |
app=app,
|
| 20 |
default_limits=["5 per minute"],
|
| 21 |
storage_uri="memory://"
|
|
|
|
| 119 |
input[type="submit"]:hover, #regenerate:hover {
|
| 120 |
background-color: #2980b9;
|
| 121 |
}
|
| 122 |
+
#error-message {
|
| 123 |
+
color: red;
|
| 124 |
+
text-align: center;
|
| 125 |
+
margin-top: 10px;
|
| 126 |
+
}
|
| 127 |
</style>
|
| 128 |
</head>
|
| 129 |
<body>
|
| 130 |
<h1>Silly Detention Letter Generator</h1>
|
| 131 |
<div id="letter"></div>
|
| 132 |
+
<div id="error-message"></div>
|
| 133 |
<button id="regenerate" style="display: none;" onclick="regenerateLetter()">Regenerate Letter</button>
|
| 134 |
<form id="letterForm" onsubmit="generateLetter(event)">
|
| 135 |
<input type="text" name="parent_name" placeholder="Parent's Name" required>
|
|
|
|
| 151 |
method: 'POST',
|
| 152 |
body: formData
|
| 153 |
})
|
| 154 |
+
.then(response => {
|
| 155 |
+
if (!response.ok) {
|
| 156 |
+
throw new Error('Slow down. Please wait 1 minute before generating another letter.');
|
| 157 |
+
}
|
| 158 |
+
return response;
|
| 159 |
+
})
|
| 160 |
.then(response => {
|
| 161 |
const reader = response.body.getReader();
|
| 162 |
const decoder = new TextDecoder();
|
| 163 |
const letterDiv = document.getElementById('letter');
|
| 164 |
letterDiv.innerHTML = '';
|
| 165 |
+
document.getElementById('error-message').textContent = '';
|
| 166 |
|
| 167 |
function read() {
|
| 168 |
reader.read().then(({ done, value }) => {
|
|
|
|
| 177 |
}
|
| 178 |
|
| 179 |
read();
|
| 180 |
+
})
|
| 181 |
+
.catch(error => {
|
| 182 |
+
document.getElementById('error-message').textContent = error.message;
|
| 183 |
});
|
| 184 |
}
|
| 185 |
|
|
|
|
| 197 |
return render_template_string(html_template)
|
| 198 |
|
| 199 |
@app.route("/generate", methods=["POST"])
|
| 200 |
+
@limiter.limit("5 per minute")
|
| 201 |
def generate():
|
| 202 |
parent_name = request.form["parent_name"]
|
| 203 |
child_name = request.form["child_name"]
|