annotate piecrust/commands/builtin/themes.py @ 891:f13d618cfec6

themes: Allow keeping local overrides when copying a theme locally.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 02 Jul 2017 22:19:58 -0700
parents 58ae026b4c31
children 727110ea112a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import os
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import os.path
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import logging
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
4 from piecrust import THEME_DIR, THEME_CONFIG_PATH, THEME_INFO_PATH
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 from piecrust.commands.base import ChefCommand
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 logger = logging.getLogger(__name__)
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 class ThemesCommand(ChefCommand):
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 def __init__(self):
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 super(ThemesCommand, self).__init__()
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 self.name = 'themes'
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 self.description = "Manage the themes for the current website."
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 def setupParser(self, parser, app):
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 subparsers = parser.add_subparsers()
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 p = subparsers.add_parser(
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
20 'info',
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
21 help="Provides information about the current theme.")
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
22 p.set_defaults(sub_func=self._info)
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
23
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
24 p = subparsers.add_parser(
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
25 'override',
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
26 help="Copies the current theme to the website for "
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
27 "customization.")
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 p.set_defaults(sub_func=self._overrideTheme)
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
480
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
30 p = subparsers.add_parser(
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
31 'link',
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
32 help="Makes a given theme the active one for the current "
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
33 "website by creating a symbolic link to it from the "
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
34 "'theme' directory.")
480
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
35 p.add_argument(
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
36 'theme_dir',
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
37 help="The directory of the theme to link.")
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
38 p.set_defaults(sub_func=self._linkTheme)
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
39
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
40 p = subparsers.add_parser(
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
41 'unlink',
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
42 help="Removes the currently active theme for the website. "
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
43 "This removes the symbolic link to the theme, if any, or "
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
44 "deletes the theme folder if it was copied locally.")
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
45 p.set_defaults(sub_func=self._unlinkTheme)
480
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
46
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 def checkedRun(self, ctx):
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
48 from piecrust.pathutil import SiteNotFoundError
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
49
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
50 if ctx.app.root_dir is None:
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
51 raise SiteNotFoundError(theme=ctx.app.theme_site)
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
52
475
c5df200354e8 themes: Fix crash when invoking command with no sub-command.
Ludovic Chabant <ludovic@chabant.com>
parents: 273
diff changeset
53 if not hasattr(ctx.args, 'sub_func'):
765
549e21789ad9 themes: No parameters shoudl make the help text show up.
Ludovic Chabant <ludovic@chabant.com>
parents: 747
diff changeset
54 ctx.parser.parse_args(['themes', '--help'])
549e21789ad9 themes: No parameters shoudl make the help text show up.
Ludovic Chabant <ludovic@chabant.com>
parents: 747
diff changeset
55 return
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 ctx.args.sub_func(ctx)
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
58 def _info(self, ctx):
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
59 import yaml
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
60
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
61 theme_dir = ctx.app.theme_dir
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
62 if not os.path.exists(theme_dir):
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
63 logger.info("Using default theme, from: %s" % ctx.app.theme_dir)
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
64 elif theme_dir.startswith(ctx.app.root_dir):
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
65 if os.path.islink(theme_dir):
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
66 target = os.readlink(theme_dir)
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
67 target = os.path.join(os.path.dirname(theme_dir), target)
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
68 logger.info("Using local theme, from: %s" % target)
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
69 else:
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
70 logger.info("Using local theme.")
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
71 else:
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
72 logger.info("Using theme from: %s" % theme_dir)
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
74 info_path = os.path.join(theme_dir, THEME_CONFIG_PATH)
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
75 if os.path.exists(info_path):
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
76 info = None
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
77 with open(info_path, 'r', encoding='utf8') as fp:
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
78 theme_cfg = yaml.load(fp.read())
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
79 if isinstance(theme_cfg, dict):
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
80 info = theme_cfg.get('theme')
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
81 if info:
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
82 logger.info("Theme info:")
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
83 for k, v in info.items():
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
84 logger.info(" - %s: %s" % (str(k), str(v)))
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 def _overrideTheme(self, ctx):
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
87 import shutil
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
88
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 theme_dir = ctx.app.theme_dir
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 if not theme_dir:
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
91 logger.error("There is no theme currently applied.")
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 return 1
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 copies = []
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
95 app_dir = ctx.app.root_dir
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 for dirpath, dirnames, filenames in os.walk(theme_dir):
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 rel_dirpath = os.path.relpath(dirpath, theme_dir)
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 for name in filenames:
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 if (dirpath == theme_dir and
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 name in [THEME_CONFIG_PATH, THEME_INFO_PATH]):
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 continue
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 src_path = os.path.join(dirpath, name)
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 dst_path = os.path.join(app_dir, rel_dirpath, name)
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 copies.append((src_path, dst_path))
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105
891
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
106 conflicts = set()
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 for c in copies:
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 if os.path.exists(c[1]):
891
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
109 conflicts.add(c[1])
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 if conflicts:
891
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
111 logger.warning("Some website files override theme files:")
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 for c in conflicts:
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 logger.warning(os.path.relpath(c, app_dir))
891
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
114 logger.warning("")
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
115 logger.warning("The local website files will be preserved, and "
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
116 "the conflicting theme files won't be copied "
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
117 "locally.")
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 for c in copies:
891
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
120 if not c[1] in conflicts:
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
121 logger.info(os.path.relpath(c[1], app_dir))
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
122 os.makedirs(os.path.dirname(c[1]), exist_ok=True)
f13d618cfec6 themes: Allow keeping local overrides when copying a theme locally.
Ludovic Chabant <ludovic@chabant.com>
parents: 879
diff changeset
123 shutil.copy2(c[0], c[1])
273
d70a4adb61dd themes: Add the `chef themes` command
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
125 def _linkTheme(self, ctx):
480
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
126 if not os.path.isdir(ctx.args.theme_dir):
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
127 logger.error("Invalid theme directory: %s" % ctx.args.theme_dir)
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
128 return 1
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
129
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
130 msg = ("A theme already exists, and will be deleted. "
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
131 "Are you sure? [Y/n]")
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
132 self._doUnlinkTheme(ctx.app.root_dir, msg)
480
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
133
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
134 theme_dir = os.path.join(ctx.app.root_dir, THEME_DIR)
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
135 try:
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
136 os.symlink(ctx.args.theme_dir, theme_dir)
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
137 except (NotImplementedError, OSError) as ex:
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
138 if ctx.args.link_only:
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
139 logger.error("Couldn't symlink the theme: %s" % ex)
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
140 return 1
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
141
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
142 def _unlinkTheme(self, ctx):
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
143 msg = ("The active theme is local. Are you sure you want "
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
144 "to delete the theme directory? [Y/n]")
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
145 self._doUnlinkTheme(ctx.app.root_dir, msg)
480
d5885c6d64bd themes: Add a `link` sub-command to install a theme via a symbolic link.
Ludovic Chabant <ludovic@chabant.com>
parents: 475
diff changeset
146
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
147 def _doUnlinkTheme(self, root_dir, delete_message):
879
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
148 import shutil
58ae026b4c31 chef: Optimize startup time.
Ludovic Chabant <ludovic@chabant.com>
parents: 765
diff changeset
149
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
150 theme_dir = os.path.join(root_dir, THEME_DIR)
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
151
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
152 if os.path.islink(theme_dir):
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
153 logger.debug("Unlinking: %s" % theme_dir)
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
154 os.unlink(theme_dir)
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
155 return True
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
156
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
157 if os.path.isdir(theme_dir):
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
158 logger.warning(delete_message)
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
159 ans = input()
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
160 if len(ans) > 0 and ans.lower() not in ['y', 'yes']:
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
161 return 1
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
162
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
163 logger.debug("Deleting: %s" % theme_dir)
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
164 shutil.rmtree(theme_dir)
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
165
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
166 return True
488
a00750896316 themes: Improve CLI, add `deactivate` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 480
diff changeset
167
747
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
168 return False
5336e146ac8d themes: Simplify `themes` command.
Ludovic Chabant <ludovic@chabant.com>
parents: 488
diff changeset
169