54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
import argparse
|
|
import logging
|
|
import json
|
|
|
|
from app import app
|
|
from data import model
|
|
from data.database import configure, RepositoryNotification, ExternalNotificationMethod
|
|
|
|
configure(app.config)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def run_slackwebhook_migration():
|
|
slack_method = ExternalNotificationMethod.get(ExternalNotificationMethod.name == "slack")
|
|
|
|
encountered = set()
|
|
while True:
|
|
found = list(RepositoryNotification.select().where(
|
|
RepositoryNotification.method == slack_method,
|
|
RepositoryNotification.config_json ** "%subdomain%",
|
|
~(RepositoryNotification.config_json ** "%url%")))
|
|
|
|
found = [f for f in found if not f.uuid in encountered]
|
|
|
|
if not found:
|
|
logger.debug('No additional records found')
|
|
return
|
|
|
|
logger.debug('Found %s records to be changed', len(found))
|
|
for notification in found:
|
|
encountered.add(notification.uuid)
|
|
|
|
try:
|
|
config = json.loads(notification.config_json)
|
|
except:
|
|
logging.error("Cannot parse config for noticification %s", notification.uuid)
|
|
continue
|
|
|
|
logger.debug("Checking notification %s", notification.uuid)
|
|
if 'subdomain' in config and 'token' in config:
|
|
subdomain = config['subdomain']
|
|
token = config['token']
|
|
new_url = 'https://%s.slack.com/services/hooks/incoming-webhook?token=%s' % (subdomain, token)
|
|
config['url'] = new_url
|
|
|
|
logger.debug("Updating notification %s to URL: %s", notification.uuid, new_url)
|
|
notification.config_json = json.dumps(config)
|
|
notification.save()
|
|
|
|
if __name__ == "__main__":
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
logging.getLogger('boto').setLevel(logging.CRITICAL)
|
|
|
|
run_slackwebhook_migration()
|