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)
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'))
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)
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
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])
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
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)
def _check_init_param(data): return validateUser(data["jwt"]) and check_ip( data["host"]) and check_port(data["port"])