2020-06-29 10:18:46 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime , timezone , timedelta
import time
import threading
import os
import sys
import os . path
import psycopg2
##############################################################################
# ask what user to be edit
##############################################################################
def ask_what_user ( ) :
try :
useremail = input ( " Enter user email address: (press q to quit) " )
if useremail == ' q ' :
sys . exit ( )
else :
user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback = get_user ( useremail )
return ( user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback )
except :
if useremail != ' q ' :
print ( " Enter an existent email address! " )
sys . exit ( " Good bye! " )
###############################################################################
# get user row
###############################################################################
def get_user ( email ) :
2020-06-29 10:44:49 +02:00
2020-06-29 10:18:46 +02:00
try :
conn = psycopg2 . connect ( database = mailing_db , user = mailing_db_user , password = " " , host = " /var/run/postgresql " , port = " 5432 " )
cur = conn . cursor ( )
cur . execute ( " SELECT account_id, username, email, emailed_at, deleted, elapsed_days, to_be_deleted, recipient_error, feedback FROM " + mailing_db_table + " where email=( %s ) " , ( email , ) )
row = cur . fetchone ( )
user_id = row [ 0 ]
user_name = row [ 1 ]
user_email = row [ 2 ]
emailed_at = row [ 3 ] . replace ( tzinfo = None )
deleted = row [ 4 ]
elapsed_days = row [ 5 ]
to_be_deleted = row [ 6 ]
recipient_error = row [ 7 ]
user_feedback = row [ 8 ]
cur . close ( )
return ( user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback )
except ( Exception , psycopg2 . DatabaseError ) as error :
print ( error )
finally :
if conn is not None :
conn . close ( )
###################################################################################
# write to database mailing status of inactive users
###################################################################################
def update_user ( will_be_deleted , recip_error , user_feedback , id ) :
conn = None
try :
conn = psycopg2 . connect ( database = mailing_db , user = mailing_db_user , password = " " , host = " /var/run/postgresql " , port = " 5432 " )
cur = conn . cursor ( )
cur . execute ( " UPDATE " + mailing_db_table + " SET to_be_deleted=( %s ), recipient_error=( %s ), feedback=( %s ) where account_id=( %s ) " , ( will_be_deleted , recip_error , user_feedback , id ) )
print ( " \n " )
print ( " Updating user " + str ( id ) )
2020-06-29 10:44:49 +02:00
2020-06-29 10:18:46 +02:00
conn . commit ( )
cur . close ( )
except ( Exception , psycopg2 . DatabaseError ) as error :
print ( error )
finally :
if conn is not None :
conn . close ( )
##################################################################################
# print user data
##################################################################################
def print_user ( user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback ) :
print ( " \n " )
print ( " -------------------------------------------------------------------------------------------------------------------------------- " )
print ( " | account_id: " + str ( user_id ) + " | username: " + str ( user_name ) + " | email: " + str ( user_email ) + " | emailed at: " + str ( emailed_at ) + " | " )
print ( " | deleted: " + str ( deleted ) + " | elapsed days: " + str ( elapsed_days ) + " | to be deleted: " + str ( to_be_deleted ) + " | recipient error: " + str ( recipient_error ) + " | user feedback: " + str ( user_feedback ) + " | " )
print ( " -------------------------------------------------------------------------------------------------------------------------------- " )
print ( " \n " )
###############################################################################
# INITIALISATION
###############################################################################
# Returns the parameter from the specified file
def get_parameter ( parameter , file_path ) :
# Check if secrets file exists
if not os . path . isfile ( file_path ) :
if file_path == " secrets/secrets.txt " :
print ( " File %s not found, exiting. Run setup.py. " % file_path )
elif file_path == " config.txt " :
print ( " File %s not found, exiting. Run db-setup.py. " % file_path )
sys . exit ( 0 )
# Find parameter in file
with open ( file_path ) as f :
for line in f :
if line . startswith ( parameter ) :
return line . replace ( parameter + " : " , " " ) . strip ( )
# Cannot find parameter, exit
print ( file_path + " Missing parameter %s " % parameter )
print ( " Run setup.py " )
sys . exit ( 0 )
# Load configuration from config file
config_filepath = " config.txt "
mastodon_db = get_parameter ( " mastodon_db " , config_filepath )
mastodon_db_user = get_parameter ( " mastodon_db_user " , config_filepath )
mailing_db = get_parameter ( " mailing_db " , config_filepath )
mailing_db_user = get_parameter ( " mailing_db_user " , config_filepath )
mailing_db_table = get_parameter ( " mailing_db_table " , config_filepath )
###############################################################################
while True :
user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback = ask_what_user ( )
print_user ( user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback )
2020-06-29 10:44:49 +02:00
willdeleteit = input ( " Do you want to mark user to be deleted? (press t for True or f for False) " )
2020-06-29 10:18:46 +02:00
if willdeleteit == ' f ' :
willdeleteit = ' False '
elif willdeleteit == ' t ' :
willdeleteit = ' True '
2020-06-29 10:44:49 +02:00
recip_error = input ( " Was the email refused? (press t for True or f for False) " )
2020-06-29 10:18:46 +02:00
if recip_error == ' f ' :
recip_error = ' False '
elif recip_error == ' t ' :
recip_error = ' True '
2020-06-29 10:44:49 +02:00
user_feed = input ( " Have the user replied? (press t for True or f for False) " )
2020-06-29 10:18:46 +02:00
if user_feed == ' f ' :
user_feed = ' False '
elif user_feed == ' t ' :
user_feed = ' True '
2020-06-29 10:44:49 +02:00
update_user ( willdeleteit , recip_error , user_feed , user_id )
2020-06-29 10:18:46 +02:00
user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback = get_user ( user_email )
print_user ( user_id , user_name , user_email , emailed_at , deleted , elapsed_days , to_be_deleted , recipient_error , user_feedback )