· 6 years ago · Nov 07, 2019, 06:16 PM
1from bookman.model import Lib
2from bookman.api import GoogleBooksApi
3import configparser, argparse, sys
4
5class Interface:
6 """
7 Class for cli functions of bookman
8 """
9 def parse(self):
10 #ignoring top parser flags for now
11 top_args = self.top_parser()
12 params = self.config_from_file(top_args.config)
13 self.lib = Lib(api=GoogleBooksApi, **params)
14 self.lib.load()
15 func = getattr(self, top_args.command)
16 func(top_args.args)
17
18 def top_parser(self, args=sys.argv):
19 """Top level parser for the command arguments of bookman"""
20 args = args[1:]
21 parser = argparse.ArgumentParser()
22 parser.add_argument('command', choices='search add list'.split())
23 parser.add_argument('args', nargs=argparse.REMAINDER)
24 parser.add_argument('-c', '--config', default='bookman/config.ini', help='bookman config file')
25 parser.add_argument('-f', '--books_json', help='bookman json file')
26 parser.add_argument('-d', '--books_dir', help='directory with the books')
27 parser.add_argument('-k', '--api_key', help='GoogleBooks API key string')
28 return parser.parse_args(args)
29
30 def config_from_file(self, path):
31 """Read config file specified in argument, return dictionary with
32 its values"""
33 config = configparser.ConfigParser()
34 config.read(path)
35 return config['bookman']
36
37 def search(self, top_args):
38 parser = argparse.ArgumentParser()
39 parser.add_argument('pattern')
40 parser.add_argument('-f', '--format', default='isbn')
41 args = parser.parse_args(top_args)
42 books = self.lib.search(args.pattern)
43 for book in books:
44 print(getattr(book, args.format))
45
46 def list(self, top_args):
47 parser = argparse.ArgumentParser()
48 parser.add_argument('-f', '--format', default='isbn')
49 args = parser.parse_args(top_args)
50 books = self.lib.books
51 for book in books:
52 print(getattr(book, args.format))
53
54 def add(self, top_args):
55 parser = argparse.ArgumentParser()
56 parser.add_argument('isbns')
57 args = parser.parse_args(top_args)
58 self.lib.add_books(args.isbns)
59 self.lib.save()
60
61def main():
62 interface = Interface()
63 interface.parse()
64
65if __name__ == '__main__':
66 main()