Mercurial > piecrust2
annotate garcon/benchsite.py @ 1188:a7c43131d871
bake: Fix file write flushing problem with Python 3.8+
Writing the cache files fails in Python 3.8 because it looks like flushing
behaviour has changed. We need to explicitly flush. And even then, in very
rare occurrences, it looks like it can still run into racing conditions,
so we do a very hacky and ugly "retry" loop when fetching cached data :(
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 15 Jun 2021 22:36:23 -0700 |
parents | 22cf13b86cc3 |
children |
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 |