Python Forum

Full Version: Slice qualified names.
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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()