From c89f7a1d6cfd1fa9264483321f55bdedc905e28c Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sat, 1 Jun 2019 10:05:39 -0400 Subject: [PATCH 1/4] Add basic logging --- deletefb/deletefb.log | 0 deletefb/deletefb.py | 14 ++++++--- deletefb/logging_conf.json | 62 ++++++++++++++++++++++++++++++++++++++ deletefb/tools/common.py | 13 +++++++- 4 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 deletefb/deletefb.log create mode 100644 deletefb/logging_conf.json diff --git a/deletefb/deletefb.log b/deletefb/deletefb.log new file mode 100644 index 0000000..e69de29 diff --git a/deletefb/deletefb.py b/deletefb/deletefb.py index b6cc483..832280a 100755 --- a/deletefb/deletefb.py +++ b/deletefb/deletefb.py @@ -2,12 +2,18 @@ import argparse import getpass -import sys +import json import os +import sys + +from tools.common import logger +from tools.login import login +from tools.wall import delete_posts +from tools.likes import unlike_pages + + +LOG = logger(__name__) -from .tools.login import login -from .tools.wall import delete_posts -from .tools.likes import unlike_pages def run_delete(): parser = argparse.ArgumentParser() diff --git a/deletefb/logging_conf.json b/deletefb/logging_conf.json new file mode 100644 index 0000000..2078e80 --- /dev/null +++ b/deletefb/logging_conf.json @@ -0,0 +1,62 @@ +{ + "logging": { + "version": 1, + "disable_existing_loggers": true, + "formatters": { + "brief": { + "class": "logging.Formatter", + "style": "{", + "datefmt": "%H:%M:%S", + "format": "{name:s}-{levelname:s}-{asctime:s}-{message:s}" + }, + "verbose": { + "class": "logging.Formatter", + "style": "{", + "datefmt": "%Y-%m-%dT%H:%M:%S", + "format": "{name:s}:{levelname:s}:L{lineno:d} {asctime:s} {message:s}" + } + }, + "handlers": { + "console": { + "level": "DEBUG", + "class": "logging.StreamHandler", + "formatter": "brief", + "stream": "ext://sys.stdout" + }, + "file_handler": { + "level": "INFO", + "class": "logging.handlers.WatchedFileHandler", + "formatter": "verbose", + "filename": "deletefb/deletefb.log", + "mode": "a", + "encoding": "utf-8" + } + }, + "loggers": { + "root": { + "level": "DEBUG", + "handlers": ["console", "file_handler"] + }, + "deletefb": { + "level": "DEBUG", + "handlers": ["console"], + "propagate": false + }, + "login": { + "level": "DEBUG", + "handlers": ["file_handler"], + "propagate": false + }, + "likes": { + "level": "DEBUG", + "handlers": ["file_handler"], + "propagate": false + }, + "wall": { + "level": "DEBUG", + "handlers": ["file_handler"], + "propagate": false + } + } + } +} diff --git a/deletefb/tools/common.py b/deletefb/tools/common.py index e086df6..b50dc90 100644 --- a/deletefb/tools/common.py +++ b/deletefb/tools/common.py @@ -1,6 +1,8 @@ import json +import logging +import logging.config import os -from os.path import abspath, relpath, split +from os.path import abspath, relpath, split, isfile import time from selenium.common.exceptions import ( @@ -24,6 +26,15 @@ def try_move(actions, el): time.sleep(5) continue +def logger(name: str): + # called from directory (__main__.py) + config_path = "deletefb/logging_conf.json" + if not isfile(config_path): # called from file (deletefb.py) + os.chdir("..") + with open(config_path, "r", encoding="utf-8") as config_file: + config = json.load(config_file) + logging.config.dictConfig(config["logging"]) + return logging.getLogger("deletefb") def archiver(category): """ From 5a42296b306576f7a94eaaab2599ae6bf89ff80d Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sat, 1 Jun 2019 10:06:09 -0400 Subject: [PATCH 2/4] Create __main__.py Allow for it to be run from outer directory with `python deletefb` --- deletefb/__main__.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 deletefb/__main__.py diff --git a/deletefb/__main__.py b/deletefb/__main__.py new file mode 100644 index 0000000..c735177 --- /dev/null +++ b/deletefb/__main__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +import deletefb + +if __name__ == "__main__": + deletefb.run_delete() From 6884c12c404b5225f112336f708cb08a8c192d52 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sat, 1 Jun 2019 11:01:22 -0400 Subject: [PATCH 3/4] Add docstring and fix hardcoded strings --- deletefb/deletefb.py | 3 +-- deletefb/tools/common.py | 12 +++++++++--- deletefb/tools/likes.py | 5 ++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/deletefb/deletefb.py b/deletefb/deletefb.py index 832280a..54d0c66 100755 --- a/deletefb/deletefb.py +++ b/deletefb/deletefb.py @@ -11,8 +11,7 @@ from tools.login import login from tools.wall import delete_posts from tools.likes import unlike_pages - -LOG = logger(__name__) +LOG = logger("deletefb") def run_delete(): diff --git a/deletefb/tools/common.py b/deletefb/tools/common.py index b50dc90..fe97881 100644 --- a/deletefb/tools/common.py +++ b/deletefb/tools/common.py @@ -26,15 +26,21 @@ def try_move(actions, el): time.sleep(5) continue -def logger(name: str): - # called from directory (__main__.py) +def logger(name): + """ + Args: + name (str): Logger name + + Returns: + logging.Logger + """ config_path = "deletefb/logging_conf.json" if not isfile(config_path): # called from file (deletefb.py) os.chdir("..") with open(config_path, "r", encoding="utf-8") as config_file: config = json.load(config_file) logging.config.dictConfig(config["logging"]) - return logging.getLogger("deletefb") + return logging.getLogger(name) def archiver(category): """ diff --git a/deletefb/tools/likes.py b/deletefb/tools/likes.py index abef381..cbb8886 100644 --- a/deletefb/tools/likes.py +++ b/deletefb/tools/likes.py @@ -3,7 +3,9 @@ from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC -from .common import SELENIUM_EXCEPTIONS, archiver +from .common import SELENIUM_EXCEPTIONS, archiver, logger + +LOG = logger(__name__) def load_likes(driver): @@ -29,6 +31,7 @@ def load_likes(driver): EC.presence_of_element_located((By.XPATH, "//button/div/i[@aria-hidden=\"true\"]")) ) except SELENIUM_EXCEPTIONS: + LOG.exception("Traceback of load_likes") return def unlike_pages(driver): From b7287634de00770d03aed4e4c9d38572d73993d3 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sat, 1 Jun 2019 12:06:24 -0400 Subject: [PATCH 4/4] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 4b2b4c3..c882e17 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,7 @@ You have several options to run it. 1) Install from PyPI with `pip install --user delete-facebook-posts` 2) Clone this repo and run `pip install --user .` or do `pip install --user git+https://github.com/weskerfoot/DeleteFB.git` -3) Set up a Python virtualenv, activate it, and run `pip install -r -requirements.txt`, then you can just run `python -m deletefb.deletefb.py` in the project directory, as you would if you had installed it from PyPI. +3) Set up a Python virtualenv, activate it, and run `pip install -r requirements.txt`, then you can just run `python deletefb` in the DeleteFB directory. ## How To Use It