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 argparse | ||||||
|  | import logging | ||||||
| import os | import os | ||||||
| import sys | import sys | ||||||
| import time | import time | ||||||
|  | from io import StringIO | ||||||
| from pathlib import Path, PurePath | from pathlib import Path, PurePath | ||||||
|  |  | ||||||
| from src.downloader import Direct, Gfycat, Imgur, Self | from src.downloader import Direct, Gfycat, Imgur, Self | ||||||
|  | from src.errors import * | ||||||
| from src.parser import LinkDesigner | from src.parser import LinkDesigner | ||||||
| from src.searcher import getPosts | from src.searcher import getPosts | ||||||
| from src.tools import (GLOBAL, createLogFile, jsonFile, nameCorrector, | from src.tools import (GLOBAL, createLogFile, jsonFile, nameCorrector, | ||||||
|                        printToFile) |                        printToFile) | ||||||
| from src.errors import * |  | ||||||
|  |  | ||||||
| __author__ = "Ali Parlakci" | __author__ = "Ali Parlakci" | ||||||
| __license__ = "GPL" | __license__ = "GPL" | ||||||
| @@ -157,7 +159,12 @@ def checkConflicts(): | |||||||
|  |  | ||||||
|     modes = ["saved","subreddit","submitted","search","log","link","upvoted"] |     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: |     if not sum(values[x] for x in values) == 1: | ||||||
|         raise ProgramModeError("Invalid program mode") |         raise ProgramModeError("Invalid program mode") | ||||||
| @@ -632,11 +639,22 @@ def main(): | |||||||
|         download(POSTS) |         download(POSTS) | ||||||
|  |  | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|  |  | ||||||
|  |     log_stream = StringIO()     | ||||||
|  |     logging.basicConfig(stream=log_stream, level=logging.INFO) | ||||||
|  |  | ||||||
|     try: |     try: | ||||||
|         VanillaPrint = print |         VanillaPrint = print | ||||||
|         print = printToFile |         print = printToFile | ||||||
|         GLOBAL.RUN_TIME = time.time() |         GLOBAL.RUN_TIME = time.time() | ||||||
|         main() |         main() | ||||||
|     except KeyboardInterrupt: |     except KeyboardInterrupt: | ||||||
|  |         if GLOBAL.directory is None: | ||||||
|  |             GLOBAL.directory = Path(".\\") | ||||||
|         print("\nQUITTING...") |         print("\nQUITTING...") | ||||||
|         quit() |         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): | class RedditLoginFailed(Exception): | ||||||
|     pass |     pass | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user