annotate garcon/benchsite.py @ 1150:97b1b46cc156

config: Allow tweaking the configuration of default routes.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 29 Jul 2018 22:52:11 -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