def test_dont_pull_extra_item(): '''Test that `shorten` doesn't pull an extra member from the iterable.''' def generator(): yield from [1, 2, 3] raise Exception nose.tools.assert_raises(Exception, lambda: list(generator())) iterator_1 = shorten(generator(), 4) nose.tools.assert_raises(Exception, lambda: list(iterator_1)) iterator_2 = shorten(generator(), infinity) nose.tools.assert_raises(Exception, lambda: list(iterator_2)) iterator_3 = shorten(generator(), 3) list(iterator_3) # Pulling exactly three so we avoid the exception.
def create_file_renaming_if_taken(path, mode='x', buffering=-1, encoding=None, errors=None, newline=None): ''' Create a new file with name `path` for writing, renaming it if name taken. If the name given is "example.zip", the new name would be "example (1).zip", and if that's taken "example (2).zip", and so on. Returns the file open and ready for writing. It's best to use this as a context manager similarly to `open` so the file would be closed. ''' assert 'x' in mode for path in cute_iter_tools.shorten(iterate_file_paths(pathlib.Path(path)), N_MAX_ATTEMPTS): try: return path.open(mode, buffering=buffering, encoding=encoding, errors=errors, newline=newline) except FileExistsError: pass else: raise Exception("Exceeded {} tries, can't create file {}".format( N_MAX_ATTEMPTS, path))
def create_file_renaming_if_taken(path, mode='x', buffering=-1, encoding=None, errors=None, newline=None): ''' Create a new file with name `path` for writing, renaming it if name taken. If the name given is "example.zip", the new name would be "example (1).zip", and if that's taken "example (2).zip", and so on. Returns the file open and ready for writing. It's best to use this as a context manager similarly to `open` so the file would be closed. ''' assert 'x' in mode for path in cute_iter_tools.shorten(iterate_file_paths(pathlib.Path(path)), N_MAX_ATTEMPTS): try: return path.open(mode, buffering=buffering, encoding=encoding, errors=errors, newline=newline) except FileExistsError: pass else: raise Exception("Exceeded {} tries, can't create file {}".format( N_MAX_ATTEMPTS, path ))
def test_lazy_tuple(): my_range = [0, 1, 2, 3, 4] lazy_tuple = shorten(my_range, 3, lazy_tuple=True) assert isinstance(lazy_tuple, nifty_collections.LazyTuple) assert not lazy_tuple.collected_data assert tuple(lazy_tuple) == (0, 1, 2)
def test(): '''Test the basic workings of `LazyTuple`.''' self_aware_uuid_iterator = SelfAwareUuidIterator() lazy_tuple = LazyTuple(self_aware_uuid_iterator) assert len(self_aware_uuid_iterator.data) == 0 assert not lazy_tuple.is_exhausted assert repr(lazy_tuple) == '<LazyTuple: (...)>' first = lazy_tuple[0] assert len(self_aware_uuid_iterator.data) == 1 assert isinstance(first, uuid.UUID) assert first == self_aware_uuid_iterator.data[0] first_ten = lazy_tuple[:10] assert isinstance(first_ten, tuple) assert len(self_aware_uuid_iterator.data) == 10 assert first_ten[0] == first assert all(isinstance(item, uuid.UUID) for item in first_ten) weird_slice = lazy_tuple[15:5:-3] assert isinstance(first_ten, tuple) assert len(self_aware_uuid_iterator.data) == 16 assert len(weird_slice) == 4 assert weird_slice[2] == first_ten[-1] == lazy_tuple[9] assert not lazy_tuple.is_exhausted iterator_twenty = cute_iter_tools.shorten(lazy_tuple, 20) assert len(self_aware_uuid_iterator.data) == 16 first_twenty = list(iterator_twenty) assert len(self_aware_uuid_iterator.data) == 20 assert len(first_twenty) == 20 assert first_twenty[:10] == list(first_ten) assert first_twenty == self_aware_uuid_iterator.data iterator_twelve = cute_iter_tools.shorten(lazy_tuple, 12) first_twelve = list(iterator_twelve) assert len(self_aware_uuid_iterator.data) == 20 assert len(first_twelve) == 12 assert first_twenty[:12] == first_twelve assert bool(lazy_tuple) == True
def test(): '''Test the basic workings of `LazyTuple`.''' self_aware_uuid_iterator = SelfAwareUuidIterator() lazy_tuple = LazyTuple(self_aware_uuid_iterator) assert len(self_aware_uuid_iterator.data) == 0 assert not lazy_tuple.exhausted assert repr(lazy_tuple) == '<LazyTuple: (...)>' first = lazy_tuple[0] assert len(self_aware_uuid_iterator.data) == 1 assert isinstance(first, uuid.UUID) assert first == self_aware_uuid_iterator.data[0] first_ten = lazy_tuple[:10] assert isinstance(first_ten, tuple) assert len(self_aware_uuid_iterator.data) == 10 assert first_ten[0] == first assert all(isinstance(item, uuid.UUID) for item in first_ten) weird_slice = lazy_tuple[15:5:-3] assert isinstance(first_ten, tuple) assert len(self_aware_uuid_iterator.data) == 16 assert len(weird_slice) == 4 assert weird_slice[2] == first_ten[-1] == lazy_tuple[9] assert not lazy_tuple.exhausted iterator_twenty = cute_iter_tools.shorten(lazy_tuple, 20) assert len(self_aware_uuid_iterator.data) == 16 first_twenty = list(iterator_twenty) assert len(self_aware_uuid_iterator.data) == 20 assert len(first_twenty) == 20 assert first_twenty[:10] == list(first_ten) assert first_twenty == self_aware_uuid_iterator.data iterator_twelve = cute_iter_tools.shorten(lazy_tuple, 12) first_twelve = list(iterator_twelve) assert len(self_aware_uuid_iterator.data) == 20 assert len(first_twelve) == 12 assert first_twenty[:12] == first_twelve assert bool(lazy_tuple) == True
def test(): '''Test basic workings of `shorten`.''' my_range = [0, 1, 2, 3, 4] short_iterator = shorten(my_range, 3) assert short_iterator.__iter__() is short_iterator assert list(shorten(my_range, 0)) == [] assert list(shorten(my_range, 1)) == range(1) assert list(shorten(my_range, 2)) == range(2) assert list(shorten(my_range, 3)) == range(3) assert list(shorten(my_range, 4)) == range(4) assert list(shorten(my_range, infinity)) == my_range assert list(shorten(iter(my_range), infinity)) == my_range
def test(): '''Test basic workings of `shorten`.''' my_range = [0, 1, 2, 3, 4] short_iterator = shorten(my_range, 3) assert short_iterator.__iter__() is short_iterator assert list(shorten(my_range, 0)) == [] assert list(shorten(my_range, 1)) == list(range(1)) assert list(shorten(my_range, 2)) == list(range(2)) assert list(shorten(my_range, 3)) == list(range(3)) assert list(shorten(my_range, 4)) == list(range(4)) assert list(shorten(my_range, infinity)) == my_range assert list(shorten(iter(my_range), infinity)) == my_range
def create_folder_renaming_if_taken(path): ''' Create a new folder with name `path`, renaming it if name taken. If the name given is "example", the new name would be "example (1)", and if that's taken "example (2)", and so on. Returns a path object to the newly-created folder. ''' for path in cute_iter_tools.shorten(iterate_file_paths(pathlib.Path(path)), N_MAX_ATTEMPTS): try: os.makedirs(str(path), exist_ok=False) except OSError: pass else: return path else: raise Exception("Exceeded {} tries, can't create folder {}".format( N_MAX_ATTEMPTS, path))
def create_folder_renaming_if_taken(path): ''' Create a new folder with name `path`, renaming it if name taken. If the name given is "example", the new name would be "example (1)", and if that's taken "example (2)", and so on. Returns a path object to the newly-created folder. ''' for path in cute_iter_tools.shorten(iterate_file_paths(pathlib.Path(path)), N_MAX_ATTEMPTS): try: os.makedirs(str(path), exist_ok=False) except OSError: pass else: return path else: raise Exception("Exceeded {} tries, can't create folder {}".format( N_MAX_ATTEMPTS, path ))