Skip to content

Commit

Permalink
Switch posts from set to dict.
Browse files Browse the repository at this point in the history
  • Loading branch information
mblayman committed Jul 5, 2015
1 parent 36e3d63 commit 73b7280
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 33 deletions.
16 changes: 4 additions & 12 deletions handroll/extensions/blog.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,6 @@ def __init__(self, **kwargs):
self.title = kwargs['title']
self.url = kwargs['url']

def __hash__(self):
"""A set of blog posts is constrained by the source file."""
return hash(self.source_file)

def __eq__(x, y):
return x.source_file == y.source_file


class BlogExtension(Extension):
"""Track files marked as blog entries and generate a feed."""
Expand All @@ -47,7 +40,7 @@ class BlogExtension(Extension):

def __init__(self, config):
super(BlogExtension, self).__init__(config)
self.posts = set([])
self.posts = {}
self.atom_metadata = {}
self.atom_output = ''
self._resolver = None
Expand Down Expand Up @@ -82,14 +75,13 @@ def on_frontmatter_loaded(self, source_file, frontmatter):
title=frontmatter['title'],
url=self._resolver.as_url(source_file),
)
# Discard the older version of the post if it exists.
self.posts.discard(post)
self.posts.add(post)
self.posts[source_file] = post

def on_post_composition(self, director):
"""Generate the atom feed."""
builder = FeedBuilder(self.atom_metadata)
for post in sorted(self.posts, key=lambda p: p.date, reverse=True):
blog_posts = self.posts.values()
for post in sorted(blog_posts, key=lambda p: p.date, reverse=True):
builder.add(post)
output_file = os.path.join(director.outdir, self.atom_output)
builder.write_to(output_file)
Expand Down
27 changes: 6 additions & 21 deletions handroll/tests/test_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,23 +89,6 @@ class PreComposer(Extension):
signals.pre_composition.receivers.clear()


class TestBlogPost(TestCase):

def test_source_file_is_unique_constraint(self):
"""The source file is used as the unique constraint for hashing."""
post = self.factory.make_blog_post()
hash_value = post.__hash__()
self.assertEqual(hash(post.source_file), hash_value)

def test_matching_source_file_posts_limit_set(self):
post_1 = self.factory.make_blog_post()
post_1.source_file = 'source.md'
post_2 = self.factory.make_blog_post()
post_2.source_file = 'source.md'
posts = set([post_1])
self.assertTrue(post_2 in posts)


class TestBlogExtension(TestCase):

def tearDown(self):
Expand Down Expand Up @@ -158,7 +141,7 @@ def test_registers_blog_post(self):
extension = self._make_preprocessed_one()
frontmatter = self._make_blog_post_frontmatter()
extension.on_frontmatter_loaded('thundercats.md', frontmatter)
post = extension.posts.pop()
post = extension.posts['thundercats.md']
self.assertEqual('thundercats.md', post.source_file)

def test_ignores_non_blog_post(self):
Expand Down Expand Up @@ -284,15 +267,15 @@ def test_adds_post(self, builder_add):
os.mkdir(director.outdir)
extension = self._make_preprocessed_one(director)
post = self.factory.make_blog_post()
extension.posts.add(post)
extension.posts[post.source_file] = post
extension.on_post_composition(director)
builder_add.assert_called_once_with(post)

def test_date_in_post(self):
extension = self._make_preprocessed_one()
frontmatter = self._make_blog_post_frontmatter()
extension.on_frontmatter_loaded('thundercats.md', frontmatter)
post = extension.posts.pop()
post = extension.posts['thundercats.md']
expected_date = datetime.date(2015, 6, 25)
self.assertEqual(expected_date, post.date.date())

Expand All @@ -314,7 +297,9 @@ def test_posts_added_to_builder_by_date(self, builder_add):
oldest.source_file = 'oldest.md'
oldest.date = oldest.date - datetime.timedelta(days=-2)
extension = self._make_preprocessed_one()
extension.posts.update([older, current, oldest])
extension.posts['current.md'] = current
extension.posts['older.md'] = older
extension.posts['oldest.md'] = oldest
director = self.factory.make_director()
os.mkdir(director.outdir)
extension.on_post_composition(director)
Expand Down

0 comments on commit 73b7280

Please sign in to comment.