Example #1
0
 def start_server(self):
     try:
         handler = get_internal_wsgi_application()
         self.HTTPD = StoppableWSGIServer(('', PORT), WSGIRequestHandler)
         self.HTTPD.set_app(handler)
         self.HTTPD.serve_forever()
     except KeyboardInterrupt:
         sys.exit(0)
Example #2
0
 def start_server(self):
     try:
         handler = get_internal_wsgi_application()
         self.HTTPD = StoppableWSGIServer(('', PORT), WSGIRequestHandler)
         self.HTTPD.set_app(handler)
         self.HTTPD.serve_forever()
     except KeyboardInterrupt:
         sys.exit(0)
Example #3
0
class Command(BaseCommand):
    help = __doc__

    option_list = BaseCommand.option_list + (
        make_option('--force', action='store_true',
                    dest='force', default=False,
                    help='Overwrite existing files.'),
    )

    def handle(self, *args, **options):

        if len(args):
            raise CommandError("Unexpected arguments %r" % args)

        # Igor Katson writes an interesting answer in
        # `Django Broken pipe in Debug mode
        # <http://stackoverflow.com/questions/7912672/django-broken-pipe-in-debug-mode>`__::
        # Monkeypatch python not to print "Broken Pipe" errors to stdout.
        import socketserver
        from wsgiref import handlers
        socketserver.BaseServer.handle_error = lambda *args, **kwargs: None
        handlers.BaseHandler.log_exception = lambda *args, **kwargs: None

        main(force=options['force'])
        #~ main()

    #~ ADDR = "http://127.0.0.1"
    ADDR = "127.0.0.1"
    PORT = 8000

    HTTPD = None

    def start_server(self):
        try:
            handler = get_internal_wsgi_application()
            self.HTTPD = StoppableWSGIServer(('', PORT), WSGIRequestHandler)
            self.HTTPD.set_app(handler)
            self.HTTPD.serve_forever()
        except KeyboardInterrupt:
            sys.exit(0)

    def stop_server(self):
        #~ server.terminate()
        self.HTTPD.shutdown()
        self.HTTPD.server_close()
        logger.info("terminated server.")

    def main(self, force=False, **kw):
        settings.SITE.startup()

        outputbase = os.path.join(settings.MEDIA_ROOT, 'cache', 'screenshots')

        urlbase = "http://" + ADDR + ":" + str(PORT)
        #~ urlbase="http://127.0.0.1:8000"
        pp = SubProcessParent()
        server = Process(target=self.start_server)
        server.start()
        #~ server.join()
        logger.info("started the server")

        count = 0
        assert not settings.SITE.remote_user_header
        try:
            for lng in settings.SITE.languages:
                if lng.django_code == 'de':  # temporary
                    for ss in screenshots.get_screenshots(lng.django_code):
                    #~ print "20130515 got screenshot", ss
                        target = ss.get_filename(outputbase)
                        if not force and os.path.exists(target):
                            logger.info("%s exists", target)
                            continue
                        for fn in (target, target + '.log'):
                            if os.path.exists(fn):
                                os.remove(fn)
                        url = ss.get_url(urlbase)
                        if url is None:
                            logger.info("No url for %s", target)
                            continue
                        logger.info("Build %s...", target)
                        ctx = dict(
                            url=url,
                            target=target,
                            username=ss.ar.get_user().username)
                        ctx.update(password='******')
                        ctx.update(
                            remote_user_header=settings.SITE.remote_user_header)
                        f = file('tmp.js', 'wt')
                        f.write(JS_SRC % ctx)
                        f.close()
                        args = [PHANTOMJS]
                        args += ['--cookies-file=phantomjs_cookies.txt']
                        args += ['--disk-cache=true']
                        args += ['tmp.js']

                        try:
                            output = pp.check_output(args, **kw)
                        except subprocess.CalledProcessError as e:
                            output = e.output
                            file(target + '.log', 'wt').write(output)
                        count += 1

                        #~ p = pp.open_subprocess(args,**kw)
                        #~ p.wait()
                        #~ rc = p.returncode
                        #~ if rc != 0:
                            #~ raise Exception("`%s` returned %s" % (" ".join(args),rc))
                        if not os.path.exists(target):
                            raise Exception("File %s has not been created." %
                                            target)
            logger.info("Built %d screenshots.", count)
        except Exception as e:
            import traceback
            traceback.print_exc(e)
            #~ print e
            self.stop_server()
            raise
        finally:
            self.stop_server()
Example #4
0
class Command(BaseCommand):
    help = __doc__

    option_list = BaseCommand.option_list + (
        make_option('--force', action='store_true',
                    dest='force', default=False,
                    help='Overwrite existing files.'),
    )

    def handle(self, *args, **options):

        if len(args):
            raise CommandError("Unexpected arguments %r" % args)

        # Igor Katson writes an interesting answer in
        # `Django Broken pipe in Debug mode
        # <http://stackoverflow.com/questions/7912672/django-broken-pipe-in-debug-mode>`__::
        # Monkeypatch python not to print "Broken Pipe" errors to stdout.
        import socketserver
        from wsgiref import handlers
        socketserver.BaseServer.handle_error = lambda *args, **kwargs: None
        handlers.BaseHandler.log_exception = lambda *args, **kwargs: None

        main(force=options['force'])
        #~ main()

    #~ ADDR = "http://127.0.0.1"
    ADDR = "127.0.0.1"
    PORT = 8000

    HTTPD = None

    def start_server(self):
        try:
            handler = get_internal_wsgi_application()
            self.HTTPD = StoppableWSGIServer(('', PORT), WSGIRequestHandler)
            self.HTTPD.set_app(handler)
            self.HTTPD.serve_forever()
        except KeyboardInterrupt:
            sys.exit(0)

    def stop_server(self):
        #~ server.terminate()
        self.HTTPD.shutdown()
        self.HTTPD.server_close()
        logger.info("terminated server.")

    def main(self, force=False, **kw):
        settings.SITE.startup()

        outputbase = os.path.join(settings.MEDIA_ROOT, 'cache', 'screenshots')

        urlbase = "http://" + ADDR + ":" + str(PORT)
        #~ urlbase="http://127.0.0.1:8000"
        pp = SubProcessParent()
        server = Process(target=self.start_server)
        server.start()
        #~ server.join()
        logger.info("started the server")

        count = 0
        assert not settings.SITE.remote_user_header
        try:
            for lng in settings.SITE.languages:
                if lng.django_code == 'de':  # temporary
                    for ss in screenshots.get_screenshots(lng.django_code):
                    #~ print "20130515 got screenshot", ss
                        target = ss.get_filename(outputbase)
                        if not force and os.path.exists(target):
                            logger.info("%s exists", target)
                            continue
                        for fn in (target, target + '.log'):
                            if os.path.exists(fn):
                                os.remove(fn)
                        url = ss.get_url(urlbase)
                        if url is None:
                            logger.info("No url for %s", target)
                            continue
                        logger.info("Build %s...", target)
                        ctx = dict(
                            url=url,
                            target=target,
                            username=ss.ar.get_user().username)
                        ctx.update(password='******')
                        ctx.update(
                            remote_user_header=settings.SITE.remote_user_header)
                        f = file('tmp.js', 'wt')
                        f.write(JS_SRC % ctx)
                        f.close()
                        args = [PHANTOMJS]
                        args += ['--cookies-file=phantomjs_cookies.txt']
                        args += ['--disk-cache=true']
                        args += ['tmp.js']

                        try:
                            output = pp.check_output(args, **kw)
                        except subprocess.CalledProcessError as e:
                            output = e.output
                            file(target + '.log', 'wt').write(output)
                        count += 1

                        #~ p = pp.open_subprocess(args,**kw)
                        #~ p.wait()
                        #~ rc = p.returncode
                        #~ if rc != 0:
                            #~ raise Exception("`%s` returned %s" % (" ".join(args),rc))
                        if not os.path.exists(target):
                            raise Exception("File %s has not been created." %
                                            target)
            logger.info("Built %d screenshots.", count)
        except Exception as e:
            import traceback
            traceback.print_exc(e)
            #~ print e
            self.stop_server()
            raise
        finally:
            self.stop_server()