create src module for source code

This commit is contained in:
PAN Lei
2022-07-04 22:16:51 +02:00
parent 49c97c7b96
commit a2488a83f5
40 changed files with 79 additions and 92 deletions
+4 -3
View File
@@ -1,9 +1,8 @@
import PySimpleGUI as sg import PySimpleGUI as sg
# First the window layout in 2 columns
from main import start_book, recheck_the_captcha_error_contacts from main import start_book, recheck_the_captcha_error_contacts
from pojo.ModeEnum import ModeEnum from src.pojo.ModeEnum import ModeEnum
from proxy.proxy_type import ProxyType from src.proxy.proxy_type import ProxyType
KEY_CHOOSE_STORE = "CHOOSE_STORE" KEY_CHOOSE_STORE = "CHOOSE_STORE"
KEY_START_NUMBER = "KEY_START_NUMBER" KEY_START_NUMBER = "KEY_START_NUMBER"
@@ -71,6 +70,8 @@ while True:
print(event) print(event)
print(values) print(values)
# try: # try:
max_workers = 10
if values[KEY_MAX_WORKERS]:
max_workers = int(values[KEY_MAX_WORKERS]) max_workers = int(values[KEY_MAX_WORKERS])
store_type = 0 store_type = 0
mode = ModeEnum.MANUAL mode = ModeEnum.MANUAL
Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

+7 -7
View File
@@ -2,13 +2,13 @@ import logging
import sys import sys
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
import params from src import params
from logs.AppLogging import init_logger from src.logs.AppLogging import init_logger
from pojo.ModeEnum import ModeEnum from src.pojo.ModeEnum import ModeEnum
from pojo.contact_pojo import ContactPojo from src.pojo.contact_pojo import ContactPojo
from proxy.proxy_type import ProxyType from src.proxy.proxy_type import ProxyType
from utils.excel_reader import ExcelHelper from src.utils.excel_reader import ExcelHelper
from workers.commandor_page import CommandorPage from src.workers.commandor_page import CommandorPage
# used to save the current slot position # used to save the current slot position
init_logger() init_logger()
+5
View File
@@ -0,0 +1,5 @@
from distutils.core import setup
from Cython.Build import cythonize
setup(name='appointment tool',
ext_modules=cythonize('./src/workers/commandor_page.py'))
View File
+6 -7
View File
@@ -4,13 +4,12 @@ from typing import Union
import firebase_admin import firebase_admin
from firebase_admin import credentials, firestore from firebase_admin import credentials, firestore
import definitions from src import definitions, params
import params from src.pojo.MailPojo import MailPojo
from pojo import ResultEnum from src.pojo.ReserveResultPojo import ReserveResultPojo
from pojo.MailPojo import MailPojo from src.pojo.ResultEnum import ResultEnum
from pojo.ReserveResultPojo import ReserveResultPojo from src.pojo.SimInfoPojo import SimInfoPojo
from pojo.SimInfoPojo import SimInfoPojo from src.pojo.contact_pojo import ContactPojo
from pojo.contact_pojo import ContactPojo
ERROR_COLLECTION_NAME = "error_items" ERROR_COLLECTION_NAME = "error_items"
CONTACT_COLLECTION_NAME = "contact_list" CONTACT_COLLECTION_NAME = "contact_list"
@@ -5,9 +5,8 @@ from sqlalchemy import MetaData, Column, String, Integer, DateTime, Table
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy_utils import database_exists, create_database from sqlalchemy_utils import database_exists, create_database
import params from src.pojo.ReserveResultPojo import ReserveResultPojo
from pojo.ReserveResultPojo import ReserveResultPojo from src.pojo.captcha_error_contact_pojo import ContactInErrorPojo
from pojo.captcha_error_contact_pojo import ContactInErrorPojo, ERROR_TYPE_CAPTCHA
class LocalDbManager: class LocalDbManager:
@@ -2,8 +2,9 @@ import datetime
import logging import logging
from pymongo import MongoClient from pymongo import MongoClient
from pojo.ReserveResultPojo import ReserveResultPojo
from pojo.contact_pojo import ContactPojo from src.pojo.ReserveResultPojo import ReserveResultPojo
from src.pojo.contact_pojo import ContactPojo
MONGO_DB_URL = "mongo.lpaconsulting.fr" MONGO_DB_URL = "mongo.lpaconsulting.fr"
CAPTCHA_ERROR_COLLECTION_PREFIX = "CAPTCHA_ERROR_" CAPTCHA_ERROR_COLLECTION_PREFIX = "CAPTCHA_ERROR_"
@@ -1,7 +1,7 @@
import datetime import datetime
import logging import logging
from definitions import LOGS_DIR from src.definitions import LOGS_DIR
def init_logger(): def init_logger():
+4 -6
View File
@@ -6,12 +6,10 @@ import oci
from oci.loggingingestion import LoggingClient from oci.loggingingestion import LoggingClient
from oci.loggingingestion.models import PutLogsDetails, LogEntryBatch, LogEntry from oci.loggingingestion.models import PutLogsDetails, LogEntryBatch, LogEntry
import definitions from src import definitions
from logs.AppLogging import init_logger from src.logs.AppLogging import init_logger
from pojo import ReserveResultPojo from src.pojo.ReserveResultPojo import ReserveResultPojo, PublishType
from pojo.ReserveResultPojo import PublishType from src.pojo.contact_pojo import ContactPojo
# Log subjects
from pojo.contact_pojo import ContactPojo
LOG_SUBJECT_EVENT = "EVENT" LOG_SUBJECT_EVENT = "EVENT"
LOG_SUBJECT_SMS = "SMS" LOG_SUBJECT_SMS = "SMS"
@@ -5,7 +5,7 @@ from mako.template import Template
import boto3 import boto3
import definitions import definitions
from notification.AcceptedResultPojo import AcceptedResultPojo from src.notification import AcceptedResultPojo
TEMPLATE_NAME = 'scrapy_template_email' TEMPLATE_NAME = 'scrapy_template_email'
AWS_CLIENT_NAME = "sesv2" AWS_CLIENT_NAME = "sesv2"
@@ -26,8 +26,8 @@ class Mailer:
aws_secret_access_key=secret) aws_secret_access_key=secret)
def send_email(self, result: AcceptedResultPojo): def send_email(self, result: AcceptedResultPojo):
# recipients = ['panleicim@gmail.com', 'kamenonly@gmail.com', 'tangliang0411@gmail.com'] recipients = ['panleicim@gmail.com', 'kamenonly@gmail.com', 'tangliang0411@gmail.com']
recipients = ['panleicim@gmail.com'] # recipients = ['panleicim@gmail.com']
mytemplate = Template(filename=definitions.ROOT_DIR + "/templates/appointment_results.html") mytemplate = Template(filename=definitions.ROOT_DIR + "/templates/appointment_results.html")
self.logger.info("send email to " + str(recipients)) self.logger.info("send email to " + str(recipients))
+6 -6
View File
@@ -1,12 +1,12 @@
import random import random
import string import string
import definitions from src import definitions
from db.DbManager import DataManager from src.db.DbManager import DataManager
from db.local_db_manager import LocalDbManager from src.db.local_db_manager import LocalDbManager
from db.mongo_manager import MongoDbManager from src.db.mongo_manager import MongoDbManager
from logs.LogSender import LogSender from src.logs.LogSender import LogSender
from proxy.proxy_type import ProxyType from src.proxy.proxy_type import ProxyType
firebase_store_manager = DataManager() firebase_store_manager = DataManager()
oracle_log_sender = LogSender() oracle_log_sender = LogSender()
@@ -4,7 +4,7 @@ from typing import Union
from dataclasses_json import dataclass_json from dataclasses_json import dataclass_json
import definitions from src import definitions
class PublishType(Enum): class PublishType(Enum):
@@ -1,6 +1,6 @@
from dataclasses import dataclass from dataclasses import dataclass
from pojo.captcha_error_contact_pojo import ContactInErrorPojo from src.pojo.captcha_error_contact_pojo import ContactInErrorPojo
@dataclass @dataclass
@@ -5,9 +5,9 @@ import string
import pandas as pandas import pandas as pandas
import xlsxwriter import xlsxwriter
from definitions import CONTACT_LIST_FILE from src.definitions import CONTACT_LIST_FILE
from pojo.contact_pojo import ContactPojo from src.pojo.contact_pojo import ContactPojo
from utils.generate_random_passport_id import get_random_passport_id_number from src.utils.generate_random_passport_id import get_random_passport_id_number
phone_number_prefix = ['6'] phone_number_prefix = ['6']
@@ -4,8 +4,8 @@ import string
# letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'P', 'Q', 'R', 'S', 'T', '1', '2', '3', '4', '5', '6', '7', # letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'P', 'Q', 'R', 'S', 'T', '1', '2', '3', '4', '5', '6', '7',
# '8', '9'] # '8', '9']
from pojo.captcha_error_contact_pojo import ContactInErrorPojo from src.pojo.captcha_error_contact_pojo import ContactInErrorPojo
from pojo.contact_pojo import ContactPojo from src.pojo.contact_pojo import ContactPojo
letters = ['E', 'G', 'M'] letters = ['E', 'G', 'M']
View File
@@ -1,21 +1,22 @@
import logging import logging
import random import random
import re import re
import string import sys
import threading import threading
import time import time
import traceback
from typing import Union from typing import Union
from playwright.sync_api import sync_playwright from playwright.sync_api import sync_playwright
import params
from pojo.ModeEnum import ModeEnum from src import params
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType from src.pojo.ModeEnum import ModeEnum
from pojo.captcha_error_contact_pojo import ERROR_TYPE_CAPTCHA, \ from src.pojo.ReserveResultPojo import ReserveResultPojo, PublishType
TOO_MANY_REQUEST_ERROR from src.pojo.captcha_error_contact_pojo import TOO_MANY_REQUEST_ERROR, ERROR_TYPE_CAPTCHA
from pojo.contact_pojo import ContactPojo from src.pojo.contact_pojo import ContactPojo
from proxy.proxy_type import ProxyType from src.proxy.proxy_type import ProxyType
from utils.generate_random_passport_id import get_captcha_error_contact_from_contact from src.utils.generate_random_passport_id import get_captcha_error_contact_from_contact
from workers.SolveCaptch import SolveCaptcha from src.workers.SolveCaptch import SolveCaptcha
RDV_URL = "https://rendezvousparis.hermes.com/client/register" RDV_URL = "https://rendezvousparis.hermes.com/client/register"
@@ -87,7 +88,6 @@ class CommandorPage:
def timeout_occurred(self): def timeout_occurred(self):
params.oracle_log_sender.send_timeout_log(self.contact) params.oracle_log_sender.send_timeout_log(self.contact)
self.logger.info("will close timeout modem") self.logger.info("will close timeout modem")
self.thread_event.set()
self.termine() self.termine()
def _run(self, e: threading.Event, proxy): def _run(self, e: threading.Event, proxy):
@@ -100,24 +100,24 @@ class CommandorPage:
while first_page is None: while first_page is None:
first_page = self.start_browser(proxy, self.tls.playwright, devices) first_page = self.start_browser(proxy, self.tls.playwright, devices)
proxy = params.get_proxy(self.proxy_type) proxy = params.get_proxy(self.proxy_type)
self.thread_event = e # self.thread_event = e
otp_input = self.page.locator(OTP_FIELD_ID) otp_input = self.page.locator(OTP_FIELD_ID)
otp_input.wait_for(state='visible', timeout=TIME_OUT) otp_input.wait_for(state='visible', timeout=TIME_OUT)
event_is_set = e.wait() # event_is_set = e.wait()
logging.info('event set: %s', event_is_set) # logging.info('event set: %s', event_is_set)
if self.otp_value: # if self.otp_value:
self.fill_otp(self.otp_value) # self.fill_otp(self.otp_value)
time.sleep(get_random_wait_time()) # time.sleep(get_random_wait_time())
self.clickOnValidBtn() # self.clickOnValidBtn()
otp_sent = self.page.locator(MESSAGE_FIELD_CLASS) # otp_sent = self.page.locator(MESSAGE_FIELD_CLASS)
otp_sent.wait_for(state='visible', timeout=TIME_OUT) # otp_sent.wait_for(state='visible', timeout=TIME_OUT)
time.sleep(get_random_wait_time()) # time.sleep(get_random_wait_time())
message = self.page.content() # message = self.page.content()
if CONFIRMED_MESSAGE in message or CONFIRMED_MESSAGE_FR in message: # if CONFIRMED_MESSAGE in message or CONFIRMED_MESSAGE_FR in message:
# publish the successful message # # publish the successful message
self.logger.info("url is " + self.page.url) # self.logger.info("url is " + self.page.url)
self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url) # self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url)
else: # else:
self.logger.info("timeout") self.logger.info("timeout")
self.termine() self.termine()
@@ -157,6 +157,7 @@ class CommandorPage:
return self.page.content() return self.page.content()
except Exception as error: except Exception as error:
params.oracle_log_sender.send_error(str(error)) params.oracle_log_sender.send_error(str(error))
traceback.print_exc(*sys.exc_info())
self.logger.exception(error) self.logger.exception(error)
self.logger.info("will close browser") self.logger.info("will close browser")
self.browser.close() self.browser.close()
@@ -174,7 +175,6 @@ class CommandorPage:
def _on_page_loaded(self): def _on_page_loaded(self):
self.logger.info("页面加载完毕") self.logger.info("页面加载完毕")
# self.logger.info("content is " + self.page.content())
self.logger.info("url is " + self.page.url) self.logger.info("url is " + self.page.url)
if self.page.url == RDV_URL: if self.page.url == RDV_URL:
self.fill_fields() self.fill_fields()
-1
View File
@@ -1 +0,0 @@
.\venv\Scripts\python.exe appointment.py
Binary file not shown.
-15
View File
@@ -1,15 +0,0 @@
from enum import Enum
class Operator(Enum):
SFR = "SFR"
LYCAMOBILE = "LYCAMOBILE"
CHINA_TELECOM = "CHINA_TELECOM"
def check_operator(ccid: str) -> Operator:
if "893313" in ccid:
return Operator.LYCAMOBILE
elif "893310" in ccid:
return Operator.SFR
return Operator.CHINA_TELECOM