def handleRouteUploadRequest(self, requestparam, rfile, flen): fname = self.getRequestParam(requestparam, "filename") AVNLog.debug("route upload request for %s", fname) if flen > self.MAXROUTESIZE: raise Exception("route is to big, max allowed filesize %d: " % self.MAXROUTESIZE) try: data = rfile.read(flen) parser = gpxparser.GPXParser(data) gpx = parser.parse() if gpx.routes is None or len(gpx.routes) == 0: raise "no routes in " + fname route = gpx.routes[0] if route is None: raise Exception("no route found in file") rinfo = self.routeInfos.get(route.name) if rinfo is not None: raise Exception("route with name " + route.name + " already exists") rinfo = AVNRouteInfo.fromRoute(route, AVNUtil.utcnow()) self.routeInfos[route.name] = rinfo self.saveRoute(route) return except Exception as e: raise Exception("exception parsing " + fname + ": " + e.message)
def loadRouteFile(self, filename): f = open(filename, "r") gpx_xml = f.read() f.close() parser = gpxparser.GPXParser(gpx_xml) gpx = parser.parse() if gpx.routes is None or len(gpx.routes) == 0: raise "no routes in " + filename return gpx.routes[0]
def fillInfo(self, baseDir): routeFile = os.path.join(baseDir, self.name) try: if os.path.isfile(routeFile): content = "" with open(routeFile, "r", encoding='utf-8') as f: content = f.read() parser = gpxparser.GPXParser(content) gpx = parser.parse() if gpx.routes is None or len(gpx.routes) == 0: AVNLog.error("no routes in %s", routeFile) else: route = gpx.routes[0] self.numpoints = len(route.points) self.length = route.length() / AVNUtil.NM except Exception as e: AVNLog.error("error when parsing route %s: %s", routeFile, str(e))