def get(self, emails): response = {'found': [], 'notFound': []} if (emails == 'feeling_lucky'): #I'm feeling lucky! luckyHacker = Hacker.query().get() response['found'].append({ 'email': luckyHacker.email, 'secret': luckyHacker.secret }) return self.response.write(json.dumps(response)) emails = emails.split(',') for email in emails: hacker = Hacker.query(Hacker.email == email).fetch( projection=Hacker.secret) if len(hacker) > 0: response['found'].append({ 'email': email, 'secret': hacker[0].secret }) else: response['notFound'].append(email) self.response.write(json.dumps(response))
def get(self): data = {} data['Signed Up'] = EmailListEntry.query().count() data['Registered'] = Hacker.query().count() data['Accepted'] = Hacker.query(Hacker.admitted_email_sent_date != None).count() data['Confirmed'] = Hacker.query(Hacker.rsvpd == True).count() data['Waitlisted'] = Hacker.query(Hacker.waitlist_email_sent_date != None).count() data['Declined'] = deletedHacker.DeletedHacker.query(deletedHacker.DeletedHacker.admitted_email_sent_date != None).count() self.response.write(json.dumps(data))
def get(self): data = {} data['Signed Up'] = EmailListEntry.query().count() data['Registered'] = Hacker.query().count() data['Accepted'] = Hacker.query( Hacker.admitted_email_sent_date != None).count() data['Confirmed'] = Hacker.query(Hacker.rsvpd == True).count() data['Waitlisted'] = Hacker.query( Hacker.waitlist_email_sent_date != None).count() data['Declined'] = deletedHacker.DeletedHacker.query( deletedHacker.DeletedHacker.admitted_email_sent_date != None ).count() self.response.write(json.dumps(data))
def getAllHackers(projection=[], accepted=False): memcachedKey = memcachedBase + str(projection) + str(accepted) hackers = memcache.get(memcachedKey) if hackers is None: if projection: hackers = Hacker.query(projection=projection) else: hackers = Hacker.query() if accepted: hackers = hackers.filter(Hacker.admitted_email_sent_date != None) hackers = hackers.fetch() if not memcache.set(memcachedKey, hackers, cacheTime): logging.error("Memcache set failed") return hackers
def get(self): if not onTeam(): return self.redirect('/') user = users.get_current_user() if not user: self.redirect(users.create_login_url(self.request.uri)) return def formatter(person): JSON = {} key = getattr(person, 'key') JSON['id'] = key.urlsafe() JSON['kind'] = key.kind() JSON.update(person.asDict(['email', 'name', 'checked_in'])) return JSON from models import Volunteer, Rep source = map(formatter, Hacker.query(Hacker.checked_in == False).fetch()) source += map(formatter, Rep.query(Rep.checked_in == False).fetch()) source += map(formatter, Volunteer.query(Volunteer.checked_in == False).fetch()) total_checked_in = getTotal() session = models.CheckInSession() session.user = user.email() session.put() token = channel.create_channel(session.key.urlsafe()) self.response.write(template("checkin.html", {"source" : json.dumps(source), 'total_checked_in' : total_checked_in, 'token' : token}))
def getAllHackers(projection=[], accepted=False): memcachedKey = memcachedBase + str(projection) + str(accepted) hackers = memcache.get(memcachedKey) if hackers is None: if projection: hackers = Hacker.query(projection=projection) else: hackers = Hacker.query() if accepted: hackers = hackers.filter(Hacker.admitted_email_sent_date != None) hackers = hackers.fetch() if not memcache.set(memcachedKey, hackers, cacheTime): logging.error("Memcache set failed") return hackers
def post(self): to_put = [] for h in itertools.chain(Hacker.query(), EmailListEntry.query()): if h.email != h.email.lower(): h.email = h.email.lower() to_put.append(h) ndb.put_multi(to_put) self.response.write("Well, it seemed to work...")
def post(self): to_put = [] for h in itertools.chain(Hacker.query(), EmailListEntry.query()): if h.email != h.email.lower(): h.email = h.email.lower() to_put.append(h) ndb.put_multi(to_put) self.response.write("Well, it seemed to work...")
def get(self, number): if not isAdmin(): return self.redirect('/') if isMasterDB(): return self.redirect('/') number = int(number) ndb.delete_multi(Hacker.query().fetch(limit=number, keys_only=True)) self.response.write("Eliminated {0} hackers.".format(number))
def get(self, number): if not isAdmin(): return self.redirect("/") if isMasterDB(): return self.redirect("/") number = int(number) ndb.delete_multi(Hacker.query().fetch(limit=number, keys_only=True)) self.response.write("Eliminated {0} hackers.".format(number))
def get(self): if not onTeam(): return self.redirect('/') keys = list(set(list(hacker_keys) + list(personal_info_keys) + list(non_required_keys) + ['status', 'admit_priority', 'rsvpd', 'checked_in', 'has_resume', 'secret', 'address1', 'address2', 'city', 'state', 'country', 'zip'])) if (not self.request.get('include_personally_identifiable_info')) or not isAdmin(): for key in personal_info_keys: keys.remove(key) self.response.headers['Content-Type'] = 'text/csv; charset=utf-8' writer = csv.DictWriter(self.response, fieldnames=keys) writer.writeheader() for hacker in Hacker.query(): writer.writerow({key: unicode(val).encode('utf-8') for key, val in hacker.asDict(keys).iteritems()})
def get(self, emails): response = {'found' : [], 'notFound' : []} if (emails == 'feeling_lucky'): #I'm feeling lucky! luckyHacker = Hacker.query().get() response['found'].append({'email': luckyHacker.email, 'secret' : luckyHacker.secret}) return self.response.write(json.dumps(response)) emails = emails.split(',') for email in emails: hacker = Hacker.query(Hacker.email == email).fetch(projection=Hacker.secret) if len(hacker) > 0: response['found'].append({'email' : email, 'secret' : hacker[0].secret}) else: response['notFound'].append(email) self.response.write(json.dumps(response))
def post(self): hackers = Hacker.query(Hacker.phone_number == self.request.get('phone')).fetch(keys_only=True) request = MentorRequest() request.location = self.request.get('location') request.issue = self.request.get('issue') request.tags = self.request.get('tags').split(', ') if len(hackers): request.requester = hackers[0] request.requester_phone = self.request.get('phone') request.put() self.redirect('/?dayof=1#mrc') # #mrc: mentor-request-confirm (we don't want that showing up in URLs)
def getHackersToBeChecked(): # Cache this value, results don't need to be updated quickly. toCheckIn = 'hackers_to_be_checked' data = memcache.get(toCheckIn) if data is not None: logging.debug("Used cache") return data else: data = Hacker.query(ndb.AND(Hacker.rsvpd == True, Hacker.checked_in != True)).fetch(projection=[Hacker.name, Hacker.email]) logging.debug("Could not use cache") if not memcache.add(toCheckIn, data, cacheTime): logging.error('Memcache set failed') return data
def getHackersToBeChecked(): # Cache this value, results don't need to be updated quickly. toCheckIn = 'hackers_to_be_checked' data = memcache.get(toCheckIn) if data is not None: logging.debug("Used cache") return data else: data = Hacker.query( ndb.AND(Hacker.rsvpd == True, Hacker.checked_in != True)).fetch( projection=[Hacker.name, Hacker.email]) logging.debug("Could not use cache") if not memcache.add(toCheckIn, data, cacheTime): logging.error('Memcache set failed') return data
def post(self): hackers = Hacker.query( Hacker.phone_number == self.request.get('phone')).fetch( keys_only=True) request = MentorRequest() request.location = self.request.get('location') request.issue = self.request.get('issue') request.tags = self.request.get('tags').split(', ') if len(hackers): request.requester = hackers[0] request.requester_phone = self.request.get('phone') request.put() self.redirect( '/?dayof=1#mrc' ) # #mrc: mentor-request-confirm (we don't want that showing up in URLs)
def cleanup(property, jsonKeys): hackers = Hacker.query().filter(Hacker._properties[property].IN(jsonKeys.keys())) changed = [] for hacker in hackers: newProp = jsonKeys.get(getattr(hacker, property, None), None) print(newProp) if newProp: setattr(hacker, property, newProp) changed.append(hacker) try: ndb.put_multi(changed) except Exception as err: return {"success": False, "msg": str(err.args[0])} successMsg = "Changed the " + property + " of " + str(len(changed)) + " hackers." return {"success": True, "msg": successMsg}
def cleanup(property, jsonKeys): hackers = Hacker.query().filter(Hacker._properties[property].IN( jsonKeys.keys())) changed = [] for hacker in hackers: newProp = jsonKeys.get(getattr(hacker, property, None), None) print(newProp) if newProp: setattr(hacker, property, newProp) changed.append(hacker) try: ndb.put_multi(changed) except Exception as err: return {"success": False, "msg": str(err.args[0])} successMsg = "Changed the " + property + " of " + str( len(changed)) + " hackers." return {"success": True, "msg": successMsg}
def post(self): if not isAdmin(): return self.redirect('/') parsed_request = json.loads(self.request.body) # Angular apparently only sends json as text not as 'JSON' emails = parsed_request.get('emails') for address in emails: hacker = Hacker.query(Hacker.email == address).fetch() if hacker: for h in hacker: # should only be one if parsed_request.get('change') == "Accept": if h.admitted_email_sent_date == None: accept_hacker(h) if parsed_request.get('change') == "Remove": deletedHacker.createDeletedHacker(h, "manual") h.key.delete() if parsed_request.get('change') == 'Waitlist': if h.admitted_email_sent_date == None: waitlist_hacker(h)
def updateSchema(cursor=None, num_updated=0): to_put = [] hackers, next_curs, more = Hacker.query().fetch_page(BATCH_SIZE, start_cursor=cursor) for hacker in hackers: append = False #Making sure nobody is admitted hacker.admitted_email_sent_date = None #Changing receipts to a repeated property if hacker.receipts is None or hacker.receipts == [None]: hacker.receipts = [] append = True elif isinstance(hacker.receipts, ndb.BlobKeyProperty): receipt = hacker.receipts hacker.receipts = [receipt] append = True #Removing schools with whitespace around them. if hacker.school.strip() != hacker.school: hacker.school = hacker.school.strip() append = True #Creating the reimbursement max field if hacker.rmax == 0 or hacker.rmax is None: hacker.rmax = reimbursement.getMax(hacker.school) append = True if append: to_put.append(hacker) if to_put: ndb.put_multi(to_put) num_updated += len(to_put) logging.debug('Put %d entities to Datastore for a total of %d', len(to_put), num_updated) deferred.defer(updateSchema, cursor=next_curs, num_updated=num_updated) else: logging.debug('updateSchema complete with %d updates!', num_updated)
def post(self): if not isAdmin(): return self.redirect('/') parsed_request = json.loads( self.request.body ) # Angular apparently only sends json as text not as 'JSON' emails = parsed_request.get('emails') for address in emails: hacker = Hacker.query(Hacker.email == address).fetch() if hacker: for h in hacker: # should only be one if parsed_request.get('change') == "Accept": if h.admitted_email_sent_date == None: accept_hacker(h) if parsed_request.get('change') == "Remove": deletedHacker.createDeletedHacker(h, "manual") h.key.delete() if parsed_request.get('change') == 'Waitlist': if h.admitted_email_sent_date == None: waitlist_hacker(h)
def updateSchema(cursor=None, num_updated=0): to_put = [] hackers, next_curs, more = Hacker.query().fetch_page(BATCH_SIZE, start_cursor=cursor) for hacker in hackers: append = False # Making sure nobody is admitted hacker.admitted_email_sent_date = None # Changing receipts to a repeated property if hacker.receipts is None or hacker.receipts == [None]: hacker.receipts = [] append = True elif isinstance(hacker.receipts, ndb.BlobKeyProperty): receipt = hacker.receipts hacker.receipts = [receipt] append = True # Removing schools with whitespace around them. if hacker.school.strip() != hacker.school: hacker.school = hacker.school.strip() append = True # Creating the reimbursement max field if hacker.rmax == 0 or hacker.rmax is None: hacker.rmax = reimbursement.getMax(hacker.school) append = True if append: to_put.append(hacker) if to_put: ndb.put_multi(to_put) num_updated += len(to_put) logging.debug("Put %d entities to Datastore for a total of %d", len(to_put), num_updated) deferred.defer(updateSchema, cursor=next_curs, num_updated=num_updated) else: logging.debug("updateSchema complete with %d updates!", num_updated)
def get(self): if not onTeam(): return self.redirect('/') user = users.get_current_user() if not user: self.redirect(users.create_login_url(self.request.uri)) return def formatter(person): JSON = {} key = getattr(person, 'key') JSON['id'] = key.urlsafe() JSON['kind'] = key.kind() JSON.update(person.asDict(['email', 'name', 'checked_in'])) return JSON from models import Volunteer, Rep source = map(formatter, Hacker.query(Hacker.checked_in == False).fetch()) source += map(formatter, Rep.query(Rep.checked_in == False).fetch()) source += map(formatter, Volunteer.query(Volunteer.checked_in == False).fetch()) total_checked_in = getTotal() session = models.CheckInSession() session.user = user.email() session.put() token = channel.create_channel(session.key.urlsafe()) self.response.write( template( "checkin.html", { "source": json.dumps(source), 'total_checked_in': total_checked_in, 'token': token }))
def get_query(self): if self.audience == 'registered': return Hacker.query() elif self.audience == 'accepted': return Hacker.query(Hacker.admitted_email_sent_date != None) elif self.audience == 'accepted-non-local': return Hacker.query(Hacker.admitted_email_sent_date != None) elif self.audience == 'invited-friends': return Hacker.query(Hacker.teammates != None) elif self.audience == 'mailing-list-unregistered': return EmailListEntry.query() elif self.audience == 'waitlisted': print "sending waitlisted emails: " + str(Hacker.query(Hacker.admitted_email_sent_date == None).count()) return Hacker.query(Hacker.admitted_email_sent_date == None) elif self.audience == 'hardware-hackers': print "sending emails to admitted hardware-hackers: " + str(Hacker.query(Hacker.admitted_email_sent_date != None, Hacker.hardware_hack == 'yes').count()) return Hacker.query(Hacker.admitted_email_sent_date != None, Hacker.hardware_hack == 'yes') elif self.audience == 'accepted-highschool-freshmen': print "sending emails to accepted highschool and freshman hackers" return Hacker.query(ndb.AND(Hacker.admitted_email_sent_date != None, ndb.OR(Hacker.year == 'highschool', Hacker.year == 'freshman'))) elif self.audience == 'local-waitlisted': print "sending emails to local waitlisted hackers: " return Hacker.query(Hacker.admitted_email_sent_date == None) elif self.audience == 'rsvped-first-time': print "sending emails to rsvped-first-time hackers" return Hacker.query(ndb.AND(Hacker.rsvpd == True, Hacker.first_hackathon =='yes')) elif self.audience == 'checked-in': print 'sending emails to checked-in hackers: ' + str(Hacker.query(Hacker.checked_in == True).count()) return Hacker.query(Hacker.checked_in == True) elif self.audience == 'accepted-local': print "sending emails to accepted-local" return Hacker.query(Hacker.admitted_email_sent_date != None) elif self.audience == None: return None else: assert 0, "Unknown audience"
def send_to_entity_async(self, entity): try: if self.audience == 'invited-friends': # don't actually send to the hacker -- send to their friends hacker = entity if hacker.teammates: emails = [email.lower() for email in hacker.teammates.split(',')] matching_hackers = yield Hacker.query(Hacker.email.IN(emails)).fetch_async() emails_already_registered = [h.email for h in matching_hackers] for email in emails: if email not in emails_already_registered: self.send_to_email(email, {"invited_by": hacker}) elif self.audience == 'registered': # send emails directly to hackers hacker = entity if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'mailing-list-unregistered': email = entity.email is_registered = (yield Hacker.query(Hacker.email == email).count_async()) > 0 if not is_registered: self.send_to_email(email, {}) elif self.audience == 'waitlisted': hacker = entity hacker.waitlist_email_sent_date = datetime.datetime.now() self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) hacker.put() elif self.audience == 'hardware-hackers': #also send directly to hackers hacker = entity if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'accepted': hacker = entity if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'accepted-non-local': hacker = entity if hacker.school == "Brown University" or hacker.school == "Rhode Island School of Design": return if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'local-waitlisted': hacker = entity print hacker.school if hacker.school != "Brown University" and hacker.school != "Rhode Island School of Design": return if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'accepted-highschool-freshmen': hacker = entity if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'rsvped-first-time': hacker = entity if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'checked-in': hacker = entity if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) elif self.audience == 'accepted-local': hacker = entity print hacker.school if hacker.school != "Brown University" and hacker.school != "Rhode Island School of Design": return if hacker.email and self.email_subject: self.send_to_email(hacker.email, {"hacker": hacker, "name":hacker.name.split(" ")[0]}) if hacker.phone_number and self.sms_text: self.send_to_phone(hacker.phone_number) except Exception as e: print "Failed to send email '{0}' to '{1} because {2}'".format(self.email_subject, entity.email, e)
def getTotalFromDB(): from models import Volunteer, Rep total_checked_in = Hacker.query(Hacker.checked_in == True).count() total_checked_in += Rep.query(Rep.checked_in == True).count() total_checked_in += Volunteer.query(Volunteer.checked_in == True).count() return total_checked_in
def getTotalFromDB(): from models import Volunteer, Rep total_checked_in = Hacker.query(Hacker.checked_in == True).count() total_checked_in += Rep.query(Rep.checked_in == True).count() total_checked_in += Volunteer.query(Volunteer.checked_in == True).count() return total_checked_in