# -*- coding: utf-8 -*-
from re import compile as compile_regex
_MULTIPLE_PATHS = compile_regex(r"/{2,}")
def normalize_path(path):
"""
Normalize ``path``.
It returns ``path`` with leading and trailing slashes, and no multiple
continuous slashes.
"""
if path:
if path[0] != "/":
path = "/" + path
if path[-1] != "/":
path = path + "/"
path = _MULTIPLE_PATHS.sub("/", path)
else:
path = "/"
return path
# ------ UNIT TESTS ------
from nose.tools import eq_
class TestNormalizingPath(object):
"""Tests for :func:`normalize_path`."""
def test_empty_string(self):
path_normalized = normalize_path("")
eq_(path_normalized, "/")
def test_slash(self):
path_normalized = normalize_path("/")
eq_(path_normalized, "/")
def test_no_leading_slash(self):
path_normalized = normalize_path("path/")
eq_(path_normalized, "/path/")
def test_no_trailing_slash(self):
path_normalized = normalize_path("/path")
eq_(path_normalized, "/path/")
def test_trailing_and_leading_slashes(self):
path_normalized = normalize_path("/path/")
eq_(path_normalized, "/path/")
def test_multiple_leading_slashes(self):
path_normalized = normalize_path("////path/")
eq_(path_normalized, "/path/")
def test_multiple_trailing_slashes(self):
path_normalized = normalize_path("/path////")
eq_(path_normalized, "/path/")
def test_multiple_inner_slashes(self):
path_normalized = normalize_path("/path////here/")
eq_(path_normalized, "/path/here/")
def test_unicode_path(self):
path_normalized = normalize_path(u"mañana/aquÃ")
eq_(path_normalized, u"/mañana/aquÃ/")