def payment_completed(order_id): """ Task to send an e-mail notification when an order is successfully created. """ try: order = Order.objects.get(id=order_id) # create invoice e-mail subject = f'My Shop - EE Invoice no. {order.id}' message = 'Please, find attached the invoice for your recent purchase.' email = EmailMessage(subject, message, settings.EMAIL_HOST_USER + '@gmail.com', [order.email]) # generate PDF html = render_to_string('orders/order/pdf.html', {'order': order}) out = BytesIO() stylesheets = [weasyprint.CSS(settings.STATIC_ROOT + 'css/pdf.css')] weasyprint.HTML(string=html).write_pdf(out, stylesheets=stylesheets) # attach PDF file email.attach(f'order_{order.id}.pdf', out.getvalue(), 'application/pdf') # send e-mail email.send() except Exception as e: logger.error( f"payment_completed task send_mail failed: order_id={order_id}") raise e
def ssh_execute(command): try: stdin, stdout, stderr = ssh.exec_command(command) except Exception as error: logger.error(error) return [out.replace("\n", '') for out in stdout.readlines() ], [err.replace("\n", '') for err in stderr.readlines()]
def execute(cmd, shell=True): run = None try: run = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) output = run.stdout.read().rstrip().split("\n") except subprocess.CalledProcessError: error = run.stderr.read().rstrip().split("\n") logger.error(error) return error return output
def order_created(order_id): """ Task to send an e-mail notification when an order is successfully created. """ try: order = Order.objects.get(id=order_id) subject = f'Order nr. {order.id}' message = f'Dear {order.first_name},\n\n' \ f'You have successfully placed an order.' \ f'Your order ID is {order.id}.' send_mail(subject, message, settings.EMAIL_HOST_USER + '@gmail.com', [order.email]) except Exception as e: logger.error( f"order_created task send_mail failed: order_id={order_id}") raise e
def send_notification_to_followers_task(duration, obj_id): from blog.models import Post obj = Post.objects.get(id=int(obj_id)) subject = f'New post in {obj.blog.title}' message = f'Hello new post link:{domain}{obj.get_absolute_url()}' is_task_completed = False error = '' receivers = [] for follower in obj.blog.follower_set.all(): receivers.append(follower.user.email) try: time.sleep(duration) is_task_completed = True except Exception as err: error = str(err) logger.error(error) if is_task_completed: send_mail_to(subject, message, receivers) else: send_mail_to(subject, error, receivers) return ('send_notification_to_followers_task done')
def ssh_connect(host, user, key): private_key = paramiko.RSAKey.from_private_key(io.StringIO(key)) try: ssh.connect(host, username=user, pkey=private_key) except Exception as error: logger.error(error)