From 42672dc15d9b1d9b8233dc8084a69ed31a8d5a5b Mon Sep 17 00:00:00 2001 From: Ali Parlakci Date: Wed, 11 Jul 2018 22:27:48 +0300 Subject: [PATCH 1/2] Adding error tracebacks to CONSOLE_LOG files --- script.py | 22 ++++++++++++++++++++-- src/errors.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/script.py b/script.py index ec44cdc..e2f2683 100644 --- a/script.py +++ b/script.py @@ -6,17 +6,19 @@ saved posts from a reddit account. It is written in Python 3. """ import argparse +import logging import os import sys import time +from io import StringIO from pathlib import Path, PurePath from src.downloader import Direct, Gfycat, Imgur, Self +from src.errors import * from src.parser import LinkDesigner from src.searcher import getPosts from src.tools import (GLOBAL, createLogFile, jsonFile, nameCorrector, printToFile) -from src.errors import * __author__ = "Ali Parlakci" __license__ = "GPL" @@ -157,7 +159,12 @@ def checkConflicts(): modes = ["saved","subreddit","submitted","search","log","link","upvoted"] - values = {x: 0 if x is None or x is False else 1 for x in modes} + values = { + x: 0 if getattr(GLOBAL.arguments,x) is None or \ + getattr(GLOBAL.arguments,x) is False \ + else 1 \ + for x in modes + } if not sum(values[x] for x in values) == 1: raise ProgramModeError("Invalid program mode") @@ -632,11 +639,22 @@ def main(): download(POSTS) if __name__ == "__main__": + + log_stream = StringIO() + logging.basicConfig(stream=log_stream, level=logging.INFO) + try: VanillaPrint = print print = printToFile GLOBAL.RUN_TIME = time.time() main() except KeyboardInterrupt: + if GLOBAL.directory is None: + GLOBAL.directory = Path(".\\") print("\nQUITTING...") quit() + except Exception as exception: + logging.error("Runtime error!", exc_info=full_exc_info(sys.exc_info())) + print(log_stream.getvalue()) + + input("Press enter to quit\n") diff --git a/src/errors.py b/src/errors.py index 4446ad2..927b45e 100644 --- a/src/errors.py +++ b/src/errors.py @@ -1,3 +1,36 @@ +import sys + +class FauxTb(object): + def __init__(self, tb_frame, tb_lineno, tb_next): + self.tb_frame = tb_frame + self.tb_lineno = tb_lineno + self.tb_next = tb_next + +def current_stack(skip=0): + try: 1/0 + except ZeroDivisionError: + f = sys.exc_info()[2].tb_frame + for i in range(skip + 2): + f = f.f_back + lst = [] + while f is not None: + lst.append((f, f.f_lineno)) + f = f.f_back + return lst + +def extend_traceback(tb, stack): + """Extend traceback with stack info.""" + head = tb + for tb_frame, tb_lineno in stack: + head = FauxTb(tb_frame, tb_lineno, head) + return head + +def full_exc_info(exc_info): + """Like sys.exc_info, but includes the full traceback.""" + t, v, tb = exc_info + full_tb = extend_traceback(tb, current_stack(1)) + return t, v, full_tb + class RedditLoginFailed(Exception): pass From fef559cd40919dab34ac51fa81c4da2c0aff2cbc Mon Sep 17 00:00:00 2001 From: Ali Parlakci Date: Wed, 11 Jul 2018 22:33:10 +0300 Subject: [PATCH 2/2] Update changelog --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 82cced6..58f5828 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,9 @@ Python have real issues about naming their program ## Changelog ### [11/07/2018]() -- Improve UX and UI +- Improvements on UX and UI +- Added logging errors to CONSOLE_LOG.txt +- Using current directory if directory has not been given yet. ### [10/07/2018](https://github.com/aliparlakci/bulk-downloader-for-reddit/tree/ffe3839aee6dc1a552d95154d817aefc2b66af81) - Added support for *self* post - Now getting posts is quicker