def make_conference(self, conf_name, email): p_key = ndb.Key(Profile, email) profile = Profile(mainEmail=email, key=p_key).put() conf_id = Conference(name=conf_name, organizerUserId=email, parent=p_key).put().urlsafe() return conf_id, profile
def _createConferenceObject(self, request): """Create or update Conference object, returning ConferenceForm/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") # copy ConferenceForm/ProtoRPC Message into dict data = { field.name: getattr(request, field.name) for field in request.all_fields() } del data['websafeKey'] del data['organizerDisplayName'] # add default values for those missing (both data model & outbound Message) for df in DEFAULTS: if data[df] in (None, []): data[df] = DEFAULTS[df] setattr(request, df, DEFAULTS[df]) # convert dates from strings to Date objects; set month based on start_date if data['startDate']: data['startDate'] = datetime.strptime(data['startDate'][:10], "%Y-%m-%d").date() data['month'] = data['startDate'].month else: data['month'] = 0 if data['endDate']: data['endDate'] = datetime.strptime(data['endDate'][:10], "%Y-%m-%d").date() # set seatsAvailable to be same as maxAttendees on creation if data["maxAttendees"] > 0: data["seatsAvailable"] = data["maxAttendees"] # generate Profile Key based on user ID and Conference # ID based on Profile key get Conference key from ID p_key = ndb.Key(Profile, user_id) c_id = Conference.allocate_ids(size=1, parent=p_key)[0] c_key = ndb.Key(Conference, c_id, parent=p_key) data['key'] = c_key data['organizerUserId'] = request.organizerUserId = user_id # create Conference, send email to organizer confirming # creation of Conference & return (modified) ConferenceForm Conference(**data).put() taskqueue.add(params={ 'email': user.email(), 'conferenceInfo': repr(request) }, url='/tasks/send_confirmation_email') return request
def test_it_can_find_speaker_sessions(self): # Make two sessions by the same speaker at 2 separate conferences. websafe_speaker_key = SpeakerService.find_or_create('*****@*****.**') websafe_speaker_key_2 = SpeakerService.find_or_create( '*****@*****.**') conf_id = Conference(name="a conference").put().urlsafe() ConferenceSession( title='This is the title', dateTime=datetime.datetime(2016, 12, 12, 13, 15), websafeConferenceKey=conf_id, speakerKeys=[websafe_speaker_key, websafe_speaker_key_2]).put().urlsafe() conf_id_2 = Conference(name="another conference").put().urlsafe() ConferenceSession(title='This is another title', dateTime=datetime.datetime(2016, 12, 12, 13, 15), websafeConferenceKey=conf_id_2, speakerKeys=[websafe_speaker_key]).put().urlsafe() session_service = SessionService() sessions = session_service.get_speaker_sessions(websafe_speaker_key) self.assertEqual(2, len(sessions.items)) sessions = session_service.get_speaker_sessions(websafe_speaker_key_2) self.assertEqual(1, len(sessions.items))
def test_it_can_get_conference_sessions_by_conference_id(self): session_service = SessionService() conf_id = Conference(name="a conference").put().urlsafe() ConferenceSession(title='This is the title', dateTime=datetime.datetime(2016, 12, 12, 13, 15), highlights="blah blah ha", websafeConferenceKey=conf_id, duration=12, typeOfSession='snails').put().urlsafe() ConferenceSession(title='This is the other title', dateTime=datetime.datetime(2017, 12, 12, 23, 32), highlights="blah hahahaha blah ha", websafeConferenceKey=conf_id, duration=1, typeOfSession='snails').put().urlsafe() sessions = session_service.get_conference_sessions(conf_id) self.assertEqual(2, len(sessions.items))
def test_it_can_create_sessions(self): p_key = ndb.Key(Profile, '*****@*****.**') profile = Profile(mainEmail='*****@*****.**', key=p_key).put() conf_id = Conference(name="a conference", organizerUserId='*****@*****.**', parent=p_key).put().urlsafe() request = ConferenceSessionForm(title='This is the title', date="2016-12-12", highlights="blah blah ha", startTime="13:15", websafeConferenceKey=conf_id, speakerEmails=['*****@*****.**'], duration=12, typeOfSession='snails') data = { field.name: getattr(request, field.name) for field in request.all_fields() } auth = self.mock_auth('*****@*****.**') session_service = SessionService(auth=auth) session_service.create_conference_session(request, profile) self.assertEqual(1, len(ConferenceSession.query().fetch(2))) session = ConferenceSession.query( ConferenceSession.websafeConferenceKey == conf_id).fetch() self.assertEquals(data['title'], session[0].title) self.assertEquals(data['highlights'], session[0].highlights) self.assertEquals(data['typeOfSession'], session[0].typeOfSession) self.assertEquals(data['duration'], session[0].duration) self.assertEquals(datetime.datetime(2016, 12, 12, 13, 15), session[0].dateTime) speaker = ndb.Key(urlsafe=session[0].speakerKeys[0]).get() self.assertEquals(speaker.email, '*****@*****.**')