Skip to content

Instantly share code, notes, and snippets.

@ycombinator
Created October 27, 2014 02:59
Show Gist options
  • Save ycombinator/2cc1dda6d81f98e7ebdc to your computer and use it in GitHub Desktop.
Save ycombinator/2cc1dda6d81f98e7ebdc to your computer and use it in GitHub Desktop.
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