12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import math
- import random
- from collections import defaultdict
- from operator import attrgetter, itemgetter
- def regenerate_context_articles(generator):
- """Helper to regenerate context after modifying articles draft state
- essentially just a copy from pelican.generators.ArticlesGenerator.generate_context
- after process_translations up to signal sending
- This has to be kept in sync untill a better solution is found
- This is for Pelican version 3.3.0
- """
-
- generator.dates = {}
- generator.tags = defaultdict(list)
- generator.categories = defaultdict(list)
- generator.authors = defaultdict(list)
-
-
- for article in generator.articles:
-
-
- generator.categories[article.category].append(article)
- if hasattr(article, 'tags'):
- for tag in article.tags:
- generator.tags[tag].append(article)
-
- if hasattr(article, 'author') and article.author.name != '':
- generator.authors[article.author].append(article)
-
- generator.articles.sort(key=attrgetter('date'), reverse=True)
- generator.dates = list(generator.articles)
- generator.dates.sort(key=attrgetter('date'),
- reverse=generator.context['NEWEST_FIRST_ARCHIVES'])
-
- tag_cloud = defaultdict(int)
- for article in generator.articles:
- for tag in getattr(article, 'tags', []):
- tag_cloud[tag] += 1
- tag_cloud = sorted(tag_cloud.items(), key=itemgetter(1), reverse=True)
- tag_cloud = tag_cloud[:generator.settings.get('TAG_CLOUD_MAX_ITEMS')]
- tags = list(map(itemgetter(1), tag_cloud))
- if tags:
- max_count = max(tags)
- steps = generator.settings.get('TAG_CLOUD_STEPS')
-
- generator.tag_cloud = [
- (
- tag,
- int(math.floor(steps - (steps - 1) * math.log(count)
- / (math.log(max_count)or 1)))
- )
- for tag, count in tag_cloud
- ]
-
- random.shuffle(generator.tag_cloud)
-
-
- generator.categories = list(generator.categories.items())
- generator.categories.sort(
- reverse=generator.settings['REVERSE_CATEGORY_ORDER'])
- generator.authors = list(generator.authors.items())
- generator.authors.sort()
- generator._update_context(('articles', 'dates', 'tags', 'categories',
- 'tag_cloud', 'authors', 'related_posts'))
-
|