From 9daf82c13af69c253b15d11b74ed483ce6fb2517 Mon Sep 17 00:00:00 2001 From: jedi Date: Thu, 2 May 2024 22:37:34 +0200 Subject: [PATCH] stash --- core/.coveragerc | 14 ++++++++++++++ core/inventory/api_v1.py | 5 ++--- core/inventory/api_v2.py | 7 +++---- core/inventory/tests/v2/test_items.py | 5 ++--- core/mail/notifications.py | 8 +++++++- core/mail/protocol.py | 20 ++++++++++---------- core/tickets/api_v2.py | 3 +-- 7 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 core/.coveragerc diff --git a/core/.coveragerc b/core/.coveragerc new file mode 100644 index 0000000..14c1fba --- /dev/null +++ b/core/.coveragerc @@ -0,0 +1,14 @@ +[run] +source = . + +[report] +fail_under = 100 +show_missing = True +skip_covered = True +omit = + */tests/* + */migrations/* + core/asgi.py + core/wsgi.py + core/settings.py + manage.py \ No newline at end of file diff --git a/core/inventory/api_v1.py b/core/inventory/api_v1.py index 52c6ed0..d5a1e29 100644 --- a/core/inventory/api_v1.py +++ b/core/inventory/api_v1.py @@ -1,5 +1,4 @@ -from datetime import datetime - +from django.utils import timezone from django.urls import re_path from rest_framework import routers, viewsets, serializers from rest_framework.decorators import api_view, permission_classes, authentication_classes @@ -87,7 +86,7 @@ class ItemSerializer(serializers.ModelSerializer): def update(self, instance, validated_data): if 'returned' in validated_data: if validated_data['returned']: - validated_data['returned_at'] = datetime.now() + validated_data['returned_at'] = timezone.now() validated_data.pop('returned') if 'dataImage' in validated_data: file = File.objects.create(data=validated_data['dataImage']) diff --git a/core/inventory/api_v2.py b/core/inventory/api_v2.py index 5ee00ee..d4ea55d 100644 --- a/core/inventory/api_v2.py +++ b/core/inventory/api_v2.py @@ -1,5 +1,4 @@ -from datetime import datetime - +from django.utils import timezone from django.urls import path, re_path from django.contrib.auth.decorators import permission_required from rest_framework import routers, viewsets, serializers @@ -78,7 +77,7 @@ class ItemSerializer(serializers.ModelSerializer): if container: internal['container'] = container if returned: - internal['returned_at'] = datetime.now() + internal['returned_at'] = timezone.now() return internal def validate(self, attrs): @@ -96,7 +95,7 @@ class ItemSerializer(serializers.ModelSerializer): def update(self, instance, validated_data): if 'returned' in validated_data: if validated_data['returned']: - validated_data['returned_at'] = datetime.now() + validated_data['returned_at'] = timezone.now() validated_data.pop('returned') if 'dataImage' in validated_data: file = File.objects.create(data=validated_data['dataImage']) diff --git a/core/inventory/tests/v2/test_items.py b/core/inventory/tests/v2/test_items.py index ef61333..056b38c 100644 --- a/core/inventory/tests/v2/test_items.py +++ b/core/inventory/tests/v2/test_items.py @@ -1,5 +1,4 @@ -from datetime import datetime - +from django.utils import timezone from django.test import TestCase, Client from django.contrib.auth.models import Permission from knox.models import AuthToken @@ -164,7 +163,7 @@ class ItemTestCase(TestCase): response = self.client.get(f'/api/2/{self.event.slug}/item/') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.json()), 2) - item2.returned_at = datetime.now() + item2.returned_at = timezone.now() item2.save() response = self.client.get(f'/api/2/{self.event.slug}/item/') self.assertEqual(response.status_code, 200) diff --git a/core/mail/notifications.py b/core/mail/notifications.py index a279873..082183d 100644 --- a/core/mail/notifications.py +++ b/core/mail/notifications.py @@ -5,6 +5,7 @@ from urllib.parse import quote as urlencode from core.settings import TELEGRAM_BOT_TOKEN, TELEGRAM_GROUP_CHAT_ID from mail.models import UserNotificationChannel +from mail.protocol import send_smtp, make_notification async def http_get(url): @@ -19,6 +20,11 @@ async def telegram_notify(message, chat_id): return await http_get(url) +async def email_notify(message, email): + mail = await make_notification(message, email) + await send_smtp(mail) + + class NotificationDispatcher: channel_layer = None room_group_name = "general" @@ -58,6 +64,6 @@ class NotificationDispatcher: if target.channel_type == 'telegram': await telegram_notify(message, target.channel_target) elif target.channel_type == 'email': - print("Sending mail to:", target.channel_target) + await email_notify(message, target.channel_target) else: print("Unknown channel type:", target.channel_type) diff --git a/core/mail/protocol.py b/core/mail/protocol.py index afe62a4..8a40649 100644 --- a/core/mail/protocol.py +++ b/core/mail/protocol.py @@ -100,8 +100,7 @@ def make_notification(message, to, event=None): # TODO where should replies to return notification -async def send_smtp(message, log): - log.info('Sending message to %s' % message['To']) +async def send_smtp(message): await aiosmtplib.send(message, hostname="127.0.0.1", port=25, use_tls=False, start_tls=False) @@ -198,13 +197,13 @@ def receive_email(envelope, log=None): header_in_reply_to = parsed.get('In-Reply-To') header_message_id = parsed.get('Message-ID') - if header_from != envelope.mail_from: - log.warning("Header from does not match envelope from") - log.info(f"Header from: {header_from}, envelope from: {envelope.mail_from}") - - if header_to != envelope.rcpt_tos[0]: - log.warning("Header to does not match envelope to") - log.info(f"Header to: {header_to}, envelope to: {envelope.rcpt_tos[0]}") + #if header_from != envelope.mail_from: + # log.warning("Header from does not match envelope from") + # log.info(f"Header from: {header_from}, envelope from: {envelope.mail_from}") +# + #if header_to != envelope.rcpt_tos[0]: + # log.warning("Header to does not match envelope to") + # log.info(f"Header to: {header_to}, envelope to: {envelope.rcpt_tos[0]}") recipient = envelope.rcpt_tos[0].lower() if envelope.rcpt_tos else header_to.lower() sender = envelope.mail_from if envelope.mail_from else header_from @@ -302,7 +301,8 @@ class LMTPHandler: 'general', {"type": "generic.event", "name": "user_notification", "event_id": systemevent.id, "message": notification}) if new and reply: - await send_smtp(reply, log) + log.info('Sending message to %s' % reply['To']) + await send_smtp(reply) log.info("Sent auto reply") return '250 Message accepted for delivery' diff --git a/core/tickets/api_v2.py b/core/tickets/api_v2.py index 9b9855d..6557a98 100644 --- a/core/tickets/api_v2.py +++ b/core/tickets/api_v2.py @@ -47,8 +47,7 @@ def reply(request, pk): body=request.data['message'], in_reply_to=first_mail.reference, ) - log = logging.getLogger('mail.log') - async_to_sync(send_smtp)(make_reply(mail, references), log) + async_to_sync(send_smtp)(make_reply(mail, references)) return Response({'status': 'ok'}, status=status.HTTP_201_CREATED)