mirror of
https://github.com/kennethreitz/clint.git
synced 2026-06-05 23:00:18 +00:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4336c354de | |||
| 43b152cf0e | |||
| 0d0d482156 | |||
| 3a40b682f4 | |||
| 1d1bb71203 | |||
| b917e68837 | |||
| 66a6148088 | |||
| a95e803268 | |||
| 7e1c739755 | |||
| ec46d65bd2 | |||
| 73a9cd836b | |||
| c9bf3bac3a | |||
| 5f2df1218a | |||
| 526cf84ebb | |||
| 3709f090b4 | |||
| d6214ababb | |||
| ee089c2d39 | |||
| 53ec4c2e09 |
@@ -16,4 +16,6 @@ Patches and Suggestions
|
||||
- Will Thames
|
||||
- Greg Haskins
|
||||
- Miguel Araujo <maraujop>
|
||||
- takluyver
|
||||
- takluyver
|
||||
- kracekumar
|
||||
- Alejandro Gómez <alejandrogomez>
|
||||
|
||||
@@ -11,4 +11,4 @@ All functionality should be available in pure Python. Optional C (via Cython)
|
||||
implementations may be written for performance reasons, but should never
|
||||
replace the Python implementation.
|
||||
|
||||
Lastly, don't take yourself too seriously :)
|
||||
Lastly, don't take yourself too seriously :)
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
History
|
||||
-------
|
||||
|
||||
0.3.1
|
||||
+++++
|
||||
|
||||
* Progress mill indicator.
|
||||
* Colored unicode support.
|
||||
* Fix ipython nuance.
|
||||
|
||||
|
||||
0.3.0
|
||||
+++++
|
||||
|
||||
|
||||
+2
-2
@@ -19,8 +19,8 @@ from .pipes import piped_in
|
||||
|
||||
|
||||
__title__ = 'clint'
|
||||
__version__ = '0.3.0'
|
||||
__build__ = 0x000300
|
||||
__version__ = '0.3.1'
|
||||
__build__ = 0x000301
|
||||
__author__ = 'Kenneth Reitz'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = 'Copyright 2012 Kenneth Reitz'
|
||||
|
||||
+12
-4
@@ -25,12 +25,17 @@ __all__ = (
|
||||
)
|
||||
|
||||
COLORS = __all__[:-2]
|
||||
DISABLE_COLOR = False
|
||||
|
||||
if not sys.stdout.isatty():
|
||||
if 'get_ipython' in dir():
|
||||
"""
|
||||
when ipython is fired lot of variables like _oh, etc are used.
|
||||
There are so many ways to find current python interpreter is ipython.
|
||||
get_ipython is easiest is most appealing for readers to understand.
|
||||
"""
|
||||
DISABLE_COLOR = True
|
||||
else:
|
||||
colorama.init(autoreset=True)
|
||||
DISABLE_COLOR = False
|
||||
|
||||
|
||||
|
||||
class ColoredString(object):
|
||||
@@ -56,7 +61,10 @@ class ColoredString(object):
|
||||
return "<%s-string: '%s'>" % (self.color, self.s)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.color_str
|
||||
value = self.color_str
|
||||
if isinstance(value, str) and hasattr(value, 'decode'):
|
||||
return value.decode('utf8')
|
||||
return value
|
||||
|
||||
if PY3:
|
||||
__str__ = __unicode__
|
||||
|
||||
@@ -15,10 +15,12 @@ import sys
|
||||
STREAM = sys.stderr
|
||||
|
||||
BAR_TEMPLATE = '%s[%s%s] %i/%i\r'
|
||||
MILL_TEMPLATE = '%s %s %i/%i\r'
|
||||
|
||||
DOTS_CHAR = '.'
|
||||
BAR_FILLED_CHAR = '#'
|
||||
BAR_EMPTY_CHAR = ' '
|
||||
MILL_CHARS = ['|', '/', '-', '\\']
|
||||
|
||||
def bar(it, label='', width=32, hide=False, empty_char=BAR_EMPTY_CHAR, filled_char=BAR_FILLED_CHAR):
|
||||
"""Progress iterator. Wrap your iterables with it."""
|
||||
@@ -65,3 +67,32 @@ def dots(it, label='', hide=False):
|
||||
STREAM.write('\n')
|
||||
STREAM.flush()
|
||||
|
||||
|
||||
def mill(it, label='', hide=False,):
|
||||
"""Progress iterator. Prints a mill while iterating over the items."""
|
||||
|
||||
def _mill_char(_i):
|
||||
if _i == 100:
|
||||
return ' '
|
||||
else:
|
||||
return MILL_CHARS[_i % len(MILL_CHARS)]
|
||||
|
||||
def _show(_i):
|
||||
if not hide:
|
||||
STREAM.write(MILL_TEMPLATE % (
|
||||
label, _mill_char(_i), _i, count))
|
||||
STREAM.flush()
|
||||
|
||||
count = len(it)
|
||||
|
||||
if count:
|
||||
_show(0)
|
||||
|
||||
for i, item in enumerate(it):
|
||||
|
||||
yield item
|
||||
_show(i+1)
|
||||
|
||||
if not hide:
|
||||
STREAM.write('\n')
|
||||
STREAM.flush()
|
||||
|
||||
@@ -17,4 +17,6 @@ if __name__ == '__main__':
|
||||
|
||||
for i in progress.dots(range(100)):
|
||||
sleep(random() * 0.2)
|
||||
|
||||
|
||||
for i in progress.mill(range(100)):
|
||||
sleep(random() * 0.2)
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"title": "Bashō's 'old pond'",
|
||||
"text": "古池や蛙飛込む水の音"
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import sys
|
||||
import codecs
|
||||
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
|
||||
try:
|
||||
import json
|
||||
except:
|
||||
import simplejson as json
|
||||
|
||||
from clint import args
|
||||
from clint import piped_in
|
||||
from clint.textui import colored, puts, indent
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
puts('Test:')
|
||||
with indent(4):
|
||||
puts('%s Fake test 1.' % colored.green('✔'))
|
||||
puts('%s Fake test 2.' % colored.red('✖'))
|
||||
|
||||
puts('')
|
||||
puts('Greet:')
|
||||
with indent(4):
|
||||
puts(colored.red('Здравствуйте'))
|
||||
puts(colored.green('你好。'))
|
||||
puts(colored.yellow('سلام'))
|
||||
puts(colored.magenta('안녕하세요'))
|
||||
puts(colored.blue('नमस्ते'))
|
||||
puts(colored.cyan('γειά σου'))
|
||||
|
||||
puts('')
|
||||
puts('Arguments:')
|
||||
with indent(4):
|
||||
puts('%s' % colored.red(args[0]))
|
||||
|
||||
puts('')
|
||||
puts('File:')
|
||||
with indent(4):
|
||||
f = args.files[0]
|
||||
puts(colored.yellow('%s:' % f))
|
||||
with indent(2):
|
||||
fd = codecs.open(f, encoding='utf-8')
|
||||
for line in fd:
|
||||
line = line.strip('\n\r')
|
||||
puts(colored.yellow(' %s' % line))
|
||||
fd.close()
|
||||
|
||||
puts('')
|
||||
puts('Input:')
|
||||
with indent(4):
|
||||
in_data = json.loads(piped_in())
|
||||
title = in_data['title']
|
||||
text = in_data['text']
|
||||
puts(colored.blue('Title: %s' % title))
|
||||
puts(colored.magenta('Text: %s' % text))
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
python unicode.py こんにちは。 unicode.json < unicode.json
|
||||
Reference in New Issue
Block a user