예제 #1
0
    def getFeaturedSpeaker(self, request):
        """Returns the sessions of the featured speaker"""
        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"]
        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]

        # create 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 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
예제 #3
0
    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
예제 #4
0
 def _copySpeakerToForm(self, speak):
     """Copy relevant fields from Speaker to SpeakerForm."""
     sp = SpeakerForm()
     for field in sp.all_fields():
         setattr(sp, field.name, getattr(speak, field.name))
     sp.check_initialized()
     return sp
예제 #5
0
    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
예제 #6
0
    def getFeaturedSpeaker(self, request):
        """Returns the sessions of the featured speaker"""
        # try to get the speaker related data from memcache that was storied earlier
        data = memcache.get('featured_speaker')
        from pprint import pprint
        pprint(data)
        sessionNames = []
        speaker = None

        if data and data.has_key('speaker') and data.has_key('sessionNames'):
            speaker = data['speaker']
            sessionNames = data['sessionNames']
            
          # if the memcache fails or is found to be empty, then display a message accordingly
        else: 
             raise endpoints.NotFoundException(
                'Failed to retrieve data related to the speaker.')    

         # populate the speaker form appropriately in case the speaker data is sucessfully retrieved 
        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 getFeaturedSpeaker(self, request):
        """Returns the sessions of the featured speaker"""
        # try to get data from memcache
        data = memcache.get(MEMCACHE_FEATURED_SPEAKER_KEY)
        sessions = []
        sessionNames = []
        speaker = None

        if data and data.has_key('speaker') and data.has_key('sessionNames'):
            speaker = data['speaker']
            sessionNames = data['sessionNames']

        # if data is not on memcache, get speaker from upcoming session
        else:
            nextSession = Session.query(Session.date >= datetime.now()).order(Session.date, Session.startTime).get()
            if nextSession:
                speaker = nextSession.speaker
                sessions = Session.query(Session.speaker == speaker)
                sessionNames = [session.name for session in sessions]

        # fill speaker form
        speaker_form = SpeakerForm()
        for field in speaker_form.all_fields():
            if field.name ==  'sessionNames':
                setattr(speaker_form, field.name, sessionNames)
            elif field.name == 'speaker':
                setattr(speaker_form, field.name, speaker)
        speaker_form.check_initialized()
        return speaker_form
예제 #8
0
    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
예제 #9
0
    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
예제 #10
0
 def _copySpeakerToForm(self, speaker):
     sf = SpeakerForm()
     for field in sf.all_fields():
         if hasattr(speaker, field.name):
             setattr(sf, field.name, str(getattr(speaker, field.name)))
     sf.check_initialized()
     return sf
예제 #11
0
def sample_form(request):
    if request.method == 'POST':
        sf = None
        instance_id = request.GET.get(u'speaker')
        if instance_id is not None:
            instance = get_object_or_404(Speaker, pk=instance_id)
            sf = SpeakerForm(request.POST, instance=instance)
        else:
            sf = SpeakerForm(request.POST)
        if sf.is_valid():
            speaker = sf.save()
            return http.HttpResponseRedirect(reverse("sampleformok", args=[speaker.pk]))
        else:
            return render_to_response('test/form.html', {'form': sf}, context_instance=RequestContext(request))
    elif request.method == 'GET':
        form = None
        instance_id = request.GET.get(u'speaker')
        if instance_id is not None:
            instance = get_object_or_404(Speaker, pk=instance_id)
            form = SpeakerForm(instance=instance)
        else:
            form = SpeakerForm(initial={u'languages': [1, 2], u'group': 1})
        return render_to_response('test/form.html', {'form': form}, context_instance=RequestContext(request))
    else:
        return http.HttpResponseNotAllowed(['GET', 'POST'])
예제 #12
0
    def _copySpeakerToForm(self, spkr):
        """Copy relevant fields from Speaker to SpeakerForm."""
        sf = SpeakerForm()
        setattr(sf, "name", getattr(spkr, "name"))
        setattr(sf, "websafeKey", spkr.key.urlsafe())

        sf.check_initialized()
        return sf
예제 #13
0
 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))
     sf.check_initialized()
     return sf
예제 #14
0
 def _copySpeakerToForm(self, speaker):
     '''Copy relevant fields from Speaker to SpeakerForm'''
     speaker_form = SpeakerForm()
     for field in speaker_form.all_fields():
         if hasattr(speaker, field.name):
             setattr(speaker_form, field.name, getattr(speaker, field.name))
     speaker_form.check_initialized()
     return speaker_form
예제 #15
0
    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
예제 #16
0
 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 speaker to form"""
     sp = SpeakerForm()
     for field in sp.all_fields():
         if hasattr(speaker, field.name):
             setattr(sp, field.name, getattr(speaker, field.name))
         elif field.name == "websafeKey":
             setattr(sp, field.name, speaker.key.urlsafe())
     sp.check_initialized()
     return sp
예제 #18
0
 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
예제 #19
0
 def _copySpeakerToForm(self, speaker):
     sf = SpeakerForm()
     for field in sf.all_fields():
         print "Field %s" % field.name
         if hasattr(speaker, field.name):
             setattr(sf, field.name, str(getattr(speaker, field.name)))
         elif field.name == 'websafeKey':
             setattr(sf, field.name, speaker.key.urlsafe())
     sf.check_initialized()
     return sf
예제 #20
0
 def _copySpeakerToForm(self, speaker):
     """Check for speaker info, return speakerForm with speaker information."""
     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
예제 #21
0
 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
예제 #22
0
 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
예제 #24
0
    def _copySpeakerToForm(self, speaker):
        # Get empty SessionForm
        sf = SpeakerForm()

        # Copy fields from Session to SessionForm
        for field in sf.all_fields():
            if hasattr(speaker, field.name):
                setattr(sf, field.name, getattr(speaker, field.name))
        sf.check_initialized()
        return sf
예제 #25
0
 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
예제 #26
0
    def _copySpeakerToForm(self, speaker):
        sf = SpeakerForm()
        for field in sf.all_fields():
            if hasattr(speaker, field.name):
                # convert Date to date string; just copy others
                setattr(sf, field.name, getattr(speaker, field.name))
            elif field.name == "websafeKey":
                setattr(sf, field.name, speaker.key.urlsafe())

        sf.check_initialized()
        return sf
예제 #27
0
 def getFeaturedSpeaker(self, request):
     """Returns the sessions of the featured speaker"""
     # attempt to get data from memcache
     data = memcache.get(MEMCACHE_FEATURED_SPEAKER_KEY)
     # copy relevant fields to SpeakerForm
     sf = SpeakerForm()
     for field in sf.all_fields():
         if data and data[field.name]:
             setattr(sf, field.name, str(data[field.name]))
     sf.check_initialized()
     return sf
예제 #28
0
 def getFeaturedSpeaker(self, request):
     """Return all featured speakers from Memcache"""
     featuredSpeakers = memcache.get(MEMCACHE_FEATURED_SPEAKER_KEY)
     speakerForms = []
     for speakerEmail in featuredSpeakers:
         speaker = SessionSpeaker.query(SessionSpeaker.email == speakerEmail).get()
         speakerForm = SpeakerForm()
         speakerForm.name = speaker.name
         speakerForm.email = speaker.email
         speakerForm.check_initialized()
         speakerForms.append(speakerForm)
     return SpeakerForms(items=speakerForms)
예제 #29
0
 def _copySpeakerToForm(self, speaker):
     """Copy relevant fields from Speaker to SpeakerForm."""
     # for all fields in SpeakerForm copy the analogous parameter in the
     # Speaker object to the 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
예제 #30
0
 def _copySpeakerToForm(self, speak):
     """Copy relevant fields from Speaker to SpeakerForm."""
     # Initialze form, copy existing properties, validate required fields
     spf = SpeakerForm()
     for field in spf.all_fields():
         if hasattr(speak, field.name):
             setattr(spf, field.name, getattr(speak, field.name))
         elif field.name == "websafeKey":
             setattr(spf, field.name, speak.key.urlsafe())
         elif field.name == "creatorUserId":
             setattr(spf, field.name, speak.key.parent().id())
     spf.check_initialized()
     return spf
예제 #31
0
 def toSpeakerForm(self, speaker, displayName=None, websafeSpeakerKey=None):
     """Copy relevant fields from Speaker to SpeakerForm."""
     sp = SpeakerForm()
     for field in ("sessionKeysToSpeakAt", "mainEmail", "displayName", "websafeSpeakerKey"):
         if hasattr(speaker, field):
             setattr(sp, field, getattr(speaker, field))
         elif field == "websafeSpeakerKey" and hasattr(speaker, "key"):
             setattr(sp, field, speaker.key.urlsafe())
     if displayName:
         setattr(sp, "displayName", displayName)
     if websafeSpeakerKey:
         setattr(sp, "websafeSpeakerKey", websafeSpeakerKey)
     sp.check_initialized()
     return sp
예제 #32
0
    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
예제 #33
0
    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
예제 #34
0
    def getFeaturedSpeaker(self, request):
        """Return conference name and Featured speaker (by websafeConferenceKey)."""
        # get Conference object from request; bail if not found
        sf = SpeakerForm()
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' % request.websafeConferenceKey)
        #prof = conf.key.parent().get()
        for field in sf.all_fields():
            if hasattr(conf, field.name):
                setattr(sf, field.name, getattr(conf, field.name))

        sf.check_initialized()

        return sf
예제 #35
0
    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 _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
예제 #37
0
    def _copySpeakerToForm(self, speaker):
        """Copy relevant fields from Speaker to SpeakerForm."""
        speaker_form = SpeakerForm()
        for field in speaker_form.all_fields():
            if hasattr(speaker, field.name):
                if field.name == "sessionKeysSpeakAt":
                    all_keys = []
                    for each_key in speaker.sessionKeysSpeakAt:
                        all_keys.append(each_key.urlsafe())
                    print "%^&*(*&^%$%^&*(*&^%"
                    print all_keys
                    setattr(speaker_form, field.name, all_keys)
                else:
                    setattr(speaker_form, field.name,
                            getattr(speaker, field.name))

            elif field.name == "websafeKey":
                setattr(speaker_form, field.name, speaker.key.urlsafe())
        speaker_form.check_initialized()
        return speaker_form
예제 #38
0
    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 _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
예제 #40
0
    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
예제 #41
0
    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()
예제 #42
0
 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
예제 #43
0
    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)
예제 #44
0
 def _copySpeakerToForm(self, request):
     """Copy relevant fields from Speaker to SpeakerForm."""
     sf = SpeakerForm()
     sf.check_initialized()
     return sf
    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())