def _pages_from_ranges(ranges): if is_iterable_notstr(ranges): return set(ranges) pages = [] page_groups = ranges.replace(' ', '').split(',') for g in page_groups: if not g: continue try: start, end = g.split('-') except ValueError: pages.append(int(g) - 1) else: try: pages.extend(range(int(start) - 1, int(end))) except ValueError: raise BadArgsError("invalid page range") if not monotonic(pages): log.warning( "List of pages to process contains duplicate pages, or pages that are " "out of order") if any(page < 0 for page in pages): raise BadArgsError("pages refers to a page number less than 1") log.debug("OCRing only these pages: %s", pages) return set(pages)
def _pages_from_ranges(ranges: str) -> Set[int]: pages: List[int] = [] page_groups = ranges.replace(' ', '').split(',') for g in page_groups: if not g: continue try: start, end = g.split('-') except ValueError: pages.append(int(g) - 1) else: try: new_pages = list(range(int(start) - 1, int(end))) if not new_pages: raise BadArgsError( f"invalid page subrange '{start}-{end}'") from None pages.extend(new_pages) except ValueError: raise BadArgsError(f"invalid page subrange '{g}'") from None if not pages: raise BadArgsError( f"The string of page ranges '{ranges}' did not contain any recognizable " f"page ranges.") if not monotonic(pages): log.warning( "List of pages to process contains duplicate pages, or pages that are " "out of order") if any(page < 0 for page in pages): raise BadArgsError("pages refers to a page number less than 1") log.debug("OCRing only these pages: %s", pages) return set(pages)