Commit bfaeb8f0 authored by Andreas Mueller's avatar Andreas Mueller

Merge pull request #117 from pendragon-/master

fix handling of scale parameter & python 3 compatibility for cli
parents 89508af2 714f0a79
import argparse
import inspect
from wordcloud import wordcloud_cli as cli
import wordcloud as wc
import os
from collections import namedtuple
from mock import patch, MagicMock
from import assert_equal, assert_true, assert_in
from tempfile import NamedTemporaryFile
import wordcloud as wc
from wordcloud import wordcloud_cli as cli
from mock import patch
from import assert_equal, assert_greater, assert_true, assert_in, assert_not_in
temp = NamedTemporaryFile()
ArgOption = namedtuple('ArgOption', ['cli_name', 'init_name', 'pass_value', 'fail_value'])
......@@ -31,27 +32,14 @@ def all_arguments():
return arguments
def test_argument_spec_matches_to_constructor_args():
args = argparse.Namespace()
for option in all_arguments():
setattr(args, option.init_name, option.pass_value)
supported_args = inspect.getargspec(wc.WordCloud.__init__).args
for arg_name in vars(args).keys():
assert_in(arg_name, supported_args)
def test_main_passes_arguments_through():
args = argparse.Namespace()
temp_imagefile = NamedTemporaryFile()
args = argparse.Namespace(text='some long text', imagefile=open(, 'w'))
for option in all_arguments():
setattr(args, option.init_name, option.pass_value)
args.imagefile = NamedTemporaryFile()
args.text = 'some long text'
with patch('wordcloud.wordcloud_cli.wc.WordCloud', autospec=True) as mock_word_cloud:
instance = mock_word_cloud.return_value
instance.to_image.return_value = MagicMock()
posargs, kwargs = mock_word_cloud.call_args
......@@ -106,3 +94,16 @@ def test_parse_args_defaults_to_random_color():
args = cli.parse_args(['--text',])
assert_equal(args.color_func, wc.random_color_func)
def test_cli_writes_image():
# ensure writting works with all python versions
temp_imagefile = NamedTemporaryFile()
temp_textfile = NamedTemporaryFile()
temp_textfile.write(b'some text')
args = cli.parse_args(['--text',, '--imagefile',])
assert_greater(os.path.getsize(, 0, msg='expecting image to be written')
......@@ -460,14 +460,14 @@ class WordCloud(object):
height, width = self.height, self.width
img =, (width * self.scale, height * self.scale),
img =, (int(width * self.scale), int(height * self.scale)),
draw = ImageDraw.Draw(img)
for (word, count), font_size, position, orientation, color in self.layout_:
font = ImageFont.truetype(self.font_path, font_size * self.scale)
font = ImageFont.truetype(self.font_path, int(font_size * self.scale))
transposed_font = ImageFont.TransposedFont(font,
pos = (position[1] * self.scale, position[0] * self.scale)
pos = (int(position[1] * self.scale), int(position[0] * self.scale))
draw.text(pos, word, fill=color, font=transposed_font)
return img
......@@ -10,7 +10,6 @@ import argparse
import wordcloud as wc
import numpy as np
import sys
import io
from PIL import Image
def main(args):
......@@ -20,10 +19,9 @@ def main(args):
color_func=args.color_func, background_color=args.background_color).generate(args.text)
image = wordcloud.to_image()
b = io.BytesIO(), format='png')
with args.imagefile:
out = args.imagefile if sys.version < '3' else args.imagefile.buffer, format='png')
def parse_args(arguments):
prog = 'python'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment