def getConferenceSessions(self, request): """Gets all the child sessions of the target conference""" conf = getConferenceFromRequest(request) sessions = Session.query(ancestor=conf.key) return SessionForms( items=[self._copySessionToForm(session) for session in sessions] )
def getConference(self, request): """Return requested conference (by websafeConferenceKey).""" # get Conference object from request; bail if not found conf = getConferenceFromRequest(request) prof = conf.key.parent().get() # return ConferenceForm return self._copyConferenceToForm(conf, getattr(prof, 'displayName'))
def _updateConferenceObject(self, request): user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') user_id = getUserId(user) conf = getConferenceFromRequest(request) # check that user is owner if user_id != conf.organizerUserId: raise endpoints.ForbiddenException( 'Only the owner can update the conference.') # Not getting all the fields, so don't create a new object; just # copy relevant fields from ConferenceForm to Conference object for field in request.all_fields(): data = getattr(request, field.name) # only copy fields where we get data if data not in (None, []): # special handling for dates (convert string to Date) if field.name in ('startDate', 'endDate'): data = datetime.strptime(data, "%Y-%m-%d").date() if field.name == 'startDate': conf.month = data.month # write to Conference object setattr(conf, field.name, data) conf.put() prof = ndb.Key(Profile, user_id).get() return self._copyConferenceToForm(conf, getattr(prof, 'displayName'))
def getConferenceSessionsByType(self, request): """ Gets sessions in conference of the specified type """ conf = getConferenceFromRequest(request) sessions = Session.query(ancestor=conf.key).\ filter(Session.sessionType == request.sessionType.name) return SessionForms( items=[self._copySessionToForm(session) for session in sessions] )
def _createSessionObject(self, request): """ Creates Session under provided conference websafeConferenceKey - key of parent Conference duration - session duration in minutes date - formated YYYY-MM-DD time - formated HH:MM:SS other fields are self explanatory """ user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') user_id = getUserId(user) conf = getConferenceFromRequest(request) c_key = conf.key # check that user is owner if user_id != conf.organizerUserId: raise endpoints.ForbiddenException( 'Only the owner can create session in this conference.') # copy ConferenceForm/ProtoRPC Message into dict data = { field.name: getattr(request, field.name) for field in request.all_fields() } del data['websafeConferenceKey'] del data['websafeKey'] # convert date/time from strings to Date/Time objects if data['date']: data['date'] = datetime.strptime(data['date'][:10], "%Y-%m-%d").date() else: data['date'] = conf.startDate if data['sessionType']: data['sessionType'] = data['sessionType'].name if data['startTime']: data['startTime'] = datetime.strptime(data['startTime'][:8], "%H:%M:%S").time() # generate Session Key based on user ID and Conference # ID based on Conference key get Session key from 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 # create Session, send email to organizer confirming # creation of Conference & return (modified) ConferenceForm Session(**data).put() return s_key
def _conferenceRegistration(self, request, reg=True): """Register or unregister user for selected conference.""" retval = None prof = self._getProfileFromUser() # get user Profile conf = getConferenceFromRequest(request) wsck = conf.key.urlsafe() # register if reg: # check if user already registered otherwise add if wsck in prof.conferenceKeysToAttend: raise ConflictException( "You have already registered for this conference") # check if seats avail if conf.seatsAvailable <= 0: raise ConflictException( "There are no seats available.") # register user, take away one seat prof.conferenceKeysToAttend.append(wsck) conf.seatsAvailable -= 1 retval = True # unregister else: # check if user already registered if wsck in prof.conferenceKeysToAttend: # unregister user, add back one seat prof.conferenceKeysToAttend.remove(wsck) conf.seatsAvailable += 1 retval = True else: retval = False # write things back to the datastore & return prof.put() conf.put() return BooleanMessage(data=retval)
def getConferenceAttendee(self, request): """ Get all user (profile) attending the conference order by name """ user = endpoints.get_current_user() if not user: raise endpoints.UnauthorizedException('Authorization required') user_id = getUserId(user) conf = getConferenceFromRequest(request) owner_profile = conf.key.parent().get() if owner_profile.mainEmail != user_id: raise endpoints.UnauthorizedException('Conference owner only') wspk = conf.key.urlsafe() profs = Profile.query().\ filter(Profile.conferenceKeysToAttend == wspk).\ order(Profile.displayName) return ProfileForms( items=[self._copyProfileToForm(prof) for prof in profs] )