Example #1
0
 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
Example #3
0
    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))
Example #4
0
    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))
Example #5
0
    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, '*****@*****.**')