def getFeaturedSpeaker(self, request): """Get featured speaker from memcache""" # verify user is authed user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') # get featured speaker from memcache if it exists conf = memcache.get(request.websafeConferenceKey) if not conf: raise endpoints.NotFoundException( 'No conference memcache found with key: %s' % request.websafeConferenceKey) # iterate then return SpeakerForm speaker_form = SpeakerForm() for field in speaker_form.all_fields(): if field.name == 'sessionName': setattr(speaker_form, field.name, conf['sessionName']) elif field.name == 'displayName': setattr(speaker_form, field.name, conf['displayName']) speaker_form.check_initialized() return speaker_form
def getFeaturedSpeaker(self, request): """Returns the sessions of the featured speaker""" # attempt to get data from memcache data = memcache.get('featured_speaker') from pprint import pprint pprint(data) sessions = [] sessionNames = [] speaker = None if data and data.has_key('speaker') and data.has_key('sessionNames'): speaker = data['speaker'] sessionNames = data['sessionNames'] # if memcache fails or is empty, pull speaker from upcoming session else: upcoming_session = Session.query(Session.date >= datetime.now())\ .order(Session.date, Session.startTime).get() if upcoming_session: speaker = upcoming_session.speaker sessions = Session.query(Session.speaker == speaker) sessionNames = [session.name for session in sessions] # populate speaker form sf = SpeakerForm() for field in sf.all_fields(): if field.name == 'sessionNames': setattr(sf, field.name, sessionNames) elif field.name == 'speaker': setattr(sf, field.name, speaker) sf.check_initialized() return sf
def _copySessionToForm(self, sess): """Copy relevant fields from Session to SessionForm.""" sf = SessionForm() for field in sf.all_fields(): if hasattr(sess, field.name): if field.name == 'speaker': sf.speaker = SpeakerForm( name=sess.speaker.name, email=sess.speaker.email, websafeSpeakerKey=sess.speaker.websafeSpeakerKey, ) # convert sessionType string to Enum elif field.name == 'sessionType': setattr(sf, field.name, getattr(SessionType, getattr(sess, field.name))) # convert Date to date string elif field.name == 'date': setattr(sf, field.name, str(getattr(sess, field.name))) # just copy others else: setattr(sf, field.name, getattr(sess, field.name)) # get the websafe session key elif field.name == 'websafeKey': setattr(sf, field.name, sess.key.urlsafe()) sf.check_initialized() return sf
def getFeaturedSpeaker(self, request): """ Returns a featured speaker and his/her sessions """ sessions = [] sessionNames = [] speaker = None # look for data in memcache memcache_data = memcache.get(MEMCACHE_SPEAKER_KEY) if memcache_data: speaker = memcache_data['speaker'] sessionNames = memcache_data['sessionNames'] else: speaker = sessionNames = None sf = SpeakerForm() for field in sf.all_fields(): if field.name == 'speaker': setattr(sf, field.name, speaker) elif field.name == 'sessionNames': setattr(sf, field.name, sessionNames) sf.check_initialized() return sf
def _copySpeakerToForm(self, speaker): """Copy relevant fields from Speaker to SpeakerForm.""" # copy relevant fields from Speaker to SpeakerFrom spkr = SpeakerForm() for field in spkr.all_fields(): if hasattr(speaker, field.name): setattr(spkr, field.name, getattr(speaker, field.name)) spkr.check_initialized() return spkr
def _copySpeakerToForm(self, speaker): """Copy relevant fields from Session to SessionForm.""" sf = SpeakerForm() for field in sf.all_fields(): if hasattr(speaker, field.name): setattr(sf, field.name, getattr(speaker, field.name)) sf.check_initialized() return sf
def _copySpeakerToForm(self, speaker): """Copy relevant fields from Speaker to SpeakerForm.""" form = SpeakerForm() if speaker is not None: setattr(form, 'websafeKey', speaker.key.urlsafe()) for field in form.all_fields(): if hasattr(speaker, field.name): setattr(form, field.name, getattr(speaker, field.name)) form.check_initialized() return form
def _copySpeakerToForm(self, speak): """Copy relevant fields from Speaker to SpeakerForm.""" sp = SpeakerForm() for field in sp.all_fields(): if hasattr(speak, field.name): setattr(sp, field.name, getattr(speak, field.name)) elif field.name == "speakerWebSafeKey": setattr(sp, field.name, speak.key.urlsafe()) sp.check_initialized() return sp
def _copySpeakerToForm(self, speaker): """Copy relevant fields from Speaker to SpeakerForm.""" sf = SpeakerForm() for field in sf.all_fields(): if hasattr(speaker, field.name): setattr(sf, field.name, getattr(speaker, field.name)) elif field.name == "websafeKey": setattr(sf, field.name, speaker.key.urlsafe()) sf.check_initialized() return sf
def _copySpeakerToForm(self, speaker): """Copy relevant fields from Speaker to SpeakerForm.""" sf = SpeakerForm() for field in sf.all_fields(): # retrieve speaker ID and display on SpeakerForm if field.name == 'speakerId': sf.speakerId = speaker.key.integer_id() # copy other fields elif hasattr(speaker, field.name): setattr(sf, field.name, getattr(speaker, field.name)) sf.check_initialized() return sf
def _copySpeakerToForm(self, speaker): """Copy relevant fields from Speaker to SpeakerForm""" # create a new entity first sf = SpeakerForm() # convert Speaker properties to SpeakerForm fields sf.name = speaker.name sf.bio = speaker.bio sf.websafeKey = speaker.key.urlsafe() # check and return sf.check_initialized() return sf
def _copySpeakerToForm(self, speaker): """Copy data from a Speaker entity to a SpeakerForm""" # If no input provided return none. if not speaker: return speaker_form = SpeakerForm() for field in speaker_form.all_fields(): if hasattr(speaker, field.name): setattr(speaker_form, field.name, getattr(speaker, field.name)) elif field.name == "websafeSpeakerKey": setattr(speaker_form, field.name, speaker.key.urlsafe()) speaker_form.check_initialized() return speaker_form
def getFeaturedSpeaker(self, request): """Return featured speaker of a conference from memcache""" # check type of websafeConferenceKey confKey, conf = ConferenceApi._getKeyAndEntityFromWebsafeKeyOfType( request.websafeConferenceKey, Conference) # get featured speaker using key from memcache websafeFeaturedSpeakerKey = memcache.get('%s_featuredSpeaker' % request.websafeConferenceKey) if websafeFeaturedSpeakerKey: featuredSpeaker = ndb.Key(urlsafe=websafeFeaturedSpeakerKey).get() return self._copySpeakerToForm(featuredSpeaker) # return empty speaker form on failure for no results return SpeakerForm()
def _createSpeakerObject(self, request): """ Creates a Speaker entity in datastore based on the information provided by client. Sends a confirmation email after adding the new Speaker """ # preload necessary data items user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') user_id = getUserId(user) if not request.name: raise endpoints.BadRequestException("Speaker 'name' \ field required") data = { field.name: getattr(request, field.name) for field in request.all_fields() } del data['websafeSpeakerKey'] # create Speaker & return (modified) SpeakerForm speaker_key = Speaker(**data).put() taskqueue.add(params={ 'email': user.email(), 'speakerInfo': repr(request) }, url='/tasks/send_speaker_confirmation_email') # Return data as SpeakerForm speakerform = SpeakerForm() for field in speakerform.all_fields(): if data.has_key(field.name): setattr(speakerform, field.name, data[field.name]) # Checks if the field is websafeSpeakerKey, then converts it into # urlsafe key elif field.name == "websafeSpeakerKey": setattr(speakerform, field.name, speaker_key.urlsafe()) speakerform.check_initialized() return speakerform
def getFeaturedSpeaker(self, request): """Returns the sessions of the featured speaker""" # attempt to get data from memcache data = memcache.get(MEMCACHE_FEAT_SPKR_KEY) speaker = None sessionNames = [] if data and data.has_key('speaker') and data.has_key('sessionNames'): speaker = data['speaker'] sessionNames = data['sessionNames'] # populate speaker form sf = SpeakerForm() for field in sf.all_fields(): if field.name == 'sessionNames': setattr(sf, field.name, sessionNames) elif field.name == 'speaker': setattr(sf, field.name, speaker) sf.check_initialized() return sf
def addSpeaker(self, request): """Add speaker""" # verify user is authed user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') # generate unique id for speaker s_id = Speaker.allocate_ids(size=1)[0] s_key = ndb.Key(Speaker, s_id) # save into datastore speaker = Speaker(key=s_key, displayName=request.displayName) speaker_key = speaker.put() # get speaker urlsafe string s_uss = speaker_key.urlsafe() if not s_uss: raise endpoints.NotFoundException( 'Unable to get speakerKey from Datastore') return SpeakerForm(speakerKey=s_uss)
def _createSessionObject(self, request): """Create or update Session object, returning SessionForm/request.""" # preload necessary data items user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') user_id = getUserId(user) if not request.name: raise endpoints.BadRequestException( "Conference 'name' field required") # check if conf exists given websafeConfKey # get conference; check that it exists wsck = request.websafeConferenceKey c_key = ndb.Key(urlsafe=wsck) conf = c_key.get() if not conf: raise endpoints.NotFoundException( 'No conference found with key: %s' % wsck) if conf.organizerUserId != user_id: raise endpoints.ForbiddenException( 'Only the owner of the conference can make sessions') # copy ConferenceForm/ProtoRPC Message into dict data = { field.name: getattr(request, field.name) for field in request.all_fields() } # convert dates from strings to Date objects; set month based on # start_date if data['date']: data['date'] = datetime.strptime(data['date'][:10], "%Y-%m-%d").date() # check if time is a valid number in twentyfour hour notation if # if it is included if data['startTime']: time = data['startTime'] minutes = time % 100 if time < 0 or time > 2359 or minutes > 59: raise endpoints.BadRequestException('Invalid Start Time') # Create session id from parent COnference Key and # a Session key from that id s_id = Session.allocate_ids(size=1, parent=c_key)[0] s_key = ndb.Key(Session, s_id, parent=c_key) data['key'] = s_key data['websafeConferenceKey'] = wsck del data['websafeSessionKey'] # Save session Session(**data).put() # Check if the speaker exsists and creates a new speaker # or adds the session key to its list speakerQuery = Speaker.query() speakerQuery = speakerQuery.filter(Speaker.name == request.speaker) if speakerQuery.count() == 0: speakerForm = SpeakerForm() setattr(speakerForm, "name", request.speaker) setattr(speakerForm, "speakerSessionKeys", [s_key.urlsafe()]) self._createSpeakerObject(speakerForm) else: speaker = speakerQuery.get() speaker.speakerSessionKeys.append(s_key.urlsafe()) speaker.put() # Run task to check featured speaker taskqueue.add(params={ 'speaker': request.speaker, 'websafeConferenceKey': s_key.urlsafe(), 'websafeConferenceKey': wsck }, url='/tasks/set_featured_speaker') return self._copySessionToForm(s_key.get())
def _copySpeakerToForm(self, request): """Copy relevant fields from Speaker to SpeakerForm.""" sf = SpeakerForm() sf.check_initialized() return sf