Revision f7414041

b/lib/utils.py
1002 1002
  for elem in itertools.ifilter(pred, seq):
1003 1003
    return True
1004 1004
  return False
1005

  
1006

  
1007
def UniqueSequence(seq):
1008
  """Returns a list with unique elements.
1009

  
1010
  Element order is preserved.
1011
  """
1012
  seen = set()
1013
  return [i for i in seq if i not in seen and not seen.add(i)]
b/test/ganeti.utils_unittest.py
608 608
    self.failUnless(self._re_uuid.match(utils.NewUUID()))
609 609

  
610 610

  
611
class TestUniqueSequence(unittest.TestCase):
612
  """Test case for UniqueSequence"""
613

  
614
  def _test(self, input, expected):
615
    self.assertEqual(utils.UniqueSequence(input), expected)
616

  
617
  def runTest(self):
618
    # Ordered input
619
    self._test([1, 2, 3], [1, 2, 3])
620
    self._test([1, 1, 2, 2, 3, 3], [1, 2, 3])
621
    self._test([1, 2, 2, 3], [1, 2, 3])
622
    self._test([1, 2, 3, 3], [1, 2, 3])
623

  
624
    # Unordered input
625
    self._test([1, 2, 3, 1, 2, 3], [1, 2, 3])
626
    self._test([1, 1, 2, 3, 3, 1, 2], [1, 2, 3])
627

  
628
    # Strings
629
    self._test(["a", "a"], ["a"])
630
    self._test(["a", "b"], ["a", "b"])
631
    self._test(["a", "b", "a"], ["a", "b"])
632

  
633

  
611 634
if __name__ == '__main__':
612 635
  unittest.main()

Also available in: Unified diff