diff --git a/check_results.py b/check_results.py index 4766d1f..d9f0d2d 100644 --- a/check_results.py +++ b/check_results.py @@ -4,6 +4,7 @@ from playwright.sync_api import sync_playwright import params from db.DbManager import DataManager +from logs.LogSender import EVENT_CHECK_RESULTS, LOG_SUBJECT_EVENT from pojo.ReserveResultPojo import ReserveResultPojo SORRY_SENTENCE = "nous sommes sincèrement désolés de n'avoir pu vous satisfaire cette fois-ci" @@ -47,13 +48,15 @@ def run(playwright, url) -> ResultEnum: # need to start at 21h00 if __name__ == '__main__': # get the list + params.oracle_log_sender.send_log(msg="开始检查约会结果", subject=LOG_SUBJECT_EVENT, type=EVENT_CHECK_RESULTS) db_manager = params.firebase_store_manager collection = db_manager.get_all_successful_items() count = 0 for appointment in collection.stream(): count = count + 1 reserve_pojo = ReserveResultPojo.from_firestore_dict(appointment.to_dict()) - print("status is " + reserve_pojo.accepted) + if reserve_pojo.accepted: + print("status is " + reserve_pojo.accepted) if reserve_pojo.accepted is None or ResultEnum.PENDING.value == reserve_pojo.accepted: result = check_result_page(reserve_pojo.url) collection.document(reserve_pojo.id).update({u'accepted': result.name}) diff --git a/db/DbManager.py b/db/DbManager.py index 7c6d16c..26a6dc9 100644 --- a/db/DbManager.py +++ b/db/DbManager.py @@ -3,7 +3,9 @@ import firebase_admin import xlsxwriter as xlsxwriter from firebase_admin import credentials, firestore +import definitions import params +from pojo.MailPojo import MailPojo from pojo.ReserveResultPojo import ReserveResultPojo, PublishType from pojo.SimInfoPojo import SimInfoPojo from pojo.contact_pojo import ContactPojo @@ -11,6 +13,7 @@ from utils.excel_reader import ExcelHelper ERROR_COLLECTION_NAME = "error_items" CONTACT_COLLECTION_NAME = "contact_list" +MAIL_COLLECTION_NAME = "mail_list" SIM_INFOS = "sim_infos" TIMEOUT = "timeout_items" @@ -19,7 +22,7 @@ class DataManager: batch_size = 20 def __init__(self): - cred = credentials.Certificate("appointment.json") + cred = credentials.Certificate(definitions.ROOT_DIR + "/appointment.json") self._app = firebase_admin.initialize_app(cred) self._db = firestore.client() contact_collection = self._db.collection(CONTACT_COLLECTION_NAME) @@ -118,8 +121,17 @@ class DataManager: contact_collection = self._db.collection(CONTACT_COLLECTION_NAME) return contact_collection + def get_mail_list(self) -> list: + mail_collection = self._db.collection(MAIL_COLLECTION_NAME) + mail_list = [] + for mail in mail_collection.stream(): + mail_pojo = MailPojo.from_firestore_dict(mail.to_dict()) + mail_list.append(mail_pojo) + return mail_list + if __name__ == '__main__': - params.firebase_store_manager.upload_contact_list_to_cloud() + # params.firebase_store_manager.upload_contact_list_to_cloud() # params.firebase_store_manager.save_to_excel() # params.firebase_store_manager.clear_all_sim_info() + print(params.firebase_store_manager.get_mail_list()) diff --git a/definitions.py b/definitions.py new file mode 100644 index 0000000..1267de0 --- /dev/null +++ b/definitions.py @@ -0,0 +1,3 @@ +import os + +ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) diff --git a/logs/LogSender.py b/logs/LogSender.py index b24917c..650092c 100644 --- a/logs/LogSender.py +++ b/logs/LogSender.py @@ -10,8 +10,11 @@ from logs.AppLogging import init_logger from pojo import ReserveResultPojo from pojo.ReserveResultPojo import PublishType +# Log type +LOG_SUBJECT_EVENT = "EVENT" +EVENT_CHECK_RESULTS = "EVENT_CHECK_RESULTS" LOG_ERROR = "ERROR" -LOG_INFO = "INFO" +LOG_TYPE_INFO = "INFO" LOG_APPOINTMENT_ERROR = "APPOINTMENT_ERROR" LOG_APPOINTMENT_TIMEOUT = "TIMEOUT" LOG_APPOINTMENT_SUCCESS = "SUCCESS" diff --git a/main.py b/main.py index 9aa7fc7..70d1823 100644 --- a/main.py +++ b/main.py @@ -7,10 +7,11 @@ from typing import Union from gsmmodem import GsmModem +import params from ModemPool import ModemPool from card_pool import CardPool from commandor import Commandor -from logs.LogSender import LOG_APPOINTMENT_TIMEOUT +from logs.LogSender import LOG_APPOINTMENT_TIMEOUT, LOG_SUBJECT_EVENT from params import MODEM_POOL_PORTS, CARD_POOL_PORT, firebase_store_manager, oracle_log_sender from pojo.ReserveResultPojo import ReserveResultPojo from utils.excel_reader import ExcelHelper @@ -158,6 +159,7 @@ def start_listen(): def read_all_the_phone_number(): + params.oracle_log_sender.send_log(msg="SIM卡自检开始", subject=LOG_SUBJECT_EVENT, type=LOG_SUBJECT_EVENT) slot_number = 1 slot_sum = 31 # card_pool.switch_to_slot(3) diff --git a/notification/__init__.py b/notification/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/notification/mail.py b/notification/mail.py new file mode 100644 index 0000000..084e273 --- /dev/null +++ b/notification/mail.py @@ -0,0 +1,14 @@ +from sqlalchemy import Column, String +from sqlalchemy.orm import declarative_base + +Base = declarative_base() + + +class Mail(Base): + __tablename__ = 'mailer' + id_key = Column(String(255), primary_key=True, nullable=False) + secret_key = Column(String(255), nullable=False) + recipient_list = Column(String(255), nullable=False) + + def __repr__(self): + return "Mail id_key:% s secret_key:% s recipient_list:% s" % (self.id_key, self.secret_key, self.recipient_list) diff --git a/notification/mailer.py b/notification/mailer.py new file mode 100644 index 0000000..1229b9e --- /dev/null +++ b/notification/mailer.py @@ -0,0 +1,65 @@ +import base64 +import logging +from mako.template import Template + +import boto3 + +import definitions +import params +from pojo.ReserveResultPojo import ReserveResultPojo, PublishType + +TEMPLATE_NAME = 'scrapy_template_email' +AWS_CLIENT_NAME = "sesv2" +AWS_REGION_NAME = "eu-central-1" +UTF8 = 'utf-8' + + +class Mailer: + + def __init__(self): + self.logger = logging.getLogger("Mailer") + encoded_bytes = "4JWcU9B/BzTRXIPlBDt4EobibUU7ji1Sgx+VTsEf".encode(UTF8) + encoded_base64_bytes = base64.b64encode(encoded_bytes) + decoded_bytes = base64.b64decode(encoded_base64_bytes) + secret = decoded_bytes.decode(UTF8) + self.ses_client = boto3.client(AWS_CLIENT_NAME, region_name=AWS_REGION_NAME, + aws_access_key_id="AKIAU67WLKZUXEHXDJB5", + aws_secret_access_key=secret) + + def send_email(self, result_list: list): + # recipients = params.firebase_store_manager.get_mail_list() + + recipients = ['panleicim@gmail.com'] + + mytemplate = Template(filename=definitions.ROOT_DIR + "/templates/appointment_results.html") + self.logger.info("send email to " + str(recipients)) + self.ses_client.send_email( + FromEmailAddress="noreply@lpaconsulting.fr", + Destination={ + "ToAddresses": recipients + }, + Content={ + 'Simple': { + 'Subject': { + 'Data': '约会结果', + 'Charset': 'utf8' + }, + 'Body': { + 'Html': { + 'Data': mytemplate.render(result_list=result_list), + 'Charset': 'utf8' + } + } + }, + } + ) + + +if __name__ == '__main__': + result = ReserveResultPojo(email="panleicim@gmail.com", phone="0649614591", url="url", firstName="Lei", + lastName="PAN", message="msg", type=PublishType.SUCCESS) + + mytemplate = Template(filename=definitions.ROOT_DIR + "/templates/appointment_results.html") + print(mytemplate.render(result_list=[result])) + # mailer = Mailer() + # mailer.send_email([result]) diff --git a/params.py b/params.py index e12f841..5cc6bfa 100644 --- a/params.py +++ b/params.py @@ -1,3 +1,4 @@ + from db.DbManager import DataManager from logs.LogSender import LogSender @@ -23,5 +24,3 @@ CARD_POOL_PORT = "/dev/tty.usbmodem1432101" firebase_store_manager = DataManager() oracle_log_sender = LogSender() - - diff --git a/pojo/MailPojo.py b/pojo/MailPojo.py new file mode 100644 index 0000000..73364d1 --- /dev/null +++ b/pojo/MailPojo.py @@ -0,0 +1,14 @@ +class MailPojo: + email: str + + def __init__(self, email: str): + self.email = email + + @staticmethod + def from_firestore_dict(source): + email = source['email'] + result = MailPojo(email=email) + return result + + def __repr__(self): + return "email = " + self.email diff --git a/pojo/ReserveResultPojo.py b/pojo/ReserveResultPojo.py index 4994a58..46f4668 100644 --- a/pojo/ReserveResultPojo.py +++ b/pojo/ReserveResultPojo.py @@ -31,11 +31,12 @@ class ReserveResultPojo: email = source['email'] lastName = source['lastName'] firstName = source['firstName'] - accepted = source['accepted'] result = ReserveResultPojo(type=publish_type, phone=phone, message=message, url=url, email=email, firstName=firstName, lastName=lastName) - result.accepted = accepted + if 'accepted' in source: + accepted = source['accepted'] + result.accepted = accepted result.id = id return result diff --git a/requirements.txt b/requirements.txt index 43f3c2f..ef6152b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,7 @@ pyserial==3.5 python_gsmmodem_new==0.13.0 dataclasses~=0.6 -oci~=2.54.1 \ No newline at end of file +oci~=2.54.1 +XlsxWriter~=3.0.3 +SQLAlchemy~=1.4.29 +boto3~=1.21.13 \ No newline at end of file diff --git a/templates/appointment_results.html b/templates/appointment_results.html new file mode 100644 index 0000000..b19655c --- /dev/null +++ b/templates/appointment_results.html @@ -0,0 +1,5 @@ +