From 8e8592bb29cd03015556b51aa92f6f00290ffc7c Mon Sep 17 00:00:00 2001 From: Dominik Roth Date: Sat, 19 Mar 2022 12:18:14 +0100 Subject: [PATCH] Added Calice Score; Renamed Calice to Calice Rating --- caliGraph.py | 55 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/caliGraph.py b/caliGraph.py index 5243ffa..55cea0d 100755 --- a/caliGraph.py +++ b/caliGraph.py @@ -554,36 +554,47 @@ class calibreDB(): @classmethod def _requireCaliceColumn(cls): - if not 'calice' in cls.getCustomColumns(): - raise Error('Custom Column missing from CalibreDB. Create it using the "createCaliceColumn" command.') + cols = cls.getCustomColumns() + avai = ['calice_score' in cols, 'calice_rating' in cols] + if not any(avai): + raise Error('Custom Columns missing from CalibreDB. Create columns for "Calice Score" and/or "Calice Rating" using the "createCaliceColumn" command.') + return avai @classmethod - def createCaliceColumn(cls): - if 'calice' in cls.getCustomColumns(): + def createCaliceRatingColumn(cls): + if 'calice_rating' in cls.getCustomColumns(): raise Error('Custom Column already exists.') - cls._getTxt("add_custom_column calice 'Calice AI Rating' rating") + cls._getTxt("add_custom_column calice_rating 'Calice Rating' rating") @classmethod - def writeCaliceColumn(cls, bookId, rating): - cls.writeCaliceColumnMultiple({bookId: rating}) + def createCaliceScoreColumn(cls): + if 'calice_score' in cls.getCustomColumns(): + raise Error('Custom Column already exists.') + cls._getTxt("add_custom_column calice_score 'Calice Score' float") @classmethod - def writeCaliceColumnMultiple(cls, ratings): + def writeCaliceColumn(cls, bookId, score): + cls.writeCaliceColumnMultiple({bookId: score}) + + @classmethod + def writeCaliceColumnMultiple(cls, scores): from tqdm.auto import tqdm - cls._requireCaliceColumn() - for bookId in tqdm(ratings): - rating = ratings[bookId] - cls._getTxt('set_custom calice '+str(bookId)+' '+str(int(round(rating)))) + sco, rat = cls._requireCaliceColumn() + for bookId in tqdm(scores): + score = scores[bookId] + if sco: + cls._getTxt('set_custom calice_score '+str(bookId)+' '+str(score)) + if rat: + cls._getTxt('set_custom calice_rating '+str(bookId)+' '+str(int(round(score)))) def calice(G): - ratings = {} + scores = {} for n in list(G.nodes): node = G.nodes[n] if node['t'] in ['book']: if 'score' in node and node['score'] != None: - ratings[node['calibreID']] = node['score'] - print('Inserting '+str(len(ratings))+' ratings into the calibreDB') - calibreDB.writeCaliceColumnMultiple(ratings) + scores[node['calibreID']] = node['score'] + calibreDB.writeCaliceColumnMultiple(scores) print('Done.') def remove_html_tags(text): @@ -1420,7 +1431,9 @@ def cliInterface(imgDef=False): p_new.add_argument('-n', type=int, default=10, help='number of books to recommend') p_col = cmds.add_parser('calice', description="TODO", aliases=[]) + p_createCol = cmds.add_parser('createCaliceColumn', description="TODO", aliases=[]) + p_createCol.add_argument('type', choices=['score', 'rating', 'both']) p_full = cmds.add_parser('full', description="TODO", aliases=[]) @@ -1501,9 +1514,13 @@ def mainCLI(args): calice(G) exit() elif args.cmd=="createCaliceColumn": - calibreDB.createCaliceColumn() - print('[*] Column was created.') - print('[i] To allow displaying half-stars, please active them manually in the calibre-settings.') + if args.type in ['score', 'both']: + calibreDB.createCaliceScoreColumn() + print('[*] Column "Calice Score" was created.') + if args.type in ['rating', 'both']: + calibreDB.createCaliceRatingColumn() + print('[*] Column "Calice Rating" was created.') + print('[i] To allow displaying half-stars, please active them manually in the calibre-settings.') exit() else: raise Exception("Bad")