예제 #1
0
    def on_message(self, message):
        """Handshake with livereload.js

        1. client send 'hello'
        2. server reply 'hello'
        3. client send 'info'

        http://help.livereload.com/kb/ecosystem/livereload-protocol
        """
        message = ObjectDict(escape.json_decode(message))
        if message.command == "hello":
            handshake = {}
            handshake["command"] = "hello"
            protocols = message.protocols
            protocols.append("http://livereload.com/protocols/2.x-remote-control")
            handshake["protocols"] = protocols
            handshake["serverName"] = "livereload-tornado"
            self.send_message(handshake)

        if message.command == "info" and "url" in message:
            logging.info("Browser Connected: %s" % message.url)
            LiveReloadHandler.waiters.add(self)
            if not LiveReloadHandler._last_reload_time:
                if os.path.exists("Guardfile"):
                    logging.info("Reading Guardfile")
                    execfile("Guardfile")
                else:
                    logging.info("No Guardfile")
                    Task.add(os.getcwd())

                LiveReloadHandler._last_reload_time = time.time()
                logging.info("Start watching changes")
                ioloop.PeriodicCallback(self.watch_tasks, 800).start()
예제 #2
0
    def on_message(self, message):
        """Handshake with livereload.js

        1. client send 'hello'
        2. server reply 'hello'
        3. client send 'info'

        http://help.livereload.com/kb/ecosystem/livereload-protocol
        """
        message = ObjectDict(escape.json_decode(message))
        if message.command == 'hello':
            handshake = {}
            handshake['command'] = 'hello'
            protocols = message.protocols
            protocols.append(
                'http://livereload.com/protocols/2.x-remote-control'
            )
            handshake['protocols'] = protocols
            handshake['serverName'] = 'livereload-tornado'
            self.send_message(handshake)

        if message.command == 'info' and 'url' in message:
            send_notify('Browser Connected: %s' % message.url)
            LiveReloadHandler.waiters.add(self)
            if not LiveReloadHandler._watch_running:
                try:
                    execfile('Guardfile')
                except:
                    Task.add(os.getcwd())

                LiveReloadHandler._watch_running = True
                logging.info('Start watching changes')
                tornado.ioloop.PeriodicCallback(self.watch_tasks, 500).start()
예제 #3
0
    def on_message(self, message):
        """Handshake with livereload.js

        1. client send 'hello'
        2. server reply 'hello'
        3. client send 'info'

        http://help.livereload.com/kb/ecosystem/livereload-protocol
        """
        message = ObjectDict(escape.json_decode(message))
        if message.command == 'hello':
            handshake = {}
            handshake['command'] = 'hello'
            protocols = message.protocols
            protocols.append(
                'http://livereload.com/protocols/2.x-remote-control'
            )
            handshake['protocols'] = protocols
            handshake['serverName'] = 'livereload-tornado'
            self.send_message(handshake)

        if message.command == 'info' and 'url' in message:
            logging.info('Browser Connected: %s' % message.url)
            LiveReloadHandler.waiters.add(self)
            if not LiveReloadHandler._last_reload_time:
                if os.path.exists('Guardfile'):
                    logging.info('Reading Guardfile')
                    execfile('Guardfile')
                else:
                    logging.info('No Guardfile')
                    Task.add(os.getcwd())

                LiveReloadHandler._last_reload_time = time.time()
                logging.info('Start watching changes')
                ioloop.PeriodicCallback(self.watch_tasks, 800).start()
예제 #4
0
    def watch_tasks(self):
        changes = Task.watch()
        if not changes:
            return
        if time.time() - self._last_reload_time < 3:
            # if you changed lot of files in one time
            # it will refresh too many times
            logging.info('ignore this reload action')
            return

        logging.info('Reload %s waiters', len(self.waiters))

        msg = {
            'command': 'reload',
            'path': '*',
            'liveCSS': True
        }

        self._last_reload_time = time.time()
        for waiter in LiveReloadHandler.waiters:
            try:
                waiter.write_message(msg)
            except:
                logging.error('Error sending message', exc_info=True)
                LiveReloadHandler.waiters.remove(waiter)
예제 #5
0
    def watch_tasks(self):
        changes = Task.watch()

        if not changes:
            return
        if time.time() - self._last_reload_time < 3:
            # if you changed lot of files in one time
            # it will refresh too many times
            logging.info('ignore this reload action')
            return

        post_funcs = Task.tasks.get('post')
        if post_funcs:
            [func() for func in post_funcs if callable(func)]

        Task.current_position = 0

        logging.info('Reload %s waiters', len(self.waiters))

        msg = {
            'command': 'reload',
            'path': Task.last_modified or '*',
            'liveCSS': True
        }


        self._last_reload_time = time.time()
        for waiter in LiveReloadHandler.waiters:
            try:
                waiter.write_message(msg)
            except:
                logging.error('Error sending message', exc_info=True)
                LiveReloadHandler.waiters.remove(waiter)
예제 #6
0
def main():
    if len(sys.argv) > 1:
        #: command-line tools like Makefile
        execfile('Guardfile')
        for cmd in sys.argv[1:]:
            print(cmd)
            exec('%s()' % cmd)
        return

    #: option config is not available
    #: but this enables pretty colorful logging
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=handlers)
    app.listen(35729)
    #: task watch initialize
    Task.watch()
    print('Start service at  127.0.0.1:35729')
    tornado.ioloop.IOLoop.instance().start()
예제 #7
0
    def watch_tasks(self):
        changes = Task.watch()
        if not changes:
            return

        logging.info("Reload %s waiters" "\nChanged %s" % (len(LiveReloadHandler.waiters), changes))
        msg = {"command": "reload", "path": "*", "liveCSS": True}
        for waiter in LiveReloadHandler.waiters:
            try:
                waiter.write_message(msg)
            except:
                logging.error("Error sending message", exc_info=True)
                LiveReloadHandler.waiters.remove(waiter)
예제 #8
0
    def watch_tasks(self):

        changes = Task.watch()
        if changes:
            send_notify(
                'Reload %s waiters'
                '\nChanged %s'
                % (len(LiveReloadHandler.waiters), changes)
            )
            msg = {
                'command': 'reload',
                'path': '*',
                'liveCSS': True
            }
            for waiter in LiveReloadHandler.waiters:
                try:
                    waiter.write_message(msg)
                except:
                    logging.error('Error sending message', exc_info=True)
                    LiveReloadHandler.waiters.remove(waiter)
예제 #9
0
    def watch_tasks(self):
        changes = Task.watch()
        if not changes:
            return
        if time.time() - self._last_reload_time < 3:
            # if you changed lot of files in one time
            # it will refresh too many times
            logging.info("ignore this reload action")
            return

        logging.info("Reload %s waiters", len(self.waiters))

        msg = {"command": "reload", "path": "*", "liveCSS": True}

        self._last_reload_time = time.time()
        for waiter in LiveReloadHandler.waiters:
            try:
                waiter.write_message(msg)
            except:
                logging.error("Error sending message", exc_info=True)
                LiveReloadHandler.waiters.remove(waiter)
예제 #10
0
 def poll_tasks(self):
     changes = Task.watch()
     if not changes:
         return
     self.watch_tasks()
예제 #11
0
#!/usr/bin/env python
from livereload.task import Task
 
Task.add('*.html')
예제 #12
0
 def poll_tasks(self):
     changes = Task.watch()
     if not changes:
         return
     self.watch_tasks()
예제 #13
0
#!/usr/bin/env python
from livereload.task import Task

files = [
    '*.css',
    '*.less',
    '*.coffee',
    '*.js',
    '*.java',
    '*.scala.html',
    'conf/application.conf',
    'conf/routes',
    'project/Build.scala',
    'project/plugins.sbt',
    'project/build.properties',
]

for file in files:
    Task.add(file)
예제 #14
0
#!/usr/bin/env python
from livereload.task import Task
from livereload.compiler import shell

# You may have a different path, e.g. _source/
Task.add('source/', shell('make html'))

예제 #15
0
#!/usr/bin/env python
from livereload.task import Task

Task.add('static')
Task.add('templates')
예제 #16
0
#!/usr/bin/env python
from livereload.task import Task

Task.add('static/css/*.css')
Task.add('*.py')
Task.add('static/css/third_party/*.css')
Task.add('static/js/third_party/*.js')
Task.add('static/js/*.js')
Task.add('templates/*.html')
Task.add('templates/webpagetest/*.html')
Task.add('templates/gae-stats/*.html')

예제 #17
0
파일: reload.py 프로젝트: Khan/analytics
#!/usr/bin/env python
from livereload.task import Task

Task.add('static/css/*.css')
Task.add('*.py')
Task.add('static/css/third_party/*.css')
Task.add('static/js/third_party/*.js')
Task.add('static/js/*.js')
Task.add('templates/*.html')
Task.add('templates/gae-stats/*.html')