示例#1
0
    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