Re: yeararchives (2)

"Sebastian Spaeth" <[email protected]> Wed, 05 May 2010 15:34:34 +0200
Newsgroups gmane.comp.web.pyblosxom.devel
Message-ID <[email protected]>
On 2010-05-04, Sebastian Spaeth wrote:
> 2a) For this to work, the yeararchive plugin would need to understand
> URLS such as /2003.snarfed which it does not now. If the URL is not
> ^/2003$ it won't recognize it. Here is a patch that drops of final
> flavour bits, although I am not sure if that is the correct thing to do
> here or if there are better ways. I have implemented that and can send
> the patch if needed.

OK, here comes the patch that makes yeararchives understand .flav
extensions to the URL. This patch in combination with the other patch in
this thread make yeararchives nearly perfect for my uses.  How does this
look?

Sebastian

commit a9113d88e49d512cba89f972bb299304d6a3c4bd
Author: Sebastian Spaeth <[email protected]>
Date:   Wed May 5 15:00:18 2010 +0200

    yeararchives: Make it work with .flavour appended to URL
    
    There were 2 problems with flavours and the yeararchives plugin:
    
    1)the data["flavour"] entry gets only set in the pyblosxom handler for
      real files (actually it gets set to either the default or when
      useing ?flav=foo but will ignore .flav extensions).
      This should arguably be improved there but that is a
      separate issue. If we find a flavour appendix split it off before
      the date parsing and set the data["flavour"] accordingly.
    
    2)When creating the FileEntries for each article we passed
      data["root_datadir"] as root dir and the filepath of the article as
      filename.
    
      However for data URLS the pyblosxom handler sets:
      data["root_datadir"] = os.path.join(config["datadir"], pi_bl)
      which leads to wrong root components for our filenames.
    
      E.g. the yeararchives URL:
      http://sspaeth.de/cgi-bin/pyblosxom.cgi/2010.html
    
      leads to the root_datadir of:
    
      /home/spaetz/sspaeth.de/public/data/2010.html
    
      which we pass a root dir to posts such as:
    
     /home/spaetz/sspaeth.de/public/data/Private/Oliver-in-der-Notaufnahme.rst.
    
     This is not the intended combination as the root is supposed to be
     identical to the start of the full filename. What we really want to
     pass here is our configured datadir. So this is what this patch does.
    
    With this patch URLS such as
     http://sspaeth.de/cgi-bin/pyblosxom.cgi/2010.html
     http://sspaeth.de/cgi-bin/pyblosxom.cgi/2010.snarfed
     http://sspaeth.de/cgi-bin/pyblosxom.cgi/2010?flav=html
    
    work with the corresponding templates.
    
    Signed-off-by: Sebastian Spaeth <[email protected]>

----------------------------------------------------------------------------------------------------
diff --git a/plugins/archives/yeararchives.py b/plugins/archives/yeararchives.py
index 60b9065..5390d62 100644
--- a/plugins/archives/yeararchives.py
+++ b/plugins/archives/yeararchives.py
@@ -207,6 +207,21 @@ def cb_filelist(args):
     if not year:
         return
 
+    # Use current (or default) flavour for permalinks
+    # note: for date URLs, data["flavor"] is not set in the pyblosxom handler
+    # if it is passed as an extension.
+    # If we find a valid date URL, we will therefore set data["flavour"] accordingly
+    # a few lines down.
+    try:
+        flavour = data["flavour"]
+    except KeyError:
+        flavour = config.get("default_flavour", "html")
+
+
+    # if a flavor is appended drop it for the date calculation
+    # and save it, so we can set the rendering flavour.
+    if os.path.basename(year).find('.') != -1:
+        year, flavour = year.rsplit('.',1)
     if year.startswith("/"):
         year = year[1:]
     if year.endswith("/"):
@@ -214,6 +229,8 @@ def cb_filelist(args):
     if not year.isdigit() or not len(year) == 4:
         return
 
+    data["flavour"] = flavour
+    
     data[INIT_KEY] = 1
 
     # get all the entries
@@ -227,12 +244,6 @@ def cb_filelist(args):
     items.sort()
     items.reverse()
     
-    # Use current (or default) flavour for permalinks
-    try:
-        flavour = data["flavour"]
-    except KeyError:
-        flavour = config.get("default_flavour", "html")
-
     l = ("(%(path)s) <a href=\"" + baseurl +
          "/%(file_path)s." + flavour + "\">%(title)s</a><br>")
     e = "<tr>\n<td valign=\"top\" align=\"left\">%s</td>\n<td>%s</td></tr>\n"
@@ -262,7 +273,7 @@ def cb_filelist(args):
             d = mem[1]
             day = []
         entry = entries.fileentry.FileEntry(
-            request, mem[3], data['root_datadir'])
+            request, mem[3], config['datadir'])
         day.append(l % entry)
 
     if day:

------------------------------------------------------------------------------

_______________________________________________
Pyblosxom-devel mailing list
Pyblosxom-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/pyblosxom-devel
signature.asc (application/pgp-signature, 197 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkvhc+oACgkQVYX1jMgnoGKepQCgjzXn/QHRafQgwgR4wShXoouH
w8gAn0CT4BJOIEbqqjycombtDyczRUu5
=y0Pb
-----END PGP SIGNATURE-----