def post(self, trailId = None): if(trailId is None): try: uploadedFiles = self.get_uploads('file') # 'file' is file upload field in the form blobInfo = uploadedFiles[0] blobReader = blobInfo.open() parser = KmlParser() trailInfo = parser.parseKml(blobReader) logging.debug(trailInfo) blobInfo.delete() #parse tags, if any. It is assumed that they are separated by commas. tags = self.request.get('tags').split(',') #store entry entry = Trail(title = self.request.get('title'), militaryMap = self.request.get('militaryMap'), nearestCity = self.request.get('nearestCity'), timeDurationHours = self.request.get('timeDurationHours'), extension = trailInfo['extension'], slope = trailInfo['slope'], startPoint = trailInfo['startPoint'], points = simplejson.dumps(trailInfo['points'])) entry.put() self.redirect('/trails') except: logging.exception("Unexpected creating trail: %s", sys.exc_info()[0]) self.error(500) else: self._updateTrail(trailId)
def _updateTrail(self, trailId): try: trail = Key("Trail", long(trailId)).get() if(trail is not None): ''' Try to update the trail. Returns the updated trail as a JSON object. First the properties that are not related to the file upload are updated. ''' trail.title = self.request.get('title') trail.militaryMap= self.request.get('militaryMap') trail.timeDurationHours= self.request.get('timeDurationHours') trail.nearestCity= self.request.get('nearestCity') trail.tags= self.request.get('tags').split(',') ''' Check if there is a newly uploaded file that superseeds the old data. ''' uploadedFiles = self.get_uploads('file') # 'file' is file upload field in the form if(len(uploadedFiles) > 0): blobInfo = uploadedFiles[0] blobReader = blobInfo.open() parser = KmlParser() trailInfo = parser.parseKml(blobReader) trail.extension = trailInfo['extension'] trail.slope = trailInfo['slope'] trail.points = simplejson.dumps(trailInfo['points']) trail.startPoint = trailInfo['startPoint'] blobInfo.delete() #Save the updated trail. trail.save() #log action usr = users.get_current_user() if(usr is not None): logEntry = ActivityLog(user=usr, action="Update - Trail") logEntry.put() self.response.clear() self.response.set_status(200) else: self.error(404) except: logging.exception("An exception occurred when updating the trail") self.error(500)