123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import sys
- import os
- def splitall(loc):
- """
- Return a list of the path components in loc. (Used by relpath_).
- The first item in the list will be either ``os.curdir``, ``os.pardir``, empty,
- or the root directory of loc (for example, ``/`` or ``C:\\).
- The other items in the list will be strings.
- Adapted from *path.py* by Jason Orendorff.
- """
- parts = []
- while loc != os.curdir and loc != os.pardir:
- prev = loc
- loc, child = os.path.split(prev)
- if loc == prev:
- break
- parts.append(child)
- parts.append(loc)
- parts.reverse()
- return parts
- def _make_path_relative(origin, dest):
- """
- Return the relative path between origin and dest.
- If it's not possible return dest.
- If they are identical return ``os.curdir``
- Adapted from `path.py <http://www.jorendorff.com/articles/python/path/>`_ by Jason Orendorff.
- """
- origin = os.path.abspath(origin).replace('\\', '/')
- dest = os.path.abspath(dest).replace('\\', '/')
- #
- orig_list = splitall(os.path.normcase(origin))
- # Don't normcase dest! We want to preserve the case.
- dest_list = splitall(dest)
- #
- if orig_list[0] != os.path.normcase(dest_list[0]):
- # Can't get here from there.
- return dest
- #
- # Find the location where the two paths start to differ.
- i = 0
- for start_seg, dest_seg in zip(orig_list, dest_list):
- if start_seg != os.path.normcase(dest_seg):
- break
- i += 1
- #
- # Now i is the point where the two paths diverge.
- # Need a certain number of "os.pardir"s to work up
- # from the origin to the point of divergence.
- segments = [os.pardir] * (len(orig_list) - i)
- # Need to add the diverging part of dest_list.
- segments += dest_list[i:]
- if len(segments) == 0:
- # If they happen to be identical, use os.curdir.
- return os.curdir
- else:
- # return os.path.join(*segments).replace('\\', '/')
- return os.path.join(*segments)
- def xml_indent(elem, level=0):
- i = "\n" + level*" "
- if len(elem):
- if not elem.text or not elem.text.strip():
- elem.text = i + " "
- if not elem.tail or not elem.tail.strip():
- elem.tail = i
- for elem in elem:
- xml_indent(elem, level+1)
- if not elem.tail or not elem.tail.strip():
- elem.tail = i
- else:
- if level and (not elem.tail or not elem.tail.strip()):
- elem.tail = i
|