def post(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/key")) return account = Membership.all().filter("username ="******"@")[0]).get() if not account or not account.spreedly_token or account.status != "active": message = "Error #1982, which should never happen." internal = True self.response.out.write(self.render("templates/error.html", locals())) return is_park = self.request.get("ispark") if is_park == "True": # checks if user input is a parking pass number or an rfid number pass_to_add = self.request.get("parking_pass") try: # tests if there are only numbers in the parking pass float(pass_to_add) except ValueError: message = '<p>A Parking Pass may only contain numbers.</p><a href="/key">Try Again</a>' internal = False self.response.out.write(self.render("templates/error.html", locals())) return account.parking_pass = pass_to_add logging.debug("Setting parking pass for %s to %s." % (account.full_name(), account.parking_pass)) db.put(account) self.response.out.write(self.render("templates/pass_ok.html", locals())) # outputs the parking number else: rfid_tag = self.request.get("rfid_tag").strip() description = self.request.get("description").strip() if rfid_tag.isdigit(): if Membership.all().filter("rfid_tag =", rfid_tag).get(): message = "<p>That RFID tag is in use by someone else.</p>" internal = False self.response.out.write(self.render("templates/error.html", locals())) return if not description: message = "<p>Please enter a reason why you are associating a replacement RFID key. Please hit BACK and try again.</p>" internal = False self.response.out.write(self.render("templates/error.html", locals())) return account.rfid_tag = rfid_tag logging.debug("Setting RFID for %s to %s." % (account.full_name(), account.rfid_tag)) account.put() bc = BadgeChange(rfid_tag=rfid_tag, username=account.username, description=description) bc.put() self.response.out.write(self.render("templates/key_ok.html", locals())) return else: message = "<p>That RFID ID seemed invalid. Hit back and try again.</p>" internal = False self.response.out.write(self.render("templates/error.html", locals())) return
def get(self): signup_users = Membership.all().fetch(10000) signup_users = sorted(signup_users, key=lambda user: user.last_name.lower()) user_keys = [str(user.key()) for user in signup_users] user_ids = [user.key().id() for user in signup_users] self.response.out.write(self.render("templates/users.html", locals()))
def post(self): countdown = 0 for membership in Membership.all().filter('status =', None): if (datetime.now().date() - membership.created.date()).days > 1: countdown += 90 self.response.out.write("bye "+membership.email+ " ") taskqueue.add(url='/tasks/clean_row', params={'user': membership.key().id()}, countdown=countdown)
def post(self): if Config().is_dev: # Only allow this if it's the dev server. entry = self.request.body logging.debug("Got new entry: " + entry) entry = json.loads(entry) # Change formatted date back into datetime. for key in entry.keys(): if type(getattr(Membership, key)) == db.DateTimeProperty: if not entry[key]: # It could be None as well. continue entry[key] = pickle.loads(str(entry[key])) # entry should have everything nicely in a dict... member = Membership(**entry) # Is this an update or a new model? match = Membership.all().filter("email =", member.email).get() if match: # Replace the old one. logging.debug("Found entry with same username. Replacing...") db.delete(match) member.put() logging.debug("Put entry in datastore.")
def post(self): countdown = 0 for membership in Membership.all().filter('status =', "suspended"): if not membership.unsubscribe_reason and membership.spreedly_token and "Deleted" not in membership.last_name and membership.extra_dnd != True: countdown += 1200 # One e-mail every 20 min = 72 e-mails a day (100 is free appengine limit) self.response.out.write("Are you still there "+membership.email+ "?<br/>") taskqueue.add(url='/tasks/areyoustillthere_mail', params={'user': membership.key().id()}, countdown=countdown)
def get(self): countdown = 0 for membership in Membership.all().filter("status =", None): if (datetime.datetime.now().date() - membership.created.date()).days > 1: countdown += 90 self.response.out.write("bye %s " % (membership.email)) taskqueue.add(url="/tasks/clean_row", params={"user": membership.key().id()}, countdown=countdown)
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/joinreasonlist")) if users.is_current_user_admin(): all_users = Membership.all().order("created").fetch(10000) self.response.out.write(self.render("templates/joinreasonlist.html", locals())) else: self.response.out.write("Need admin access")
def post(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/key')) return account = Membership.all().filter('username ='******'templates/error.html', locals())) return is_park = self.request.get('ispark') if is_park == "True": #checks if user input is a parking pass number or an rfid number pass_to_add = self.request.get('parking_pass') try: #tests if there are only numbers in the parking pass float(pass_to_add) except ValueError: error = "<p>A Parking Pass may only contain numbers.</p><a href=\"/key\">Try Again</a>" self.response.out.write(render('templates/error.html', locals())) return account.parking_pass = pass_to_add db.put(account) self.response.out.write(render('templates/pass_ok.html', locals())) #outputs the parking number else: rfid_tag = self.request.get('rfid_tag').strip() description = self.request.get('description').strip() if rfid_tag.isdigit(): if Membership.all().filter('rfid_tag =', rfid_tag).get(): error = "<p>That RFID tag is in use by someone else.</p>" self.response.out.write(render('templates/error.html', locals())) return if not description: error = "<p>Please enter a reason why you are associating a replacement RFID key. Please hit BACK and try again.</p>" self.response.out.write(render('templates/error.html', locals())) return account.rfid_tag = rfid_tag account.put() bc = BadgeChange(rfid_tag = rfid_tag, username=account.username, description=description) bc.put() self.response.out.write(render('templates/key_ok.html', locals())) return else: error = "<p>That RFID ID seemed invalid. Hit back and try again.</p>" self.response.out.write(render('templates/error.html', locals())) return
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/profile')) return else: account = Membership.all().filter('username ='******'%s@%s' % (account.username, APPS_DOMAIN) gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest() self.response.out.write(render('templates/profile.html', locals()))
def __batch_loop(self, cursor = None, *args, **kwargs): cursor = cursor while True: if (args == () and kwargs == {}): query = Membership.all() else: query = Membership.all().filter(*args, **kwargs) query.with_cursor(start_cursor = cursor) members = query.fetch(self.batch_size) if len(members) == 0: break for member in members: member = self.__strip_sensitive(member) self.__post_member(member) cursor = query.cursor() run_info = SyncRunInfo.all().get() run_info.cursor = cursor run_info.put()
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/userlist")) if users.is_current_user_admin(): signup_users = Membership.all().fetch(10000) signup_users = sorted(signup_users, key=lambda user: user.last_name.lower()) user_keys = [str(user.key()) for user in signup_users] user_ids = [user.key().id() for user in signup_users] self.response.out.write(self.render("templates/users.html", locals())) else: self.response.out.write("Need admin access")
def get(self): countdown = 0 for membership in Membership.all().filter("status =", "suspended"): if (not membership.unsubscribe_reason and membership.spreedly_token \ and "Deleted" not in membership.last_name and \ membership.extra_dnd != True): # One e-mail every 90 seconds = 960 e-mails a day. countdown += 90 self.response.out.write("Are you still there %s ?<br/>" % \ (membership.email)) taskqueue.add(url="/tasks/areyoustillthere_mail", params={"user": membership.key().id()}, countdown=countdown)
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/debug_users')) if users.is_current_user_admin(): if not self.request.get("from"): all_users = Membership.all() x = all_users.count() self.response.out.write("There are ") self.response.out.write(x) self.response.out.write(" user records. Use GET params 'from' and 'to' to analyze.") else: fr = self.request.get("from") to = self.request.get("to") for i in range(int(fr),int(to)): a = Membership.all().fetch(1,i)[0] self.response.out.write("<p>") self.response.out.write(a.key().id()) self.response.out.write(" - ") self.response.out.write(a.username) else: self.response.out.write("Need admin access")
def get(self): if self.request.get("id"): m = Membership.all().filter("rfid_tag ==", self.request.get("id")).filter("status =", "active").get() if self.request.get("callback"): # jsonp callback support self.response.out.write(self.request.get("callback")+"("); if m: email = "%s@%s" % (m.username, Config().APPS_DOMAIN) gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest() self.response.out.write(json.dumps({"gravatar": gravatar_url,"auto_signin":m.auto_signin, "status" : m.status, "name" : m.first_name + " " + m.last_name, "rfid_tag" : m.rfid_tag, "username" : m.username })) else: self.response.out.write(json.dumps({})) if self.request.get("callback"): self.response.out.write(")"); else: if self.request.get("maglock:key") == keymaster.get("maglock:key"): if self.request.get("machine"): members = Membership.all().filter("rfid_tag !=", None).filter("status =", "active").filter("extra_"+self.request.get("machine")+" =","True") else: members = Membership.all().filter("rfid_tag !=", None).filter("status =", "active") self.response.out.write(json.dumps([ {"rfid_tag" : m.rfid_tag, "username" : m.username } for m in members])) else: self.response.out.write("Access denied")
def get(self): user = users.get_current_user() conf = Config() message = escape(self.request.get("message")) if not user: self.redirect(users.create_login_url("/key")) return else: account = Membership.all().filter("username ="******"@")[0]).get() if not account or not account.spreedly_token: message = """<p>It appears that you have an account on @%(domain)s, but you do not have a corresponding account in the signup application.</p> <p>How to remedy:</p> <ol><li>If you <b>are not</b> in the Spreedly system yet, <a href=\"/\">sign up</a> now.</li> <li>If you <b>are</b> in Spreedly already, please contact <a href=\"mailto:%(signup_email)s?Subject=Spreedly+account+not+linked+to+account\">%(signup_email)s</a>.</li></ol> <pre>Nick: %(nick)s</pre> <pre>Email: %(email)s</pre> <pre>Account: %(account)s</pre> """ % {"domain": conf.APPS_DOMAIN, "signup_email": conf.SIGNUP_HELP_EMAIL, "nick": user.nickname().split("@")[0], "email": user.email(), "account": account} if account: message += "<pre>Token: %s</pre>" % account.spreedly_token internal = False self.response.out.write(self.render("templates/error.html", locals())) return if account.status != "active": url = "https://spreedly.com/"+conf.SPREEDLY_ACCOUNT+"/subscriber_accounts/" + account.spreedly_token message = """<p>Your Spreedly account status does not appear to me marked as active. This might be a mistake, in which case we apologize. </p> <p>To investigate your account, you may go here: <a href=\"%(url)s\">%(url)s</a> </p> <p>If you believe this message is in error, please contact <a href=\"mailto:%(signup_email)s?Subject=Spreedly+account+not+linked+to+account\">%(signup_email)s</a></p> """ % {"url": url, "signup_email": conf.SIGNUP_HELP_EMAIL} internal = False self.response.out.write(self.render("templates/error.html", locals())) return delta = datetime.datetime.utcnow() - account.created if delta.days < conf.DAYS_FOR_KEY: message = """<p>You have been a member for %(deltadays)s days. After %(days)s days you qualify for a key. Check back in %(delta)s days!</p> <p>If you believe this message is in error, please contact <a href=\"mailto:%(signup_email)s?Subject=Membership+create+date+not+correct\">%(signup_email)s</a>.</p> """ % {"deltadays": delta.days, "days": conf.DAYS_FOR_KEY, "delta": conf.DAYS_FOR_KEY - delta.days, "signup_email": SIGNUP_HELP_EMAIL} internal = False self.response.out.write(self.render("templates/error.html", locals())) return bc = BadgeChange.all().filter("username ="******"templates/key.html", locals()))
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/api/gettwitter")) if users.is_current_user_admin(): need_twitter_users = Membership.all().filter("status =", "active").fetch(10000) countdown = 0 for u in need_twitter_users: if u.username and not u.twitter: self.response.out.write(u.username) taskqueue.add(url="/tasks/twitter_mail", params={"user": u.key().id()}, countdown=countdown) countdown += 1 else: self.response.out.write("Need admin access")
def post(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/pref')) return account = Membership.all().filter('username ='******'templates/error.html', locals())) return auto_signin = self.request.get('auto').strip() account.auto_signin = auto_signin account.put() self.response.out.write(render('templates/prefsaved.html', locals()))
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/hardshiplist')) if users.is_current_user_admin(): active_users = Membership.all().filter('status =', 'active').filter('plan =', 'hardship').fetch(10000) active_users = sorted(active_users, key=lambda user: user.created) subject = "About your Hacker Dojo membership" body1 = "\n\nWe hope you have enjoyed your discounted membership at Hacker Dojo. As you\nknow, we created the hardship program to give temporary financial support to help\nmembers get started at the Dojo. Our records show you began the program\non " body2 = ", and we hope you feel that you have benefited.\n\nBeginning with your next month's term, we ask that you please sign up at\nour regular rate:\n" body3 = "\n\nThank you for supporting the Dojo!" self.response.out.write(render('templates/hardship.html', locals())) else: self.response.out.write("Need admin access")
def get(self): active_users = Membership.all().filter("status =", "active").filter("plan =", "hardship").fetch(10000) active_users = sorted(active_users, key=lambda user: user.created) subject = "About your Hacker Dojo membership" body1 = "\n\nWe hope you have enjoyed your discounted membership at \ Hacker Dojo. As you\nknow, we created the hardship program \ to give temporary financial support to help\nmembers get \ started at the Dojo. Our records show you began the program\n \ on" body2 = ", and we hope you feel that you have benefited.\n\nBeginning \ with your next month's term, we ask that you please sign up \ at\nour regular rate:\n" body3 = "\n\nThank you for supporting the Dojo!" self.response.out.write(self.render("templates/hardship.html", locals()))
def post(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/pref")) return account = Membership.all().filter("username ="******"@")[0]).get() if not account: message = "Error #1983, which should never happen." internal = True self.response.out.write(self.render("templates/error.html", locals())) return auto_signin = self.request.get("auto").strip() account.auto_signin = auto_signin account.put() self.response.out.write(self.render("templates/prefsaved.html", locals()))
def post(self): email = self.request.get("email").lower() if not email: self.redirect(str(self.request.path)) else: member = Membership.all().filter("email =", email).filter("status =", "active").get() if not member: self.redirect(str(self.request.path + "?message=There is no active record of that email.")) else: mail.send_mail(sender=Config().EMAIL_FROM, to="%s <%s>" % (member.full_name(), member.email), subject="Create your Hacker Dojo account", body="""Hello,\n\nHere"s a link to create your Hacker Dojo account:\n\nhttp://%s/account/%s""" % (self.request.host, member.hash)) sent = True self.response.out.write(self.render("templates/needaccount.html", locals()))
def get(self): suspended_users = ( Membership.all().filter("status =", "suspended").filter("last_name !=", "Deleted").fetch(10000) ) tokened_users = [] for user in suspended_users: if user.spreedly_token: tokened_users.append(user) suspended_users = sorted(tokened_users, key=lambda user: user.last_name.lower()) total = len(suspended_users) reasonable = 0 for user in suspended_users: if user.unsubscribe_reason: reasonable += 1 self.response.out.write(self.render("templates/suspended.html", locals()))
def get(self): user = users.get_current_user() c = Config() account = Membership.all().filter('username ='******'/modify')) return else: if not account or not account.spreedly_token: error = """<p>Sorry, your %(name)s account does not appear to be linked to a Spreedly account. Please contact <a href=\"mailto:%(treasurer)s\">%(treasurer)s</a> so they can manually update your account. """ % {'treasurer': TREASURER_EMAIL, 'name': ORG_NAME} self.response.out.write(render('templates/error.html', locals())) return url = "https://spreedly.com/"+c.SPREEDLY_ACCOUNT+"/subscriber_accounts/"+account.spreedly_token self.redirect(str(url))
def get(self): self.response.headers["Content-type"] = "text/csv; charset=utf-8" self.response.headers["Content-disposition"] = "attachment;filename=HackerDojoMembers.csv" if keymaster.get("csvkey") == self.request.get("csvkey"): users = Membership.all().filter("status =", "active").filter("username !=", "").fetch(10000) for u in users: twitter = "" if u.twitter: twitter = u.twitter first = "" if u.first_name: first = u.first_name last = "" if u.last_name: last = u.last_name if u.username: self.response.out.write(first+","+last+","+u.username+"@hackerdojo.com,"+twitter+"\r\n")
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/pref')) return else: account = Membership.all().filter('username ='******'t find your account.</p>" error += "<pre>Nick: "+str(user.nickname().split("@")[0]) error += "<pre>Email: "+str(user.email()) error += "<pre>Account: "+str(account) if account: error += "<pre>Token: "+str(account.spreedly_token) self.response.out.write(render('templates/error.html', locals())) return auto_signin = account.auto_signin self.response.out.write(render('templates/pref.html', locals()))
def get(self): active_users = Membership.all().filter("status =", "active").filter( "plan =", "hardship").fetch(10000) active_users = sorted(active_users, key=lambda user: user.created) subject = "About your Hacker Dojo membership" body1 = "\n\nWe hope you have enjoyed your discounted membership at \ Hacker Dojo. As you\nknow, we created the hardship program \ to give temporary financial support to help\nmembers get \ started at the Dojo. Our records show you began the program\n \ on" body2 = ", and we hope you feel that you have benefited.\n\nBeginning \ with your next month's term, we ask that you please sign up \ at\nour regular rate:\n" body3 = "\n\nThank you for supporting the Dojo!" self.response.out.write( self.render("templates/hardship.html", locals()))
def get(self): suspended_users = Membership.all().filter("status =", "suspended").filter( "last_name !=", "Deleted").fetch(10000) tokened_users = [] for user in suspended_users: if user.spreedly_token: tokened_users.append(user) suspended_users = sorted(tokened_users, key=lambda user: user.last_name.lower()) total = len(suspended_users) reasonable = 0 for user in suspended_users: if user.unsubscribe_reason: reasonable += 1 self.response.out.write( self.render("templates/suspended.html", locals()))
def get(self): user = users.get_current_user() account = Membership.all().filter("username ="******"@")[0]).get() if not account: self.redirect(users.create_login_url("/modify")) return else: if not account or not account.spreedly_token: message = """<p>Sorry, your %(name)s account does not appear to be linked to a Spreedly account. Please contact <a href=\"mailto:%(treasurer)s\">%(treasurer)s</a> so they can manually update your account. """ % {"treasurer": TREASURER_EMAIL, "name": ORG_NAME} internal = False self.response.out.write(self.render("templates/error.html", locals())) return url = \ "https://spreedly.com/%s/subscriber_accounts/%s" % \ (Config().SPREEDLY_ACCOUNT, account.spreedly_token) self.redirect(str(url))
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/pref")) return else: account = Membership.all().filter("username ="******"@")[0]).get() if not account: message = "<p>Error - couldn't find your account.</p>" message += "<pre>Nick: "+str(user.nickname().split("@")[0]) message += "<pre>Email: "+str(user.email()) message += "<pre>Account: "+str(account) if account: message += "<pre>Token: "+str(account.spreedly_token) internal = False self.response.out.write(self.render("templates/error.html", locals())) return auto_signin = account.auto_signin self.response.out.write(self.render("templates/pref.html", locals()))
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/suspended")) if users.is_current_user_admin(): suspended_users = Membership.all().filter("status =", "suspended").filter("last_name !=", "Deleted").fetch(10000) tokened_users = [] for user in suspended_users: if user.spreedly_token: tokened_users.append(user) suspended_users = sorted(tokened_users, key=lambda user: user.last_name.lower()) total = len(suspended_users) reasonable = 0 for user in suspended_users: if user.unsubscribe_reason: reasonable += 1 self.response.out.write(self.render("templates/suspended.html", locals())) else: self.response.out.write("Need admin access")
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/api/setextra")) if users.is_current_user_admin(): user = Membership.all().filter("username ="******"username")).get() if user: v = self.request.get("value") if v=="True": v = True if v=="False": v = False user.__setattr__("extra_"+self.request.get("key"), v) user.put() self.response.out.write("OK") else: self.response.out.write("User not found") else: self.response.out.write("Need admin access")
def get(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/userlist')) if users.is_current_user_admin(): signup_users = Membership.all().fetch(10000) # active_users = Membership.all().filter('status =', 'active').fetch(10000) # signup_usernames = [m.username for m in signup_users] # domain_usernames = fetch_usernames() # signup_usernames = set(signup_usernames) - set([None]) # signup_usernames = [m.lower() for m in signup_usernames] # active_usernames = [m.username for m in active_users] # active_usernames = set(active_usernames) - set([None]) # active_usernames = [m.lower() for m in active_usernames] # users_not_on_domain = set(signup_usernames) - set(domain_usernames) # users_not_on_signup = set(domain_usernames) - set(active_usernames) signup_users = sorted(signup_users, key=lambda user: user.last_name.lower()) self.response.out.write(render('templates/users.html', locals())) else: self.response.out.write("Need admin access")
def post(self): email = self.request.get("email").lower() if not email: self.redirect(str(self.request.path)) else: member = Membership.all().filter("email =", email).filter( "status =", "active").get() if not member: self.redirect( str(self.request.path + "?message=There is no active record of that email.")) else: mail.send_mail( sender=Config().EMAIL_FROM, to="%s <%s>" % (member.full_name(), member.email), subject="Create your Hacker Dojo account", body= """Hello,\n\nHere"s a link to create your Hacker Dojo account:\n\nhttp://%s/account/%s""" % (self.request.host, member.hash)) sent = True self.response.out.write( self.render("templates/needaccount.html", locals()))
def get(self): if self.request.get("maglock:key") != keymaster.get("maglock:key"): self.response.out.write("Access denied") else: rfid_tag = self.request.get("rfid_tag") if rfid_tag: m = Membership.all().filter("rfid_tag ==", rfid_tag).get() if m: username = m.username if "active" in m.status: success = True else: success = False subject = "Reactivate your RFID key now - renew your Hacker Dojo Subscription!" body = """ Hi %s, It looks like you just tried using your RFID key to open the doors to Hacker Dojo. One teeny tiny issue, it looks like your membership has lapsed! This can happen by mistake sometimes, so no worries at all. The good news is you can reactivate your membership with only a few clicks: %s With warmest regards, The Lobby Door """ % (m.first_name,m.subscribe_url()) deferred.defer(mail.send_mail, sender="Maglock <*****@*****.**>", to=m.email, subject=subject, body=body, _queue="emailthrottle") else: username = "******"+rfid_tag+")" success = False rs = RFIDSwipe(username=username, rfid_tag=rfid_tag, success=success) rs.put() if "mark.hutsell" in username or "some.other.evilguy" in username: deferred.defer(mail.send_mail, sender="Maglock <*****@*****.**>", to="Emergency Paging System <*****@*****.**>", subject="RFID Entry: " + username, body="Lobby entry", _queue="emailthrottle") urlfetch.fetch("http://www.dustball.com/call/call.php?str=RFID+Entry+"+username) self.response.out.write("OK")
def post(self): user = users.get_current_user() if not user: self.redirect(users.create_login_url("/key")) return account = Membership.all().filter("username ="******"@")[0]).get() if not account or not account.spreedly_token or account.status != "active": message = "Error #1982, which should never happen." internal = True self.response.out.write( self.render("templates/error.html", locals())) return is_park = self.request.get("ispark") if is_park == "True": #checks if user input is a parking pass number or an rfid number pass_to_add = self.request.get("parking_pass") try: #tests if there are only numbers in the parking pass float(pass_to_add) except ValueError: message = "<p>A Parking Pass may only contain numbers.</p><a href=\"/key\">Try Again</a>" internal = False self.response.out.write( self.render("templates/error.html", locals())) return account.parking_pass = pass_to_add logging.debug("Setting parking pass for %s to %s." % \ (account.full_name(), account.parking_pass)) db.put(account) self.response.out.write( self.render("templates/pass_ok.html", locals())) #outputs the parking number else: rfid_tag = self.request.get("rfid_tag").strip() description = self.request.get("description").strip() if rfid_tag.isdigit(): if Membership.all().filter("rfid_tag =", rfid_tag).get(): message = "<p>That RFID tag is in use by someone else.</p>" internal = False self.response.out.write( self.render("templates/error.html", locals())) return if not description: message = "<p>Please enter a reason why you are associating a replacement RFID key. Please hit BACK and try again.</p>" internal = False self.response.out.write( self.render("templates/error.html", locals())) return account.rfid_tag = rfid_tag logging.debug("Setting RFID for %s to %s." % (account.full_name(), account.rfid_tag)) account.put() bc = BadgeChange(rfid_tag=rfid_tag, username=account.username, description=description) bc.put() self.response.out.write( self.render("templates/key_ok.html", locals())) return else: message = "<p>That RFID ID seemed invalid. Hit back and try again.</p>" internal = False self.response.out.write( self.render("templates/error.html", locals())) return