def add(args): session = Session() tags = tags_raw.All(session) if len(args.first) != len(args.last): raise Exception( 'Must have same number of first and last names') authors = [] for first, last in zip(args.first, args.last): author = get_or_create_author(session, first, last) authors.append(author) args.categories = args.categories.split(',') categories = session.query(Category).filter( Category.name.in_(args.categories)).all() if len(categories) != len(args.categories): found = [category.name for category in categories] raise Exception('Failed to find categories {}'.format( [c for c in args.categories if c not in found])) book = Book( title=args.title, subtitle=args.subtitle, amazon_id=args.amzn, authors=authors, categories=categories, acquired_at=datetime.utcnow(), started_at=datetime.utcnow(), published=args.year, pages=args.length, ) if args.recommend: tags = tags_raw.All(session) book.tags.append(tags.Recommended) if args.finished: book.finished_at = datetime.utcnow() if args.series: series, series_number = get_or_create_series(session, args.series) book.series = series book.series_number = series_number if args.finished_at: book.finished_at = datetime.strptime(args.finished_at, "%m/%d/%y") if args.started_at: book.acquired_at = datetime.strptime(args.started_at, "%m/%d/%y") book.started_at = datetime.strptime(args.started_at, "%m/%d/%y") book.form = prompt_named_options('Form?', { 'ebook': ['e'], 'paper': ['p'], 'audiobook': ['a'], }) session.add(book) session.commit()
def mark_abandoned(args): session = Session() book = get_book(session, args.title) tags = tags_raw.All(session) book.tags.append(tags.Abandoned) session.commit()
def finish(args): session = Session() book = get_book(session, args.title) book.finished_at = datetime.utcnow() if args.recommend: tags = tags_raw.All(session) book.tags.append(tags.Recommended) session.commit()