예제 #1
0
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()
예제 #2
0
def mark_abandoned(args):
    session = Session()

    book = get_book(session, args.title)
    tags = tags_raw.All(session)
    book.tags.append(tags.Abandoned)

    session.commit()
예제 #3
0
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()