예제 #1
0
    def _createSpeakerObject(self, request):
        """Create speaker object, returning speakerForm/request."""

        # check the required fields and throw exception is not set
        if not request.firstName:
            raise endpoints.BadRequestException(
                "Session 'firstName' field required")
        if not request.familyName:
            raise endpoints.BadRequestException(
                "Session 'familyName' field required")

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

        # generate an ndb key for the new Speaker entry
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key

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

        return request
예제 #2
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)
예제 #3
0
    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)
예제 #4
0
    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 _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)
예제 #6
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
    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())
예제 #8
0
파일: conference.py 프로젝트: mkmadd/ud858
    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 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
예제 #10
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)
예제 #11
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
예제 #12
0
    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)
예제 #13
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 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)

        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']

        # generate Profile Key based on user ID and Speaker
        # ID based on Profile key get Speaker key from ID
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data['key'] = s_key

        # creation of Speaker & return (modified) SpeakerForm
        Speaker(**data).put()

        return self._copySpeakerToForm(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())
예제 #16
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
예제 #17
0
    def _createSpeakerObject(self, request):
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        if not data["name"]:
            raise endpoints.BadRequestException("Speaker 'name' field required")
        del data["websafeKey"]
        data["key"] = s_key
        Speaker(**data).put()

        return self._copySpeakerToForm(ndb.Key(Speaker, s_id).get())
    def _createSpeaker(self, request):
        """Creates a new Speaker and converts it to a SpeakerForm"""
        speaker = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del speaker["websafeSpeakerKey"]

        # Generate a unique key for the speaker
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        speaker["key"] = s_key
        Speaker(**speaker).put()

        return self.toSpeakerForm(request, None, s_key.urlsafe())
    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
예제 #20
0
    def _createSpeakerObject(self, request):
        """ Create or update Speaker object, returning SpeakerForm/request."""

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

        # allocate new Speaker ID
        speakerId = Speaker.allocate_ids(size=1)[0]
        # make Speaker key from ID
        speakerKey = ndb.Key(Speaker, speakerId)
        data["key"] = speakerKey

        # create Speaker
        Speaker(**data).put()
        return self._copySpeakerToForm(speakerKey.get())
예제 #21
0
    def _createSpeakerObject(self, request):
        user = endpoints.get_current_user()
        # check if user is authrorized and displayName is presented
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        if not request.displayName:
            raise endpoints.BadRequestException("Speaker 'displayName' field required")

        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del data['websafeKey']
        sp_id = Speaker.allocate_ids(size=1)[0]
        sp_key = ndb.Key(Speaker, sp_id)
        data['key'] = sp_key

        # save data
        sp = Speaker(**data)
        sp.put()
        return self._copySpeakerToForm(sp)
    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())
예제 #23
0
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning SpeakerForms."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

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

        # Check for existing Speaker created by that user
        # with the requested displayName
        p_key = ndb.Key(Profile, user_id)
        exist_speak = Speaker.query(
            Speaker.displayName == request.displayName, ancestor=p_key).get()
        if exist_speak:
            raise endpoints.ConflictException(
                "That speaker name already exists.")

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

        # make Profile Key from user ID
        p_key = ndb.Key(Profile, user_id)
        # allocate new Speaker ID with User key as parent
        s_id = Speaker.allocate_ids(size=1, parent=p_key)[0]
        # make Speaker key from ID
        sp_key = ndb.Key(Speaker, s_id, parent=p_key)
        data['key'] = sp_key

        # create Speaker, send email to organizer confirming
        # creation of Speaker & return (modified) SpeakerForm
        Speaker(**data).put()
        spk = sp_key.get()

        return self._copySpeakerToForm(speak=spk)
예제 #24
0
 def _createSpeakerObject(self, request):
     """Create or update a Speaker object"""
     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()}
     
     s_id = Speaker.allocate_ids(size=1)[0]
     s_key = ndb.Key(Speaker, s_id)
     data['key'] = s_key
     
     Speaker(**data).put()
     
     return request
예제 #25
0
    def createSpeaker(self, request):
        """Create a new spaeker form with provided speaker name and
        organization"""

        # make sure user is logged in.
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        # copy request data into a dictionary.
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}

        # get a key for the speaker.
        speaker_id = Speaker.allocate_ids(size=1)[0]
        speaker_key = ndb.Key(Speaker, speaker_id)
        data['key'] = speaker_key

        new_speaker = Speaker(**data)
        new_speaker.put()

        return self._copySpeakerToForm(new_speaker)
    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())
예제 #27
0
 def createSpeaker(self, request):
     """ Create a speaker """
     # Make sure the user is logged in.
     user = endpoints.get_current_user()
     if not user:
         raise endpoints.UnauthorizedException('Authorization required.')
     user_id = getUserId(user)
     user_key = ndb.Key(Profile, user_id)
     # Create the Speaker object
     speaker = Speaker()
     # Copy the fields from the request to the Speaker
     speaker = message_to_ndb(request, speaker)
     # Allocate the Speaker id and set the key with the User as parent
     speaker_id = speaker.allocate_ids(size=1, parent=user_key)[0]
     speaker.key = ndb.Key(Speaker, speaker_id, parent=user_key)
     # Write the speaker to the db
     speaker.put()
     # Create a SpeakerForm and copy the fields from the request
     speaker_form = SpeakerForm()
     speaker_form = ndb_to_message(speaker, speaker_form)
     # Send back the SpeakerForm including the websafe key
     return speaker_form
예제 #28
0
    def _createSpeakerObject(self, request):
        """Create SpeakerObject"""
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException("Authorization required")

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

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

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

        # create Conference, send email to organizer confirming
        # creation of Conference & return (modified) ConferenceForm
        Speaker(**data).put()

        return self._copySpeakerToForm(request)
예제 #29
0
    def _createSpeakerObject(self, request):
        """Create or update Speaker object, returning Speaker/request."""
        if not request.name:
            raise endpoints.BadRequestException("Speaker 'name' field required")
        # copy SessionForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del data["websafeKey"]
        # TODO
        # add default values for those missing
        # for df in DEFAULTS:
        #     if data[df] in (None, []):
        #         data[df] = DEFAULTS[df]
        #         setattr(request, df, DEFAULTS[df])

        # ID based on Speaker key
        s_id = Speaker.allocate_ids(size=1)[0]
        s_key = ndb.Key(Speaker, s_id)
        data["key"] = s_key

        # create Speaker
        Speaker(**data).put()
        return request
예제 #30
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)
예제 #31
0
    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')

        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()}

        # generate Speaker Key based on system allocated Speaker ID
        speaker_id = Speaker.allocate_ids(size=1)
        speaker_key = ndb.Key(Speaker, speaker_id[0])
        data['key'] = speaker_key

        # creation of Speaker & return (modified) SpeakerForm
        Speaker(**data).put()
        return request
예제 #32
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)
    def _createSpeakerObject(self, request):
        """Create or update Speaker object"""
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = _getUserId()

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

        # copy SpeakerForm/ProtoRPC Message into dict
        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
        Speaker(**data).put()

        return request
예제 #34
0
    def _createSpeakerObject(self, request):
        """Create or update a Speaker object"""
        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()
        }

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

        Speaker(**data).put()

        return request
예제 #35
0
    def createSpeaker(self, request):
        """Create a new spaeker form with provided speaker name and
        organization"""

        # make sure user is logged in.
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        # copy request data into a dictionary.
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }

        # get a key for the speaker.
        speaker_id = Speaker.allocate_ids(size=1)[0]
        speaker_key = ndb.Key(Speaker, speaker_id)
        data['key'] = speaker_key

        new_speaker = Speaker(**data)
        new_speaker.put()

        return self._copySpeakerToForm(new_speaker)
예제 #36
0
    def _createSessionObject(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(
                "Session 'name' field required")

        # Check that the current user is the conference organizer
        c_key = ndb.Key(urlsafe=request.websafeConferenceKey)
        conf = c_key.get()
        if user_id != conf.organizerUserId:
            raise endpoints.UnauthorizedException(
                'Only the conference organizer may add a session')

        # copy SessionForm/ProtoRPC Message into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }
        del data['websafeConferenceKey']  # elements of form but not session
        del data['websafeSessionKey']
        del data['conferenceName']
        # performing this step once we're done with this data item:
        # del data['speakerName']

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

        # generate Conference Key based on conference ID, and Session
        # ID based on Conference key. get Session key from ID
        # already obtained the conference key
        sess_id = Session.allocate_ids(size=1, parent=c_key)[0]
        sess_key = ndb.Key(Session, sess_id, parent=c_key)
        data['key'] = sess_key
        # set conferenceKey. not assumed it comes in with the request
        # this data field no longer part of SessionForm
        # data['conferenceKey'] = request.conferenceKey = request.websafeConferenceKey

        # create or update speaker with session
        speak_q = Speaker.query()
        speak_q = speak_q.filter(Speaker.name == data['speakerName'])
        speak = speak_q.get()
        if not speak:
            # create the speaker
            speak_id = Speaker.allocate_ids(size=1)[0]
            speak_data = {}
            speak_data['key'] = ndb.Key(Speaker, speak_id)
            speak_data['name'] = data['speakerName']
            speak_data['sessionKeysToSpeak'] = [
                sess_key
            ]  # DEBUG store key not websafe key
            speak = Speaker(**speak_data)
        else:
            # add the session to the speaker
            speak.sessionKeysToSpeak.append(sess_key)
        # done with this data item and is not part of Session
        del data['speakerName']
        # speaker key belongs in Session
        data['speakerKey'] = speak.key
        # this statement appears later; session should be put first
        # speak.put()

        # create Session, create memcache entry if speaker
        # has > 1 session at Conference & return (copied) SessionForm
        sess = Session(**data)
        sess.put()
        speak.put()  # only commit speaker if session successful
        # TODO memcache entry as described above
        speak_wkey = speak.key.urlsafe()
        conf_wkey = request.websafeConferenceKey
        taskqueue.add(params={'sess_wkey': sess_key.urlsafe()},
                      url='/tasks/set_featured_speaker')

        return self._copySessionToForm(sess, conf.name,
                                       speak.name)  # formerly request
예제 #37
0
    def _createSessionObject(self, request):
        """Create Session object, returning SessionForm/request."""
        # user must be logged in to create session
        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")
        
        if not request.websafeConferenceKey:
            raise endpoints.BadRequestException("websafeConferenceKey required")
        
        conf = ndb.Key(urlsafe = request.websafeConferenceKey).get()

        if not conf:
            raise endpoints.NotFoundException("No conference exists with websafe key %s" 
                % request.websafeConferenceKey)
        
        if user_id != conf.organizerUserId:
            raise endpoints.ForbiddenExeption("Only conference creator can add sessions")

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

        del data['websafeConferenceKey']
        del data['websafeKey']

        speaker = Speaker.query(Speaker.name == request.speaker).get()
        check_featured = False
        if not speaker:
            spkr_id = Speaker.allocate_ids(size = 1)[0]
            spkr_key = ndb.Key(Speaker, spkr_id)
            data['speaker'] = Speaker(name = request.speaker).put()
        else:
            data['speaker'] = speaker.key
            check_featured = True
            
        # convert dates from strings to Date objects
        if data['date']:
            data['date'] = datetime.strptime(data['date'][:10], "%Y-%m-%d").date()

        # generate Profile Key based on user ID and Conference
        # ID based on Profile key get Conference key from ID
        c_key = ndb.Key(urlsafe = request.websafeConferenceKey)
        s_id = Session.allocate_ids(size = 1, parent = c_key)[0]
        s_key = ndb.Key(Session, s_id, parent = c_key)
        data['key'] = s_key

        # create Session
        Session(**data).put()

        if check_featured:
            # The method that checks whether to feature a speaker uses an ancestor
            # query, which should guarantee strong consistency. Adding the push
            # task after the put() guarantees the new session will show up in that
            # query.
            taskqueue.add(params = {'speaker': speaker.key.urlsafe(),
                'conf': conf.key.urlsafe()},
                url='/tasks/set_featured_speaker')
        
        sess = s_key.get()
        return self._copySessionToForm(sess)
예제 #38
0
    def _createSessionObject(self, request):
        """Create or update Session object, returning SessionForm/request."""
        # Get the user saved in session
        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")
        
        c_key = ndb.Key(urlsafe=request.websafeConfKey)

        # Check that the name is unique within the conference
        name_check = Session.query(ancestor=c_key)
        name_check = name_check.filter(Session.name==request.name).get()
        
        if name_check:
            raise endpoints.BadRequestException(
                "Entity with name '%s' already exists" % request.name)


        # Check that the conference exists
        conf = c_key.get()
        if not conf:
            raise endpoints.NotFoundException(
                'No conf with key: %s' % request.websafeConferenceKey)

        # Check that the user is the conference organizer
        if user_id != conf.organizerUserId:
            raise endpoints.ForbiddenException(
                'Only the organizer may update the conference')

        # Copy SessionForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}
        
        # Delete unnecessary fields from the form
        del data['displayName']
        del data['websafeConfKey'] 
        del data['sessionKey']
        
        # Convert date from string into Date object;
        if data['date']:
            data['date'] = datetime.strptime(
                data['date'][:10], "%Y-%m-%d").date()

        # Convert times from string into Time objects
        if data['startTime']:
            data['startTime'] = datetime.strptime(
                data['startTime'][:5], "%H:%M").time()
        if data['duration']:
            try:
                datetime.strptime(
                    data['duration'][:5], "%H:%M").time()
            except:
                raise endpoints.BadRequestException("Duration Must be in 'HH:MM' format")
            
        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
        
        if data['speaker']:
            print 'In createSession, there is a speaker...'
            # Check to see if the speaker already exists
            speaker = Speaker.query(Speaker.name == data['speaker']).get()

            # If the speaker doesn't exist, create a Speaker entity for them    
            if not speaker:
                speaker_id = Speaker.allocate_ids(size=1)[0]
                speaker_key = ndb.Key(Speaker, speaker_id)
                speaker = Speaker()
                speaker.populate(
                    key=speaker_key,
                    name=data['speaker']
                )
                
                speaker.put()
            else:
                speaker_key = speaker.key
            
        
            # Set the session speaker to the speaker's urlsafe key
            data['speaker'] = speaker_key.urlsafe()
            
            #Put the session in the database
            Session(**data).put()
            
            # Use the TaskQueue to check whether the new session's
            # speaker should be the next featured speaker.
            taskqueue.add(
                params={'sessionKey': s_key.urlsafe()},
                url='/tasks/set_featured_speaker'
            )
            
        else:
            #Put the session in the database
            Session(**data).put()

        return request
    def _create_session_object(self, request):
        """Create the session object and put into datastore"""
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        c_key = ndb.Key(urlsafe=request.websafeConferenceKey)
        conference = c_key.get()

        # Do checks
        if user_id != conference.organizerUserId:
            raise endpoints.BadRequestException("Current user not authorised to add session for this conference")
        if not request.name:
            raise endpoints.BadRequestException("Session 'name' field required")
        if not request.durationMinutes:
            raise endpoints.BadRequestException("Session 'durationMinutes' field required")
        if not request.date:
            raise endpoints.BadRequestException("Session 'date' field required")
        if not request.startTime:
            raise endpoints.BadRequestException("Session 'startTime' field required")

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

        s_id = Session.allocate_ids(size=1, parent=c_key)
        s_key = ndb.Key(Session, s_id[0], parent=c_key)

        data['key'] = s_key

        if data['date']:
            data['date'] = datetime.strptime(data['date'][:10], '%Y-%m-%d').date()

        if data['startTime']:
            data['startTime'] = datetime.strptime(data['startTime'], '%H:%M').time()

        # create Session
        session = Session(**data).put()

        # get the newly created Session so we can pass back the websafeKey
        new_session = session.get()

        if data['speaker']:
            try:
                speaker = Speaker.query(Speaker.name == data['speaker']).fetch()[0]
            except:
                speaker_id = Speaker.allocate_ids(size=1, parent=s_key)
                speaker_key = ndb.Key(Speaker, speaker_id[0], parent=s_key)
                new_speaker = Speaker(name=data['speaker'], key=speaker_key)
                speaker_key = new_speaker.put()
                speaker = speaker_key.get()

            speaker.sessions.append(new_session.name)
            speaker.put()

            # Add 'Get Featured Speaker' task to queue
            taskqueue.add(url='/tasks/set_featured_speakers', params={'speaker_key': speaker.key.urlsafe()})

        return self._copy_session_to_form(new_session)