Mercurial > piecrust2
annotate piecrust/commands/base.py @ 1137:10fd55b9ccfb
templating: Fix Inukshuk `paginate` function.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 24 Apr 2018 21:27:46 -0700 |
parents | 07c23be08029 |
children |
rev | line source |
---|---|
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
1 import os.path |
0 | 2 import logging |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
3 import argparse |
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
4 import textwrap |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
5 import functools |
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
6 from piecrust import RESOURCES_DIR |
1
aaa8fb7c8918
Re-arranged modules to reduce dependencies to builtin stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
7 from piecrust.pathutil import SiteNotFoundError |
0 | 8 |
9 | |
10 logger = logging.getLogger(__name__) | |
11 | |
12 | |
13 class CommandContext(object): | |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
14 def __init__(self, appfactory, app, parser, args): |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
15 self.appfactory = appfactory |
1
aaa8fb7c8918
Re-arranged modules to reduce dependencies to builtin stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
16 self.app = app |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
17 self.parser = parser |
0 | 18 self.args = args |
19 | |
20 | |
21 class ChefCommand(object): | |
22 def __init__(self): | |
23 self.name = '__unknown__' | |
24 self.description = '__unknown__' | |
25 self.requires_website = True | |
371
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
103
diff
changeset
|
26 self.cache_name = 'default' |
0 | 27 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
28 def setupParser(self, parser, app): |
0 | 29 raise NotImplementedError() |
30 | |
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
31 def provideExtensions(self): |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
32 return None |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
33 |
0 | 34 def run(self, ctx): |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
35 raise NotImplementedError( |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
36 "Command '%s' doesn't implement the `run` " |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
37 "method." % type(self)) |
0 | 38 |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
39 def checkedRun(self, ctx): |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
40 if ctx.app.root_dir is None and self.requires_website: |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
466
diff
changeset
|
41 raise SiteNotFoundError(theme=ctx.app.theme_site) |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
42 return self.run(ctx) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
43 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
44 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
45 class ExtendableChefCommand(ChefCommand): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
46 def __init__(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
47 super(ExtendableChefCommand, self).__init__() |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
48 self._extensions = None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
49 |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
50 def getExtensions(self, app): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
51 self._loadExtensions(app) |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
52 return self._extensions |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
53 |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
54 def setupExtensionParsers(self, subparsers, app): |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
55 for e in self.getExtensions(app): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
56 p = subparsers.add_parser(e.name, help=e.description) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
57 e.setupParser(p, app) |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
58 p.set_defaults(sub_func=e.checkedRun) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
59 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
60 def _loadExtensions(self, app): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
61 if self._extensions is not None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
62 return |
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
63 |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
64 possible_exts = [] |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
65 for e in app.plugin_loader.getCommandExtensions(): |
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
66 possible_exts.append(e) |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
67 for c in app.plugin_loader.getCommands(): |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
68 exts = c.provideExtensions() |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
69 if exts is not None: |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
70 possible_exts += exts |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
71 |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
72 self._extensions = list(filter( |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
73 lambda e: e.command_name == self.name and e.supports(app), |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
74 possible_exts)) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
75 |
0 | 76 |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
77 class ChefCommandExtension(object): |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
78 command_name = '__unknown__' |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
79 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
80 def supports(self, app): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
81 return True |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
82 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
83 |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
84 class HelpCommand(ExtendableChefCommand): |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
85 def __init__(self): |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
86 super(HelpCommand, self).__init__() |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
87 self.name = 'help' |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
88 self.description = "Prints help about PieCrust's chef." |
103
028df35a690e
Fix using `chef` outside of a website.
Ludovic Chabant <ludovic@chabant.com>
parents:
99
diff
changeset
|
89 self.requires_website = False |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
90 self._topic_providers = [] |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
91 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
92 @property |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
93 def has_topics(self): |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
94 return len(self._topic_providers) > 0 |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
95 |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
96 def getTopics(self): |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
97 return [(n, d) for (n, d, e) in self._topic_providers] |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
98 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
99 def setupParser(self, parser, app): |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
100 parser.add_argument( |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
101 'topic', nargs='?', |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
102 help="The command name or topic on which to get help.") |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
103 |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
104 extensions = self.getExtensions(app) |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
105 for ext in extensions: |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
106 for name, desc in ext.getHelpTopics(): |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
107 self._topic_providers.append((name, desc, ext)) |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
108 |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
109 def run(self, ctx): |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
110 topic = ctx.args.topic |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
111 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
112 if topic is None: |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
113 ctx.parser.print_help() |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
114 return 0 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
115 |
99
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
116 for name, desc, ext in self._topic_providers: |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
117 if name == topic: |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
118 print(ext.getHelpTopic(topic, ctx.app)) |
8703be118430
Changes to `help` command and extendable commands:
Ludovic Chabant <ludovic@chabant.com>
parents:
57
diff
changeset
|
119 return 0 |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
120 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
121 for c in ctx.app.plugin_loader.getCommands(): |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
122 if c.name == topic: |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
123 fake = argparse.ArgumentParser( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
124 prog='%s %s' % (ctx.parser.prog, c.name), |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
125 description=c.description) |
57
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
126 c.setupParser(fake, ctx.app) |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
127 fake.print_help() |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
128 return 0 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
129 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
130 raise Exception("No such command or topic: %s" % topic) |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
131 |
c8c522dacfea
Add `help` function, cleanup argument handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
132 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
133 class _WrappedCommand(ChefCommand): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
134 def __init__(self, func, name, description): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
135 super(_WrappedCommand, self).__init__() |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
136 self.func = func |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
137 self.name = name |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
138 self.description = description |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
139 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
140 def run(self, ctx): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
141 self.func(ctx) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
142 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
143 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
144 def simple_command(f, name, description=None): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
145 @functools.wraps(f) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
146 def wrapper(*args, **kwargs): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
147 return f(*args, **kwargs) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
148 cmd = _WrappedCommand(f, name, description) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
149 f.__command_class__ = cmd |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
150 return wrapper |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
151 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
152 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
153 def get_func_command(f): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
154 return getattr(f, '__command_class__') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
155 |
1099
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
156 |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
157 def _get_help_topic_from_resources(command_name, topic): |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
158 path = os.path.join(RESOURCES_DIR, 'helptopics', |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
159 '%s_%s.txt' % (command_name, topic)) |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
160 with open(path, 'r', encoding='utf8') as fp: |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
161 lines = fp.readlines() |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
162 |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
163 wrapped_lines = [] |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
164 for ln in lines: |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
165 ln = ln.rstrip('\n') |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
166 if not ln: |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
167 wrapped_lines.append('') |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
168 else: |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
169 wrapped_lines += textwrap.wrap(ln, width=80) |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
170 return '\n'.join(wrapped_lines) |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
171 |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
172 |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
173 class _ResourcesHelpTopics: |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
174 def getHelpTopic(self, topic, app): |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
175 category = self.__class__.__name__.lower() |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
176 if category.endswith('helptopic'): |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
177 category = category[:-len('helptopic')] |
07c23be08029
help: Add new help topics on routes.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
178 return _get_help_topic_from_resources(category, topic) |