~rashi007/mailman/docsfix

« back to all changes in this revision

Viewing changes to src/mailman/app/templates.py

  • Committer: Barry Warsaw
  • Date: 2014-12-01 02:51:03 UTC
  • mto: (7264.4.22 py3)
  • mto: This revision was merged to the branch mainline in revision 7285.
  • Revision ID: barry@list.org-20141201025103-jvkuq92sptrrngiz
Checkpointing.

By using `six` I think I have most of the imports squared away.  There's
probably still uses of `unicode` built-ins that need fixing.

The idea is to first get the test suite running (which it doesn't yet), and
then to fix tests.

There's a bug in lazr.config which requires us to patch it for now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    ]
26
26
 
27
27
 
28
 
import urllib2
29
 
 
30
28
from contextlib import closing
31
 
from urllib import addinfourl
32
 
from urlparse import urlparse
33
 
from zope.component import getUtility
34
 
from zope.interface import implementer
35
 
 
36
 
from mailman.utilities.i18n import TemplateNotFoundError, find
37
29
from mailman.interfaces.languages import ILanguageManager
38
30
from mailman.interfaces.listmanager import IListManager
39
31
from mailman.interfaces.templates import ITemplateLoader
 
32
from mailman.utilities.i18n import TemplateNotFoundError, find
 
33
from six.moves.urllib_error import URLError
 
34
from six.moves.urllib_parse import urlparse
 
35
from six.moves.urllib_request import (
 
36
    BaseHandler, build_opener, install_opener, urlopen)
 
37
from six.moves.urllib_response import addinfourl
 
38
from zope.component import getUtility
 
39
from zope.interface import implementer
40
40
 
41
41
 
42
42
 
43
 
class MailmanHandler(urllib2.BaseHandler):
 
43
class MailmanHandler(BaseHandler):
44
44
    # Handle internal mailman: URLs.
45
45
    def mailman_open(self, req):
46
46
        # Parse urls of the form:
57
57
        # path components are legal, filter them out.
58
58
        parts = filter(None, parsed.path.split('/'))
59
59
        if len(parts) == 0:
60
 
            raise urllib2.URLError('No template specified')
 
60
            raise URLError('No template specified')
61
61
        elif len(parts) == 1:
62
62
            template = parts[0]
63
63
        elif len(parts) == 2:
69
69
            language = getUtility(ILanguageManager).get(part0)
70
70
            mlist = getUtility(IListManager).get(part0)
71
71
            if language is None and mlist is None:
72
 
                raise urllib2.URLError('Bad language or list name')
 
72
                raise URLError('Bad language or list name')
73
73
            elif mlist is None:
74
74
                code = language.code
75
75
        elif len(parts) == 3:
76
76
            fqdn_listname, code, template = parts
77
77
            mlist = getUtility(IListManager).get(fqdn_listname)
78
78
            if mlist is None:
79
 
                raise urllib2.URLError('Missing list')
 
79
                raise URLError('Missing list')
80
80
            language = getUtility(ILanguageManager).get(code)
81
81
            if language is None:
82
 
                raise urllib2.URLError('No such language')
 
82
                raise URLError('No such language')
83
83
            code = language.code
84
84
        else:
85
 
            raise urllib2.URLError('No such file')
 
85
            raise URLError('No such file')
86
86
        # Find the template, mutating any missing template exception.
87
87
        try:
88
88
            path, fp = find(template, mlist, code)
89
89
        except TemplateNotFoundError:
90
 
            raise urllib2.URLError('No such file')
 
90
            raise URLError('No such file')
91
91
        return addinfourl(fp, {}, original_url)
92
92
 
93
93
 
97
97
    """Loader of templates, with caching and support for mailman:// URIs."""
98
98
 
99
99
    def __init__(self):
100
 
        opener = urllib2.build_opener(MailmanHandler())
101
 
        urllib2.install_opener(opener)
 
100
        opener = build_opener(MailmanHandler())
 
101
        install_opener(opener)
102
102
 
103
103
    def get(self, uri):
104
104
        """See `ITemplateLoader`."""
105
 
        with closing(urllib2.urlopen(uri)) as fp:
 
105
        with closing(urlopen(uri)) as fp:
106
106
            return fp.read().decode('utf-8')