Merge ~twom/launchpad:questions-about-reopening-storms into launchpad:master

Proposed by Tom Wardill
Status: Merged
Approved by: Tom Wardill
Approved revision: 3a69ef6eacb73c8a768bd0cb36ec78cf953598be
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~twom/launchpad:questions-about-reopening-storms
Merge into: launchpad:master
Diff against target: 91 lines (+36/-19)
2 files modified
lib/lp/answers/model/question.py (+2/-2)
lib/lp/answers/model/questionreopening.py (+34/-17)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+394547@code.launchpad.net

Commit message

Port questionreopening to Storm

To post a comment you must log in.
d2fd992... by Tom Wardill

Fix imports

Revision history for this message
Colin Watson (cjwatson) :
review: Approve
3a69ef6... by Tom Wardill

Timezones help

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/answers/model/question.py b/lib/lp/answers/model/question.py
2index a46cb06..8015c6f 100644
3--- a/lib/lp/answers/model/question.py
4+++ b/lib/lp/answers/model/question.py
5@@ -234,8 +234,8 @@ class Question(SQLBase, BugLinkTargetMixin):
6 # ReferenceSets, so use a list() property instead.
7 _messages = ReferenceSet(
8 'id', 'QuestionMessage.question_id', order_by='QuestionMessage.id')
9- reopenings = SQLMultipleJoin('QuestionReopening', orderBy='datecreated',
10- joinColumn='question')
11+ reopenings = ReferenceSet(
12+ 'id', 'QuestionReopening.question_id', order_by='datecreated')
13
14 @property
15 def messages(self):
16diff --git a/lib/lp/answers/model/questionreopening.py b/lib/lp/answers/model/questionreopening.py
17index 9cd78b4..9149006 100644
18--- a/lib/lp/answers/model/questionreopening.py
19+++ b/lib/lp/answers/model/questionreopening.py
20@@ -8,8 +8,13 @@ __metaclass__ = type
21 __all__ = ['QuestionReopening',
22 'create_questionreopening']
23
24+import pytz
25 from lazr.lifecycle.event import ObjectCreatedEvent
26-from sqlobject import ForeignKey
27+from storm.locals import (
28+ DateTime,
29+ Int,
30+ Reference,
31+ )
32 from zope.event import notify
33 from zope.interface import implementer
34 from zope.security.proxy import ProxyFactory
35@@ -18,28 +23,40 @@ from lp.answers.enums import QuestionStatus
36 from lp.answers.interfaces.questionreopening import IQuestionReopening
37 from lp.registry.interfaces.person import validate_public_person
38 from lp.services.database.constants import DEFAULT
39-from lp.services.database.datetimecol import UtcDateTimeCol
40-from lp.services.database.enumcol import EnumCol
41-from lp.services.database.sqlbase import SQLBase
42+from lp.services.database.enumcol import DBEnum
43+from lp.services.database.stormbase import StormBase
44
45
46 @implementer(IQuestionReopening)
47-class QuestionReopening(SQLBase):
48+class QuestionReopening(StormBase):
49 """A table recording each time a question is re-opened."""
50
51- _table = 'QuestionReopening'
52+ __storm_table__ = 'QuestionReopening'
53
54- question = ForeignKey(
55- dbName='question', foreignKey='Question', notNull=True)
56- datecreated = UtcDateTimeCol(notNull=True, default=DEFAULT)
57- reopener = ForeignKey(
58- dbName='reopener', foreignKey='Person',
59- storm_validator=validate_public_person, notNull=True)
60- answerer = ForeignKey(
61- dbName='answerer', foreignKey='Person',
62- storm_validator=validate_public_person, notNull=False, default=None)
63- date_solved = UtcDateTimeCol(notNull=False, default=None)
64- priorstate = EnumCol(schema=QuestionStatus, notNull=True)
65+ id = Int(primary=True)
66+
67+ question_id = Int(name='question', allow_none=False)
68+ question = Reference(question_id, 'Question.id')
69+ datecreated = DateTime(
70+ name='datecreated', allow_none=False, default=DEFAULT, tzinfo=pytz.UTC)
71+ reopener_id = Int(
72+ name='reopener', allow_none=False, validator=validate_public_person)
73+ reopener = Reference(reopener_id, 'Person.id')
74+ answerer_id = Int(name='answerer', allow_none=True, default=None,
75+ validator=validate_public_person)
76+ answerer = Reference(answerer_id, 'Person.id')
77+ date_solved = DateTime(allow_none=True, default=None, tzinfo=pytz.UTC)
78+ priorstate = DBEnum(
79+ name="priorstate", enum=QuestionStatus, allow_none=False)
80+
81+ def __init__(self, question, reopener, datecreated,
82+ answerer, date_solved, priorstate):
83+ self.question = question
84+ self.reopener = reopener
85+ self.datecreated = datecreated
86+ self.answerer = answerer
87+ self.date_solved = date_solved
88+ self.priorstate = priorstate
89
90
91 def create_questionreopening(

Subscribers

People subscribed via source and target branches

to status/vote changes: