diff options
-rwxr-xr-x | anarchronofile | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/anarchronofile b/anarchronofile new file mode 100755 index 0000000..a21aa08 --- /dev/null +++ b/anarchronofile @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Ana(r)chronofile parser. +# +# Copyright (C) 2021 Silvio Rhatto <rhatto@riseup.net> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation, either version 3 of the License, +# or any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Dependencies +import os +import yaml +import argparse +from pprint import pprint + +class Anarchronofile: + def __init__(self, args): + if not os.path.exists(args.file[0]): + raise FileNotFoundError('File not found: ' + args.file[0]) + + self.args = args + self.file = open(args.file[0], '+r') + self.yaml = yaml.load(self.file) + + def run(self): + print(self.args) + print("---") + print("") + + if self.args.topic is not None: + topic = self.args.topic + + for item in self.yaml: + if topic in item: + if self.args.subtopic is not None: + subtopic = self.args.subtopic + + if subtopic in item[topic]: + print('Date: ' + str(item['date'])) + print("\n") + pprint(item[topic][subtopic]) + print("\n") + + else: + print('Date: ' + str(item['date'])) + print("\n") + pprint(item[topic]) + print("\n") + + else: + pprint(self.yaml) + +def cmdline(): + """ + Evalutate the command line. + + :return: Command line arguments. + """ + + basename = os.path.basename(__file__) + examples = "Examples:\n\t" + basename + " incoming.yaml\n" + epilog = examples + parser = argparse.ArgumentParser(description='Parse an ana(r)chronofile', + epilog=epilog, + formatter_class=argparse.RawDescriptionHelpFormatter,) + + parser.add_argument('file', nargs=1, help='YAML file') + parser.add_argument('topic', nargs='?', help='Topic to search') + parser.add_argument('subtopic', nargs='?', help='Subtopic to search') + + # Get args + args = parser.parse_args() + + return args + +if __name__ == "__main__": + args = cmdline() + + try: + parser = Anarchronofile(args) + parser.run() + except (FileNotFoundError, KeyboardInterrupt) as e: + print(e) + exit(1) |