annotate garcon/benchsite.py @ 1145:e94737572542

serve: Fix an issue where false positive matches were rendered as the requested page. Now we try to render the page, but also try to detect for the most common "empty" pages.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 05 Jun 2018 22:08:51 -0700
parents 22cf13b86cc3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import io
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import os
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import os.path
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import string
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 import random
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 import datetime
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 import argparse
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 def generateWord(min_len=1, max_len=10):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 length = random.randint(min_len, max_len)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 word = ''.join(random.choice(string.ascii_letters) for _ in range(length))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 return word
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 def generateSentence(words):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 return ' '.join([generateWord() for i in range(words)])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 def generateDate():
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 year = random.choice(range(1995, 2015))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 month = random.choice(range(1, 13))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 day = random.choice(range(1, 29))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 hours = random.choice(range(0, 24))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 minutes = random.choice(range(0, 60))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 seconds = random.choice(range(0, 60))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 return datetime.datetime(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 year, month, day, hours, minutes, seconds)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 def generateTitleAndSlug():
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 title = generateSentence(8)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 slug = title.replace(' ', '-').lower()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 slug = ''.join(c for c in slug if c.isalnum() or c == '-')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 return title, slug
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 class BenchmarkSiteGenerator(object):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 def __init__(self, out_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 self.out_dir = out_dir
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 self.all_tags = []
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 def generatePost(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 post_info = {}
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 title, slug = generateTitleAndSlug()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 post_info.update({
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 'title': title,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 'slug': slug})
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 post_info['description'] = generateSentence(20)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 post_info['tags'] = random.choice(self.all_tags)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 post_info['datetime'] = generateDate()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 buf = io.StringIO()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 with buf:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 buf.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 buf.write('\n\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 post_info['text'] = buf.getvalue()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 self.writePost(post_info)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 pass
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 raise NotImplementedError()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 class PieCrustBechmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 posts_dir = os.path.join(self.out_dir, 'posts')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75
990
22cf13b86cc3 cm: Upgrade Garcon tasks to the latest PyInvoke version.
Ludovic Chabant <ludovic@chabant.com>
parents: 642
diff changeset
76 config_path = os.path.join(self.out_dir, 'config.yml')
22cf13b86cc3 cm: Upgrade Garcon tasks to the latest PyInvoke version.
Ludovic Chabant <ludovic@chabant.com>
parents: 642
diff changeset
77 if not os.path.exists(config_path):
22cf13b86cc3 cm: Upgrade Garcon tasks to the latest PyInvoke version.
Ludovic Chabant <ludovic@chabant.com>
parents: 642
diff changeset
78 with open(config_path, 'w') as fp:
22cf13b86cc3 cm: Upgrade Garcon tasks to the latest PyInvoke version.
Ludovic Chabant <ludovic@chabant.com>
parents: 642
diff changeset
79 fp.write('\n')
22cf13b86cc3 cm: Upgrade Garcon tasks to the latest PyInvoke version.
Ludovic Chabant <ludovic@chabant.com>
parents: 642
diff changeset
80
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 out_dir = os.path.join(self.out_dir, 'posts')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 slug = post_info['slug']
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 dtstr = post_info['datetime'].strftime('%Y-%m-%d')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 with open('%s/%s_%s.md' % (out_dir, dtstr, slug), 'w',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 encoding='utf8') as f:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 f.write('title: %s\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 f.write('description: %s\n' % post_info['description'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 f.write('tags: [%s]\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 f.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 f.write('\n\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 class OctopressBenchmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 posts_dir = os.path.join(self.out_dir, 'source', '_posts')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 out_dir = os.path.join(self.out_dir, 'source', '_posts')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 slug = post_info['slug']
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 dtstr = post_info['datetime'].strftime('%Y-%m-%d')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 with open('%s/%s-%s.markdown' % (out_dir, dtstr, slug), 'w',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 encoding='utf8') as f:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 f.write('layout: post\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 f.write('title: %s\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 f.write('date: %s 12:00\n' % dtstr)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 f.write('comments: false\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 f.write('categories: [%s]\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 f.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 f.write('\n\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 class MiddlemanBenchmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 posts_dir = os.path.join(self.out_dir, 'source')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 out_dir = os.path.join(self.out_dir, 'source')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 slug = post_info['slug']
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 dtstr = post_info['datetime'].strftime('%Y-%m-%d')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 with open('%s/%s-%s.html.markdown' % (out_dir, dtstr, slug), 'w',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 encoding='utf8') as f:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 f.write('title: %s\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 f.write('date: %s\n' % post_info['datetime'].strftime('%Y/%m/%d'))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 f.write('tags: %s\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 f.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 f.write('\n\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 class HugoBenchmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 posts_dir = os.path.join(self.out_dir, 'content', 'post')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 out_dir = os.path.join(self.out_dir, 'content', 'post')
490
4a9047850657 cm: Fix benchmark website generation on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 468
diff changeset
157 dtstr = post_info['datetime'].strftime('%Y-%m-%d_%H-%M-%S')
4a9047850657 cm: Fix benchmark website generation on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 468
diff changeset
158 post_path = os.path.join(out_dir, '%s.md' % dtstr)
4a9047850657 cm: Fix benchmark website generation on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 468
diff changeset
159 with open(post_path, 'w', encoding='utf8') as f:
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 f.write('+++\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 f.write('title = "%s"\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 f.write('description = "%s"\n' % post_info['description'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 f.write('categories = [\n "%s"\n]\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 f.write('date = "%s"\n' % post_info['datetime'].strftime(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165 "%Y-%m-%d %H:%M:%S-00:00"))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 f.write('slug ="%s"\n' % post_info['slug'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 f.write('+++\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 f.write(post_info['text'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 generators = {
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 'piecrust': PieCrustBechmarkSiteGenerator,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 'octopress': OctopressBenchmarkSiteGenerator,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 'middleman': MiddlemanBenchmarkSiteGenerator,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 'hugo': HugoBenchmarkSiteGenerator
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 }
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 def main():
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 parser = argparse.ArgumentParser(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 prog='generate_benchsite',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 description=("Generates a benchmark website with placeholder "
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 "content suitable for testing."))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 'engine',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 help="The engine to generate the site for.",
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 choices=list(generators.keys()))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 'out_dir',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190 help="The target directory for the website.")
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 '-c', '--post-count',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 help="The number of posts to create.",
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 type=int,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 default=100)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 '--tag-count',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 help="The number of tags to use.",
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 type=int,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200 default=30)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
201
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
202 result = parser.parse_args()
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
203 generate(result.engine, result.out_dir,
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
204 post_count=result.post_count,
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
205 tag_count=result.tag_count)
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
206
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
207
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
208 def generate(engine, out_dir, post_count=100, tag_count=10):
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
209 print("Generating %d posts in %s..." % (post_count, out_dir))
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
211 if not os.path.exists(out_dir):
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
212 os.makedirs(out_dir)
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
213
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
214 gen = generators[engine](out_dir)
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
215 gen.all_tags = [generateWord(3, 12) for _ in range(tag_count)]
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
216 gen.initialize()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
217
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
218 for i in range(post_count):
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
219 gen.generatePost()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
220
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
221
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
222 if __name__ == '__main__':
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
223 main()
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
224 else:
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
225 from invoke import task
468
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
226
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
227 @task
990
22cf13b86cc3 cm: Upgrade Garcon tasks to the latest PyInvoke version.
Ludovic Chabant <ludovic@chabant.com>
parents: 642
diff changeset
228 def genbenchsite(ctx, engine, out_dir, post_count=100, tag_count=10):
642
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
229 generate(engine, out_dir,
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
230 post_count=post_count,
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
231 tag_count=tag_count)
79aefe82c6b6 cm: Move all scripts into a `garcon` package with `invoke` support.
Ludovic Chabant <ludovic@chabant.com>
parents: 490
diff changeset
232