예제 #1
0
파일: api.py 프로젝트: Mrudul/clo-summit
    def post(self, key):
        presentation_filename = self.request.get('presentation_filename')
        speaker = Speaker()
        speaker.full_name = self.request.get('full_name')
        speaker.designation = self.request.get('designation')
        speaker.organization = self.request.get('organization')
        speaker.department = self.request.get('department')
        speaker.organization_website = self.request.get('organization_website')
        speaker.city = self.request.get('city')
        speaker.email = self.request.get('email')
        speaker.mobile_number = self.request.get('mobile_number')
        speaker.research_topic = self.request.get('research_topic')
        speaker.bio_sketch = self.request.get('bio_sketch')
        if presentation_filename:
            speaker.presentation = self.request.get('presentation')
            speaker.presentation_filename = self.request.get('presentation_filename')
            speaker.presentation_extension = splitext(presentation_filename)[1]
        speaker.put()

        queue_mail_task(url='/worker/mail/thanks/speaker_nomination/',
            params=dict(
                full_name=speaker.full_name,
                email = speaker.email,
                key=str(speaker.key())
            ),
            method='POST'
        )

        self.response.out.write(speaker.to_json('full_name', 'is_starred', 'is_deleted', 'is_active'))
예제 #2
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)
    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)
예제 #4
0
    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
예제 #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)
예제 #6
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)
예제 #7
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)
예제 #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)
예제 #9
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)
예제 #10
0
파일: api.py 프로젝트: yesudeep/clo-summit
    def post(self, key):
        presentation_filename = self.request.get("presentation_filename")
        speaker = Speaker()
        speaker.full_name = self.request.get("full_name")
        speaker.designation = self.request.get("designation")
        speaker.organization = self.request.get("organization")
        speaker.department = self.request.get("department")
        speaker.organization_website = self.request.get("organization_website")
        speaker.city = self.request.get("city")
        speaker.email = self.request.get("email")
        speaker.mobile_number = self.request.get("mobile_number")
        speaker.research_topic = self.request.get("research_topic")
        speaker.bio_sketch = self.request.get("bio_sketch")
        if presentation_filename:
            presentation = Presentation()
            presentation.filename = self.request.get("presentation_filename")
            presentation.content = db.Blob(self.request.get("presentation"))
            presentation.extension = splitext(presentation_filename)[1]
            presentation.put()
            speaker.presentation_file = presentation
        speaker.put()

        queue_mail_task(
            url="/worker/mail/thanks/speaker_nomination/",
            params=dict(full_name=speaker.full_name, email=speaker.email, key=str(speaker.key())),
            method="POST",
        )

        self.response.out.write(speaker.to_json("full_name", "is_starred", "is_deleted", "is_active"))
예제 #11
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)
예제 #12
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)
예제 #13
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)
예제 #14
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
예제 #15
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
예제 #17
0
    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
예제 #20
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)
예제 #21
0
    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
예제 #22
0
파일: www.py 프로젝트: Mrudul/clo-summit
    def post(self):
        from models import Presentation
        
        host_info = get_host_info(self.request)
        host_info.put()

        presentation_filename = self.request.get('presentation_filename')
        presentation = self.request.get('presentation')

        speaker = Speaker()
        speaker.full_name = self.request.get('full_name')
        speaker.designation = self.request.get('designation')
        speaker.organization = self.request.get('organization')
        speaker.department = self.request.get('department')
        speaker.organization_website = self.request.get('organization_website')
        speaker.city = self.request.get('city')
        speaker.email = self.request.get('email')
        speaker.mobile_number = self.request.get('mobile_number')
        speaker.research_topic = self.request.get('research_topic')
        speaker.bio_sketch = self.request.get('bio_sketch')
        speaker.host_info = host_info
        #if presentation_filename:
        #    speaker.presentation = db.Blob(presentation)
        #    speaker.presentation_filename = presentation_filename
        #    speaker.presentation_extension = splitext(presentation_filename)[1]
        if presentation_filename:
            speaker_presentation = Presentation()
            speaker_presentation.filename = presentation_filename
            speaker_presentation.extension = splitext(presentation_filename)[1]
            speaker_presentation.content = db.Blob(presentation)
            speaker_presentation.put()
            
            speaker.presentation = speaker_presentation
        
        speaker.put()

        queue_mail_task(url='/worker/mail/thanks/speaker_nomination/',
            params=dict(
                full_name=speaker.full_name,
                email = speaker.email,
                key=str(speaker.key())
            ),
            method='POST'
        )

        response = render_template('thank_you.html', message_title='Thank you for nominating a speaker.', message_body='We appreciate your taking the time to nominating a speaker.  We will get in touch with you soon')
        self.response.out.write(response)
예제 #23
0
    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
예제 #24
0
    def _addSpeaker(self, request):
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        c_key = ndb.Key(Speaker, request.speakerEmail)
        sp = c_key.get()
        if not sp:
            sp = Speaker(
                key=c_key,
                speakerName=request.speakerName,
                speakerEmail=request.speakerEmail,
                specialization=request.specialization,
                currentWorkingPlace=request.currentWorkingPlace,
                )
        sp.put()
        return sp      # return Speaker
예제 #25
0
    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
예제 #26
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)
예제 #27
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)
예제 #28
0
    def _createSpeakerObject(self, request):
        """Create Speaker and return to user."""
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}

        # generate Speaker Key based on email
        s_key = ndb.Key(Speaker, data['email'])
        data['key'] = s_key

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

        # return SpeakerForm
        return self._copySpeakerToForm(spkr)
예제 #29
0
    def _getSpeaker(self, name, email):
        """Return Speaker from datastore, creating new one if non-existent."""
        # get Speaker from datastore
        s_key = ndb.Key(Speaker, email)
        speaker = s_key.get()
        # create new Speaker if not there
        if not speaker:
            speaker = Speaker(
                key = s_key,
                name = name,
                email= email)
            speaker.put()
        else:
            #check name is the same, else return error 
            if speaker.name != name:
                raise ConflictException(
                    "A different speaker is already registered with this email %s" % email)

        return speaker      # return Speaker
예제 #30
0
    def _doSpeaker(self, request):
        """Get, create or update speaker"""
        s_key = ndb.Key(Speaker,request.mainEmail)
        speaker = s_key.get()
        # if speaker exists, process user-modifyable fields
        if speaker:
            for field in ('displayName', 'bio'):
                if hasattr(request, field):
                    val = getattr(request, field)
                    if val:
                        setattr(speaker, field, str(val))
        else:
            speaker = Speaker(key=s_key, displayName=request.displayName, mainEmail=request.mainEmail, bio=request.bio)
            
        # put the modified speaker to datastore
        speaker.put()

        # return SpeakerForm
        return self._copySpeakerToForm(speaker)
예제 #31
0
    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)
예제 #32
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)
예제 #33
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
예제 #34
0
    def _createSpeakerObject(self, request):
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        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
        sp = Speaker(**data)
        sp.put()

        return self._copySpeakerToForm(sp)
예제 #35
0
    def _doSpeaker(self, request):
        """Get, create or update speaker"""
        sp_key = ndb.Key(Speaker, request.displayName)
        speaker = sp_key.get()
        # if speaker exists, process user-modifyable fields
        if speaker:
            for field in ('displayName', 'bio'):
                if hasattr(request, field):
                    val = getattr(request, field)
                    if val:
                        setattr(speaker, field, str(val))
        # if speaker doesn't exist, create new speaker object
        else:
            speaker = Speaker(key=sp_key,
                              displayName=request.displayName,
                              mainEmail=request.mainEmail,
                              bio=request.bio,
                              sessionKeys=[])
        # put the modified speaker to datastore
        speaker.put()

        # return SpeakerForm
        return self._copySpeakerToForm(speaker)
예제 #36
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)
예제 #37
0
 def post(self, confid):
     """Accept proposals via POST requests"""
     # get parameters from request
     name = self.request.get("name")
     surname = self.request.get("surname")
     email = self.request.get("email")
     bio = self.request.get("bio")
     useOld = self.request.get("use-old")
     title = self.request.get("title")
     abstract = self.request.get("abstract")
     duration = int(self.request.get("duration"))
     comment = self.request.get("comment")
     # timestamp 'now'
     now = datetime.now()
     # search for conference
     conference = Conference.get_by_id(confid)
     if not conference:
         self.error("Conference not found", 404)
         return
     # search for speaker?
     speakerKey = None
     if useOld:
         # get speakers for email
         speakers = Speaker.query(Speaker.email == email)
         # and order by modified-date (reverse) to get the last one
         speakers = speakers.order(-Speaker.modified).iter()
         if speakers.has_next():
             speaker = speakers.next()
             speakerKey = speaker.key
     if not speakerKey:
         # create speaker object
         speaker = Speaker(name=name, surname=surname, email=email,
                           bio=bio, created=now, modified=now)
         speakerKey = speaker.put()
     # submit proposal
     proposal = Proposal(parent=conference.key, speaker=speakerKey,
                         abstract=abstract, duration=duration,
                         title=title, comment=comment, created=now,
                         modified=now)
     proposalKey = proposal.put()
     if proposalKey:
         self.success()
     else:
         self.error("Error when storing proposal", 500)
예제 #38
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)
예제 #39
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)
예제 #40
0
    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')
        if not request.name:
            raise endpoints.BadRequestException(
                "Session 'name' field required")
        if not request.speaker_name:
            raise endpoints.BadRequestException(
                "Session 'speaker_name' field required")
        if not request.speaker_email:
            raise endpoints.BadRequestException(
                "Session 'speaker_email' field required")
        if not request.date:
            raise endpoints.BadRequestException(
                "Session 'date' field required")
        if not request.start_time:
            raise endpoints.BadRequestException(
                "Session 'start time' field required")
        # Let's get the conference object from the websafe key, as entered by the user
        wsck = request.conf_websafekey
        conf = ndb.Key(urlsafe=wsck).get()
        # Let's get the speaker, as per the email address that user entered
        # check if speaker object exists:
        print "The email is: ", request.speaker_email
        speaker_key = ndb.Key(Speaker, request.speaker_email)
        speaker = speaker_key.get()
        # if speaker object does not exist, check if the speaker has a user profile already
        if not speaker:
            print "That speaker doesn't exist, so we will make one."
            sp_key = ndb.Key(Profile, request.speaker_email)
            speaker_profile = sp_key.get()
            # If the speaker doesn't have a user profile yet
            if not speaker_profile:
                sp_key_urlsafe = ""
            else:
                sp_key_urlsafe = sp_key.urlsafe()
            # Create the speaker object and add to the datastore.
            speaker = Speaker(key=speaker_key,
                              name=request.speaker_name,
                              email=request.speaker_email,
                              speciality=request.speaker_speciality,
                              user_profile_key=sp_key_urlsafe)
            speaker.put()
        # Get the urlsafe key, which we put in the session object (to id the speaker entity)
        speaker_key = speaker.key.urlsafe()

        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' % wsck)
        # copy SessionForm/ProtoRPC Message into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }
        del data['conf_websafekey']
        del data['speaker_email']
        del data['speaker_name']
        del data['speaker_speciality']

        # Once we have a speaker, we can put the key into the data dict
        data['speaker_key'] = speaker_key

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

        # 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")
        if data['start_time']:
            data['start_time'] = datetime.strptime(data['start_time'][:10],
                                                   "%H:%M")

        # The following code makes the session a child of the conference
        # Get the Key instance form the urlsafe key
        c_key = ndb.Key(urlsafe=wsck)
        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
        sess = Session(**data)
        sess.put()
        # Let's figure out if this speaker should be featured in the announcements:
        # Count how many sessions the speaker is to speak in.
        speakers_count = Session.query(ancestor=conf.key).filter(
            Session.speaker_key == sess.speaker_key).count()
        # Send the speaker name and count to the task to set featured speakers
        taskqueue.add(params={
            'speaker': speaker.name,
            'count': speakers_count
        },
                      url='/tasks/set_featured_speaker')
        return self._copySessionToForm(sess, conf)
예제 #41
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
예제 #42
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
예제 #43
0
    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')
        if not request.name:
            raise endpoints.BadRequestException("Session 'name' field required")
        if not request.speaker_name:
            raise endpoints.BadRequestException("Session 'speaker_name' field required")
        if not request.speaker_email:
            raise endpoints.BadRequestException("Session 'speaker_email' field required")
        if not request.date:
            raise endpoints.BadRequestException("Session 'date' field required")
        if not request.start_time:
            raise endpoints.BadRequestException("Session 'start time' field required")
        # Let's get the conference object from the websafe key, as entered by the user
        wsck = request.conf_websafekey
        conf = ndb.Key(urlsafe=wsck).get()
        # Let's get the speaker, as per the email address that user entered
        # check if speaker object exists:
        print "The email is: ", request.speaker_email
        speaker_key = ndb.Key(Speaker, request.speaker_email)
        speaker = speaker_key.get()
        # if speaker object does not exist, check if the speaker has a user profile already
        if not speaker:
            print "That speaker doesn't exist, so we will make one."
            sp_key = ndb.Key(Profile, request.speaker_email)
            speaker_profile = sp_key.get()
            # If the speaker doesn't have a user profile yet
            if not speaker_profile:
                sp_key_urlsafe = ""
            else:
                sp_key_urlsafe = sp_key.urlsafe()
            # Create the speaker object and add to the datastore.
            speaker = Speaker(key=speaker_key,
                              name=request.speaker_name,
                              email=request.speaker_email,
                              speciality=request.speaker_speciality,
                              user_profile_key=sp_key_urlsafe)
            speaker.put()
        # Get the urlsafe key, which we put in the session object (to id the speaker entity)
        speaker_key = speaker.key.urlsafe()

        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' % wsck)
        # copy SessionForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        del data['conf_websafekey']
        del data['speaker_email']
        del data['speaker_name']
        del data['speaker_speciality']

        # Once we have a speaker, we can put the key into the data dict
        data['speaker_key'] = speaker_key

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

        # 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")
        if data['start_time']:
            data['start_time'] = datetime.strptime(data['start_time'][:10], "%H:%M")

        # The following code makes the session a child of the conference
        # Get the Key instance form the urlsafe key
        c_key = ndb.Key(urlsafe=wsck)
        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
        sess = Session(**data)
        sess.put()
        # Let's figure out if this speaker should be featured in the announcements:
        # Count how many sessions the speaker is to speak in.
        speakers_count = Session.query(ancestor=conf.key).filter(Session.speaker_key == sess.speaker_key).count()
        # Send the speaker name and count to the task to set featured speakers
        taskqueue.add(params={'speaker': speaker.name, 'count': speakers_count},
                      url='/tasks/set_featured_speaker')
        return self._copySessionToForm(sess, conf)
예제 #44
0
    def _createSessionObject(self, request):
        """Create a new session object, and if necessary, a new 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(
                "Session 'name' field required")

        # get key of the conference where the session will be held
        conf_key = ndb.Key(urlsafe=request.websafeConferenceKey)
        conf = conf_key.get()

        # check that conference exists
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' %
                request.websafeConferenceKey)

        # check that user is owner
        if user_id != conf.organizerUserId:
            raise endpoints.ForbiddenException(
                'Only the owner can update the conference.')

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

        # If session creator has provided a speaker key, check that it is valid and retrieve
        # his/her name if possible
        # Otherwise create a new speaker (if a speaker name is provided) and assign a a key otherwise continue
        # building the session without a speaker
        if data['websafeSpeakerKey'] is not None:
            try:
                speaker_key = ndb.Key(urlsafe=request.websafeSpeakerKey)
                speaker = speaker_key.get()
                data['speakerName'] = speaker.name
                data['speakerEmail'] = speaker.mainEmail

            except ProtocolBufferDecodeError:
                raise endpoints.NotFoundException(
                    'No speaker found with websafeSpeakerKey: %s. Create a new speaker or enter the key again'
                    % data['websafeSpeakerKey'])

        else:
            # Create a new speaker object if a name is provided in the SessionForm
            if data['speakerName'] is not None:
                speaker = Speaker(name=data['speakerName'],
                                  mainEmail=data['speakerEmail'])
                speaker.put()
                data['websafeSpeakerKey'] = speaker.key.urlsafe()
                speaker.websafeKey = speaker.key.urlsafe()

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

        # convert Date from string to Date object
        if data['date'] is not None:
            data['date'] = datetime.datetime.strptime(data['date'][:10],
                                                      "%Y-%m-%d").date()

        # convert startTime from string to Time object
        if data['startTime'] is not None:
            data['startTime'] = datetime.datetime.strptime(
                data['startTime'][:], "%H:%M").time()

        # websafeKey only used for return messages
        del data['websafeKey']
        # Assign the new session a conference parent
        data['parent'] = conf_key
        # Create the sesion and put to the database
        sess = Session(**data)
        sess_key = sess.put()

        # update speaker (if necessary) so that this session key will be added to his list of session keys
        if speaker is not None:
            speaker.sessionKeys.append(sess_key)
            speaker.put()

            # Check the speaker's sessions to see if he/she already has a session at the same conference
            # If so, set a featured speaker memcache entry to list all of his or her sessions
            parent_keys = [
                sess_key.parent() for sess_key in speaker.sessionKeys
            ]

            if sess_key.parent() in parent_keys:
                featured_sessions = [
                    sess_key.get() for sess_key in speaker.sessionKeys
                ]
                featured_speaker_string = FEATURED_SPEAKER_TPL % (
                    speaker.name, ', '.join(sess.name
                                            for sess in featured_sessions))
                memcache.set(MEMCACHE_FEATURED_SPEAKER_KEY,
                             featured_speaker_string)

        return self._copySessionToForm(sess)
예제 #45
0
 def _createSpeakerObject(self, request):
     speaker = Speaker(name=request.name, mainEmail=request.mainEmail)
     speaker.put()
     speaker.websafeKey = speaker.key.urlsafe()
     speaker.put()
     return self._copySpeakerToForm(speaker)