Exemple #1
0
    def get_by_speaker(self, request):
        """
        Given a speaker, return all sessions given by this particular speaker,
        across all conferences
        :param request:
        :return:
        """

        if request.name and not request.title:
            speakers = Speaker.query(Speaker.name == request.name)
        elif not request.name and request.title:
            speakers = Speaker.query(Speaker.title == request.title)
        else:
            speakers = Speaker.query(Speaker.name == request.name) \
                .filter(Speaker.title == request.title)

        speakers.fetch()

        all_sessions = []
        if speakers:
            for speaker in speakers:
                sessions = Session.query(
                    Session.speakerKeys == speaker.key).fetch()
                if sessions:
                    all_sessions += sessions

        return SessionForms(items=self.populate_forms(all_sessions))
    def _createSpeakerObject(self, request):
        """Create Speaker object, 
        returning SpeakerForm/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(
                "Speaker 'name' field required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) \
            for field in request.all_fields()}
        del data['websafeKey']

        speaker_id = Speaker.allocate_ids(size=1)[0]
        speaker_key = ndb.Key(Speaker, speaker_id)
        data['key'] = speaker_key

        # create Speaker
        speaker = Speaker(**data)
        speaker.put()

        # return the modified SpeakerForm
        return self._copySpeakerToForm(speaker)
    def _getSpeakerKey(self, request):
        """ Returns the key for a requested speaker, when he exists."""

        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field \
                required")

        # create a new Speaker.key
        spk_key = Speaker().key
        # query all existing/known speakers
        qryKnownSpeakers = Speaker.query()
        # write the names of the known speakers in a list
        knownSpeakers = []
        for ks in qryKnownSpeakers:
            knownSpeakers.append(ks.name)
        # If speaker doesn't exist, raise an "Not Found"-exception.
        if request.name not in knownSpeakers:
            raise endpoints.NotFoundException(
                'No speaker found with name: %s'
                % request.name)
        # Else return its key.
        # NOTE: For simplification, it is assumed that a name uniquely
        # identifies a speaker.
        else:
            spk_key = Speaker.query(Speaker.name == request.name).get().key
        return spk_key
Exemple #4
0
    def _createSpeakerObject(self, request):
        """Create Speaker object, returning SpeakerForm/request."""
        
        user = self._getAuthUser()
        user_id = getUserId(user)

        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field required")

        if not request.email:
            raise endpoints.BadRequestException("Speaker 'email' field required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        
        # create Speaker key
        sp_id = Speaker.allocate_ids(size=1)[0]
        sp_key = ndb.Key(Speaker, sp_id)
        
        # assign the Speaker key
        data['key'] = sp_key
        
        del data['websafeKey']
        
        # create Speaker
        speaker = Speaker(**data)
        speaker.put()
        
        return self._copySpeakerToForm(speaker)
Exemple #5
0
    def _createSpeakerObject(self, request):
        """Create Speaker object, returning SpeakerForm."""

        # check for auth'ed and valid user
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        # Speaker name must be filled
        if not request.name:
            raise endpoints.BadRequestException("Field 'name' required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }

        # allocate new Speaker ID
        s_id = Speaker.allocate_ids(size=1)[0]
        # make Speaker key from ID
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key

        # create Speaker & return SpeakerForm
        speaker = Speaker(**data)
        speaker.put()

        return self._copySpeakerToForm(speaker)
 def _createSpeakerObject(self, request):
     """Create Speaker Object, returning SessionForm/request."""
     data = {field.name: getattr(request, field.name)
             for field in request.all_fields()}
     del data['speakerId']
     key = Speaker(**data).put()
     return self._copySpeakerToForm(key.get())
Exemple #7
0
    def getConferenceSessionsBySpeaker(self, request):
        """Return Conference sessions by Speaker."""
        # make sure user is authed
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        # user_id = getUserId(user)

        sp_lastName = request.lastName
        sp_firstName = request.firstName

        if sp_firstName:
            # find by first and last name
            speaker = Speaker.query(ndb.AND(
                Speaker.lastName == sp_lastName,
                Speaker.firstName == sp_firstName))
        else:
            # find by last name only
            speaker = Speaker.query(Speaker.lastName == sp_lastName)

        speaker_keys = [sp.key for sp in speaker]

        # iterate over each key finding all sessions
        all_sessions = []
        for sp_k in speaker_keys:
            sessions = Session.query(Session.speaker == sp_k)
            for s in sessions:
                all_sessions.append(s)

        # return list of sessions that match each of the speaker_keys
        return SessionForms(
            items=[self._copySessionToForm(sess) for sess in all_sessions]
        )
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning SpeakerForm."""

        if not request.name:
            raise endpoints.BadRequestException(
                "Speaker 'name' field required")
        q = Speaker.query()
        q = q.filter(Speaker.name == request.name)
        if q.count() != 0:
            raise endpoints.BadRequestException(
                "Speaker already excists")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}

        # Create session id from parent COnference Key and
        # a Session key from that id
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key
        del data['websafeKey']

        # Save session and return a SessionForm to the user
        Speaker(**data).put()
        return self._copySpeakerToForm(s_key.get())
    def createSpeaker(self, request):
        """Create Speaker object, returning SpeakerForm/request."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field required")
        if not request.mainEmail:
            raise endpoints.BadRequestException("Speaker 'mainEmail' field required")

        sp_key = ndb.Key(Speaker, request.mainEmail)
        speaker = sp_key.get()
        if not speaker:
            speaker = Speaker(
                key = sp_key,
                name = request.name,
                mainEmail = request.mainEmail,
            )
            if request.title:
                speaker.title = request.title
            if request.bio:
                speaker.bio = request.bio
            speaker.put()

        return request
Exemple #10
0
    def _createSpeakerObject(self, request):
        """Create a Speaker object."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        if not request.firstName:
            raise endpoints.BadRequestException(
                "Speaker 'firstName' field required")
        if not request.lastName:
            raise endpoints.BadRequestException(
                "Speaker 'lastName' field required")

        # copy SpeakerForm Message into dict
        data = {field.name: getattr(request, field.name) for field
                in request.all_fields()}

        # generate Profile Key based on user ID and Speaker
        # ID based on Profile key get Speaker key from ID
        p_key = ndb.Key(Profile, user_id)
        speaker_id = Speaker.allocate_ids(size=1, parent=p_key)[0]
        speaker_key = ndb.Key(Speaker, speaker_id, parent=p_key)
        data['key'] = speaker_key
        del data['speakerWebSafeKey']

        # creation Speaker entity
        Speaker(**data).put()

        return request
Exemple #11
0
    def get_by_speaker(self, request):
        """
        Given a speaker, return all sessions given by this particular speaker,
        across all conferences
        :param request:
        :return:
        """

        if request.name and not request.title:
            speakers = Speaker.query(Speaker.name == request.name)
        elif not request.name and request.title:
            speakers = Speaker.query(Speaker.title == request.title)
        else:
            speakers = Speaker.query(Speaker.name == request.name) \
                .filter(Speaker.title == request.title)

        speakers.fetch()

        all_sessions = []
        if speakers:
            for speaker in speakers:
                sessions = Session.query(
                    Session.speakerKeys == speaker.key).fetch()
                if sessions:
                    all_sessions += sessions

        return SessionForms(items=self.populate_forms(all_sessions))
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning SpeakerForm/request."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        if not request.displayName:
            raise endpoints.BadRequestException("Speaker 'displayName' field required")

        # copy ConferenceForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}

        # this is automatically generated for display but should
        # be ignored if it is input.
        del data['websafeKey']

        # Now create the speaker key.
        # NOTE: allocate_ids returns a list, so take the first element.
        speaker_id = Speaker.allocate_ids(size=1)[0]
        speaker_key = ndb.Key(Speaker, speaker_id)
        data['key'] = speaker_key

        # create Speaker, send email to creator confirming
        # creation of Speaker & return (modified) SpeakerForm
        Speaker(**data).put()
        taskqueue.add(params={'email': user.email(),
            'speakerInfo': repr(request)},
            url='/tasks/send_speaker_confirmation_email'
        )
        return request
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning SpeakerForm."""

        if not request.name:
            raise endpoints.BadRequestException(
                "Speaker 'name' field required")
        q = Speaker.query()
        q = q.filter(Speaker.name == request.name)
        if q.count() != 0:
            raise endpoints.BadRequestException("Speaker already excists")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }

        # Create session id from parent COnference Key and
        # a Session key from that id
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key
        del data['websafeKey']

        # Save session and return a SessionForm to the user
        Speaker(**data).put()
        return self._copySpeakerToForm(s_key.get())
    def _createSpeakerObject(self, request):
        user = endpoints.get_current_user()
        # Raise an exception if the user is not logged in
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        # Raise an exception if the displayName is not provided
        if not request.displayName:
            raise endpoints.BadRequestException("dislayName field required")

        # Copy SpeakerForm into a dictionary
        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}
        del data['websafeKey']

        # generate Speaker key
        sp_id = Speaker.allocate_ids(size=1)[0]
        sp_key = ndb.Key(Speaker, sp_id)
        data['key'] = sp_key

        # Create Speaker and save
        sp = Speaker(**data)
        sp.put()

        return self._copySpeakerToForm(sp)
Exemple #15
0
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning SpeakerForm/request."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        # name is a required Speaker field
        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) \
                for field in request.all_fields()}
        del data['websafeKey']      # websafeKey not a Speaker attribute

        # allocate Speaker id
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key

        # create Session, send email to organizer confirming
        # creation of Session & return (modified) SessionForm
        speaker = Speaker(**data)
        speaker.put()

        return self._copySpeakerToForm(speaker)
    def _createSpeakerObject(self, request):
        """Create Speaker object, 
        returning SpeakerForm/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(
                "Speaker 'name' field required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) \
            for field in request.all_fields()}
        del data['websafeKey']

        speaker_id = Speaker.allocate_ids(size=1)[0]
        speaker_key = ndb.Key(Speaker, speaker_id)
        data['key'] = speaker_key

        # create Speaker
        speaker = Speaker(**data)
        speaker.put()

        # return the modified SpeakerForm
        return self._copySpeakerToForm(speaker)
Exemple #17
0
 def _createSpeakerObject(self, request):
     """Create a speaker, returning SpeakerForm/request."""
     # Preload necessary data items
     user = endpoints.get_current_user()
     if not user:
         raise endpoints.UnauthorizedException('Authorization required')
     user_id = user.email()
     if not request.name:
         raise endpoints.BadRequestException(
             "Speaker 'name' field required")
     # Copy SpeakerForm/ProtoRPC Message into dict
     data = {
         field.name: getattr(request, field.name)
         for field in request.all_fields()
     }
     del data['websafeKey']
     # Add default values for those missing (both data model and
     # outbound Message)
     for df in SPEAKER_DEFAULTS:
         if data[df] in (None, []):
             data[df] = SPEAKER_DEFAULTS[df]
     # Create Speaker and return SpeakerForm
     speaker = Speaker(**data)
     speaker.put()
     return self._copySpeakerToForm(speaker)
 def _getKeyForSpeaker(self, request):
     """
     This function gets the key for an existing speaker that has been
     requested.
     """
     if not request.name:
         raise endpoints.BadRequestException("Speaker 'name' field \
             required")
     # creates new key for Speaker
     spkr_key = Speaker().key
     # for all noted speakers, make a query
     notedSpeakersQuery = Speaker.query()
     # lists noted speakers
     notedSpeakers = []
     for ns in notedSpeakersQuery:
         notedSpeakers.append(ns.name)
     # When no speaker is found with a name, a NotFoundException is raised.
     if request.name not in notedSpeakers:
         raise endpoints.NotFoundException(
             'No speaker found with name: %s'
             % request.name)
     # Otherwise, have its key returned.
     else:
         spkr_key = Speaker.query(Speaker.name == request.name).get().key
     return spkr_key
Exemple #19
0
    def _createSpeakerObject(self, request):
        """Create Speaker object, returning SpeakerForm/request."""
        # preload necessary data items
        user = endpoints.get_current_user()

        # make sure user is authenticated
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        user_id = getUserId(user)

        # make sure session name is entered
        if not request.name:
            raise endpoints.BadRequestException(
                "Session name field required")

        # copy SessionForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}

        # generate Speaker Key based on Profile key and
        # profile ID
        p_key = ndb.Key(Profile, user_id)
        s_id = Speaker.allocate_ids(size=1, parent=p_key)[0]
        s_key = ndb.Key(Speaker, s_id, parent=p_key)
        data['key'] = s_key

        # save form data to datastore
        Speaker(**data).put()

        # create Speaker & return (modified) SpeakerForm
        return request
    def _createSpeakerObject(self, request):
        """Create Speaker object, returning SpeakerForm/request."""
        # Need to be logged in to create a speaker entity
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException("Authorization required")
        user_id = getUserId(user)

        # Speaker name is a required property
        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field required")

        # Copy SpeakerForm/ProtoRPC Message into dictionary
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del data["websafeKey"]

        # Make the logged in user the parent of the Speaker object.
        p_key = ndb.Key(Profile, user_id)
        s_id = Speaker.allocate_ids(size=1, parent=p_key)[0]
        s_key = ndb.Key(Speaker, s_id, parent=p_key)
        data["key"] = s_key

        # Create the Speaker entity in the datastore
        new_speaker = Speaker(**data)
        new_speaker.put()

        return self._copySpeakerToForm(new_speaker)
Exemple #21
0
    def _createSpeakerObject(self, request):
        """Create Speaker object, returning SpeakerForm."""

        # check for auth'ed and valid user
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        # Speaker name must be filled
        if not request.name:
            raise endpoints.BadRequestException("Field 'name' required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}

        # allocate new Speaker ID
        s_id = Speaker.allocate_ids(size=1)[0]
        # make Speaker key from ID
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key

        # create Speaker & return SpeakerForm
        speaker = Speaker(**data)
        speaker.put()

        return self._copySpeakerToForm(speaker)
Exemple #22
0
 def addSpeaker(self, request):
     """Get profile from user, take field info for all fields, give key and put into datastore"""
     prof=self._getProfileFromUser()
     data={field.name:getattr(request, field.name) for field in request.all_fields()}
     del data['websafeKey']
     speaker=Speaker(**data)
     speaker.put()
     return self._copySpeakerToForm(speaker)
Exemple #23
0
    def _createSessionObject(request, conference):
        """Create or update Session object, returning SessionForm/request."""
        # preload necessary data items

        if not request.name:
            raise endpoints.BadRequestException("Session 'name' field required")

        speaker_wskey = None
        if not request.speakerWSKey:
            if request.speakerName:
                speaker = Speaker.query(Speaker.name == request.speakerName).get()
                if speaker:
                    speaker_wskey = speaker.key.urlsafe()
                else:
                    speaker_id = Speaker.allocate_ids(size=1)[0]
                    speaker_key = ndb.Key(Speaker, speaker_id)
                    speaker_wskey = speaker_key.urlsafe()

                    speaker = Speaker(**{'key': speaker_key,'name': request.speakerName})
                    speaker.put()
            else:
                raise endpoints.BadRequestException("Session speaker required")
        else:
            speaker_wskey = request.speakerWSKey

        # copy SessionForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del data['sessionWSKey']
        del data['speakerWSKey']
        del data['speakerName']
        del data['conferenceWSKey']
        del data['startDateHour']

        print '1:' + str(data.keys())

        # add default values for those missing (both data model & outbound Message)
        for df in SESSION_DEFAULTS:
            if data[df] in (None, []):
                data[df] = SESSION_DEFAULTS[df]
                setattr(request, df, SESSION_DEFAULTS[df])

        # convert dates from strings to Date objects; set month based on start_date
        if data['startDate'] and isinstance(data['startDate'], types.StringType):
            data['startDate'] = datetime.strptime(data['startDate'][:10], "%Y-%m-%d").datetime()

        session_id = Session.allocate_ids(size=1, parent=conference.key)[0]
        session_key = ndb.Key(Session, session_id, parent=conference.key)
        data['key'] = session_key
        data['speakerKey'] = speaker_wskey  

        # create Session, send email to organizer confirming creation of Session & return (modified) SessionForm
        session = Session(**data)
        session.put()

        # taskqueue.add(params={'email': user.email(), 'conferenceInfo': repr(request)}, url='/tasks/send_confirmation_email')

        return session
    def createSpeaker(self, request):
        """Create a speaker."""
        if not request.name:
            raise endpoints.BadRequestException(
                "Speaker 'name' field required")

        speaker = Speaker(name=request.name)
        key = speaker.put().urlsafe()  # for debugging
        print(key)  # for debugging
        return SpeakerForm(name=request.name, websafeKey=key)
Exemple #25
0
    def create_speaker(self, request):
        """Create a new speaker."""
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException("Authorization required.")

        speaker = Speaker(name=request.name)
        speaker.put()

        return speaker.to_message()
    def _createSpeakerObject(self, data):
        """Create Speaker object, return Speaker key"""
        # allocate new Speaker ID
        speaker_id = Speaker.allocate_ids(size=1)[0]
        # make Speaker key fom ID
        speaker_key = ndb.Key(Speaker, speaker_id)

        # Create Speaker and return Speaker key
        speaker = Speaker(name=data,
                          key=speaker_key)
        speaker.put()
        return speaker_key
    def _createSpeakerObject(self, request):
        """Create or update a Speaker object, returning SpeakerForm/request.
        In this version, any user can create a speaker, this allows speakers
        to be reused for different conferences"""
        
        # check for required field
        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field required")

        # create Speaker & return SpeakerForm
        speaker = Speaker(name=request.name, organisation=request.organisation)
        speaker.put()
        return self._copySpeakerToForm(speaker)
    def _createSpeakerObject(self, request):
        speaker_id = request.mainEmail
        sp_key = ndb.Key(Speaker, speaker_id)

        speaker = Speaker(
                key=sp_key,
                name=request.name,
                mainEmail=request.mainEmail,
                phone=request.phone,
            )
        speaker.put()

        return request
    def _createSpeakerObject(self, request):
        speaker_id = request.mainEmail
        sp_key = ndb.Key(Speaker, speaker_id)

        speaker = Speaker(
            key=sp_key,
            name=request.name,
            mainEmail=request.mainEmail,
            phone=request.phone,
        )
        speaker.put()

        return request
Exemple #30
0
    def get(self, id = None):
	request = self.wsgi_request
	response = self.wsgi_response
	c = self.context
	response.headers['content-type'] = 'application/json'

	if id is None:
	    #get all the speakers
	    speakers = [x.to_json(encode = False) for x in Speaker.get_all()]
	    self.set_body(json.dumps(speakers))
	else:
	    speaker = Speaker.get(id)
	    self.set_body(speaker.to_json())
	return self.render()
Exemple #31
0
 def test_add_talk_to_speaker(self):
     s = Speaker(name = 'Jimi Hendrix',
                 slug = 'jimi-hendrix',
                 url = 'http://jimi.hendrix.com')
     s.save()
     t = Talk(title = 'First Talk',
              start_time = '15:00')
     t.save()
     
     s.talk_set.add(t)
     self.assertQuerysetEqual(s.talk_set.all(), 
                             ['<Talk: First Talk>'])
     self.assertQuerysetEqual(t.speakers.all(), 
                             ['<Speaker: Jimi Hendrix>'])
Exemple #32
0
 def test_create_speaker(self):
     s = Speaker(name = 'Bob Marley',
                 slug = 'bob-marley',
                 url = 'http://bobmarley.com')
     s.save()
     ce = Contact(kind='E', value='*****@*****.**')
     cf = Contact(kind='F', value='11-5555-9999')
     cp = Contact(kind='P', value='11-5555-8888')
     s.contact_set.add(ce)
     s.contact_set.add(cf)
     s.contact_set.add(cp)
     self.assertQuerysetEqual(s.contact_set.all().order_by(), 
                             ['<Contact: E, [email protected]>',
                             '<Contact: F, 11-5555-9999>',
                             '<Contact: P, 11-5555-8888>'])
    def _createSpeakerObject(self, request):
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del data["sessionKeysToAttend"]
        data["key"] = ndb.Key(Speaker, data["email"])

        # create Speaker entity
        # creation of Speaker & return new Speaker form
        speaker = Speaker(**data).put()

        return self._copySpeakerToForm(speaker.get())
Exemple #34
0
    def speakerQuery(self, request):
        """Return speakers by email, name, or query all if no criteria specified."""
        # should only return one speaker
        if request.email:
            speakers = Speaker.query(Speaker.email == request.email)
        # can return multiple
        elif request.name:
            speakers = Speaker.query(Speaker.name == request.name)
        # returns all if no email or name specified
        else:
            speakers = Speaker.query()

        # return set of SpeakerForm objects per speaker matched
        return SpeakerForms(
            items=[self._copySpeakerToForm(speaker) for speaker in speakers]
        )
 def _copySessionToForm(self, session, name=None):
     """Copy relevant fields from Session to SessionForm."""
     sf = SessionForm()
     for field in sf.all_fields():
         if hasattr(session, field.name):
             if field.name == "dateTime":
                 s_date = getattr(session, field.name)
                 if s_date:
                     setattr(sf, 'dateTime', s_date.strftime('%y-%m-%d'))
                     setattr(sf, 'startTime', s_date.strftime('%H:%M'))
             elif field.name == "speaker":
                 speakerID = getattr(session, field.name)
                 # get speaker object if there is one assigend
                 if speakerID == None:
                     setattr(sf, 'speakerDisplayName', 'NONE ASSIGNED')
                 else:
                     speak = Speaker.get_by_id(speakerID)
                     setattr(sf, 'speakerDisplayName', speak.name)
             #set typeOfSession
             #if there is no typeOfSession then set it to 'NOT_SPECIFIED'
             elif field.name == "typeOfSession":
                 currentType = getattr(session, field.name)
                 if currentType:
                     setattr(sf, field.name,
                             getattr(SessionType, str(currentType)))
                 else:
                     setattr(sf, field.name,
                             getattr(SessionType, 'NOT_SPECIFIED'))
             else:
                 setattr(sf, field.name, getattr(session, field.name))
     sf.check_initialized()
     return sf
Exemple #36
0
 def get(self, confid, secret):
     """Download all speakers and proposals for a conference"""
     # Super-Reviewers
     committee = []
     if confid == 'droidcon-2016':
         committee = ['*****@*****.**',
                      '*****@*****.**']
     # get conference
     conference = Conference.get_by_id(confid)
     # check if the provided secret is correct
     if conference.secret != secret:
         self.response.http_status_message(403)
         return
     speakers = Speaker.query()
     proposals = Proposal.query(ancestor=conference.key)
     reviews = Review.query()
     speakers_dict = [dict(s.to_dict(), **dict(id=s.key.id()))
                      for s in speakers]
     proposals_dict = []
     # create a fast lookup table - reviews by parent
     reviews_by_parent = {}
     for r in reviews:
         parent = r.key.parent()
         rlist = reviews_by_parent[parent]
         if rlist is None:
             rlist = []
         rlist.append(r)
         reviews_by_parent[parent] = rlist
     # crete a fast lookup table - speaker by key
     speakers_by_id = {}
     for s in speakers:
         speakers_by_key[s.key] = s
     for p in proposals:
         p_dict = p.to_dict()
         p_dict['id'] = p.key.id()
         p_r = {}
         p_sum = 0
         for r in reviews_by_parent[p.key]:
             p_r[r.key.id()] = r.to_dict()
             if r.rating:
                 if r.key.id() in committee:
                     # double the rating!
                     p_sum = p_sum + r.rating
                 p_sum = p_sum + r.rating
         s = speakers_by_key[p.speaker]
         if s is not None:
             p_dict['speaker-email'] = s.email
             p_dict['speaker-name'] = s.name
             p_dict['speaker-surname'] = s.surname
             if s.rating:
                 p_sum = p_sum + s.rating
         p_dict['reviews'] = p_r
         p_dict['rating'] = p_sum
         proposals_dict.append(p_dict)
     self.response.headers['Content-Type'] = 'application/json'
     obj = {
         'speakers': speakers_dict,
         'proposals': proposals_dict,
     }
     self.response.out.write(json.dumps(obj, cls=DatastoreEncoder))
Exemple #37
0
 def _createSpeakerObject(self, request):
     """Create a Speaker object, returning SpeakerForm/request."""
     # Ensure that the current user is logged in and get user ID
     user = endpoints.get_current_user()
     if not user:
         raise endpoints.UnauthorizedException('Authorization required')
     # Verify that a name was provided for the speaker
     if not request.name:
         raise endpoints.BadRequestException(
             "Speaker 'name' field required")
     # Copy SpeakerForm/ProtoRPC Message into dict
     data = ({
         field.name: getattr(request, field.name)
         for field in request.all_fields()
     })
     # Create a key for the Speaker
     s_id = Session.allocate_ids(size=1)[0]
     s_key = ndb.Key(Speaker, s_id)
     # Update stored session with session keys
     data['key'] = s_key
     # create Session, send email to organizer confirming
     # creation of Session & return (modified) SessionForm
     Speaker(**data).put()
     taskqueue.add(params={
         'email': user.email(),
         'subject': 'You Added %s as a Speaker!' % data['name'],
         'body': 'Here are the details for the added speaker:',
         'info': repr(request)
     },
                   url='/tasks/send_confirmation_email')
     return request
 def _copySessionToForm(self, session, name=None):
     """Copy relevant fields from Session to SessionForm."""
     sf = SessionForm()
     for field in sf.all_fields():
         if hasattr(session, field.name):
             if field.name == "dateTime":
                 s_date = getattr(session,field.name)
                 if s_date:
                     setattr(sf, 'dateTime', s_date.strftime('%y-%m-%d'))
                     setattr(sf, 'startTime', s_date.strftime('%H:%M'))
             elif field.name == "speaker":
                 speakerID = getattr(session,field.name)
                 # get speaker object if there is one assigend
                 if speakerID == None:
                     setattr(sf, 'speakerDisplayName', 'NONE ASSIGNED')
                 else:
                     speak = Speaker.get_by_id(speakerID)
                     setattr(sf, 'speakerDisplayName', speak.name)
             #set typeOfSession
             #if there is no typeOfSession then set it to 'NOT_SPECIFIED'
             elif field.name == "typeOfSession":
                 currentType = getattr(session,field.name)
                 if currentType:
                     setattr(sf, field.name, getattr(SessionType, 
                         str(currentType)))
                 else:
                     setattr(sf, field.name, getattr(SessionType, 
                         'NOT_SPECIFIED'))
             else:
                 setattr(sf, field.name, getattr(session,field.name))
     sf.check_initialized()
     return sf
Exemple #39
0
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning Speaker/request."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        if not request.name:
            raise endpoints.BadRequestException(
                "Speaker 'name' field required")

        # copy Speaker/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) \
                for field in request.all_fields()}
        del data['websafeKey']

        # add defaults for missing values (both data model & outbound Message)
        for df in DEFAULTS_SPEAKER:
            if data.get(df, None) is None:
                data[df] = DEFAULTS_SPEAKER[df]
                setattr(request, df, DEFAULTS_SPEAKER[df])

        # create Speaker and return updated SpeakerForm with websafeKey
        request.websafeKey = Speaker(**data).put().urlsafe()
        return request
    def _createSessionObject(self, request):
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        if not request.name:
            raise endpoints.BadRequestException(
                "Session 'name' field required")

        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()

        # Check that user trying to Create the Session is the Owner of the Conference.
        if conf.organizerUserId != user_id:
            raise endpoints.BadRequestException(
                "You must be the Owner of the Conference to Create a Session")

        # copy SessionForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}
        del data['websafeConferenceKey']


        # convert dates from strings to Date objects;
        if data['date']:
            data['date'] = datetime.strptime(
                data['date'][:10], "%Y-%m-%d").date()

        # make Parent Key from Conference ID
        parent_key = ndb.Key(Conference, conf.key.id())

        # allocate new Session ID with Conference key as parent
        s_id = Session.allocate_ids(size=1, parent=parent_key)[0]

        # make Session key from ID
        s_key = ndb.Key(Session, s_id, parent=parent_key)
        data['key'] = s_key


        # Check to see if the Speakers email already present in Datastore, 
        # Then adds this Session key to Speakers list of Sessions to Speak at.
        if  data['speakersEmail']:
            oneSpeaker = Speaker.query(Speaker.mainEmail == data['speakersEmail'])
            oneSpeaker = oneSpeaker.get()
            oneSpeaker.sessionsToSpeak.append(s_key.urlsafe())
            oneSpeaker.put()
        del data['speakersEmail']


        Session(**data).put()

        # Check if there is a speaker, if so run the featuredspeaker task.
        if data['speaker']:
            taskqueue.add(
                params={
                    'websafeConferenceKey': request.websafeConferenceKey,
                    'speaker': data['speaker']},
                method='GET',
                url='/tasks/featuredSpeaker')
        return request
Exemple #41
0
 def querySpeakers(self, request):
     """Query for Speakers."""
     speakers = Speaker.query().fetch()
     # return Speakers
     return SpeakerForms(
         items=[self._copySpeakerToForm(speaker) for speaker in speakers]
     )
    def _createSpeakerObject(self, request):
        """Create a Speaker object, returning SpeakerForm/request."""
        
        # Getting and Verifying current user
        user = getUser()

        # Confirm the field is filled out
        checkField(request.name, 'name')

        # Copy SpeakerForm/ProtoRPC Message into dict
        data = ({field.name: getattr(request, field.name)
                for field in request.all_fields()})

        # Create a key for the Speaker
        s_id  = Session.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        
        # Update stored session with session keys
        data['key'] = s_key
        
        # Create and update session and return the form
        Speaker(**data).put()
        
        taskqueue.add(
        
            params = {
                'email'   : user.email(),
                'subject' : 'You Added %s as a Speaker!' % data['name'],
                'body'    : 'Here are the details for the added speaker:',
                'info'    : repr(request)},
        
            url    = '/tasks/send_confirmation_email')
        
        return request
Exemple #43
0
    def getSpeakers(self, request):
        """Returns list of speakers"""
        speakers = Speaker.query()

        # Return set of SpeakerForm objects
        return SpeakerForms(
            speakers=[self._copySpeakerToForm(s) for s in speakers])
Exemple #44
0
    def post(self, id = None):
	request = self.wsgi_request
	response = self.wsgi_response
	c = self.context

	param_dict = dict(
		first_name = request.params.first_name,
		last_name = request.params.last_name,
		desc = request.params.desc,
		twitter_handle = request.params.twitter_handle)
	content = param_dict
	speaker = Speaker(**param_dict)
	speaker = speaker.save()
	self.set_body(speaker.to_json())
	response.headers['content-type'] = 'application/json'
	return self.render()
    def _createSpeakerObject(self, name):
        """Create or update Speaker object,\
         returning SpeakerForm/request."""

        sp_key = ndb.Key(Speaker, name)
        speaker = sp_key.get()

        if not speaker:
            speaker = Speaker(
                key=sp_key,
                name=name,
                details='',
            )
            speaker.put()

        return speaker
    def _createSessionObject(self, request):
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        if not request.name:
            raise endpoints.BadRequestException(
                "Session 'name' field required")

        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()

        # Check that user trying to Create the Session is the Owner of the Conference.
        if conf.organizerUserId != user_id:
            raise endpoints.BadRequestException(
                "You must be the Owner of the Conference to Create a Session")

        # copy SessionForm/ProtoRPC Message into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }
        del data['websafeConferenceKey']

        # convert dates from strings to Date objects;
        if data['date']:
            data['date'] = datetime.strptime(data['date'][:10],
                                             "%Y-%m-%d").date()

        # make Parent Key from Conference ID
        parent_key = ndb.Key(Conference, conf.key.id())

        # allocate new Session ID with Conference key as parent
        s_id = Session.allocate_ids(size=1, parent=parent_key)[0]

        # make Session key from ID
        s_key = ndb.Key(Session, s_id, parent=parent_key)
        data['key'] = s_key

        # Check to see if the Speakers email already present in Datastore,
        # Then adds this Session key to Speakers list of Sessions to Speak at.
        if data['speakersEmail']:
            oneSpeaker = Speaker.query(
                Speaker.mainEmail == data['speakersEmail'])
            oneSpeaker = oneSpeaker.get()
            oneSpeaker.sessionsToSpeak.append(s_key.urlsafe())
            oneSpeaker.put()
        del data['speakersEmail']

        Session(**data).put()

        # Check if there is a speaker, if so run the featuredspeaker task.
        if data['speaker']:
            taskqueue.add(params={
                'websafeConferenceKey': request.websafeConferenceKey,
                'speaker': data['speaker']
            },
                          method='GET',
                          url='/tasks/featuredSpeaker')
        return request
    def allSpeakers(self, request):
        """Get all registered speakers"""
        speakers = Speaker.query()

        return SpeakerForms(
            items=[self._copySpeakerToForm(speaker) for speaker in speakers]
        )
    def getAllSpeakers(self, request):
        """Return all speakers."""
        speakers = Speaker.query()

        return SpeakerForms(
            items=[self._copySpeakerToForm(speaker) for speaker in speakers]
        )
Exemple #49
0
    def createSpeaker(self, request):
        """Create new speaker"""

        # check for required fields
        if not request.name:
            raise endpoints.BadRequestException(
                "Speaker 'name' field required")

        # create speaker
        speaker = Speaker(
            name=request.name.title(
            ),  #store in fixed title case for case-independent string request later
            bio=request.bio)
        speaker.put()

        # return SpeakerForm
        return self._copySpeakerToForm(speaker)
    def _getSpeaker(self, email):
        # Create a new key of kind Speaker from the id.
        s_key = ndb.Key(Speaker, email)

        # Get the entity from datastore by using get() on the key
        speaker = s_key.get()

        # If speaker doesn't exist, we create a new one
        if not speaker:
            speaker = Speaker(
                key=s_key,
                email=email,  # e-mail is enough, no name to store
            )
            # Save the speaker to datastore
            speaker.put()

        return speaker  # return Speaker
Exemple #51
0
    def add_speakers(payload):

        body = request.get_json()

        new_name = body.get("event", None)
        new_expertise = body.get("event_date", None)

        if body is None:
            abort(400)

        try:
            speaker = Speaker(name=new_name, expertise=new_expertise)
            speaker.insert()

            return jsonify({"success": True, "created": speaker})

        except Exception:
            abort(422)
Exemple #52
0
    def getSpeakers(self, request):
        """Create Speaker object, returning SpeakerForm/request."""

        speakers = Speaker.query()

        # return set of SpeakerForm objects per Speaker
        return SpeakerForms(
            items=[self._copySpeakerToForm(speaker) for speaker in speakers]
        )
    def _getSpeakers(self, request, nameFilter=None):
        """ Return speakers, with the option to filter on name
        """
        speakers = Speaker.query()

        if nameFilter:
            speakers.filter(Speaker.name == nameFilter)

        return SpeakerForms(
            items=[self._copySpeakerToForm(speaker) for speaker in speakers])
    def getSpeakers(self, request):
        """Return all the speakers."""

        # create ancestor query for all key matches for this conference
        speakers = Speaker.query()

        # return set of ConferenceForm objects per Conference
        return SpeakerForms(
            items=[self._copySpeakerToForm(speaker) for speaker in speakers]
        )
    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
Exemple #56
0
    def __prepare_speaker(speaker_form):
        """
        Handle updating Speaker records and their session counts
        :param speaker_form: SpeakerForm
        :return: Speaker with updates ready to be put()
        """
        if not isinstance(speaker_form, SpeakerForm):
            raise TypeError('expected %s, but got %s' %
                            (SpeakerForm, speaker_form))

        speaker = Speaker.query(Speaker.name == speaker_form.name) \
            .filter(Speaker.title == speaker_form.title) \
            .get()
        if speaker:
            speaker.numSessions += 1
        else:
            speaker = Speaker.from_form(speaker_form)
            speaker.numSessions = 1

        return speaker
    def querySpeaker(self, request):
        """Queries all speakers with the name and or organization provided."""

        q = Speaker.query()
        q = q.filter(Speaker.speaker == request.speaker)

        # if an organization query is provided, query speaker by organization
        if request.organization:
            q = q.filter(Speaker.organization == request.organization)

        return SpeakerForms(items=[self._copySpeakerToForm(s) for s in q])
    def _createSpeakerObject(self, request):
        """ Create or update Speaker object, returning SpeakerForm
        """

        if not request.name:
            raise endpoints.BadRequestException(
                "Session 'name' field required")

        # copy SpeakerForm/ProtoRPC Message into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }
        del data['websafeKey']

        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key

        spkr_key = Speaker(**data).put()
        return self._copySpeakerToForm(spkr_key.get())