-
-
Save ycombinator/2cc1dda6d81f98e7ebdc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/givemeaserver.py b/givemeaserver.py | |
old mode 100644 | |
new mode 100755 | |
diff --git a/iwantaserver/__init__.py b/iwantaserver/__init__.py | |
index ced0731..e7e867e 100644 | |
--- a/iwantaserver/__init__.py | |
+++ b/iwantaserver/__init__.py | |
@@ -55,59 +55,49 @@ class Server(db.Model): | |
self.password = password | |
self.event_id = event_id | |
+@app.route("/", methods=["GET"]) | |
+def show_index(): | |
+ return render_template("index.html") | |
-@app.route("/event", methods=["GET", "POST"]) | |
-def show_event(): | |
- event_name = request.args.get("event", None) | |
- event = Event.query.filter(Event.name.is_(event_name)).scalar() | |
- error = "" | |
+@app.route("/server", methods=["POST"]) | |
+def show_server(): | |
+ | |
+ event_name = request.form["event"] | |
+ email_addr = request.form["email"] | |
+ # Check that event exists | |
+ event = Event.query.filter(Event.name.is_(event_name)).scalar() | |
if not event: | |
return render_template("oops.html", | |
error="Sorry, I've never heard of %s" % event_name) | |
- # If we're coming in from a post, claim that server and mark it as | |
- # no longer available. Then spin up a new one. | |
- if request.method == "POST": | |
- server = Server.query.filter( | |
- Server.event_id.is_(event.id)).filter( | |
- Server.ip.is_(request.form["ip"])).filter( | |
- Server.available.is_(True)).scalar() | |
- if server is None: | |
- error = "Oops, someone claimed this one. Here, have another." | |
- else: | |
- server.available = False | |
- server.email = request.form["email"] | |
- db.session.add(server) | |
- db.session.commit() | |
- | |
- Popen(["givemeaserver.py", | |
- "--image", event.image_id, | |
- "--size", event.size_id, "--num", "1", | |
- "--event", str(event.id)]) | |
- | |
+ # Claim a random available server for this user (email) | |
servers = Server.query.filter( | |
Server.event_id.is_(event.id)).filter( | |
Server.available.is_(True)).all() | |
+ | |
if not servers: | |
error = ("There are no servers available right now. " | |
- "Go check with the Rackspace table and they'll help you out.") | |
+ "Go check with the Rackspace table and they'll help you out.") | |
return render_template("oops.html", error=error) | |
+ | |
server = random.choice(servers) | |
+ server.available = False | |
+ server.email = email_addr | |
+ db.session.add(server) | |
+ db.session.commit() | |
+ | |
+ # Spin up a new server | |
+ Popen(["givemeaserver.py", | |
+ "--image", event.image_id, | |
+ "--size", event.size_id, "--num", "1", | |
+ "--event", str(event.id)]) | |
+ | |
+ # Show server details | |
return render_template("event.html", error=error, name=event.name, | |
image=event.image_name, size=event.size_name, | |
ip=server.ip, password=server.password) | |
- | |
-@app.route("/", methods=["GET", "POST"]) | |
-def get_event(): | |
- if request.method == "POST": | |
- event = request.form["event"] | |
- return redirect(url_for("show_event", event=event)) | |
- else: | |
- return render_template("index.html") | |
- | |
- | |
if __name__ == "__main__": | |
if len(sys.argv) > 1 and sys.argv[1] == "init": | |
if not os.path.exists(os.path.join(os.getcwd(), "data")): | |
diff --git a/iwantaserver/data/iwantaserver.db b/iwantaserver/data/iwantaserver.db | |
index d19c512..25bc678 100644 | |
Binary files a/iwantaserver/data/iwantaserver.db and b/iwantaserver/data/iwantaserver.db differ | |
diff --git a/iwantaserver/templates/index.html b/iwantaserver/templates/index.html | |
index a01cf75..35faffb 100644 | |
--- a/iwantaserver/templates/index.html | |
+++ b/iwantaserver/templates/index.html | |
@@ -22,10 +22,13 @@ | |
<img src="static/happy_server.png" class="center-block" /> | |
<h1 class="text-center">Build your project with free servers from Rackspace!</h1> | |
- <form class="form-signin" role="form"> | |
+ <form class="form-signin" role="form" action="/server"> | |
<div class="form-group"> | |
<input type="text" class="form-control" name="event" placeholder="event" required> | |
</div> | |
+ <div class="form-group"> | |
+ <input type="text" class="form-control" name="email" placeholder="me@example.com" required> | |
+ </div> | |
<div class="form-group"> | |
<button formmethod="post" class="btn btn-lg btn-primary btn-block" type="submit">show me the servers!</button> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment