Merge lp:~sinzui/launchpad/question-enums-0 into lp:launchpad

Proposed by Curtis Hovey
Status: Merged
Approved by: Curtis Hovey
Approved revision: no longer in the source branch.
Merged at revision: 12923
Proposed branch: lp:~sinzui/launchpad/question-enums-0
Merge into: lp:launchpad
Diff against target: 757 lines (+74/-83)
36 files modified
lib/canonical/launchpad/database/launchpadstatistic.py (+2/-2)
lib/lp/answers/browser/faqcollection.py (+3/-3)
lib/lp/answers/browser/question.py (+2/-2)
lib/lp/answers/browser/questiontarget.py (+1/-1)
lib/lp/answers/browser/tests/views.txt (+1/-1)
lib/lp/answers/doc/expiration.txt (+1/-1)
lib/lp/answers/doc/karma.txt (+1/-1)
lib/lp/answers/doc/notifications.txt (+1/-1)
lib/lp/answers/doc/person.txt (+5/-4)
lib/lp/answers/doc/projectgroup.txt (+1/-1)
lib/lp/answers/doc/questionsets.txt (+3/-3)
lib/lp/answers/doc/questiontarget.txt (+2/-2)
lib/lp/answers/doc/workflow.txt (+2/-2)
lib/lp/answers/enums.py (+7/-1)
lib/lp/answers/interfaces/question.py (+1/-1)
lib/lp/answers/interfaces/questioncollection.py (+1/-7)
lib/lp/answers/interfaces/questionmessage.py (+1/-2)
lib/lp/answers/interfaces/questionreopening.py (+1/-1)
lib/lp/answers/interfaces/questionsperson.py (+2/-4)
lib/lp/answers/interfaces/questiontarget.py (+2/-2)
lib/lp/answers/karma.py (+2/-2)
lib/lp/answers/mail/handler.py (+1/-1)
lib/lp/answers/model/question.py (+3/-5)
lib/lp/answers/model/questionmessage.py (+1/-1)
lib/lp/answers/model/questionreopening.py (+1/-1)
lib/lp/answers/model/questionsperson.py (+1/-3)
lib/lp/answers/notification.py (+1/-1)
lib/lp/answers/tests/emailinterface.txt (+1/-1)
lib/lp/answers/tests/test_question_workflow.py (+1/-1)
lib/lp/registry/browser/distributionsourcepackage.py (+1/-1)
lib/lp/registry/browser/person.py (+5/-5)
lib/lp/registry/model/distribution.py (+8/-9)
lib/lp/registry/model/product.py (+5/-5)
lib/lp/registry/model/projectgroup.py (+1/-1)
lib/lp/registry/model/sourcepackage.py (+1/-3)
scripts/close-account.py (+1/-1)
To merge this branch: bzr merge lp:~sinzui/launchpad/question-enums-0
Reviewer Review Type Date Requested Status
Curtis Hovey (community) code Approve
Review via email: mp+59099@code.launchpad.net

Description of the change

Rename answers/interfaces/questionenums to answers/enums.

    Launchpad bug: https://bugs.launchpad.net/bugs/771321
    Pre-implementation: no one

Move and rename questionenums to the newer standard of enums. Consolidate
enums into that module.

--------------------------------------------------------------------

RULES

    * Use the migration script to rename the module.
    * Move the QUESTION_STATUS_DEFAULT_SEARCH in to enums.

QA

    None, this is a pure refactoring.

LINT

    lib/canonical/launchpad/database/launchpadstatistic.py
    lib/lp/answers/enums.py
    lib/lp/answers/karma.py
    lib/lp/answers/notification.py
    lib/lp/answers/browser/faqcollection.py
    lib/lp/answers/browser/question.py
    lib/lp/answers/browser/questiontarget.py
    lib/lp/answers/browser/tests/views.txt
    lib/lp/answers/doc/expiration.txt
    lib/lp/answers/doc/karma.txt
    lib/lp/answers/doc/notifications.txt
    lib/lp/answers/doc/person.txt
    lib/lp/answers/doc/projectgroup.txt
    lib/lp/answers/doc/questionsets.txt
    lib/lp/answers/doc/questiontarget.txt
    lib/lp/answers/doc/workflow.txt
    lib/lp/answers/interfaces/question.py
    lib/lp/answers/interfaces/questioncollection.py
    lib/lp/answers/interfaces/questionmessage.py
    lib/lp/answers/interfaces/questionreopening.py
    lib/lp/answers/interfaces/questionsperson.py
    lib/lp/answers/interfaces/questiontarget.py
    lib/lp/answers/mail/handler.py
    lib/lp/answers/model/question.py
    lib/lp/answers/model/questionmessage.py
    lib/lp/answers/model/questionreopening.py
    lib/lp/answers/model/questionsperson.py
    lib/lp/answers/tests/emailinterface.txt
    lib/lp/answers/tests/test_question_workflow.py
    lib/lp/registry/browser/distributionsourcepackage.py
    lib/lp/registry/browser/person.py
    lib/lp/registry/model/distribution.py
    lib/lp/registry/model/product.py
    lib/lp/registry/model/projectgroup.py
    lib/lp/registry/model/sourcepackage.py

TEST

    ./bin/test -vv -m lp.answers

To post a comment you must log in.
Revision history for this message
Curtis Hovey (sinzui) wrote :

Self-approved because these changes are mechanical and made/determined by scripts.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/canonical/launchpad/database/launchpadstatistic.py'
2--- lib/canonical/launchpad/database/launchpadstatistic.py 2010-11-19 16:38:42 +0000
3+++ lib/canonical/launchpad/database/launchpadstatistic.py 2011-04-26 21:01:43 +0000
4@@ -29,7 +29,7 @@
5 ILaunchpadStatistic,
6 ILaunchpadStatisticSet,
7 )
8-from lp.answers.interfaces.questionenums import QuestionStatus
9+from lp.answers.enums import QuestionStatus
10 from lp.answers.model.question import Question
11 from lp.app.enums import ServiceUsage
12 from lp.bugs.model.bug import Bug
13@@ -163,7 +163,7 @@
14 Product.selectBy(license_reviewed=True, active=True).count())
15
16 def _updateRosettaStatistics(self, ztm):
17- # XXX j.c.sackett 2010-11-19 bug=677532 It's less than ideal that
18+ # XXX j.c.sackett 2010-11-19 bug=677532 It's less than ideal that
19 # this query is using _translations_usage, but there's no cleaner
20 # way to deal with it. Once the bug above is resolved, this should
21 # should be fixed to use translations_usage.
22
23=== modified file 'lib/lp/answers/browser/faqcollection.py'
24--- lib/lp/answers/browser/faqcollection.py 2010-11-23 23:22:27 +0000
25+++ lib/lp/answers/browser/faqcollection.py 2011-04-26 21:01:43 +0000
26@@ -25,10 +25,10 @@
27 IFAQCollection,
28 ISearchFAQsForm,
29 )
30-from lp.answers.interfaces.questioncollection import (
31+from lp.answers.enums import (
32+ QuestionSort,
33 QUESTION_STATUS_DEFAULT_SEARCH,
34 )
35-from lp.answers.interfaces.questionenums import QuestionSort
36 from lp.app.browser.launchpadform import (
37 action,
38 LaunchpadFormView,
39@@ -147,5 +147,5 @@
40 status.title for status in QUESTION_STATUS_DEFAULT_SEARCH],
41 'field.search_text': self.search_text,
42 'field.actions.search': 'Search',
43- 'field.sort' : QuestionSort.RELEVANCY.title,
44+ 'field.sort': QuestionSort.RELEVANCY.title,
45 'field.language-empty-marker': 1}, doseq=True)
46
47=== modified file 'lib/lp/answers/browser/question.py'
48--- lib/lp/answers/browser/question.py 2011-04-18 01:07:08 +0000
49+++ lib/lp/answers/browser/question.py 2011-04-26 21:01:43 +0000
50@@ -90,7 +90,7 @@
51 IQuestionLinkFAQForm,
52 )
53 from lp.answers.interfaces.questioncollection import IQuestionSet
54-from lp.answers.interfaces.questionenums import (
55+from lp.answers.enums import (
56 QuestionAction,
57 QuestionSort,
58 QuestionStatus,
59@@ -649,7 +649,7 @@
60 # Remove the description widget.
61 widgets = [(True, self.widgets[name])
62 for name in self.search_field_names]
63- self.widgets = form.Widgets(widgets, len(self.prefix)+1)
64+ self.widgets = form.Widgets(widgets, len(self.prefix) + 1)
65 return self.search_template()
66 return self.continue_action.success(data)
67
68
69=== modified file 'lib/lp/answers/browser/questiontarget.py'
70--- lib/lp/answers/browser/questiontarget.py 2011-02-02 15:43:31 +0000
71+++ lib/lp/answers/browser/questiontarget.py 2011-04-26 21:01:43 +0000
72@@ -68,7 +68,7 @@
73 IQuestionSet,
74 ISearchableByQuestionOwner,
75 )
76-from lp.answers.interfaces.questionenums import QuestionStatus
77+from lp.answers.enums import QuestionStatus
78 from lp.answers.interfaces.questiontarget import (
79 IQuestionTarget,
80 ISearchQuestionsForm,
81
82=== modified file 'lib/lp/answers/browser/tests/views.txt'
83--- lib/lp/answers/browser/tests/views.txt 2011-04-26 03:29:28 +0000
84+++ lib/lp/answers/browser/tests/views.txt 2011-04-26 21:01:43 +0000
85@@ -818,7 +818,7 @@
86 Specific views can provide a default filter by returning the default
87 search parameters to use in the getDefaultFilter() method:
88
89- >>> from lp.answers.interfaces.questionenums import QuestionStatus
90+ >>> from lp.answers.enums import QuestionStatus
91 >>> MyCustomSearchQuestionsView.default_filter = {
92 ... 'status': [QuestionStatus.SOLVED, QuestionStatus.INVALID],
93 ... 'language' : search_view.user_support_languages}
94
95=== modified file 'lib/lp/answers/doc/expiration.txt'
96--- lib/lp/answers/doc/expiration.txt 2010-10-18 22:24:59 +0000
97+++ lib/lp/answers/doc/expiration.txt 2011-04-26 21:01:43 +0000
98@@ -19,7 +19,7 @@
99
100 # Sanity check in case somebody modifies the question sampledata and
101 # forget to update this script.
102- >>> from lp.answers.interfaces.questionenums import QuestionStatus
103+ >>> from lp.answers.enums import QuestionStatus
104 >>> from lp.answers.model.question import Question
105 >>> Question.select('status IN (%i,%i)' % (
106 ... QuestionStatus.OPEN.value,
107
108=== modified file 'lib/lp/answers/doc/karma.txt'
109--- lib/lp/answers/doc/karma.txt 2010-12-02 16:13:51 +0000
110+++ lib/lp/answers/doc/karma.txt 2011-04-26 21:01:43 +0000
111@@ -154,7 +154,7 @@
112 We do not grant karma for status change made outside of workflow:
113
114 >>> login('foo.bar@canonical.com')
115- >>> from lp.answers.interfaces.questionenums import QuestionStatus
116+ >>> from lp.answers.enums import QuestionStatus
117 >>> msg = firefox_question.setStatus(
118 ... foo_bar, QuestionStatus.OPEN, 'That rejection was an error.',
119 ... datecreated=now.next())
120
121=== modified file 'lib/lp/answers/doc/notifications.txt'
122--- lib/lp/answers/doc/notifications.txt 2011-04-23 13:42:01 +0000
123+++ lib/lp/answers/doc/notifications.txt 2011-04-26 21:01:43 +0000
124@@ -725,7 +725,7 @@
125 Notifications for setStatus()
126 .............................
127
128- >>> from lp.answers.interfaces.questionenums import QuestionStatus
129+ >>> from lp.answers.enums import QuestionStatus
130 >>> login('foo.bar@canonical.com')
131 >>> message = ubuntu_question.setStatus(
132 ... foo_bar, QuestionStatus.SOLVED, "The rejection was a mistake.")
133
134=== modified file 'lib/lp/answers/doc/person.txt'
135--- lib/lp/answers/doc/person.txt 2011-02-17 17:02:54 +0000
136+++ lib/lp/answers/doc/person.txt 2011-04-26 21:01:43 +0000
137@@ -41,7 +41,7 @@
138 relevancy. One can use the sort parameter to change that. It takes one of
139 the constant defined in the QuestionSort enumeration.
140
141- >>> from lp.answers.interfaces.questionenums import QuestionSort
142+ >>> from lp.answers.enums import QuestionSort
143 >>> for question in foo_bar.searchQuestions(
144 ... search_text='firefox', sort=QuestionSort.OLDEST_FIRST):
145 ... print question.id, question.title, question.status.title
146@@ -68,8 +68,9 @@
147 As shown above, expired and invalid questions are not returned. The status
148 parameter can be used to control the list of statuses to select.
149
150- >>> from lp.answers.interfaces.questionenums import QuestionStatus
151- >>> for question in foo_bar.searchQuestions(status=QuestionStatus.INVALID):
152+ >>> from lp.answers.enums import QuestionStatus
153+ >>> for question in foo_bar.searchQuestions(
154+ ... status=QuestionStatus.INVALID):
155 ... print question.title, question.status.title
156 Firefox is slow and consumes too much RAM Invalid
157
158@@ -92,7 +93,7 @@
159 To select only questions on which the person commented, the
160 QuestionParticipation.COMMENTER is used.
161
162- >>> from lp.answers.interfaces.questionenums import QuestionParticipation
163+ >>> from lp.answers.enums import QuestionParticipation
164 >>> for question in foo_bar.searchQuestions(
165 ... participation=QuestionParticipation.COMMENTER, status=None):
166 ... print question.title
167
168=== modified file 'lib/lp/answers/doc/projectgroup.txt'
169--- lib/lp/answers/doc/projectgroup.txt 2010-10-18 22:24:59 +0000
170+++ lib/lp/answers/doc/projectgroup.txt 2011-04-26 21:01:43 +0000
171@@ -50,7 +50,7 @@
172 Questions can be searched by all the standard searchQuestions() parameters.
173 See questiontarget.txt for the full details.
174
175- >>> from lp.answers.interfaces.questionenums import (
176+ >>> from lp.answers.enums import (
177 ... QuestionSort, QuestionStatus)
178 >>> for question in mozilla_project.searchQuestions(
179 ... owner=sample_person, status=QuestionStatus.OPEN,
180
181=== modified file 'lib/lp/answers/doc/questionsets.txt'
182--- lib/lp/answers/doc/questionsets.txt 2011-03-23 16:28:51 +0000
183+++ lib/lp/answers/doc/questionsets.txt 2011-04-26 21:01:43 +0000
184@@ -67,7 +67,7 @@
185 parameter can be used to select the questions in the status you are interested
186 in.
187
188- >>> from lp.answers.interfaces.questionenums import QuestionStatus
189+ >>> from lp.answers.enums import QuestionStatus
190 >>> for question in question_set.searchQuestions(
191 ... status=QuestionStatus.INVALID):
192 ... print question.title, question.status.title, (
193@@ -123,7 +123,7 @@
194 relevancy. One can use the sort parameter to change the order. It takes one
195 of the constant defined in the QuestionSort enumeration.
196
197- >>> from lp.answers.interfaces.questionenums import QuestionSort
198+ >>> from lp.answers.enums import QuestionSort
199 >>> for question in question_set.searchQuestions(
200 ... search_text='firefox', sort=QuestionSort.OLDEST_FIRST):
201 ... print question.id, ascii_smash(question.title), (
202@@ -179,7 +179,7 @@
203 >>> login('admin@canonical.com')
204 >>> firefox.answers_usage = ServiceUsage.LAUNCHPAD
205 >>> ubuntu.answers_usage = ServiceUsage.LAUNCHPAD
206- >>> transaction.commit()
207+ >>> transaction.commit()
208
209 This method can be used to retrieve the projects that are the most actively
210 using the Answer Tracker in the last 60 days. By active, we mean that the
211
212=== modified file 'lib/lp/answers/doc/questiontarget.txt'
213--- lib/lp/answers/doc/questiontarget.txt 2010-10-18 22:24:59 +0000
214+++ lib/lp/answers/doc/questiontarget.txt 2011-04-26 21:01:43 +0000
215@@ -178,7 +178,7 @@
216
217 The searchQuestions() method can also filter questions by status.
218
219- >>> from lp.answers.interfaces.questionenums import QuestionStatus
220+ >>> from lp.answers.enums import QuestionStatus
221 >>> for t in target.searchQuestions(status=QuestionStatus.OPEN):
222 ... print t.title
223 Another question
224@@ -216,7 +216,7 @@
225
226 You can sort also from oldest to newest using the OLDEST_FIRST constant.
227
228- >>> from lp.answers.interfaces.questionenums import QuestionSort
229+ >>> from lp.answers.enums import QuestionSort
230 >>> for t in target.searchQuestions(search_text='new',
231 ... sort=QuestionSort.OLDEST_FIRST):
232 ... print t.title
233
234=== modified file 'lib/lp/answers/doc/workflow.txt'
235--- lib/lp/answers/doc/workflow.txt 2011-04-21 02:10:29 +0000
236+++ lib/lp/answers/doc/workflow.txt 2011-04-26 21:01:43 +0000
237@@ -5,7 +5,7 @@
238 The state of a question is tracked through its status, which model a
239 question's lifecycle. These are defined in the QuestionStatus enumeration.
240
241- >>> from lp.answers.interfaces.questionenums import QuestionStatus
242+ >>> from lp.answers.enums import QuestionStatus
243 >>> for status in QuestionStatus.items:
244 ... print status.name
245 OPEN
246@@ -18,7 +18,7 @@
247 Status change occurs as a consequence of a user's action. The possible
248 actions are defined in the QuestionAction enumeration.
249
250- >>> from lp.answers.interfaces.questionenums import QuestionAction
251+ >>> from lp.answers.enums import QuestionAction
252 >>> for status in QuestionAction.items:
253 ... print status.name
254 REQUESTINFO
255
256=== renamed file 'lib/lp/answers/interfaces/questionenums.py' => 'lib/lp/answers/enums.py'
257--- lib/lp/answers/interfaces/questionenums.py 2010-08-20 20:31:18 +0000
258+++ lib/lp/answers/enums.py 2011-04-26 21:01:43 +0000
259@@ -13,6 +13,7 @@
260 'QuestionAction',
261 'QuestionParticipation',
262 'QuestionPriority',
263+ 'QUESTION_STATUS_DEFAULT_SEARCH',
264 'QuestionSort',
265 'QuestionStatus',
266 ]
267@@ -205,7 +206,7 @@
268 RECENT_OWNER_ACTIVITY = Item("""
269 recently updated first
270
271- Sort questions that recently received new information from the owner first.
272+ Sort questions that received new information from the owner first.
273 """)
274
275
276@@ -262,3 +263,8 @@
277 question, spam or anything that should not appear in the
278 Answer Tracker.
279 """)
280+
281+
282+QUESTION_STATUS_DEFAULT_SEARCH = (
283+ QuestionStatus.OPEN, QuestionStatus.NEEDSINFO, QuestionStatus.ANSWERED,
284+ QuestionStatus.SOLVED)
285
286=== modified file 'lib/lp/answers/interfaces/question.py'
287--- lib/lp/answers/interfaces/question.py 2011-04-25 14:37:52 +0000
288+++ lib/lp/answers/interfaces/question.py 2011-04-26 21:01:43 +0000
289@@ -42,7 +42,7 @@
290
291 from canonical.launchpad import _
292 from lp.answers.interfaces.faq import IFAQ
293-from lp.answers.interfaces.questionenums import (
294+from lp.answers.enums import (
295 QuestionPriority,
296 QuestionStatus,
297 )
298
299=== modified file 'lib/lp/answers/interfaces/questioncollection.py'
300--- lib/lp/answers/interfaces/questioncollection.py 2011-04-22 22:24:41 +0000
301+++ lib/lp/answers/interfaces/questioncollection.py 2011-04-26 21:01:43 +0000
302@@ -11,7 +11,6 @@
303 'IQuestionCollection',
304 'IQuestionSet',
305 'ISearchableByQuestionOwner',
306- 'QUESTION_STATUS_DEFAULT_SEARCH',
307 ]
308
309 from zope.interface import (
310@@ -30,12 +29,7 @@
311 )
312
313 from canonical.launchpad import _
314-from lp.answers.interfaces.questionenums import QuestionStatus
315-
316-
317-QUESTION_STATUS_DEFAULT_SEARCH = (
318- QuestionStatus.OPEN, QuestionStatus.NEEDSINFO, QuestionStatus.ANSWERED,
319- QuestionStatus.SOLVED)
320+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
321
322
323 class IQuestionCollection(Interface):
324
325=== modified file 'lib/lp/answers/interfaces/questionmessage.py'
326--- lib/lp/answers/interfaces/questionmessage.py 2011-03-27 21:40:32 +0000
327+++ lib/lp/answers/interfaces/questionmessage.py 2011-04-26 21:01:43 +0000
328@@ -19,7 +19,7 @@
329
330 from canonical.launchpad import _
331 from canonical.launchpad.interfaces.message import IMessage
332-from lp.answers.interfaces.questionenums import (
333+from lp.answers.enums import (
334 QuestionAction,
335 QuestionStatus,
336 )
337@@ -52,4 +52,3 @@
338 title=_("Message visibility."),
339 description=_("Whether or not the message is visible."),
340 readonly=True)
341-
342
343=== modified file 'lib/lp/answers/interfaces/questionreopening.py'
344--- lib/lp/answers/interfaces/questionreopening.py 2010-08-20 20:31:18 +0000
345+++ lib/lp/answers/interfaces/questionreopening.py 2011-04-26 21:01:43 +0000
346@@ -20,7 +20,7 @@
347
348 from canonical.launchpad import _
349 from lp.answers.interfaces.question import IQuestion
350-from lp.answers.interfaces.questionenums import QuestionStatus
351+from lp.answers.enums import QuestionStatus
352 from lp.registry.interfaces.person import IPerson
353
354
355
356=== modified file 'lib/lp/answers/interfaces/questionsperson.py'
357--- lib/lp/answers/interfaces/questionsperson.py 2011-04-23 02:31:00 +0000
358+++ lib/lp/answers/interfaces/questionsperson.py 2011-04-26 21:01:43 +0000
359@@ -9,10 +9,8 @@
360 ]
361
362
363-from lp.answers.interfaces.questioncollection import (
364- IQuestionCollection,
365- QUESTION_STATUS_DEFAULT_SEARCH,
366- )
367+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
368+from lp.answers.interfaces.questioncollection import IQuestionCollection
369
370
371 class IQuestionsPerson(IQuestionCollection):
372
373=== modified file 'lib/lp/answers/interfaces/questiontarget.py'
374--- lib/lp/answers/interfaces/questiontarget.py 2010-08-20 20:31:18 +0000
375+++ lib/lp/answers/interfaces/questiontarget.py 2011-04-26 21:01:43 +0000
376@@ -24,11 +24,11 @@
377 from canonical.launchpad import _
378 from lp.answers.interfaces.questioncollection import (
379 ISearchableByQuestionOwner,
380- QUESTION_STATUS_DEFAULT_SEARCH,
381 )
382-from lp.answers.interfaces.questionenums import (
383+from lp.answers.enums import (
384 QuestionSort,
385 QuestionStatus,
386+ QUESTION_STATUS_DEFAULT_SEARCH,
387 )
388 from lp.services.fields import PublicPersonChoice
389
390
391=== modified file 'lib/lp/answers/karma.py'
392--- lib/lp/answers/karma.py 2010-10-03 15:30:06 +0000
393+++ lib/lp/answers/karma.py 2011-04-26 21:01:43 +0000
394@@ -9,7 +9,7 @@
395 ]
396
397 from canonical.database.sqlbase import block_implicit_flushes
398-from lp.answers.interfaces.questionenums import QuestionAction
399+from lp.answers.enums import QuestionAction
400 from lp.registry.interfaces.distribution import IDistribution
401 from lp.registry.interfaces.person import IPerson
402 from lp.registry.interfaces.product import IProduct
403@@ -54,7 +54,7 @@
404 QuestionAction.SETSTATUS: None,
405 QuestionAction.COMMENT: 'questioncommentadded',
406 QuestionAction.ANSWER: 'questiongaveanswer',
407- QuestionAction.CONFIRM: None,# Handled in giveAnswer() and confirmAnswer()
408+ QuestionAction.CONFIRM: None,
409 QuestionAction.EXPIRE: None,
410 QuestionAction.REJECT: 'questionrejected',
411 QuestionAction.REOPEN: 'questionreopened',
412
413=== modified file 'lib/lp/answers/mail/handler.py'
414--- lib/lp/answers/mail/handler.py 2010-12-13 15:25:03 +0000
415+++ lib/lp/answers/mail/handler.py 2011-04-26 21:01:43 +0000
416@@ -17,7 +17,7 @@
417 from canonical.launchpad.interfaces.message import IMessageSet
418 from canonical.launchpad.webapp.interfaces import ILaunchBag
419 from lp.answers.interfaces.questioncollection import IQuestionSet
420-from lp.answers.interfaces.questionenums import QuestionStatus
421+from lp.answers.enums import QuestionStatus
422
423
424 class AnswerTrackerHandler:
425
426=== modified file 'lib/lp/answers/model/question.py'
427--- lib/lp/answers/model/question.py 2011-04-25 14:37:52 +0000
428+++ lib/lp/answers/model/question.py 2011-04-26 21:01:43 +0000
429@@ -72,16 +72,14 @@
430 InvalidQuestionStateError,
431 IQuestion,
432 )
433-from lp.answers.interfaces.questioncollection import (
434- IQuestionSet,
435- QUESTION_STATUS_DEFAULT_SEARCH,
436- )
437-from lp.answers.interfaces.questionenums import (
438+from lp.answers.interfaces.questioncollection import IQuestionSet
439+from lp.answers.enums import (
440 QuestionAction,
441 QuestionParticipation,
442 QuestionPriority,
443 QuestionSort,
444 QuestionStatus,
445+ QUESTION_STATUS_DEFAULT_SEARCH,
446 )
447 from lp.answers.interfaces.questiontarget import IQuestionTarget
448 from lp.answers.model.answercontact import AnswerContact
449
450=== modified file 'lib/lp/answers/model/questionmessage.py'
451--- lib/lp/answers/model/questionmessage.py 2011-03-27 21:40:32 +0000
452+++ lib/lp/answers/model/questionmessage.py 2011-04-26 21:01:43 +0000
453@@ -18,7 +18,7 @@
454 from canonical.database.enumcol import EnumCol
455 from canonical.database.sqlbase import SQLBase
456 from canonical.launchpad.interfaces.message import IMessage
457-from lp.answers.interfaces.questionenums import (
458+from lp.answers.enums import (
459 QuestionAction,
460 QuestionStatus,
461 )
462
463=== modified file 'lib/lp/answers/model/questionreopening.py'
464--- lib/lp/answers/model/questionreopening.py 2011-02-03 19:27:54 +0000
465+++ lib/lp/answers/model/questionreopening.py 2011-04-26 21:01:43 +0000
466@@ -20,7 +20,7 @@
467 from canonical.database.datetimecol import UtcDateTimeCol
468 from canonical.database.enumcol import EnumCol
469 from canonical.database.sqlbase import SQLBase
470-from lp.answers.interfaces.questionenums import QuestionStatus
471+from lp.answers.enums import QuestionStatus
472 from lp.answers.interfaces.questionreopening import IQuestionReopening
473 from lp.registry.interfaces.person import validate_public_person
474
475
476=== modified file 'lib/lp/answers/model/questionsperson.py'
477--- lib/lp/answers/model/questionsperson.py 2010-08-20 20:31:18 +0000
478+++ lib/lp/answers/model/questionsperson.py 2011-04-26 21:01:43 +0000
479@@ -11,9 +11,7 @@
480 from zope.interface import implements
481
482 from canonical.database.sqlbase import sqlvalues
483-from lp.answers.interfaces.questioncollection import (
484- QUESTION_STATUS_DEFAULT_SEARCH,
485- )
486+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
487 from lp.answers.interfaces.questionsperson import IQuestionsPerson
488 from lp.answers.model.answercontact import AnswerContact
489 from lp.answers.model.question import QuestionPersonSearch
490
491=== modified file 'lib/lp/answers/notification.py'
492--- lib/lp/answers/notification.py 2011-04-25 14:37:52 +0000
493+++ lib/lp/answers/notification.py 2011-04-26 21:01:43 +0000
494@@ -16,7 +16,7 @@
495 simple_sendmail,
496 )
497 from canonical.launchpad.webapp.publisher import canonical_url
498-from lp.answers.interfaces.questionenums import QuestionAction
499+from lp.answers.enums import QuestionAction
500 from lp.registry.interfaces.person import IPerson
501 from lp.services.mail.mailwrapper import MailWrapper
502 from lp.services.mail.notificationrecipientset import NotificationRecipientSet
503
504=== modified file 'lib/lp/answers/tests/emailinterface.txt'
505--- lib/lp/answers/tests/emailinterface.txt 2011-02-02 15:21:08 +0000
506+++ lib/lp/answers/tests/emailinterface.txt 2011-04-26 21:01:43 +0000
507@@ -165,7 +165,7 @@
508
509 And from the Needs information state:
510
511- >>> from lp.answers.interfaces.questionenums import QuestionStatus
512+ >>> from lp.answers.enums import QuestionStatus
513 >>> setQuestionStatus(question, QuestionStatus.NEEDSINFO)
514
515 >>> msgid = send_question_email(
516
517=== modified file 'lib/lp/answers/tests/test_question_workflow.py'
518--- lib/lp/answers/tests/test_question_workflow.py 2011-04-21 15:36:28 +0000
519+++ lib/lp/answers/tests/test_question_workflow.py 2011-04-26 21:01:43 +0000
520@@ -43,7 +43,7 @@
521 InvalidQuestionStateError,
522 IQuestion,
523 )
524-from lp.answers.interfaces.questionenums import (
525+from lp.answers.enums import (
526 QuestionAction,
527 QuestionStatus,
528 )
529
530=== modified file 'lib/lp/registry/browser/distributionsourcepackage.py'
531--- lib/lp/registry/browser/distributionsourcepackage.py 2011-03-29 22:34:04 +0000
532+++ lib/lp/registry/browser/distributionsourcepackage.py 2011-04-26 21:01:43 +0000
533@@ -55,7 +55,7 @@
534 QuestionTargetFacetMixin,
535 QuestionTargetTraversalMixin,
536 )
537-from lp.answers.interfaces.questionenums import QuestionStatus
538+from lp.answers.enums import QuestionStatus
539 from lp.app.browser.tales import CustomizableFormatter
540 from lp.app.enums import ServiceUsage
541 from lp.app.interfaces.launchpad import IServiceUsage
542
543=== modified file 'lib/lp/registry/browser/person.py'
544--- lib/lp/registry/browser/person.py 2011-04-09 02:23:46 +0000
545+++ lib/lp/registry/browser/person.py 2011-04-26 21:01:43 +0000
546@@ -206,7 +206,7 @@
547 from canonical.lazr.utils import smartquote
548 from lp.answers.browser.questiontarget import SearchQuestionsView
549 from lp.answers.interfaces.questioncollection import IQuestionSet
550-from lp.answers.interfaces.questionenums import QuestionParticipation
551+from lp.answers.enums import QuestionParticipation
552 from lp.answers.interfaces.questionsperson import IQuestionsPerson
553 from lp.app.browser.launchpadform import (
554 action,
555@@ -546,7 +546,7 @@
556 # Otherwise we return the normal view for a person's
557 # archive subscriptions.
558 return queryMultiAdapter(
559- (self.context, self.request), name ="+archivesubscriptions")
560+ (self.context, self.request), name="+archivesubscriptions")
561
562 @stepthrough('+recipe')
563 def traverse_recipe(self, name):
564@@ -4488,7 +4488,7 @@
565 team_string = team_names[0]
566 elif len(team_names) > 1:
567 verb = 'have been'
568- team_string= (
569+ team_string = (
570 ', '.join(team_names[:-1]) + ' and ' + team_names[-1])
571 full_message += '%s %s %s' % (team_string, verb, message)
572 self.request.response.addInfoNotification(full_message)
573@@ -4608,7 +4608,7 @@
574 title=_('These addresses are confirmed as being yours'),
575 source=SimpleVocabulary(terms),
576 ),
577- custom_widget = self.custom_widgets['VALIDATED_SELECTED'])
578+ custom_widget=self.custom_widgets['VALIDATED_SELECTED'])
579
580 def _unvalidated_emails_field(self):
581 """Create a field with a vocabulary of unvalidated and guessed emails.
582@@ -4630,7 +4630,7 @@
583 return FormFields(
584 Choice(__name__='UNVALIDATED_SELECTED', title=title,
585 source=SimpleVocabulary(terms)),
586- custom_widget = self.custom_widgets['UNVALIDATED_SELECTED'])
587+ custom_widget=self.custom_widgets['UNVALIDATED_SELECTED'])
588
589 def _mailing_list_subscription_type(self, mailing_list):
590 """Return the context user's subscription type for the given list.
591
592=== modified file 'lib/lp/registry/model/distribution.py'
593--- lib/lp/registry/model/distribution.py 2011-04-15 15:08:20 +0000
594+++ lib/lp/registry/model/distribution.py 2011-04-26 21:01:43 +0000
595@@ -69,9 +69,7 @@
596 from canonical.launchpad.interfaces.lpstorm import IStore
597 from canonical.launchpad.webapp.url import urlparse
598 from lp.answers.interfaces.faqtarget import IFAQTarget
599-from lp.answers.interfaces.questioncollection import (
600- QUESTION_STATUS_DEFAULT_SEARCH,
601- )
602+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
603 from lp.answers.interfaces.questiontarget import IQuestionTarget
604 from lp.answers.model.faq import (
605 FAQ,
606@@ -271,7 +269,7 @@
607 translationpermission = EnumCol(
608 dbName='translationpermission', notNull=True,
609 schema=TranslationPermission, default=TranslationPermission.OPEN)
610- active = True # Required by IPillar interface.
611+ active = True
612 max_bug_heat = Int()
613
614 def __repr__(self):
615@@ -469,7 +467,7 @@
616
617 if by_country and mirrors:
618 # Since country data is needed, fetch countries into the cache.
619- countries = list(Store.of(self).find(
620+ list(Store.of(self).find(
621 Country,
622 Country.id.is_in(mirror.countryID for mirror in mirrors)))
623
624@@ -610,9 +608,9 @@
625 # the bug is fixed.
626 ret = Store.of(self).find(
627 DistroSeries,
628- ParentDistroSeries.id==DistroSeries.parent_seriesID,
629- ParentDistroSeries.distributionID==self.id,
630- DistroSeries.distributionID!=self.id)
631+ ParentDistroSeries.id == DistroSeries.parent_seriesID,
632+ ParentDistroSeries.distributionID == self.id,
633+ DistroSeries.distributionID != self.id)
634 return ret.config(
635 distinct=True).order_by(Desc(DistroSeries.date_created))
636
637@@ -1545,7 +1543,6 @@
638 clauses.append(
639 "Archive.private = FALSE AND Archive.enabled = TRUE")
640
641-
642 query = ' AND '.join(clauses)
643 return Archive.select(
644 query, orderBy=orderBy, clauseTables=clauseTables)
645@@ -1875,10 +1872,12 @@
646 distroseries task than any other.
647 """
648 distributionID = self.id
649+
650 def weight_function(bugtask):
651 if bugtask.distributionID == distributionID:
652 return OrderedBugTask(1, bugtask.id, bugtask)
653 return OrderedBugTask(2, bugtask.id, bugtask)
654+
655 return weight_function
656
657
658
659=== modified file 'lib/lp/registry/model/product.py'
660--- lib/lp/registry/model/product.py 2011-04-12 23:25:45 +0000
661+++ lib/lp/registry/model/product.py 2011-04-26 21:01:43 +0000
662@@ -80,9 +80,7 @@
663 )
664 from canonical.lazr.utils import safe_hasattr
665 from lp.answers.interfaces.faqtarget import IFAQTarget
666-from lp.answers.interfaces.questioncollection import (
667- QUESTION_STATUS_DEFAULT_SEARCH,
668- )
669+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
670 from lp.answers.interfaces.questiontarget import IQuestionTarget
671 from lp.answers.model.faq import (
672 FAQ,
673@@ -1343,10 +1341,12 @@
674 any other.
675 """
676 productID = self.id
677+
678 def weight_function(bugtask):
679 if bugtask.productID == productID:
680 return OrderedBugTask(1, bugtask.id, bugtask)
681 return OrderedBugTask(2, bugtask.id, bugtask)
682+
683 return weight_function
684
685
686@@ -1386,11 +1386,13 @@
687 ).order_by(Desc(Product.datecreated))
688 if not eager_load:
689 return result
690+
691 def do_eager_load(rows):
692 owner_ids = set(map(operator.attrgetter('_ownerID'), rows))
693 # +detailed-listing renders the person with team branding.
694 list(getUtility(IPersonSet).getPrecachedPersonsFromIDs(
695 owner_ids, need_validity=True, need_icon=True))
696+
697 return DecoratedResultSet(result, pre_iter_hook=do_eager_load)
698
699 def get(self, productid):
700@@ -1651,7 +1653,6 @@
701
702 def search_sqlobject(self, text):
703 """See `IProductSet`"""
704- clauseTables = ['Product']
705 queries = ["Product.fti @@ ftq(%s) " % sqlvalues(text)]
706 queries.append('Product.active IS TRUE')
707 query = "Product.active IS TRUE AND Product.fti @@ ftq(%s)" \
708@@ -1673,7 +1674,6 @@
709 Person.id == Product._ownerID).config(
710 distinct=True).order_by(Product.title)
711
712-
713 # We only want Product - the other tables are just to populate
714 # the cache.
715 return DecoratedResultSet(results, operator.itemgetter(0))
716
717=== modified file 'lib/lp/registry/model/projectgroup.py'
718--- lib/lp/registry/model/projectgroup.py 2011-04-12 06:21:39 +0000
719+++ lib/lp/registry/model/projectgroup.py 2011-04-26 21:01:43 +0000
720@@ -43,10 +43,10 @@
721 IHasMugshot,
722 )
723 from canonical.launchpad.webapp.authorization import check_permission
724+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
725 from lp.answers.interfaces.faqcollection import IFAQCollection
726 from lp.answers.interfaces.questioncollection import (
727 ISearchableByQuestionOwner,
728- QUESTION_STATUS_DEFAULT_SEARCH,
729 )
730 from lp.answers.model.faq import (
731 FAQ,
732
733=== modified file 'lib/lp/registry/model/sourcepackage.py'
734--- lib/lp/registry/model/sourcepackage.py 2011-04-21 19:56:36 +0000
735+++ lib/lp/registry/model/sourcepackage.py 2011-04-26 21:01:43 +0000
736@@ -32,9 +32,7 @@
737 from canonical.launchpad.interfaces.lpstorm import IStore
738 from canonical.lazr.utils import smartquote
739 from canonical.launchpad.webapp.interfaces import ILaunchBag
740-from lp.answers.interfaces.questioncollection import (
741- QUESTION_STATUS_DEFAULT_SEARCH,
742- )
743+from lp.answers.enums import QUESTION_STATUS_DEFAULT_SEARCH
744 from lp.answers.interfaces.questiontarget import IQuestionTarget
745 from lp.answers.model.question import (
746 QuestionTargetMixin,
747
748=== modified file 'scripts/close-account.py'
749--- scripts/close-account.py 2010-11-08 12:52:43 +0000
750+++ scripts/close-account.py 2011-04-26 21:01:43 +0000
751@@ -15,7 +15,7 @@
752
753 from canonical.database.sqlbase import connect, sqlvalues
754 from canonical.launchpad.scripts import db_options, logger_options, logger
755-from lp.answers.interfaces.questionenums import QuestionStatus
756+from lp.answers.enums import QuestionStatus
757 from lp.registry.interfaces.person import PersonCreationRationale
758
759