Allow $var_dir templates to override in-tree templates

Bug #788309 reported by Richard Wackerbarth
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
GNU Mailman
Fix Released
Wishlist
Barry Warsaw

Bug Description

mailman.utilities.i18n.find()'s search algorithm only allows for list-specific templates in $var_dir. The search algorithm should be extended so that any of the domain, site, and language templates may be overridden by $var_dir templates. It can still fallback to in-tree templates if the $var_dir version is missing.

Tags: mailman3
Revision history for this message
Richard Wackerbarth (wacky) wrote :
Barry Warsaw (barry)
summary: - Site configuration customization unnecessarily stored in tree
+ Site template search should look in var_dir
summary: - Site template search should look in var_dir
+ Allow $var_dir templates to override in-tree templates
Revision history for this message
Barry Warsaw (barry) wrote :

I changed the subject of this bug because actually I think it's fine for the in-tree site templates to still be searched, just that if the template exists in $var_dir, it should override. And this should be true of the domain templates as well.

Thanks for the patch, and the bug report. Perhaps you'd like to refine the patch to match the new description? Also, if you could include unittests that would be great.

description: updated
Changed in mailman:
status: New → Confirmed
importance: Undecided → Medium
importance: Medium → Wishlist
Revision history for this message
Barry Warsaw (barry) wrote :

From the NEWS file:

 * Major redesign of the template search system, fixing LP: #788309. $var_dir
   is now used when search for all template overrides, site, domain, or
   mailing list. The in-tree English templates are used only as a last
   fallback.

Changed in mailman:
assignee: nobody → Barry Warsaw (barry)
milestone: none → 3.0.0b1
status: Confirmed → In Progress
Revision history for this message
Barry Warsaw (barry) wrote :

def search(template_file, mlist=None, language=None):
    """Generator that provides file system search order.

    This is Mailman's internal template search algorithm. The first locations
    searched are within the $var_dir/templates directory, allowing a site to
    override a template for a specific mailing list, all the mailing lists in
    a domain, or site-wide.

    The <language> path component is variable, and described below.

    * The list-specific language directory
      <var_dir>/templates/lists/<mlist.fqdn_listname>/<language>

    * The domain-specific language directory
      <var_dir>/templates/domains/<mlist.mail_host>/<language>

    * The site-wide language directory
      <var_dir>/templates/site/<language>

    The <language> path component is calculated as follows, in this order:

    * The `language` parameter if given
    * `mlist.preferred_language` if given
    * The server's default language
    * English ('en')

    Languages are iterated after each of the four locations are searched. So
    for example, when searching for the 'foo.txt' template, where the server's
    default language is 'fr', the mailing list's (<email address hidden>) language
    is 'de' and the `language` parameter is 'it', these locations are searched
    in order:

    * <var_dir>/<email address hidden>/it/foo.txt
    * <var_dir>/templates/domains/example.com/it/foo.txt
    * <var_dir>/templates/site/it/foo.txt

    * <var_dir>/<email address hidden>/de/foo.txt
    * <var_dir>/templates/domains/example.com/de/foo.txt
    * <var_dir>/templates/site/de/foo.txt

    * <var_dir>/<email address hidden>/fr/foo.txt
    * <var_dir>/templates/domains/example.com/fr/foo.txt
    * <var_dir>/templates/site/fr/foo.txt

    * <var_dir>/<email address hidden>/en/foo.txt
    * <var_dir>/templates/domains/example.com/en/foo.txt
    * <var_dir>/templates/site/en/foo.txt

    After all those paths are searched, the final fallback is the English
    template within the Mailman source tree.

    * <source_dir>/templates/en/foo.txt
    """

Changed in mailman:
status: In Progress → Fix Committed
Barry Warsaw (barry)
Changed in mailman:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.