celery_tasks.py
Python script, ASCII text executable
1import time 2import os 3import config 4import email_send 5from celery import shared_task 6from app import db 7from misc_utils import * 8from models import * 9from smtplib import SMTP 10 11 12@shared_task(ignore_result=False) 13def send_notification(notification_id, users, level): 14notification = db.session.get(Notification, notification_id) 15 16for user in users: 17db.session.add(UserNotification(db.session.get(User, user), notification, level)) 18 19with (SMTP(config.MAIL_SERVER) as mail): 20if notification.data.get("type") == "welcome": 21message = ("Subject:Welcome" 22+ email_send.render_email_template("welcome.html", username=user)) 23mail.sendmail( 24config.NOTIFICATION_EMAIL, 25db.session.get(User, user).email, 26message, 27) 28db.session.commit() 29 30return 0 # notification sent successfully 31 32 33@shared_task(ignore_result=False) 34def merge_heads(head_route, head_branch, base_route, base_branch): 35server_repo_location = os.path.join(config.REPOS_PATH, base_route.lstrip("/")) 36if not os.path.isdir(server_repo_location): 37raise FileNotFoundError(f"Repo {server_repo_location} not found, cannot merge.") 38 39if base_route == head_route: 40git_command(server_repo_location, b"", "checkout", f"{base_branch}") 41out, err = git_command(server_repo_location, b"", "merge", "--no-ff", f"heads/{head_branch}", return_err=True) 42 43return out, err 44 45remote_url = os.path.join(config.BASE_DOMAIN, "git", base_route.lstrip("/")) 46 47git_command(server_repo_location, b"", "remote", "add", "NEW", remote_url) 48git_command(server_repo_location, b"", "remote", "update") 49git_command(server_repo_location, b"", "checkout", f"{base_branch}") 50git_command(server_repo_location, b"", "merge", "--allow-unrelated-histories", f"NEW/{head_branch}") 51git_command(server_repo_location, b"", "remote", "rm", "NEW") 52