brozzler/umbra/behaviors.py

26 lines
1.1 KiB
Python
Raw Normal View History

2014-02-14 15:18:10 -08:00
# vim: set sw=4 et:
2014-02-13 01:00:39 -05:00
from json import dumps, load
from time import sleep
from itertools import chain
2014-02-13 01:00:39 -05:00
import os, re
2014-02-14 15:18:10 -08:00
import logging
2014-02-13 01:00:39 -05:00
logger = logging.getLogger('behaviors')
behaviors_directory = os.path.sep.join(__file__.split(os.path.sep)[:-1] + ['behaviors.d'])
2014-03-07 11:29:43 -08:00
behavior_files = chain(*[[os.path.join(dir, file) for file in files if file.endswith('.js')] for dir, dirs, files in os.walk(behaviors_directory)])
behaviors = []
for file_name in behavior_files:
logger.debug("reading behavior file {}".format(file_name))
lines = open(file_name).readlines()
pattern, script = lines[0][2:].strip(), ''.join(lines[1:])
behaviors.append({'url_regex': pattern, 'script': script, 'file': file_name})
logger.info("will run behaviors from {} to urls matching {}".format(file_name, pattern))
2014-02-14 15:18:10 -08:00
def execute(url, websock, command_id):
for behavior in behaviors:
if re.match(behavior['url_regex'], url):
msg = dumps(dict(method="Runtime.evaluate", params={"expression": behavior['script']}, id=next(command_id)))
logger.debug('sending message to {}: {}'.format(websock, msg))
websock.send(msg)