Jan-08-2020, 11:23 PM
A helper function to slice a qualified name such as a python module name
_sentinel = object() # helps for qslice() def qslice(qname, start, stop=_sentinel, step=None): """Slice a qualified name. Returns a qualified name. >>> qslice('foo.bar.baz', -2) bar >>> qslice('foo.bar.baz', -2, None) bar.baz """ if stop is _sentinel: return qname.split('.')[start] else: return '.'.join(qname.split('.')[start:stop:step]) if __name__ == '__main__': import unittest class TestQslice(unittest.TestCase): def test_integer_argument(self): result = qslice('foo.bar.baz.qux', 1) self.assertEqual(result, 'bar') def test_middle_slice(self): result = qslice('foo.bar.baz.qux', 1, 3) self.assertEqual(result, 'bar.baz') def test_step_slice(self): result = qslice('foo.bar.baz.qux', 1, None, 2) self.assertEqual(result, 'bar.qux') def test_starting_slice(self): result = qslice('foo.bar.baz.qux', None, -1) self.assertEqual(result, 'foo.bar.baz') def test_ending_slice(self): result = qslice('foo.bar.baz.qux', 2, None) self.assertEqual(result, 'baz.qux') unittest.main()