Skip to content

Commit

Permalink
Remove support for Python 2.6.
Browse files Browse the repository at this point in the history
Fixes #64
  • Loading branch information
mblayman committed Dec 26, 2016
1 parent 025185a commit c300ab1
Show file tree
Hide file tree
Showing 14 changed files with 89 additions and 147 deletions.
3 changes: 0 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ sudo: false
language: python
matrix:
include:
- os: linux
python: 2.6
env: TOX_ENV=py26
- os: linux
python: 2.7
env: TOX_ENV=py27
Expand Down
4 changes: 1 addition & 3 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,8 @@ handroll is currently supported on Python
3.5,
3.4,
3.3,
and PyPy.
It is also available for legacy Python
2.7,
and even 2.6.
and PyPy.

.. code-block:: console
Expand Down
1 change: 1 addition & 0 deletions docs/releases.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Version 3.1, In Development
* Perform continuous integration testing on OS X.
* Include ``posts`` in the blog feed list
to permit more complex list rendering.
* Remove support for Python 2.6

Version 3.0, Released March 7, 2016
-----------------------------------
Expand Down
59 changes: 19 additions & 40 deletions handroll/tests/test_blog_extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,9 @@ def test_requires_atom_title(self):
director = self.factory.make_director()
self._add_blog_section(director.config.parser, exclude='atom_title')
extension = BlogExtension(director.config)
try:
with self.assertRaises(AbortError) as error:
extension.on_pre_composition(director)
self.fail()
except AbortError as ae:
self.assertTrue('atom_title' in str(ae))
self.assertTrue('atom_title' in str(error.exception))

def test_has_atom_title_in_metadata(self):
director = self.factory.make_director()
Expand All @@ -115,11 +113,9 @@ def test_requires_atom_author(self):
director = self.factory.make_director()
self._add_blog_section(director.config.parser, exclude='atom_author')
extension = BlogExtension(director.config)
try:
with self.assertRaises(AbortError) as error:
extension.on_pre_composition(director)
self.fail()
except AbortError as ae:
self.assertTrue('atom_author' in str(ae))
self.assertTrue('atom_author' in str(error.exception))

def test_has_atom_author_in_metadata(self):
director = self.factory.make_director()
Expand All @@ -132,11 +128,9 @@ def test_requires_atom_id(self):
director = self.factory.make_director()
self._add_blog_section(director.config.parser, exclude='atom_id')
extension = BlogExtension(director.config)
try:
with self.assertRaises(AbortError) as error:
extension.on_pre_composition(director)
self.fail()
except AbortError as ae:
self.assertTrue('atom_id' in str(ae))
self.assertTrue('atom_id' in str(error.exception))

def test_has_atom_id_in_metadata(self):
director = self.factory.make_director()
Expand All @@ -150,11 +144,9 @@ def test_requires_atom_url(self):
director = self.factory.make_director()
self._add_blog_section(director.config.parser, exclude='atom_url')
extension = BlogExtension(director.config)
try:
with self.assertRaises(AbortError) as error:
extension.on_pre_composition(director)
self.fail()
except AbortError as ae:
self.assertTrue('atom_url' in str(ae))
self.assertTrue('atom_url' in str(error.exception))

def test_has_atom_url_in_metadata(self):
director = self.factory.make_director()
Expand All @@ -169,11 +161,9 @@ def test_requires_atom_output(self):
director = self.factory.make_director()
self._add_blog_section(director.config.parser, exclude='atom_output')
extension = BlogExtension(director.config)
try:
with self.assertRaises(AbortError) as error:
extension.on_pre_composition(director)
self.fail()
except AbortError as ae:
self.assertTrue('atom_output' in str(ae))
self.assertTrue('atom_output' in str(error.exception))

def test_has_atom_output_in_metadata(self):
director = self.factory.make_director()
Expand Down Expand Up @@ -258,11 +248,9 @@ def test_list_output_required_with_list_template(self):
director = self.factory.make_director()
self._add_blog_section(director.config.parser, exclude='list_output')
extension = BlogExtension(director.config)
try:
with self.assertRaises(AbortError) as error:
extension.on_pre_composition(director)
self.fail()
except AbortError as ae:
self.assertTrue('list_output' in str(ae))
self.assertTrue('list_output' in str(error.exception))

@mock.patch.object(ListPageBuilder, 'write_to')
def test_builds_list_page(self, write_to):
Expand Down Expand Up @@ -323,42 +311,33 @@ def test_post_requires_date(self):
extension = self._make_preprocessed_one()
frontmatter = self._make_blog_post_frontmatter()
del frontmatter['date']
try:
with self.assertRaises(AbortError) as error:
extension.on_frontmatter_loaded('thundercats.md', frontmatter)
self.fail()
except AbortError as ae:
self.assertTrue('date' in str(ae))
self.assertTrue('date' in str(error.exception))

def test_post_requires_title(self):
extension = self._make_preprocessed_one()
frontmatter = self._make_blog_post_frontmatter()
del frontmatter['title']
try:
with self.assertRaises(AbortError) as error:
extension.on_frontmatter_loaded('thundercats.md', frontmatter)
self.fail()
except AbortError as ae:
self.assertTrue('title' in str(ae))
self.assertTrue('title' in str(error.exception))

def test_post_requires_error_includes_post_filename(self):
extension = self._make_preprocessed_one()
frontmatter = self._make_blog_post_frontmatter()
del frontmatter['title']
try:
with self.assertRaises(AbortError) as error:
extension.on_frontmatter_loaded('thundercats.md', frontmatter)
self.fail()
except AbortError as ae:
self.assertTrue('thundercats.md' in str(ae))
self.assertTrue('thundercats.md' in str(error.exception))


class TestBlogBuilder(TestCase):

def test_generate_output_not_implemented(self):
builder = BlogBuilder()
try:
with self.assertRaises(NotImplementedError):
builder.write_to('doesnotmatter.html')
self.fail()
except NotImplementedError:
pass


class TestFeedBuilder(TestCase):
Expand Down
8 changes: 3 additions & 5 deletions handroll/tests/test_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,12 @@ def test_register_run_as_func(self):
def test_run_not_implemented(self):
args = mock.Mock()
command = Command()
self.assertRaises(NotImplementedError, command.run, args)
with self.assertRaises(NotImplementedError):
command.run(args)

def test_finish(self):
try:
with self.assertRaises(SystemExit):
finish()
self.fail()
except SystemExit:
pass


class TestBuildCommand(TestCase):
Expand Down
30 changes: 16 additions & 14 deletions handroll/tests/test_composers.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ def _make_one(self):

def test_compose_not_implemented(self):
composer = self._make_one()
self.assertRaises(
NotImplementedError, composer.compose, None, None, None)
with self.assertRaises(NotImplementedError):
composer.compose(None, None, None)

def test_get_output_extension_not_implemented(self):
composer = self._make_one()
self.assertRaises(
NotImplementedError, composer.get_output_extension, 'file.txt')
with self.assertRaises(NotImplementedError):
composer.get_output_extension('file.txt')

def test_has_config(self):
config = self.factory.make_configuration()
Expand Down Expand Up @@ -105,8 +105,8 @@ def test_must_have_entries(self):
with open(self.source_file, 'w') as f:
f.write(source)
composer = self._make_one()
self.assertRaises(
AbortError, composer.compose, None, self.source_file, self.outdir)
with self.assertRaises(AbortError):
composer.compose(None, self.source_file, self.outdir)

@mock.patch('handroll.composers.atom.json')
def test_skips_up_to_date(self, json):
Expand Down Expand Up @@ -202,9 +202,8 @@ def test_composes_file(self):
open(source_file, 'w').close()
outdir = ''
composer = self._make_one()
self.assertRaises(
NotImplementedError,
composer.compose, catalog, source_file, outdir)
with self.assertRaises(NotImplementedError):
composer.compose(catalog, source_file, outdir)

def test_selects_default_template(self):
catalog = mock.MagicMock()
Expand Down Expand Up @@ -331,7 +330,8 @@ def test_abort_with_no_sass(self):
"""Test that handroll aborts if ``sass`` is not installed."""
# The fake bin directory has no sass executable.
fake_bin = tempfile.mkdtemp()
self.assertRaises(AbortError, SassComposer, fake_bin)
with self.assertRaises(AbortError):
SassComposer(fake_bin)

def test_create(self):
fake_bin = self._make_fake_sass_bin()
Expand All @@ -357,8 +357,8 @@ def test_failed_sass_aborts(self, subprocess):
output_dir = '/out'
subprocess.Popen.return_value.communicate.return_value = ('boom', '')
subprocess.Popen.return_value.returncode = 1
self.assertRaises(
AbortError, composer.compose, None, source_file, output_dir)
with self.assertRaises(AbortError):
composer.compose(None, source_file, output_dir)

def test_output_extension(self):
fake_bin = self._make_fake_sass_bin()
Expand Down Expand Up @@ -434,7 +434,8 @@ def test_malformed_yaml(self):
with tempfile.NamedTemporaryFile(delete=False) as f:
f.write(source.encode('utf-8'))
mixin = FrontmatterComposerMixin()
self.assertRaises(AbortError, mixin.get_data, f.name)
with self.assertRaises(AbortError):
mixin.get_data(f.name)

def test_malformed_document_with_frontmatter(self):
source = inspect.cleandoc("""%YAML 1.1
Expand All @@ -444,7 +445,8 @@ def test_malformed_document_with_frontmatter(self):
with tempfile.NamedTemporaryFile(delete=False) as f:
f.write(source.encode('utf-8'))
mixin = FrontmatterComposerMixin()
self.assertRaises(AbortError, mixin.get_data, f.name)
with self.assertRaises(AbortError):
mixin.get_data(f.name)


class TestJinja2Composer(TestCase):
Expand Down
7 changes: 4 additions & 3 deletions handroll/tests/test_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,13 @@ def test_no_boolean_extension(self):
args = FakeArgs()
with tempfile.NamedTemporaryFile(delete=False) as f:
f.write(conf_file.encode('utf-8'))

self.assertRaises(AbortError, configuration.build_config, f.name, args)
with self.assertRaises(AbortError):
configuration.build_config(f.name, args)

def test_no_domain_aborts(self):
config = configuration.Configuration()
self.assertRaises(AbortError, lambda: config.domain)
with self.assertRaises(AbortError):
config.domain

def test_loads_domain_from_site(self):
conf_file = inspect.cleandoc(
Expand Down
24 changes: 6 additions & 18 deletions handroll/tests/test_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,24 @@ def _make_argv_with(self, argument=None, command='build'):
def test_verbose_sets_logging(self):
logger.setLevel(logging.CRITICAL)
argv = self._make_argv_with('-v')
self.assertRaises(SystemExit, entry.main, argv)
with self.assertRaises(SystemExit):
entry.main(argv)
self.assertEqual(logging.INFO, logger.getEffectiveLevel())

def test_debug_sets_logging(self):
logger.setLevel(logging.CRITICAL)
argv = self._make_argv_with('-d')
self.assertRaises(SystemExit, entry.main, argv)
with self.assertRaises(SystemExit):
entry.main(argv)
self.assertEqual(logging.DEBUG, logger.getEffectiveLevel())

def test_site_directory_is_file(self):
site = tempfile.mkdtemp()
file_site = os.path.join(site, 'fake')
argv = self._make_argv_with()
argv.append(file_site)
self.assertRaises(SystemExit, entry.main, argv)
with self.assertRaises(SystemExit):
entry.main(argv)

@mock.patch('handroll.commands.build.finish')
def test_complete_site_generation(self, finish):
Expand All @@ -147,18 +150,3 @@ def test_development_server_served(self, serve):
entry.main(argv)

self.assertTrue(serve.called)

# @mock.patch('handroll.entry.scaffolder')
# def test_makes_from_scaffolder(self, mock_scaffolder):
def test_makes_from_scaffolder(self):
# FIXME: I promise I'm coming right back to this.
return
self.arguments.extend(['-s', 'default', 'site'])

try:
entry.main(self.arguments)
self.fail()
except SystemExit:
pass
# mock_scaffolder.make.assert_called_once_with(
# 'default', 'site')
13 changes: 6 additions & 7 deletions handroll/tests/test_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ class FrontmatterLoader(Extension):
handle_frontmatter_loaded = True
extension = FrontmatterLoader(None)
self.assertTrue(extension.handle_frontmatter_loaded)
self.assertRaises(
NotImplementedError, signals.frontmatter_loaded.send,
'a_source_file', frontmatter={})
with self.assertRaises(NotImplementedError):
signals.frontmatter_loaded.send('a_source_file', frontmatter={})
signals.frontmatter_loaded.receivers.clear()

@mock.patch('handroll.extensions.base.signals.post_composition')
Expand All @@ -64,8 +63,8 @@ class PostComposer(Extension):
director = mock.Mock()
extension = PostComposer(None)
self.assertTrue(extension.handle_post_composition)
self.assertRaises(
NotImplementedError, signals.post_composition.send, director)
with self.assertRaises(NotImplementedError):
signals.post_composition.send(director)
signals.post_composition.receivers.clear()

@mock.patch('handroll.extensions.base.signals.pre_composition')
Expand All @@ -79,6 +78,6 @@ class PreComposer(Extension):
director = mock.Mock()
extension = PreComposer(None)
self.assertTrue(extension.handle_pre_composition)
self.assertRaises(
NotImplementedError, signals.pre_composition.send, director)
with self.assertRaises(NotImplementedError):
signals.pre_composition.send(director)
signals.pre_composition.receivers.clear()
10 changes: 2 additions & 8 deletions handroll/tests/test_scaffolder.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,13 @@ def test_displays_scaffolds(self, display_scaffold):
self.assertTrue(display_scaffold.called)

def test_unknown_scaffold_aborts(self):
try:
with self.assertRaises(AbortError):
scaffolder.make('fake', 'dontcare')
self.fail()
except AbortError:
pass

def test_existing_site_directory_aborts(self):
site = tempfile.mkdtemp()
try:
with self.assertRaises(AbortError):
scaffolder.make('default', site)
self.fail()
except AbortError:
pass

def test_makes_site_root(self):
parent = tempfile.mkdtemp()
Expand Down

0 comments on commit c300ab1

Please sign in to comment.