mirror of
				https://github.com/KevinMidboe/bulk-downloader-for-reddit.git
				synced 2025-10-29 17:40:15 +00:00 
			
		
		
		
	Adding error tracebacks to CONSOLE_LOG files
This commit is contained in:
		
							
								
								
									
										22
									
								
								script.py
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								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") | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user