47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
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))
|