def status(self, uuid): job = Job.find(self.__dir_jobs, uuid) if job == None: return view.render('error.html', error='Job not found!') status = job.status() if status == 'Error': return view.render('error.html', error='Generation failed!') elif status == 'Done': return view.render('done.html', name=job.description.name, uuid=uuid) return view.render(uuid=uuid, name=job.description.name, status=status)
def run(self): self.__run = True print('Monitoring {} for new jobs...'.format(self.__dir_jobs)) while self.__run: try: job = Job.get_next(self.__dir_jobs) if not job: time.sleep(0.5) continue self.__do_job(job) except Exception as e: print('Error: {}'.format(e)) traceback.print_exc(file=sys.stdout)
def index(self, **params): if cherrypy.request.method != 'POST': return view.render() name = params['name'].strip() if name == "": return view.render(error='No map name given!') | HTMLFormFiller(data=params) desc = JobDescription() desc.name = name desc.mail = params['mail'] desc.resolution = 3.0 if params.has_key('highres') else 9.0 desc.compressed = True if params.has_key('compressed') else False desc.welt2000 = True if params.has_key('welt2000') else False desc.level_of_detail = int(params['level_of_detail']) selection = params['selection'] waypoint_file = params['waypoint_file'] if selection == 'waypoint' or selection == 'waypoint_bounds': if not waypoint_file.file or not waypoint_file.filename: return view.render(error='No waypoint file uploaded.') | HTMLFormFiller(data=params) try: filename = waypoint_file.filename.lower() if filename.endswith('.dat') or filename.endswith('.cup'): desc.bounds = parse_waypoint_file(waypoint_file.filename, waypoint_file.file).get_bounds() desc.waypoint_file = 'waypoints.cup' if filename.endswith('.cup') else 'waypoints.dat' else: raise RuntimeError('Waypoint file {} has an unsupported format.'.format(waypoint_file.filename)) except: return view.render(error='Unsupported waypoint file ' + waypoint_file.filename) | HTMLFormFiller(data=params) if selection == 'bounds' or selection == 'waypoint_bounds': try: desc.bounds = GeoRect(float(params['left']), float(params['right']), float(params['top']), float(params['bottom'])) except: return view.render(error='Map bounds not set.') | HTMLFormFiller(data=params) if desc.bounds.height() <= 0 or desc.bounds.width() <= 0: return view.render(error='Bounds are invalid.') | HTMLFormFiller(data=params) if desc.bounds.height() * desc.bounds.width() > 1000: return view.render(error='Selected area is too large.') | HTMLFormFiller(data=params) if self.too_many_requests(): return view.render(error='You can generate only three maps per hour.') | HTMLFormFiller(data=params) job = Job(self.__dir_jobs, desc) if desc.waypoint_file: waypoint_file.file.seek(0) f = open(job.file_path(desc.waypoint_file), 'w') try: shutil.copyfileobj(fsrc=waypoint_file.file, fdst=f, length=1024 * 64) finally: f.close() desc.download_url = cherrypy.url('/download?uuid=' + job.uuid) job.enqueue() raise cherrypy.HTTPRedirect(cherrypy.url('/status?uuid=' + job.uuid))
def download(self, uuid): job = Job.find(self.__dir_jobs, uuid) if not job or job.status() != 'Done': return self.status(uuid) return cherrypy.lib.static.serve_download(job.map_file(), job.description.name + '.xcm')
def index(self, **params): if cherrypy.request.method != 'POST': return view.render() name = params['name'].strip() if name == "": return view.render(error='No map name given!') | HTMLFormFiller( data=params) desc = JobDescription() desc.name = name desc.mail = params['mail'] desc.resolution = 3.0 if params.has_key('highres') else 9.0 desc.compressed = True if params.has_key('compressed') else False desc.welt2000 = True if params.has_key('welt2000') else False desc.level_of_detail = int(params['level_of_detail']) selection = params['selection'] waypoint_file = params['waypoint_file'] if selection == 'waypoint' or selection == 'waypoint_bounds': if not waypoint_file.file or not waypoint_file.filename: return view.render( error='No waypoint file uploaded.') | HTMLFormFiller( data=params) try: filename = waypoint_file.filename.lower() if filename.endswith('.dat') or filename.endswith('.cup'): desc.bounds = parse_waypoint_file( waypoint_file.filename, waypoint_file.file).get_bounds() desc.waypoint_file = 'waypoints.cup' if filename.endswith( '.cup') else 'waypoints.dat' else: raise RuntimeError( 'Waypoint file {} has an unsupported format.'.format( waypoint_file.filename)) except: return view.render(error='Unsupported waypoint file ' + waypoint_file.filename) | HTMLFormFiller( data=params) if selection == 'bounds' or selection == 'waypoint_bounds': try: desc.bounds = GeoRect(float(params['left']), float(params['right']), float(params['top']), float(params['bottom'])) except: return view.render( error='Map bounds not set.') | HTMLFormFiller(data=params) if desc.bounds.height() <= 0 or desc.bounds.width() <= 0: return view.render(error='Bounds are invalid.') | HTMLFormFiller( data=params) if desc.bounds.height() * desc.bounds.width() > 1000: return view.render( error='Selected area is too large.') | HTMLFormFiller( data=params) if self.too_many_requests(): return view.render( error='You can generate only three maps per hour.' ) | HTMLFormFiller(data=params) job = Job(self.__dir_jobs, desc) if desc.waypoint_file: waypoint_file.file.seek(0) f = open(job.file_path(desc.waypoint_file), 'w') try: shutil.copyfileobj(fsrc=waypoint_file.file, fdst=f, length=1024 * 64) finally: f.close() desc.download_url = cherrypy.url('/download?uuid=' + job.uuid) job.enqueue() raise cherrypy.HTTPRedirect(cherrypy.url('/status?uuid=' + job.uuid))
def download(self, uuid): job = Job.find(self.__dir_jobs, uuid) if not job or job.status() != 'Done': return self.status(uuid) return cherrypy.lib.static.serve_download( job.map_file(), job.description.name + '.xcm')