aboutsummaryrefslogtreecommitdiffstats
path: root/nikola/plugins/misc
diff options
context:
space:
mode:
authorLibravatarAgustin Henze <tin@sluc.org.ar>2015-07-08 07:35:06 -0300
committerLibravatarAgustin Henze <tin@sluc.org.ar>2015-07-08 07:35:06 -0300
commit055d72d76b44b0e627c8a17c48dbecd62e44197b (patch)
treee2c8d5475477c46115461fe9547c1ee797873635 /nikola/plugins/misc
parent61f3aad02cd6492cb38e41b66f2ed8ec56e98981 (diff)
parentb0b24795b24ee6809397fbbadf42f31f310a219f (diff)
Merge tag 'upstream/7.6.0'
Upstream version 7.6.0
Diffstat (limited to 'nikola/plugins/misc')
-rw-r--r--nikola/plugins/misc/scan_posts.plugin10
-rw-r--r--nikola/plugins/misc/scan_posts.py100
2 files changed, 110 insertions, 0 deletions
diff --git a/nikola/plugins/misc/scan_posts.plugin b/nikola/plugins/misc/scan_posts.plugin
new file mode 100644
index 0000000..6d2351f
--- /dev/null
+++ b/nikola/plugins/misc/scan_posts.plugin
@@ -0,0 +1,10 @@
+[Core]
+Name = scan_posts
+Module = scan_posts
+
+[Documentation]
+Author = Roberto Alsina
+Version = 1.0
+Website = http://getnikola.com
+Description = Scan posts and create timeline
+
diff --git a/nikola/plugins/misc/scan_posts.py b/nikola/plugins/misc/scan_posts.py
new file mode 100644
index 0000000..a6f04e6
--- /dev/null
+++ b/nikola/plugins/misc/scan_posts.py
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+
+# Copyright © 2012-2015 Roberto Alsina 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 unicode_literals, print_function
+import glob
+import os
+import sys
+
+from nikola.plugin_categories import PostScanner
+from nikola import utils
+from nikola.post import Post
+
+
+class ScanPosts(PostScanner):
+ """Render pages into output."""
+
+ name = "scan_posts"
+
+ def scan(self):
+ """Create list of posts from POSTS and PAGES options."""
+
+ seen = set([])
+ if not self.site.quiet:
+ print("Scanning posts", end='', file=sys.stderr)
+
+ timeline = []
+
+ for wildcard, destination, template_name, use_in_feeds in \
+ self.site.config['post_pages']:
+ if not self.site.quiet:
+ print(".", end='', file=sys.stderr)
+ dirname = os.path.dirname(wildcard)
+ for dirpath, _, _ in os.walk(dirname, followlinks=True):
+ dest_dir = os.path.normpath(os.path.join(destination,
+ os.path.relpath(dirpath, dirname))) # output/destination/foo/
+ # Get all the untranslated paths
+ dir_glob = os.path.join(dirpath, os.path.basename(wildcard)) # posts/foo/*.rst
+ untranslated = glob.glob(dir_glob)
+ # And now get all the translated paths
+ translated = set([])
+ for lang in self.site.config['TRANSLATIONS'].keys():
+ if lang == self.site.config['DEFAULT_LANG']:
+ continue
+ lang_glob = utils.get_translation_candidate(self.site.config, dir_glob, lang) # posts/foo/*.LANG.rst
+ translated = translated.union(set(glob.glob(lang_glob)))
+ # untranslated globs like *.rst often match translated paths too, so remove them
+ # and ensure x.rst is not in the translated set
+ untranslated = set(untranslated) - translated
+
+ # also remove from translated paths that are translations of
+ # paths in untranslated_list, so x.es.rst is not in the untranslated set
+ for p in untranslated:
+ translated = translated - set([utils.get_translation_candidate(self.site.config, p, l) for l in self.site.config['TRANSLATIONS'].keys()])
+
+ full_list = list(translated) + list(untranslated)
+ # We eliminate from the list the files inside any .ipynb folder
+ full_list = [p for p in full_list
+ if not any([x.startswith('.')
+ for x in p.split(os.sep)])]
+
+ for base_path in full_list:
+ if base_path in seen:
+ continue
+ else:
+ seen.add(base_path)
+ post = Post(
+ base_path,
+ self.site.config,
+ dest_dir,
+ use_in_feeds,
+ self.site.MESSAGES,
+ template_name,
+ self.site.get_compiler(base_path)
+ )
+ timeline.append(post)
+
+ return timeline