~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/mail_client.py

  • Committer: Aaron Bentley
  • Date: 2009-03-10 12:33:01 UTC
  • mto: This revision was merged to the branch mainline in revision 4130.
  • Revision ID: aaron@aaronbentley.com-20090310123301-ijo1c962wimkujh0
Push body support through bzr send.

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
        self.config = config
42
42
 
43
43
    def compose(self, prompt, to, subject, attachment, mime_subtype,
44
 
                extension, basename=None):
 
44
                extension, basename=None, body=None):
45
45
        """Compose (and possibly send) an email message
46
46
 
47
47
        Must be implemented by subclasses.
61
61
        """
62
62
        raise NotImplementedError
63
63
 
64
 
    def compose_merge_request(self, to, subject, directive, basename=None):
 
64
    def compose_merge_request(self, to, subject, directive, basename=None,
 
65
                              body=None):
65
66
        """Compose (and possibly send) a merge request
66
67
 
67
68
        :param to: The address to send the request to
74
75
        prompt = self._get_merge_prompt("Please describe these changes:", to,
75
76
                                        subject, directive)
76
77
        self.compose(prompt, to, subject, directive,
77
 
            'x-patch', '.patch', basename)
 
78
            'x-patch', '.patch', basename, body)
78
79
 
79
80
    def _get_merge_prompt(self, prompt, to, subject, attachment):
80
81
        """Generate a prompt string.  Overridden by Editor.
99
100
                         attachment.decode('utf-8', 'replace')))
100
101
 
101
102
    def compose(self, prompt, to, subject, attachment, mime_subtype,
102
 
                extension, basename=None):
 
103
                extension, basename=None, body=None):
103
104
        """See MailClient.compose"""
104
105
        if not to:
105
106
            raise errors.NoMailAddressSpecified()
106
 
        body = msgeditor.edit_commit_message(prompt)
 
107
        body = msgeditor.edit_commit_message(prompt, start_message=body)
107
108
        if body == '':
108
109
            raise errors.NoMessageSupplied()
109
110
        email_message.EmailMessage.send(self.config,
129
130
            return self._client_commands
130
131
 
131
132
    def compose(self, prompt, to, subject, attachment, mime_subtype,
132
 
                extension, basename=None):
 
133
                extension, basename=None, body=None):
133
134
        """See MailClient.compose.
134
135
 
135
136
        Writes the attachment to a temporary file, invokes _compose.
144
145
        finally:
145
146
            outfile.close()
146
147
        self._compose(prompt, to, subject, attach_path, mime_subtype,
147
 
                      extension)
 
148
                      extension, body)
148
149
 
149
150
    def _compose(self, prompt, to, subject, attach_path, mime_subtype,
150
 
                extension):
 
151
                extension, body):
151
152
        """Invoke a mail client as a commandline process.
152
153
 
153
154
        Overridden by MAPIClient.
162
163
        for name in self._get_client_commands():
163
164
            cmdline = [self._encode_path(name, 'executable')]
164
165
            cmdline.extend(self._get_compose_commandline(to, subject,
165
 
                                                         attach_path))
 
166
                                                         attach_path, body))
166
167
            try:
167
168
                subprocess.call(cmdline)
168
169
            except OSError, e:
173
174
        else:
174
175
            raise errors.MailClientNotFound(self._client_commands)
175
176
 
176
 
    def _get_compose_commandline(self, to, subject, attach_path):
 
177
    def _get_compose_commandline(self, to, subject, attach_path, body):
177
178
        """Determine the commandline to use for composing a message
178
179
 
179
180
        Implemented by various subclasses
494
495
            return XDGEmail(self.config)
495
496
 
496
497
    def compose(self, prompt, to, subject, attachment, mime_subtype,
497
 
                extension, basename=None):
 
498
                extension, basename=None, body=None):
498
499
        """See MailClient.compose"""
499
500
        try:
500
501
            return self._mail_client().compose(prompt, to, subject,
501
502
                                               attachment, mimie_subtype,
502
 
                                               extension, basename)
 
503
                                               extension, basename, body)
503
504
        except errors.MailClientNotFound:
504
505
            return Editor(self.config).compose(prompt, to, subject,
505
 
                          attachment, mimie_subtype, extension)
 
506
                          attachment, mimie_subtype, extension, body)
506
507
 
507
 
    def compose_merge_request(self, to, subject, directive, basename=None):
 
508
    def compose_merge_request(self, to, subject, directive, basename=None,
 
509
                              body=None):
508
510
        """See MailClient.compose_merge_request"""
509
511
        try:
510
512
            return self._mail_client().compose_merge_request(to, subject,
511
 
                    directive, basename=basename)
 
513
                    directive, basename=basename, body=body)
512
514
        except errors.MailClientNotFound:
513
515
            return Editor(self.config).compose_merge_request(to, subject,
514
 
                          directive, basename=basename)
 
516
                          directive, basename=basename, body=body)
515
517
mail_client_registry.register('default', DefaultMail,
516
518
                              help=DefaultMail.__doc__)
517
519
mail_client_registry.default_key = 'default'