annotate piecrust/commands/base.py @ 1139:cd5267cd23ef

cm: Update npm modules.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 20 May 2018 22:37:38 -0700
parents 07c23be08029
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 logger = logging.getLogger(__name__)
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 self.args = args
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 class ChefCommand(object):
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 def __init__(self):
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 self.name = '__unknown__'
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 self.description = '__unknown__'
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 raise NotImplementedError()
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
a212a3f2e3ee Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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)