Example #1
0
    def getSessionsInWishlist(self, request):
        """Get all sessions from the user's wishlist."""
        validateUser()
        profile = self._getProfileFromUser(makeNew=False)

        wish_keys = [ndb.Key(urlsafe=wsck) for wsck in
                     profile.sessionWishlist]

        session_names = [s.name for s in
                         ndb.get_multi(wish_keys)]

        return MultiStringMessage(data=session_names)
Example #2
0
    def _updateConferenceObject(self, request):
        user = validateUser()
        user_id = getUserId(user)

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

        # Update existing conference.
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
        self._validateOwner(request.websafeConferenceKey, user_id)

        # Not getting all the fields, so don't create a new object. Just
        # copy relevant fields from ConferenceForm to Conference object.
        for field in request.all_fields():
            data = getattr(request, field.name)
            # Only copy fields where we get data.

            if data not in (None, []):
                # Special handling for dates (convert string to Date).
                if field.name in ('startDate', 'endDate'):
                    data = datetime.datetime.strptime(data, "%Y-%m-%d").date()

                    if field.name == 'startDate':
                        conf.month = data.month

                # Write to Conference object.
                setattr(conf, field.name, data)

        conf.put()
        prof = ndb.Key(Profile, user_id).get()

        return self._copyConferenceToForm(conf, getattr(prof, 'displayName'))
Example #3
0
    def addSessionToWishlist(self, request):
        """Adds the session to the current user's wishlist."""
        validateUser()
        profile = self._getProfileFromUser(makeNew=False)

        # Check if session was already added.
        if request.websafeSessionKey in profile.sessionWishlist:
            raise ConflictException(
                "This session is already on your wishlist.")

        # Add session to wishlist.
        profile.sessionWishlist.append(request.websafeSessionKey)
        profile.put()

        session_names = [s.name for s in
                         ndb.get_multi(profile.sessionWishlist)]

        return MultiStringMessage(data=session_names)
Example #4
0
    def _createConferenceObject(self, request):
        """Create a Conference object, return the ConferenceForm."""
        user = validateUser()
        user_id = getUserId(user)

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

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

        del data['websafeKey']
        del data['organizerDisplayName']

        # Add default values for those missing.
        for df in DEFAULTS:
            if data[df] in (None, []):
                data[df] = DEFAULTS[df]
                setattr(request, df, DEFAULTS[df])

        # Convert dates from strings to Date objects.
        # Set month based on start_date.
        if data['startDate']:
            data['startDate'] = datetime.datetime.strptime(
                data['startDate'][:10], "%Y-%m-%d").date()
            data['month'] = data['startDate'].month
        else:
            data['month'] = 0

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

        # Set seatsAvailable to be same as maxAttendees on creation.
        if data["maxAttendees"] > 0:
            data["seatsAvailable"] = data["maxAttendees"]

        # Generate Profile Key based on user ID and Conference
        # ID based on Profile key.
        p_key = ndb.Key(Profile, user_id)
        c_id = Conference.allocate_ids(size=1, parent=p_key)[0]
        c_key = ndb.Key(Conference, c_id, parent=p_key)
        data['key'] = c_key
        data['organizerUserId'] = request.organizerUserId = user_id

        # Create Conference, send email to organizer confirming
        # creation of Conference & return (modified) ConferenceForm
        Conference(**data).put()
        taskqueue.add(params={'email': user.email(),
                      'conferenceInfo': repr(request)},
                      url='/tasks/send_confirmation_email')

        return request
Example #5
0
    def getConferencesCreated(self, request):
        """Return conferences created by user."""
        user = validateUser()
        user_id = getUserId(user)

        # Create ancestor query for all key matches for this user.
        confs = Conference.query(ancestor=ndb.Key(Profile, user_id))
        prof = ndb.Key(Profile, user_id).get()

        return ConferenceForms(
            items=[self._copyConferenceToForm(
                conf, getattr(prof, 'displayName')) for conf in confs])
Example #6
0
    def _getProfileFromUser(self, makeNew=True):
        """Return user Profile from datastore, creating new one if needed."""
        user = validateUser()
        user_id = getUserId(user)

        p_key = ndb.Key(Profile, user_id)
        profile = p_key.get()

        # create new Profile if not there
        if not profile and makeNew:
            profile = Profile(
                key=p_key,
                displayName=user.nickname(),
                mainEmail=user.email(),
                teeShirtSize=str(TeeShirtSize.NOT_SPECIFIED),
            )
            profile.put()

        return profile
Example #7
0
    def _createSessionObject(self, request):
        """Create Session object, return Session form."""
        user = validateUser()
        user_id = getUserId(user)

        # Collect data from request.
        data = {}
        for field in request.all_fields():
            value = getattr(request, field.name)
            # Value might be None, if not provided on creation.

            if value and field.name == 'date':
                data['date'] = datetime.datetime.strptime(
                    value, "%Y-%m-%d").date()

            elif value and field.name == 'startTime':
                data['startTime'] = datetime.datetime.strptime(
                    value, "%H:%M").time()

            elif value and field.name == 'speakers':
                data['speakers'] = self._addSpeakers(request, value)
            else:
                data[field.name] = value

        del data['websafeConferenceKey']

        # Check if conference exists and if user is its owner.
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
        self._checkConf(conf)
        self._validateOwner(request.websafeConferenceKey, user_id)

        # Generate session key with the respective conference as parent.
        s_id = Session.allocate_ids(size=1, parent=conf.key)[0]
        s_key = ndb.Key(Session, s_id, parent=conf.key)
        data['key'] = s_key

        sess = Session(**data)
        sess.put()

        return self._copySessionToForm(sess)
Example #8
0
 def _check_init_param(data):
     return validateUser(data["jwt"]) and check_ip(
         data["host"]) and check_port(data["port"])