mirror of
https://github.com/kennethreitz/clint.git
synced 2026-06-05 06:46:16 +00:00
98 lines
1.9 KiB
Python
98 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
clint.utils
|
|
~~~~~~~~~~~~
|
|
|
|
Various Python helpers used within clint.
|
|
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import with_statement
|
|
|
|
import errno
|
|
import os.path
|
|
from os import makedirs
|
|
from glob import glob
|
|
|
|
try:
|
|
basestring = basestring
|
|
except NameError:
|
|
basestring = str
|
|
|
|
def expand_path(path):
|
|
"""Expands directories and globs in given path."""
|
|
|
|
paths = []
|
|
path = os.path.expanduser(path)
|
|
path = os.path.expandvars(path)
|
|
|
|
if os.path.isdir(path):
|
|
|
|
for (dir, dirs, files) in os.walk(path):
|
|
for file in files:
|
|
paths.append(os.path.join(dir, file))
|
|
else:
|
|
paths.extend(glob(path))
|
|
|
|
return paths
|
|
|
|
|
|
|
|
def is_collection(obj):
|
|
"""Tests if an object is a collection. Strings don't count."""
|
|
|
|
if isinstance(obj, basestring):
|
|
return False
|
|
|
|
return hasattr(obj, '__getitem__')
|
|
|
|
|
|
def mkdir_p(path):
|
|
"""Emulates `mkdir -p` behavior."""
|
|
try:
|
|
makedirs(path)
|
|
except OSError as exc: # Python >2.5
|
|
if exc.errno == errno.EEXIST:
|
|
pass
|
|
else:
|
|
raise
|
|
|
|
def tsplit(string, delimiters):
|
|
"""Behaves str.split but supports tuples of delimiters."""
|
|
|
|
delimiters = tuple(delimiters)
|
|
stack = [string,]
|
|
|
|
for delimiter in delimiters:
|
|
for i, substring in enumerate(stack):
|
|
substack = substring.split(delimiter)
|
|
stack.pop(i)
|
|
for j, _substring in enumerate(substack):
|
|
stack.insert(i+j, _substring)
|
|
|
|
return stack
|
|
|
|
def schunk(string, size):
|
|
"""Splits string into n sized chunks."""
|
|
|
|
stack = []
|
|
|
|
substack = []
|
|
current_count = 0
|
|
|
|
for char in string:
|
|
if not current_count < size:
|
|
stack.append(''.join(substack))
|
|
substack = []
|
|
current_count = 0
|
|
|
|
substack.append(char)
|
|
current_count += 1
|
|
|
|
if len(substack):
|
|
stack.append(''.join(substack))
|
|
|
|
return stack
|