Files
@ 6a1782e0c6e7
Branch filter:
Location: ChaosStuff/stockcli/stockcli/books.py
6a1782e0c6e7
4.1 KiB
text/x-python
Fix errors
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | import logging
import isbnlib
from rich.panel import Panel
from rich.table import Table
from . import utils
from .console import DEFAULT_PADDING, console, error_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.get("Title", None))
grid.add_row(GreenBoldText("Author(s)"), ", ".join(metadata.get("Authors", None)))
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
|