Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
From d5075664c8ed6ca24a4f020484d60b2e22040d11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Chris=20=E2=80=9CKwpolska=E2=80=9D=20Warrick?=
<kwpolska@gmail.com>
Date: Thu, 23 Jan 2014 19:07:26 +0100
Subject: [PATCH] Add an install_bs3 command for Debian.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Chris “Kwpolska” Warrick <kwpolska@gmail.com>
---
nikola/conf.py.in | 2 +
nikola/plugins/command/init.py | 2 +-
nikola/plugins/command/install_bs3.plugin | 10 +++
nikola/plugins/command/install_bs3.py | 110 ++++++++++++++++++++++++++++++
4 files changed, 123 insertions(+), 1 deletion(-)
create mode 100644 nikola/plugins/command/install_bs3.plugin
create mode 100644 nikola/plugins/command/install_bs3.py
diff --git a/nikola/conf.py.in b/nikola/conf.py.in
index d487ed1..4834468 100644
--- a/nikola/conf.py.in
+++ b/nikola/conf.py.in
@@ -285,6 +285,8 @@ COMPILERS = ${COMPILERS}
# the main (the newest) index page (index.html)
# Name of the theme to use.
+# WARNING: With this Nikola package, the bootstrap3 theme must be installed
+# separately. In order to do this, use: nikola install_bs3
THEME = "${THEME}"
# Color scheme to be used for code blocks. If your theme provides
diff --git a/nikola/plugins/command/init.py b/nikola/plugins/command/init.py
index 96caad8..dc5ca2d 100644
--- a/nikola/plugins/command/init.py
+++ b/nikola/plugins/command/init.py
@@ -64,7 +64,7 @@ class CommandInit(Command):
'BLOG_EMAIL': "joe@demo.site",
'BLOG_DESCRIPTION': "This is a demo site for Nikola.",
'DEFAULT_LANG': "en",
- 'THEME': 'bootstrap3',
+ 'THEME': 'bootstrap',
'POSTS': """(
("posts/*.rst", "posts", "post.tmpl"),
diff --git a/nikola/plugins/command/install_bs3.plugin b/nikola/plugins/command/install_bs3.plugin
new file mode 100644
index 0000000..1773a07
--- /dev/null
+++ b/nikola/plugins/command/install_bs3.plugin
@@ -0,0 +1,10 @@
+[Core]
+Name = install_bs3
+Module = install_bs3
+
+[Documentation]
+Author = Roberto Alsina, Chris Warrick
+Version = 0.1
+Website = http://getnikola.com
+Description = Install the bootstrap3 theme into the current site.
+
diff --git a/nikola/plugins/command/install_bs3.py b/nikola/plugins/command/install_bs3.py
new file mode 100644
index 0000000..4060aef
--- /dev/null
+++ b/nikola/plugins/command/install_bs3.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+
+# Copyright © 2012-2014 Roberto Alsina, Chris Warrick and others.
+
+# Permission is hereby granted, free of charge, to any
+# person obtaining a copy of this software and associated
+# documentation files (the "Software"), to deal in the
+# Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the
+# Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice
+# shall be included in all copies or substantial portions of
+# the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+from __future__ import print_function
+import os
+import json
+import shutil
+from io import BytesIO
+
+try:
+ import requests
+except ImportError:
+ requests = None # NOQA
+
+from nikola.plugin_categories import Command
+from nikola import utils
+
+LOGGER = utils.get_logger('install_theme', utils.STDERR_HANDLER)
+
+
+# Stolen from textwrap in Python 3.3.2.
+def indent(text, prefix, predicate=None): # NOQA
+ """Adds 'prefix' to the beginning of selected lines in 'text'.
+
+ If 'predicate' is provided, 'prefix' will only be added to the lines
+ where 'predicate(line)' is True. If 'predicate' is not provided,
+ it will default to adding 'prefix' to all non-empty lines that do not
+ consist solely of whitespace characters.
+ """
+ if predicate is None:
+ def predicate(line):
+ return line.strip()
+
+ def prefixed_lines():
+ for line in text.splitlines(True):
+ yield (prefix + line if predicate(line) else line)
+ return ''.join(prefixed_lines())
+
+
+class CommandInstallThemeBS3(Command):
+ """Install a theme. Bootstrap 3, to be precise."""
+
+ name = "install_bs3"
+ doc_usage = ""
+ doc_purpose = "install bootstrap3 into the current site"
+ output_dir = 'themes'
+ cmd_options = []
+
+ def _execute(self, options, args):
+ """Install theme into current site."""
+ if requests is None:
+ utils.req_missing(['requests'], 'install the bootstrap3 theme')
+
+ url = 'http://themes.getnikola.com/bs3/v6.3.0/bs3.json'
+ name = 'bootstrap3'
+
+ data = requests.get(url).text
+ data = json.loads(data)
+ installstatus = self.do_install(name, data)
+ if installstatus:
+ LOGGER.notice('Remember to set THEME="bootstrap3" in conf.py if you want to use it.')
+
+ def do_install(self, name, data):
+ if name in data:
+ utils.makedirs(self.output_dir)
+ LOGGER.notice('Downloading: ' + data[name])
+ zip_file = BytesIO()
+ zip_file.write(requests.get(data[name]).content)
+ LOGGER.notice('Extracting: {0} into themes'.format(name))
+ utils.extract_all(zip_file)
+ dest_path = os.path.join('themes', name)
+ else:
+ try:
+ theme_path = utils.get_theme_path(name)
+ except:
+ LOGGER.error("Can't find theme " + name)
+ return False
+
+ utils.makedirs(self.output_dir)
+ dest_path = os.path.join(self.output_dir, name)
+ if os.path.exists(dest_path):
+ LOGGER.error("{0} is already installed".format(name))
+ return False
+
+ LOGGER.notice('Copying {0} into themes'.format(theme_path))
+ shutil.copytree(theme_path, dest_path)
+ return True
--
1.8.5.3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.