def main(): """ The main logic for how options in a command is checked. """ global query namespace = parse_arguments(sys.argv[1:]) search.load_user_agents() # Populates the user agents array query_tag = ' '.join(namespace.browse) # Tags # Query if namespace.query: # Query when args are present query = ' '.join(namespace.query) elif namespace.userQuery: # Query without any args query = ' '.join(namespace.userQuery) if namespace.help: # Display command line syntax printer.helpman() sys.exit(0) if namespace.debug: # If --debug flag is present # Prints out error used for debugging printer.DEBUG = True debug_requests_on() if namespace.new: # If --new flag is present # Opens StackOverflow website in the browser to create a new question import webbrowser printer.print_warning("Opening stack overflow in your browser...") webbrowser.open(search.so_url + "/questions/ask") sys.exit(0) if namespace.api: # If --api flag is present # Sets custom API key user_module.set_api_key() sys.exit(0) if namespace.user is not None: # If --user flag is present # Stackoverflow user profile support if namespace.user != '(RANDOM_STRING_CONSTANT)': # If user provided a user ID user_module.manual = 1 # Enabling manual mode user = namespace.user else: # If user did not provide a user id user = user_module.retrieve_saved_profile() # Reading saved user id from app data user_module.user_page(user) sys.exit(0) if namespace.delete: # If --delete flag is present # Deletes user data user_module.del_datafile() printer.print_warning("Data files deleted...") sys.exit(0) if namespace.sosearch: # If --sosearch flag is present # Disables google search search.google_search = False if namespace.tag: # If --tag flag is present global tag search.google_search = False tag = namespace.tag has_tags() # Adds tags to StackOverflow url (when not using google search. if namespace.open_url: import webbrowser open_in_browser=False display_condition=True url_to_use=namespace.open_url[0] if re.findall(r"^https:\/\/",url_to_use) !=[]: pass else: url_to_use="https://" + url_to_use try: if url_to_use == "https://stackoverflow.com/questions/": raise Exception('URL Error') if url_to_use == "https://www.stackoverflow.com/questions/": raise Exception('URL Error') requests.get(url_to_use) except Exception: printer.print_warning("Error, could be:\n- invalid url\n- url cannot be opened in socli\n- internet connection error") sys.exit(0) nostackoverflow=re.findall(r"stackoverflow\.com",url_to_use) if nostackoverflow == []: open_in_browser=True display_condition=False printer.print_warning("Your url is not a stack overflow url.\nOpening in your browser...") tag_matcher=re.findall(r"\/tag.+\/",url_to_use) blog_matcher=re.findall(r"blog",url_to_use) if tag_matcher != []: extracted_tag="" if re.findall(r"tagged",url_to_use) == []: extracted_tag=re.split(r"\/",url_to_use)[4] else: extracted_tag=re.split(r"\/",url_to_use)[5] open_in_browser=False display_condition=False tag=extracted_tag search.socli_interactive(tag) if blog_matcher != []: open_in_browser=True display_condition=False printer.print_warning("Your url belongs to blog") printer.print_warning("Opening in browser...") if display_condition: open_in_browser=False display_results(url_to_use) if open_in_browser: webbrowser.open(url_to_use) if namespace.res is not None: # If --res flag is present # Automatically displays the result specified by the number question_number = namespace.res if namespace.query != [] or namespace.tag is not None: # There must either be a tag or a query search.socli_manual_search(query, question_number) else: printer.print_warning('You must specify a query or a tag. For example, use: "socli -r 3 -q python for loop" ' 'to retrieve the third result when searching about "python for loop". ' 'You can also use "socli -r 3 -t python" ' 'to retrieve the third result when searching for posts with the "python" tag.') if namespace.browse: # Browse mode search.google_search = False socli_browse_interactive(query_tag) elif namespace.query != [] or namespace.tag is not None: # If query and tag are not both empty if namespace.interactive: search.socli_interactive(query) else: socli(query) elif query not in [' ', ''] and not ( namespace.tag or namespace.res or namespace.interactive or namespace.browse): # If there are no flags socli(query) else: # Help text for interactive mode if namespace.interactive and namespace.query == [] and namespace.tag is None: printer.print_warning('You must specify a query or a tag. For example, use: "socli -iq python for loop" ' 'to search about "python for loop" in interactive mode. ' 'You can also use "socli -it python" ' 'to search posts with the "python" tag in interactive mode.') else: printer.helpman()
def main(): """ The main logic for how options in a command is checked. """ global query namespace = parse_arguments(sys.argv[1:]) search.load_user_agents() # Populates the user agents array query_tag = ' '.join(namespace.browse) # Tags # Query if namespace.query: # Query when args are present query = ' '.join(namespace.query) elif namespace.userQuery: # Query without any args query = ' '.join(namespace.userQuery) if namespace.help: # Display command line syntax printer.helpman() sys.exit(0) if namespace.debug: # If --debug flag is present # Prints out error used for debugging printer.DEBUG = True debug_requests_on() if namespace.new: # If --new flag is present # Opens StackOverflow website in the browser to create a new question import webbrowser printer.print_warning("Opening stack overflow in your browser...") webbrowser.open(search.so_url + "/questions/ask") sys.exit(0) if namespace.api: # If --api flag is present # Sets custom API key user_module.set_api_key() sys.exit(0) if namespace.user is not None: # If --user flag is present # Stackoverflow user profile support if namespace.user != '(RANDOM_STRING_CONSTANT)': # If user provided a user ID user_module.manual = 1 # Enabling manual mode user = namespace.user else: # If user did not provide a user id user = user_module.retrieve_saved_profile( ) # Reading saved user id from app data user_module.user_page(user) sys.exit(0) if namespace.delete: # If --delete flag is present # Deletes user data user_module.del_datafile() printer.print_warning("Data files deleted...") sys.exit(0) if namespace.sosearch: # If --sosearch flag is present # Disables google search search.google_search = False if namespace.tag: # If --tag flag is present global tag search.google_search = False tag = namespace.tag has_tags( ) # Adds tags to StackOverflow url (when not using google search. if namespace.res is not None: # If --res flag is present # Automatically displays the result specified by the number question_number = namespace.res if namespace.query != [] or namespace.tag is not None: # There must either be a tag or a query search.socli_manual_search(query, question_number) else: printer.print_warning( 'You must specify a query or a tag. For example, use: "socli -r 3 -q python for loop" ' 'to retrieve the third result when searching about "python for loop". ' 'You can also use "socli -r 3 -t python" ' 'to retrieve the third result when searching for posts with the "python" tag.' ) if namespace.browse: # Browse mode search.google_search = False socli_browse_interactive(query_tag) elif namespace.query != [] or namespace.tag is not None: # If query and tag are not both empty if namespace.interactive: search.socli_interactive(query) else: socli(query) elif query not in [ ' ', '' ] and not (namespace.tag or namespace.res or namespace.interactive or namespace.browse): # If there are no flags socli(query) else: # Help text for interactive mode if namespace.interactive and namespace.query == [] and namespace.tag is None: printer.print_warning( 'You must specify a query or a tag. For example, use: "socli -iq python for loop" ' 'to search about "python for loop" in interactive mode. ' 'You can also use "socli -it python" ' 'to search posts with the "python" tag in interactive mode.') else: printer.helpman()