aboutsummaryrefslogtreecommitdiffstats
path: root/nikola/plugins/command_install_theme.py
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/command_install_theme.py')
-rw-r--r--nikola/plugins/command_install_theme.py53
1 files changed, 42 insertions, 11 deletions
diff --git a/nikola/plugins/command_install_theme.py b/nikola/plugins/command_install_theme.py
index 293ce97..b9ca634 100644
--- a/nikola/plugins/command_install_theme.py
+++ b/nikola/plugins/command_install_theme.py
@@ -1,9 +1,38 @@
+# Copyright (c) 2012 Roberto Alsina y otros.
+
+# 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
from optparse import OptionParser
import os
-import urllib2
import json
from io import StringIO
+try:
+ import requests
+except ImportError:
+ requests = None
+
from nikola.plugin_categories import Command
from nikola import utils
@@ -15,7 +44,9 @@ class CommandInstallTheme(Command):
def run(self, *args):
"""Install theme into current site."""
-
+ if requests is None:
+ print('To use the install_theme command, you need to install the "requests" package.')
+ return
parser = OptionParser(usage="nikola %s [options]" % self.name)
parser.add_option("-l", "--list", dest="list",
action="store_true",
@@ -33,15 +64,15 @@ class CommandInstallTheme(Command):
url = options.url
if name is None and not listing:
- print "This command needs either the -n or the -l option."
+ print("This command needs either the -n or the -l option.")
return False
- data = urllib2.urlopen(url).read()
+ data = requests.get(url).text
data = json.loads(data)
if listing:
- print "Themes:"
- print "-------"
+ print("Themes:")
+ print("-------")
for theme in sorted(data.keys()):
- print theme
+ print(theme)
return True
else:
if name in data:
@@ -52,11 +83,11 @@ class CommandInstallTheme(Command):
os.makedirs("themes")
except:
raise OSError("mkdir 'theme' error!")
- print 'Downloading: %s' % data[name]
+ print('Downloading: %s' % data[name])
zip_file = StringIO()
- zip_file.write(urllib2.urlopen(data[name]).read())
- print 'Extracting: %s into themes' % name
+ zip_file.write(requests.get(data[name]).content)
+ print('Extracting: %s into themes' % name)
utils.extract_all(zip_file)
else:
- print "Can't find theme %s" % name
+ print("Can't find theme %s" % name)
return False