Example #1
0
 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)
Example #2
0
 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)
Example #3
0
    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))
Example #4
0
    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))