Mercurial > piecrust2
annotate piecrust/commands/builtin/plugins.py @ 1186:2ead9dcb6bec
prepare: Fix scaffolding refactor code.
For some reason the previous commit was missing some changes.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 23 Oct 2020 23:50:42 -0700 |
parents | 2394fd689590 |
children |
rev | line source |
---|---|
305
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import logging |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 from piecrust.commands.base import ChefCommand |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 logger = logging.getLogger(__name__) |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 class PluginsCommand(ChefCommand): |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 def __init__(self): |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 super(PluginsCommand, self).__init__() |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 self.name = 'plugins' |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 self.description = "Manage the plugins for the current website." |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 def setupParser(self, parser, app): |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 subparsers = parser.add_subparsers() |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 p = subparsers.add_parser( |
879
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
17 'list', |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
18 help="Lists the plugins installed in the current website.") |
305
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 p.add_argument( |
879
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
20 '-a', '--all', |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
21 action='store_true', |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
22 help=("Also list all the available plugins for the " |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
23 "current environment. The installed one will have an " |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
24 "asterix (*).")) |
305
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 p.set_defaults(sub_func=self._listPlugins) |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 def checkedRun(self, ctx): |
879
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
28 from piecrust.pathutil import SiteNotFoundError |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
29 |
764
f7ddd730c08d
plugins: Abort the command if there's no site.
Ludovic Chabant <ludovic@chabant.com>
parents:
305
diff
changeset
|
30 if ctx.app.root_dir is None: |
f7ddd730c08d
plugins: Abort the command if there's no site.
Ludovic Chabant <ludovic@chabant.com>
parents:
305
diff
changeset
|
31 raise SiteNotFoundError(theme=ctx.app.theme_site) |
f7ddd730c08d
plugins: Abort the command if there's no site.
Ludovic Chabant <ludovic@chabant.com>
parents:
305
diff
changeset
|
32 |
305
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 if not hasattr(ctx.args, 'sub_func'): |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 ctx.parser.parse_args(['plugins', '--help']) |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 return |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 ctx.args.sub_func(ctx) |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 def _listPlugins(self, ctx): |
879
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
39 import pip |
58ae026b4c31
chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents:
796
diff
changeset
|
40 |
305
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 names = {} |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 installed_suffix = '' |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 if ctx.args.all: |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 prefix = 'PieCrust-' |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 installed_packages = pip.get_installed_distributions() |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 for plugin in installed_packages: |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 if not plugin.project_name.startswith(prefix): |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 continue |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 name = plugin.project_name[len(prefix):] |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 names[name] = False |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 installed_suffix = '*' |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 for plugin in ctx.app.plugin_loader.plugins: |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 names[plugin.name] = True |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 for name, inst in names.items(): |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 logger.info("%s%s" % (name, installed_suffix if inst else '')) |
9ae23409d6e9
plugins: Change how plugins are loaded. Add a `plugins` command.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 |