From cd666377f844b7633fc9be35b383e83ddb1aafab Mon Sep 17 00:00:00 2001 From: h7x4 Date: Sat, 6 May 2023 03:07:29 +0200 Subject: [PATCH] Remove old data fetching logic --- worblehat/services/batch_csv_processor.py | 57 -------- worblehat/services/data_fetcher.py | 163 ---------------------- 2 files changed, 220 deletions(-) delete mode 100644 worblehat/services/batch_csv_processor.py delete mode 100644 worblehat/services/data_fetcher.py diff --git a/worblehat/services/batch_csv_processor.py b/worblehat/services/batch_csv_processor.py deleted file mode 100644 index ed023df..0000000 --- a/worblehat/services/batch_csv_processor.py +++ /dev/null @@ -1,57 +0,0 @@ -import json -import isbnlib -from data_fetcher import get_from_api - -def make_isbnlib_comliant(meta): - if meta: - book_info = { - "isbn": meta["ISBN-13"], - "authors": meta["Authors"], - "title": meta["Title"], - "publish_date": meta["Year"], - "number_of_pages": None, - "languages": [meta["Language"]], - } - - return book_info - else: - return meta - - -if __name__ == "__main__": - fname = input("File to operate on: ") - # fname = "./bokhyller/arbeidsrom_smal_hylle_5.csv" - # fname = ".\\bokhyller\\arbeidsrom_smal_hylle_5" - - with open(fname + ".csv", "r") as f: - fields = f.readline().strip("\n").split(", ") - books = [] - for line in f: - values = line.strip("\n").split(", ") - book = {} - for i in range(len(fields)): - book[fields[i]] = values[i] - books.append(book) - - book_infos = [] - - for book in books: - print(f"Attempting to fetch information for: {book['isbn']}") - book_info = get_from_api(book["isbn"]) - - if type(book_info) is not dict: - try: - book_info = make_isbnlib_comliant(isbnlib.meta(book["isbn"])) - except: - print(f"isbnlib failed for book: {book['isbn']}") - - if not book_info: - book_info = book - - book_info["bookcase"] = book["bookcase"] - book_info["shelf"] = book["shelf"] - book_infos.append(json.dumps(book_info)) - - with open(fname + ".dat", "w") as f: - for book_info in book_infos: - f.write(book_info + "\n") diff --git a/worblehat/services/data_fetcher.py b/worblehat/services/data_fetcher.py deleted file mode 100644 index 99e14a7..0000000 --- a/worblehat/services/data_fetcher.py +++ /dev/null @@ -1,163 +0,0 @@ -# A simple script to fetch bookdata from multiple sources to the library format. -# Felter hver bok bør ha: (pr. 01.04.2023) -# ISBN -# Forfatter -# Tittel -# Utgivelsesår -# Antall sider -# Sjanger -# Språk -# Bruker som har lånt boken -# Dato på når boken ble lånt ut - -import requests -import json - -def get_isbn(): - # TODO: validate ISBN using checksums - # TODO: wrap in a loop until either ISBN is valid or user quits - # isbn = 9780135166307 #input gir ett isbn 10 eller 13 nummer # kaster en error. - # isbn = "0801859034" #input gir ett isbn 10 eller 13 nummer - - isbn = input("Scan a book or add manually: ") # input gir ett isbn 10 eller 13 nummer - if (len(isbn) == 10 or len(isbn) == 13): - return isbn - else: - return None - -def get_from_api(isbn): - try: - json_input = json.loads(requests.get("https://openlibrary.org/isbn/"+str(isbn)+".json").text) - except: - return f"Error fetching data for: {isbn}" # TODO: add more databases for fetching info from - - try: - authors = json_input.get("authors") - for i in range(len(authors)): - authors[i] = json.loads(requests.get("https://openlibrary.org"+str(authors[i].get("key"))+".json").text).get("name") #henter navn fra api - - authors = list(set(authors)) - title = json_input.get("title") - publish_date = json_input.get("publish_date") - number_of_pages = json_input.get("number_of_pages") - languages = json_input.get("languages") - - for i in range(len(languages)): - languages[i] = json.loads(requests.get("https://openlibrary.org"+str(languages[i].get("key"))+".json").text).get("name") - - book_data = { - "isbn": isbn, - "authors": authors, - "title": title, - "publish_date": publish_date, - "number_of_pages": number_of_pages, - "languages": languages, - } - - return book_data - - except: - return f"Error processing data for: {isbn}" - -def push_to_database(book_info, db_file = "book_info.dat") -> None: - print(f"Pushing to database: Writing to file {db_file}") # TODO: actually connect to our database and push there - f = open(db_file, "w") - json.dump(book_info, f) - f.close() - - -def validate_book_info_with_user(book_info) -> bool: - """ - Takes a book_info dictionary and asks the user to update fields until they're satisfied with the information. - Updates the inputted dictionary directly. - - Input: - * book_info: dict holding fields of book information - - Returns: - * bool: True if book is now valid, false if something went wrong - """ - print("Is the following information correct?") - print(book_info) - - answer = input("y/n: ") - if answer == "n": - print("What is wrong?") - incorrrect_category = input(""" - 1. Authors - 2. ... - 3. ... - q. Quit (done/continue) - """) - is_corrected = False - - while not is_corrected: - if incorrrect_category == "1": - authors = input("Input correct authors separated by ',': ") - #TODO: actually put the authors into the book info json thing - elif incorrrect_category =="q": - is_corrected = True - else: - print("No valid option supplied.") - - return True # Book has been corrected and is (presumably) valid - elif answer == "y": - return True # Book information is valid - else: - return False # Something went wrong - -def add_book_location(book_info) -> None: - """ - Prompts the user for which bookcase and shelf the book came from and adds them to the book_info dictionary. - - Inputs: - * book_info: dict holding the book information - - Returns: - * None: the book_info dict is updated diretly - """ - print("Where is the book located?") - - bookcase = input("Bookcase: ") - shelf = input("Shelf: ") - - book_info["bookcase"] = bookcase - book_info["shelf"] = shelf - -if __name__ == '__main__': - is_running = True - while is_running: - # Asking user for ISBN and fetching data online - isbn = get_isbn() - if isbn is not None: - book_info = get_from_api(isbn) - print(f"Fetched: {book_info}") - else: - book_info = {} - print("Error: Inputted ISBN was invalid.") - - # Adding physical location (case, shelf) to the book - add_book_location(book_info) - - # Ensuring the user is satisfied with the information - book_is_correct = validate_book_info_with_user(book_info) - - # Pushing to the database to commit the valid book - if book_is_correct: - print("Should we push this book to the database?") - push_answer = input("y/n: ") - if push_answer == "y": - push_to_database(book_info) - else: - pass - else: - print("Error: Book was not corrected properly, we might try again.") - - # Moving on to the next book which should be added to the library - print("Should we continue?") - cont_answer = input("y/n: ") - if cont_answer == "y": - is_running = True - else: - is_running = False -