~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/answers/interfaces/questionjob.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-04-27 21:08:24 UTC
  • mfrom: (12919.3.20 question-email-0)
  • Revision ID: launchpad@pqm.canonical.com-20110427210824-n35ei6vy3eftypa8
[r=jcsackett][no-qa] Create a QuestionJob that can queue emails.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2011 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
"""Interface for the Jobs system for questions."""
 
5
 
 
6
__metaclass__ = type
 
7
__all__ = [
 
8
    'IQuestionJob',
 
9
    'IQuestionEmailJob',
 
10
    'IQuestionEmailJobSource',
 
11
    ]
 
12
 
 
13
from zope.interface import Attribute
 
14
from zope.schema import (
 
15
    Choice,
 
16
    Field,
 
17
    Int,
 
18
    Object,
 
19
    )
 
20
 
 
21
from canonical.launchpad import _
 
22
from lp.answers.enums import QuestionJobType
 
23
from lp.services.job.interfaces.job import (
 
24
    IJob,
 
25
    IJobSource,
 
26
    IRunnableJob,
 
27
    )
 
28
 
 
29
 
 
30
class IQuestionJob(IRunnableJob):
 
31
    """A Job related to a question."""
 
32
 
 
33
    id = Int(
 
34
        title=_('DB ID'), required=True, readonly=True,
 
35
        description=_("The tracking number for this job."))
 
36
 
 
37
    job = Object(
 
38
        title=_('The common Job attributes'),
 
39
        schema=IJob, required=True)
 
40
 
 
41
    job_type = Choice(
 
42
        title=_('Job type'), vocabulary=QuestionJobType,
 
43
        required=True, readonly=True)
 
44
 
 
45
    question = Field(
 
46
        title=_("The question related to this job."),
 
47
        description=_("An IQuestion."), required=True, readonly=True)
 
48
 
 
49
    metadata = Attribute('A dict of data about the job.')
 
50
 
 
51
 
 
52
class IQuestionEmailJob(IQuestionJob):
 
53
 
 
54
    user = Attribute('The `IPerson` who triggered the email.')
 
55
 
 
56
    subject = Attribute('The subject of the email.')
 
57
 
 
58
    body = Attribute(
 
59
        'The body of the email that is common to all recpients.')
 
60
 
 
61
    headers = Attribute(
 
62
        'The headers of the email that are common to all recpients.')
 
63
 
 
64
 
 
65
class IQuestionEmailJobSource(IJobSource):
 
66
    """An interface for acquiring IQuestionJob."""
 
67
 
 
68
    def create(question, user, subject, body, headers):
 
69
        """Create a new IQuestionJob.
 
70
 
 
71
        :param question: An `IQuestion`.
 
72
        :param user: An `IPerson`.
 
73
        :param subject: A'The subject of the email.
 
74
        :param body: The text of the email that is common to all recpients.
 
75
        :parma headers: A dict of headers for the email that are common to
 
76
            all recpients.
 
77
        """