from app import app, notification_queue from data import model import json def build_event_data(repo, extra_data={}, subpage=None): repo_string = '%s/%s' % (repo.namespace_user.username, repo.name) homepage = '%s://%s/repository/%s' % (app.config['PREFERRED_URL_SCHEME'], app.config['SERVER_HOSTNAME'], repo_string) if subpage: if not subpage.startswith('/'): subpage = '/' + subpage homepage = homepage + subpage event_data = { 'repository': repo_string, 'namespace': repo.namespace_user.username, 'name': repo.name, 'docker_url': '%s/%s' % (app.config['SERVER_HOSTNAME'], repo_string), 'homepage': homepage, 'visibility': repo.visibility.name } event_data.update(extra_data) return event_data def build_notification_data(notification, event_data): return { 'notification_uuid': notification.uuid, 'repository_namespace': notification.repository.namespace_user.username, 'repository_name': notification.repository.name, 'event_data': event_data } def spawn_notification(repo, event_name, extra_data={}, subpage=None, pathargs=[]): event_data = build_event_data(repo, extra_data=extra_data, subpage=subpage) notifications = model.list_repo_notifications(repo.namespace_user.username, repo.name, event_name=event_name) for notification in notifications: notification_data = build_notification_data(notification, event_data) path = [repo.namespace_user.username, repo.name, event_name] + pathargs notification_queue.put(path, json.dumps(notification_data))