ContactBridge

Log | Files | Refs | README

contact.py (2524B)


      1 from datetime import datetime
      2 
      3 from flask import request
      4 from flask_restx import Namespace, Resource, fields
      5 
      6 from MessageTagging.spam_detector import SpamDetector
      7 from WebAPI.utils.mailer import Mailer
      8 from database.models.messages import MessageModel
      9 from database.models.spam import SpamModel
     10 from database.repository import DbRepository
     11 
     12 contact_ns = Namespace('contact', description='Contact namespace, used for integration with external sites.')
     13 
     14 db_repository = DbRepository()
     15 message_model = MessageModel()
     16 spam_model = SpamModel()
     17 mailer = Mailer()
     18 sd = SpamDetector()
     19 
     20 message_create_model = contact_ns.model('Contact', {
     21     'name': fields.String(required=True, description='The senders name'),
     22     'email': fields.String(required=True, description='The email address of the sender'),
     23     'content': fields.String(required=True, description='The content of the message'),
     24 })
     25 
     26 
     27 @contact_ns.route('/')
     28 class ContactResource(Resource):
     29 
     30     @contact_ns.expect(message_create_model)
     31     def post(self):
     32         """Contact form endpoint"""
     33         try:
     34             data, subject, content = prepare_data()
     35             inverted_relevance = calculate_relevance(data['content'])
     36         except Exception as e:
     37             return {'message': 'Invalid data'}, 400
     38 
     39         try:
     40             parameters = (
     41                 data['name'],
     42                 data['email'],
     43                 data.get('subject', 'No subject'),
     44                 data['content'],
     45                 inverted_relevance
     46             )
     47 
     48             if inverted_relevance > 0.5:
     49                 message_model.create(parameters)
     50                 mailer.send_notification(subject, content)
     51             else:
     52                 spam_model.create(parameters)
     53 
     54             return {'message': 'Message saved successfully'}, 201
     55         except Exception as e:
     56             print(f"An error occurred: {e}")
     57             return {'message': 'An error occurred while processing your request'}, 500
     58 
     59 
     60 def calculate_relevance(content):
     61     try:
     62         relevance = float(sd.detect_spam(content))
     63         return round(1 - relevance, 2)
     64     except Exception as e:
     65         print(f"An error occurred in relevance calculation: {e}")
     66         return 1
     67 
     68 
     69 def prepare_data():
     70     if request.json:
     71         form_data = request.json
     72     else:
     73         form_data = request.form
     74 
     75     name = form_data['name']
     76     email = form_data['email']
     77     content = form_data['content']
     78 
     79     subject = f"{name} Has contacted you from {email} at {datetime.now().time()}"
     80     return form_data, subject, content