summaryrefslogtreecommitdiffstats
path: root/nikola/plugins/command_check.py
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/command_check.py')
-rw-r--r--nikola/plugins/command_check.py166
1 files changed, 0 insertions, 166 deletions
diff --git a/nikola/plugins/command_check.py b/nikola/plugins/command_check.py
deleted file mode 100644
index ea82703..0000000
--- a/nikola/plugins/command_check.py
+++ /dev/null
@@ -1,166 +0,0 @@
-# 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
-import os
-import sys
-try:
- from urllib import unquote
- from urlparse import urlparse
-except ImportError:
- from urllib.parse import unquote, urlparse # NOQA
-
-import lxml.html
-
-from nikola.plugin_categories import Command
-
-
-class CommandCheck(Command):
- """Check the generated site."""
-
- name = "check"
-
- doc_usage = "-l [--find-sources] | -f"
- doc_purpose = "Check links and files in the generated site."
- cmd_options = [
- {
- 'name': 'links',
- 'short': 'l',
- 'long': 'check-links',
- 'type': bool,
- 'default': False,
- 'help': 'Check for dangling links',
- },
- {
- 'name': 'files',
- 'short': 'f',
- 'long': 'check-files',
- 'type': bool,
- 'default': False,
- 'help': 'Check for unknown files',
- },
- {
- 'name': 'find_sources',
- 'long': 'find-sources',
- 'type': bool,
- 'default': False,
- 'help': 'List possible source files for files with broken links.',
- },
- ]
-
- def _execute(self, options, args):
- """Check the generated site."""
- if not options['links'] and not options['files']:
- print(self.help())
- return False
- if options['links']:
- failure = scan_links(options['find_sources'])
- if options['files']:
- failure = scan_files()
- if failure:
- sys.exit(1)
-
-existing_targets = set([])
-
-
-def analize(task, find_sources=False):
- rv = False
- try:
- filename = task.split(":")[-1]
- d = lxml.html.fromstring(open(filename).read())
- for l in d.iterlinks():
- target = l[0].attrib[l[1]]
- if target == "#":
- continue
- parsed = urlparse(target)
- if parsed.scheme:
- continue
- if parsed.fragment:
- target = target.split('#')[0]
- target_filename = os.path.abspath(
- os.path.join(os.path.dirname(filename), unquote(target)))
- if target_filename not in existing_targets:
- if os.path.exists(target_filename):
- existing_targets.add(target_filename)
- else:
- rv = True
- print("Broken link in {0}: ".format(filename), target)
- if find_sources:
- print("Possible sources:")
- print(os.popen('nikola list --deps ' + task,
- 'r').read())
- print("===============================\n")
-
- except Exception as exc:
- print("Error with:", filename, exc)
- return rv
-
-
-def scan_links(find_sources=False):
- print("Checking Links:\n===============\n")
- failure = False
- for task in os.popen('nikola list --all', 'r').readlines():
- task = task.strip()
- if task.split(':')[0] in ('render_tags', 'render_archive',
- 'render_galleries', 'render_indexes',
- 'render_pages'
- 'render_site') and '.html' in task:
- if analize(task, find_sources):
- failure = True
- return failure
-
-
-def scan_files():
- print("Checking Files:\n===============\n")
- task_fnames = set([])
- real_fnames = set([])
- # First check that all targets are generated in the right places
- failure = False
- for task in os.popen('nikola list --all', 'r').readlines():
- task = task.strip()
- if 'output' in task and ':' in task:
- fname = task.split(':')[-1]
- task_fnames.add(fname)
- # And now check that there are no non-target files
- for root, dirs, files in os.walk('output'):
- for src_name in files:
- fname = os.path.join(root, src_name)
- real_fnames.add(fname)
-
- only_on_output = list(real_fnames - task_fnames)
- if only_on_output:
- only_on_output.sort()
- print("\nFiles from unknown origins:\n")
- for f in only_on_output:
- print(f)
- failure = True
-
- only_on_input = list(task_fnames - real_fnames)
- if only_on_input:
- only_on_input.sort()
- print("\nFiles not generated:\n")
- for f in only_on_input:
- print(f)
-
- return failure