|
new file 100644
|
|
|
import logging
|
|
|
|
|
|
import isbnlib
|
|
|
from rich.panel import Panel
|
|
|
from rich.table import Table
|
|
|
|
|
|
from . import utils
|
|
|
from .console import DEFAULT_PADDING, console, int_prompt, prompt
|
|
|
from .style import GreenBoldText
|
|
|
|
|
|
|
|
|
def add_book_by_barcode(barcode: str) -> None:
|
|
|
|
|
|
canonical_isbn = isbnlib.canonical(barcode)
|
|
|
if not (isbnlib.is_isbn10(canonical_isbn) or isbnlib.is_isbn13(canonical_isbn)):
|
|
|
logging.error(f"{barcode} is not a valid ISBN!")
|
|
|
error_console.print(f"{barcode} is not a valid ISBN!")
|
|
|
return
|
|
|
|
|
|
userentity = utils.get_request("objects/userentities?query[]=name=books")
|
|
|
userentity_id = userentity[0]["id"]
|
|
|
|
|
|
all_books = utils.get_request(
|
|
|
f"objects/userobjects?query[]=userentity_id={userentity_id}"
|
|
|
)
|
|
|
|
|
|
for book in all_books:
|
|
|
book_metadata = utils.get_request(
|
|
|
f"userfields/userentity-books/{book['id']}", cached=True
|
|
|
)
|
|
|
if isbnlib.canonical(book_metadata["isbn"]) == canonical_isbn:
|
|
|
|
|
|
book_metadata = utils.get_request(
|
|
|
f"userfields/userentity-books/{book['id']}", cached=False
|
|
|
)
|
|
|
|
|
|
grid = Table.grid(padding=DEFAULT_PADDING)
|
|
|
grid.add_column(justify="right", no_wrap=True)
|
|
|
grid.add_column(justify="left", style="cyan", no_wrap=True)
|
|
|
grid.add_row(GreenBoldText("Title:"), book_metadata["title"])
|
|
|
grid.add_row(GreenBoldText("Amount:"), book_metadata["amount"])
|
|
|
console.print(
|
|
|
Panel(grid, title="[green bold]Book already found[/green bold]")
|
|
|
)
|
|
|
|
|
|
add_to_amount = bool(
|
|
|
int_prompt.ask("Add? (Enter 0 to abort)", choices=["0", "1"], default=0)
|
|
|
)
|
|
|
if not add_to_amount:
|
|
|
logging.debug("User aborted task!")
|
|
|
return
|
|
|
else:
|
|
|
book_metadata["amount"] = str(int(book_metadata["amount"]) + 1)
|
|
|
response = utils.put_request(
|
|
|
f"userfields/userentity-books/{book['id']}",
|
|
|
book_metadata,
|
|
|
cached=True,
|
|
|
)
|
|
|
console.print("Successfully updated!")
|
|
|
return
|
|
|
|
|
|
metadata = isbnlib.meta(canonical_isbn, "worldcat")
|
|
|
|
|
|
grid = Table.grid(padding=DEFAULT_PADDING)
|
|
|
grid.add_column(justify="right", no_wrap=True)
|
|
|
grid.add_column(justify="left", style="cyan", no_wrap=True)
|
|
|
grid.add_row(GreenBoldText("Title:"), metadata["Title"])
|
|
|
grid.add_row(GreenBoldText("Author(s)"), ", ".join(metadata["Authors"]))
|
|
|
console.print(Panel(grid, title="[green bold]Book Info[/green bold]"))
|
|
|
|
|
|
ok = bool(
|
|
|
int_prompt.ask(
|
|
|
"Is the metadata correct? (Enter 0 to abort)", choices=["0", "1"], default=0
|
|
|
)
|
|
|
)
|
|
|
if not ok:
|
|
|
logging.debug("User aborted task!")
|
|
|
return
|
|
|
new_book_id = utils.post_request(
|
|
|
"objects/userobjects", {"userentity_id": userentity_id}
|
|
|
)["created_object_id"]
|
|
|
|
|
|
response = utils.put_request(
|
|
|
f"userfields/userentity-books/{new_book_id}",
|
|
|
{
|
|
|
"title": metadata["Title"],
|
|
|
"isbn": isbnlib.mask(canonical_isbn),
|
|
|
"authors": "\n".join(metadata["Authors"]),
|
|
|
"amount": "1",
|
|
|
"categories": None,
|
|
|
},
|
|
|
)
|
|
|
console.print("Successfully added!")
|
|
|
return
|
|
|
|
|
|
|
|
|
def update_isbn(barcode: str) -> None:
|
|
|
userentity = utils.get_request("objects/userentities?query[]=name=books")
|
|
|
userentity_id = userentity[0]["id"]
|
|
|
|
|
|
all_books = utils.get_request(
|
|
|
f"objects/userobjects?query[]=userentity_id={userentity_id}"
|
|
|
)
|
|
|
|
|
|
for book in all_books:
|
|
|
book_metadata = utils.get_request(
|
|
|
f"userfields/userentity-books/{book['id']}", cached=False
|
|
|
)
|
|
|
console.print("Handling")
|
|
|
console.print(book_metadata)
|
|
|
try:
|
|
|
book_metadata["isbn"] = isbnlib.mask(
|
|
|
isbnlib.canonical(book_metadata["isbn"])
|
|
|
)
|
|
|
response = utils.put_request(
|
|
|
f"userfields/userentity-books/{book['id']}",
|
|
|
book_metadata,
|
|
|
)
|
|
|
except:
|
|
|
continue
|