[gimp-web/gimp-web-static] Started new plugin to manage page hierarchy + translations. Works?



commit 357895dbf366280230621d87116c3387b05900af
Author: Pat David <patdavid gmail com>
Date:   Thu Aug 13 12:44:04 2015 -0500

    Started new plugin to manage page hierarchy + translations.  Works?

 pelicanconf.py                                |    3 +-
 plugins/mimic_hierarchy/__init__.py           |    1 +
 plugins/mimic_hierarchy/mimic_hierarchy.py    |  148 +++++++++++++++++++++++++
 plugins/page_hierarchy_gimp/page_hierarchy.py |   35 ++++--
 4 files changed, 176 insertions(+), 11 deletions(-)
---
diff --git a/pelicanconf.py b/pelicanconf.py
index 5ecfa49..de8ad2a 100644
--- a/pelicanconf.py
+++ b/pelicanconf.py
@@ -4,7 +4,8 @@ from __future__ import unicode_literals
 
 #Plugins
 PLUGIN_PATHS = ["plugins"]
-PLUGINS = ["page_hierarchy_gimp"]
+#PLUGINS = ["page_hierarchy_gimp"]
+PLUGINS = ["mimic_hierarchy"]
 
 AUTHOR = u'Pat David'
 SITENAME = u'GIMP'
diff --git a/plugins/mimic_hierarchy/__init__.py b/plugins/mimic_hierarchy/__init__.py
new file mode 100644
index 0000000..a100cfd
--- /dev/null
+++ b/plugins/mimic_hierarchy/__init__.py
@@ -0,0 +1 @@
+from .mimic_hierarchy import *
diff --git a/plugins/mimic_hierarchy/mimic_hierarchy.py b/plugins/mimic_hierarchy/mimic_hierarchy.py
new file mode 100644
index 0000000..38cc99c
--- /dev/null
+++ b/plugins/mimic_hierarchy/mimic_hierarchy.py
@@ -0,0 +1,148 @@
+from pelican import signals, contents
+import os.path
+from os.path import basename
+from copy import copy
+from itertools import chain
+
+'''
+This plugin creates a URL hierarchy for pages that matches the
+directory hierarchy of their sources.
+'''
+
+'''
+It's been modified by me, Pat David, to do what I need for wgo
+don't try to make any sense of it.  I don't know what I'm doing.
+'''
+
+class UnexpectedException(Exception): pass
+
+def get_path(page, settings):
+    ''' Return the dirname relative to PAGE_PATHS prefix. '''
+    path = os.path.split(page.get_relative_source_path())[0] + '/'
+    path = path.replace( os.path.sep, '/' )
+    # Try to lstrip the longest prefix first
+    for prefix in sorted(settings['PAGE_PATHS'], key=len, reverse=True):
+        if not prefix.endswith('/'): prefix += '/'
+        if path.startswith(prefix):
+            return path[len(prefix):-1]
+    raise UnexpectedException('Page outside of PAGE_PATHS ?!?')
+
+def in_default_lang(page):
+    # page.in_default_lang property is undocumented (=unstable) interface
+    return page.lang == page.settings['DEFAULT_LANG']
+
+def mimic_page_hierarchy(content_object):
+    if type(content_object) is not contents.Page:
+        return
+    page = content_object
+
+    #print( " " )
+    #print( page )
+
+    path = os.path.split(page.get_relative_source_path())[0]
+    path = path.replace( os.path.sep, '/' )
+    #print( "path: " + path )
+
+    def _override_value(page, key):
+        metadata = copy(page.metadata)
+
+        #if hasattr(page, key):
+        #    print("*_override_value, key: " + key +" - "+ getattr(page, key ) )
+        #else:
+        #    print("*_override_value, key: " + key +" - NONE" )
+
+        #if hasattr(page, 'save_as') and key == 'save_as':
+        #    print("HAS SAVE_AS..................................")
+        #    metadata['SAVE_AS'] = page.url
+        #    #setattr( page, 'override_save_as', page.override_url )
+
+        # We override the slug to include the path up to the filename
+        metadata['slug'] = os.path.join(path, page.slug)
+
+        metadata['filename'] = os.path.split(page.get_relative_source_path())[1]
+        metadata['filename'] = os.path.splitext( metadata['filename'])[0] + '.html'
+
+        # PLD: this is my doing, sorry...
+        # ok, if path is empty, use page.slug
+        # if path is not empty, use path
+        # still need to test if lang works properly after this
+        if path:
+            #print( "got path: " + path )
+            metadata['slug'] = path
+        else:
+            #print( "path empty! " + page.slug )
+            metadata['slug'] = page.slug
+
+        if metadata['filename'] != 'index.html':
+            setattr(page, 'override_url', metadata['slug'] +'/'+ metadata['filename'] )
+            if hasattr( page, 'save_as' ) and key == 'save_as':
+                #setattr(page, 'override_save_as', page.override_url )
+                #metadata['override_save_as'] = page.override_url
+                return page.override_url
+        
+        #if hasattr(page, 'override_url'):
+        #    print( "page.override_url: " + page.override_url )
+        #if hasattr(page, 'override_save_as'):
+        #    print( "page.override_save_as: " + page.override_save_as )
+
+        #print("***** PAGE.SETTINGS *****")
+        #for setting in page.settings:
+        #    print( setting )
+
+        # We have to account for non-default language and format either,
+        # e.g., PAGE_SAVE_AS or PAGE_LANG_SAVE_AS
+        infix = '' if in_default_lang(page) else 'LANG_'
+        #print( "RETURNING: " + page.settings['PAGE_' + infix + key.upper()].format(**metadata) )
+        return page.settings['PAGE_' + infix + key.upper()].format(**metadata)
+
+
+
+    for key in ('save_as', 'url'):
+        #if hasattr(page, 'override_save_as'):
+        #    print("FOR (override_save_as): " + getattr(page, 'override_save_as'))
+        #if hasattr(page, 'override_url'):
+        #    print("FOR (override_url): " + getattr(page, 'override_url'))
+        if not hasattr(page, 'override_' + key):
+            setattr(page, 'override_' + key, _override_value(page, key))
+        
+
+def set_relationships(generator):
+    def _all_pages():
+        return chain(generator.pages, generator.translations)
+
+    # initialize parents and children lists
+    for page in _all_pages():
+        page.parent = None
+        page.parents = []
+        page.children = []
+
+    # set immediate parents and children
+    for page in _all_pages():
+        # Parent of /a/b/ is /a/, parent of /a/b.html is /a/
+        parent_url = os.path.dirname(page.url[:-1])
+        if parent_url: parent_url += '/'
+        for page2 in _all_pages():
+            if page2.url == parent_url and page2 != page:
+                page.parent = page2
+                page2.children.append(page)
+        # If no parent found, try the parent of the default language page
+        if not page.parent and not in_default_lang(page):
+            for page2 in generator.pages:
+                if (page.slug == page2.slug and
+                    os.path.dirname(page.source_path) ==
+                    os.path.dirname(page2.source_path)):
+                    # Only set the parent but not the children, obviously
+                    page.parent = page2.parent
+
+    # set all parents (ancestors)
+    for page in _all_pages():
+        p = page
+        while p.parent:
+            page.parents.insert(0, p.parent)
+            p = p.parent
+
+
+def register():
+    signals.content_object_init.connect(mimic_page_hierarchy)
+    signals.page_generator_finalized.connect(set_relationships)
+
diff --git a/plugins/page_hierarchy_gimp/page_hierarchy.py b/plugins/page_hierarchy_gimp/page_hierarchy.py
index fa5e6c4..f05f79c 100644
--- a/plugins/page_hierarchy_gimp/page_hierarchy.py
+++ b/plugins/page_hierarchy_gimp/page_hierarchy.py
@@ -36,6 +36,9 @@ def override_metadata(content_object):
         return
     page = content_object
 
+    print( " " )
+    print( page )
+
     #print( "####################" )
     #print( "page.get_relative_source_path():" )
     #print( page.get_relative_source_path() )
@@ -49,7 +52,8 @@ def override_metadata(content_object):
     # Yes - just return - as long as both the slug AND filename
     # are already set.
 
-    #if 'slug' in page.metadata and 'filename' in page.metadata:
+    # if 'url' in page.metadata and 'save_as' in page.metadata
+    # then skip doing anything and keep the overrides
     if 'url' in page.metadata and 'save_as' in page.metadata: 
         #print( "page.metadata['url'] TEST: " + page.metadata['url'] )
         #setattr(page, 'override_url', page.metadata['url'] )
@@ -63,6 +67,7 @@ def override_metadata(content_object):
     #path = get_path(page, page.settings)
     path = os.path.split(page.get_relative_source_path())[0]
     path = path.replace( os.path.sep, '/' )
+    print( "path: " + path )
 
     #print( "override_metadata, path:" )
     #print( path )
@@ -70,27 +75,27 @@ def override_metadata(content_object):
     def _override_value(page, key):
         metadata = copy(page.metadata)
 
-        if 'slug' in metadata:
-            print( "metadata['slug']: " + metadata['slug'])
-
+        #if 'slug' in metadata:
+        #    #print( "metadata['slug']: " + metadata['slug'])
+        
         # We override the slug to include the path up to the filename
         metadata['slug'] = os.path.join(path, page.slug)
-        print( "_override_value, page.slug: " + page.slug )
-        print( "_override_value, metadata['slug']: " + metadata['slug'])
+        #print( "_override_value, page.slug: " + page.slug )
+        #print( "_override_value, metadata['slug']: " + metadata['slug'])
 
         metadata['filename'] = os.path.split(page.get_relative_source_path())[1]
         metadata['filename'] = os.path.splitext( metadata['filename'])[0] + '.html'
-        print( "metadata['filename']: " + metadata['filename'] )
+        #print( "metadata['filename']: " + metadata['filename'] )
 
         # PLD: this is my doing, sorry...
         # ok, if path is empty, use page.slug
         # if path is not empty, use path
         # still need to test if lang works properly after this
         if path:
-            print( "got path" + path )
+            #print( "got path: " + path )
             metadata['slug'] = path
         else:
-            print( "path empty! " + page.slug )
+            #print( "path empty! " + page.slug )
             metadata['slug'] = page.slug
 
         if metadata['filename'] != 'index.html':
@@ -102,9 +107,19 @@ def override_metadata(content_object):
         return page.settings['PAGE_' + infix + key.upper()].format(**metadata)
 
     for key in ('save_as', 'url'):
+        #if 'about/meta' in path:
+        if hasattr(page, key):
+            print( "FOR LOOP: key: " + key + " , page['"+ key +"']: " + getattr(page, key) )
+        if hasattr(page, 'save_as') and hasattr(page, 'url'):
+            print("GOT BOTH SAVE_AS AND URL")
+            print("save_as: " + getattr( page, 'save_as' ))
+            print("url: " + getattr( page, 'url' ) )
+            print("filename" + getattr( page, 'filename' ) )
+            if not in_default_lang(page):
+                print("NOT IN DEFAULT LANG")
+                page.metadata['save_as'] = page.url
         if not hasattr(page, 'override_' + key):
             setattr(page, 'override_' + key, _override_value(page, key))
-        print( "key: " + key + " , page.url: " + page.url )
         
 
 def set_relationships(generator):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]