예제 #1
0
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.
예제 #2
0
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.
예제 #3
0
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))
예제 #4
0
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
        ))
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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
예제 #10
0
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
예제 #11
0
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))
예제 #12
0
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
        ))