improved CSV output and error handling

This commit is contained in:
Tobias Diekershoff 2023-01-14 12:37:04 +01:00
parent db7565dcd0
commit 960b18a461

View file

@ -8,11 +8,26 @@ of any number of other Friendica instances.
See https://git.friendi.ca/tobias/brewserverblocklist See https://git.friendi.ca/tobias/brewserverblocklist
""" """
import argparse
import configparser import configparser
import sys import sys
from os.path import exists from os.path import exists
import requests import requests
from bargparse.bargparse import MyParser
class BParser(argparse.ArgumentParser):
"""
This expansion of the ArgParser class will display the --help results by
default if an error occurs (e.g. no arguments are passed to the script).
It is based on an StackOverflow answer from 2010 by unutbu who refered to
a reply from Steven Bethard as source of the code.
https://stackoverflow.com/questions/4042452/display-help-message-with-python-argparse-when-script-is-called-without-any-argu/4042861#4042861
"""
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
class BrewBlocklist(): class BrewBlocklist():
""" """
@ -36,7 +51,6 @@ class BrewBlocklist():
config = configparser.RawConfigParser() config = configparser.RawConfigParser()
config.read(configfile) config.read(configfile)
for section in config.sections(): for section in config.sections():
print(section)
section_values = dict(config.items(section)) section_values = dict(config.items(section))
if (section.find('http://') > -1) or (section.find('https://') > -1): if (section.find('http://') > -1) or (section.find('https://') > -1):
print('The section name in the config file must not contain the protocol ({})'.format(section)) print('The section name in the config file must not contain the protocol ({})'.format(section))
@ -139,6 +153,12 @@ class BrewBlocklist():
orig_stdout = sys.stdout orig_stdout = sys.stdout
sys.stdout = out_file sys.stdout = out_file
for key, value in self.blocklist.items(): for key, value in self.blocklist.items():
try:
if ("," in self.reasons[key] or " " in self.reasons[key]) and not self.reasons[key].startswith('"'):
self.reasons[key] = '"{}"'.format(self.reasons[key])
except TypeError:
self.reasons[key] = '"no reason given"'
self.error.append("for {} no blocking reason was provided".format(key))
print('{}, {}, {}'.format(key, self.reasons[key], value)) print('{}, {}, {}'.format(key, self.reasons[key], value))
if self.outputfile: if self.outputfile:
sys.stdout = orig_stdout sys.stdout = orig_stdout
@ -157,7 +177,7 @@ def main():
* collect the ingredient * collect the ingredient
* serve the result * serve the result
""" """
parser = MyParser() parser = BParser()
parser.add_argument('-c', '--config', parser.add_argument('-c', '--config',
dest='configfile', dest='configfile',
required=True, required=True,