41
41
self.config = config
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
47
47
Must be implemented by subclasses.
62
62
raise NotImplementedError
64
def compose_merge_request(self, to, subject, directive, basename=None):
64
def compose_merge_request(self, to, subject, directive, basename=None,
65
66
"""Compose (and possibly send) a merge request
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)
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')))
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"""
105
106
raise errors.NoMailAddressSpecified()
106
body = msgeditor.edit_commit_message(prompt)
107
body = msgeditor.edit_commit_message(prompt, start_message=body)
108
109
raise errors.NoMessageSupplied()
109
110
email_message.EmailMessage.send(self.config,
129
130
return self._client_commands
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.
135
136
Writes the attachment to a temporary file, invokes _compose.
146
147
self._compose(prompt, to, subject, attach_path, mime_subtype,
149
150
def _compose(self, prompt, to, subject, attach_path, mime_subtype,
151
152
"""Invoke a mail client as a commandline process.
153
154
Overridden by MAPIClient.
174
175
raise errors.MailClientNotFound(self._client_commands)
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
179
180
Implemented by various subclasses
494
495
return XDGEmail(self.config)
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"""
500
501
return self._mail_client().compose(prompt, to, subject,
501
502
attachment, mimie_subtype,
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)
507
def compose_merge_request(self, to, subject, directive, basename=None):
508
def compose_merge_request(self, to, subject, directive, basename=None,
508
510
"""See MailClient.compose_merge_request"""
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'