annotate util/generate_benchsite.py @ 545:1856e7aa6ce8

cm: Update changelog.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 31 Jul 2015 23:35:55 -0700
parents 4a9047850657
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
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 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
78 slug = post_info['slug']
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 dtstr = post_info['datetime'].strftime('%Y-%m-%d')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 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
81 encoding='utf8') as f:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 f.write('title: %s\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 f.write('description: %s\n' % post_info['description'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 f.write('tags: [%s]\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 f.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 f.write('\n\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
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 class OctopressBenchmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 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
97 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 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
102 slug = post_info['slug']
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 dtstr = post_info['datetime'].strftime('%Y-%m-%d')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 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
105 encoding='utf8') as f:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 f.write('layout: post\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 f.write('title: %s\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 f.write('date: %s 12:00\n' % dtstr)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 f.write('comments: false\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 f.write('categories: [%s]\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 f.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 f.write('\n\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
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 class MiddlemanBenchmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 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
123 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 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
128 slug = post_info['slug']
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 dtstr = post_info['datetime'].strftime('%Y-%m-%d')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130 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
131 encoding='utf8') as f:
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 f.write('title: %s\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 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
135 f.write('tags: %s\n' % post_info['tags'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 f.write('---\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 para_count = random.randint(5, 10)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 for i in range(para_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 f.write(generateSentence(random.randint(50, 100)))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 f.write('\n\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
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 class HugoBenchmarkSiteGenerator(BenchmarkSiteGenerator):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 def initialize(self):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 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
147 if not os.path.isdir(posts_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 os.makedirs(posts_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 def writePost(self, post_info):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 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
152 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
153 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
154 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
155 f.write('+++\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 f.write('title = "%s"\n' % post_info['title'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 f.write('description = "%s"\n' % post_info['description'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 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
159 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
160 "%Y-%m-%d %H:%M:%S-00:00"))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 f.write('slug ="%s"\n' % post_info['slug'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 f.write('+++\n')
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 f.write(post_info['text'])
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 generators = {
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 'piecrust': PieCrustBechmarkSiteGenerator,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 'octopress': OctopressBenchmarkSiteGenerator,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169 'middleman': MiddlemanBenchmarkSiteGenerator,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170 'hugo': HugoBenchmarkSiteGenerator
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 }
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 def main():
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 parser = argparse.ArgumentParser(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 prog='generate_benchsite',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 description=("Generates a benchmark website with placeholder "
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178 "content suitable for testing."))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 'engine',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 help="The engine to generate the site for.",
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 choices=list(generators.keys()))
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 'out_dir',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 help="The target directory for the website.")
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 parser.add_argument(
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 '-c', '--post-count',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188 help="The number of posts to create.",
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 type=int,
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190 default=100)
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 '--tag-count',
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 help="The number of tags to use.",
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=30)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 result = parser.parse_args()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 print("Generating %d posts in %s..." % (
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200 result.post_count, result.out_dir))
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 if not os.path.exists(result.out_dir):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
203 os.makedirs(result.out_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
204
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
205 gen = generators[result.engine](result.out_dir)
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
206 gen.all_tags = [generateWord(3, 12) for _ in range(result.tag_count)]
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
207 gen.initialize()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
208
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
209 for i in range(result.post_count):
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210 gen.generatePost()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
212
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
213 if __name__ == '__main__':
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
214 main()
1038dba7b46e cm: Add script to generate benchmark websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
215