def _createActivityObject(self, request): """Create or update Activity object, returning ActivityForm/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.tribe: raise endpoints.BadRequestException("Activity 'tribe' field required") # copy ActivityForm/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 (both data model & outbound Message) 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 if data['date']: data['date'] = datetime.strptime(data['date'][:10], "%Y-%m-%d").date() if data['time']: data['time'] = str(data['time'])+" "+data['ampm'] del data['ampm'] # generate Profile Key based on user ID and Activity # ID based on Profile key get Activity key from ID p_key = ndb.Key(Profile, user_id) a_id = Activity.allocate_ids(size=1, parent=p_key)[0] a_key = ndb.Key(Activity, a_id, parent=p_key) data['key'] = a_key data['organizerUID'] = user_id data['participants'] = [] # creation of Activity & return (modified) ActivityForm Activity(**data).put() return request