| import argparse | |
| import json | |
| import logging | |
| import os | |
| from h.events import AnnotationEvent | |
| from h.models import Annotation | |
| from pyramid import paster | |
| from pyramid.request import Request | |
| log = logging.getLogger('h.worker') | |
| parser = argparse.ArgumentParser('eventworker') | |
| parser.add_argument('config_uri') | |
| def main(): | |
| args = parser.parse_args() | |
| paster.setup_logging(args.config_uri) | |
| base_url = os.environ.get('BASE_URL') | |
| if base_url is None: | |
| base_url = 'http://localhost' | |
| log.warn('BASE_URL not found in environment, using default: %s', | |
| base_url) | |
| request = Request.blank('/', base_url=base_url) | |
| env = paster.bootstrap(args.config_uri, request=request) | |
| request.root = env['root'] | |
| loop(request) | |
| def loop(request): | |
| def handle_message(reader, message=None): | |
| if message is None: | |
| return | |
| data = json.loads(message.body) | |
| action = data['action'] | |
| annotation = Annotation(**data['annotation']) | |
| event = AnnotationEvent(request, annotation, action) | |
| request.registry.notify(event) | |
| reader = request.get_queue_reader('annotations', 'event-worker') | |
| reader.on_message.connect(handle_message) | |
| reader.start(block=True) | |
| if __name__ == '__main__': | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment