launchpad-dev team mailing list archive
-
launchpad-dev team
-
Mailing list archive
-
Message #01454
Re: [Branch ~launchpad-pqm/launchpad/devel] Rev 9762: [r=intellectronica][ui=none][bug=452070] Optimise
Bjorn Tillenius wrote:
> On Fri, Oct 23, 2009 at 10:13:14PM -0000, noreply@xxxxxxxxxxxxx wrote:
>> Merge authors:
>> Muharem Hrnjadovic (al-maisan)
>> Related merge proposals:
>> https://code.launchpad.net/~al-maisan/launchpad/clog-oops-452070/+merge/13789
>> proposed by: Muharem Hrnjadovic (al-maisan)
>> review: Approve - Tom Berger (intellectronica)
>> ------------------------------------------------------------
>> revno: 9762 [merge]
>> committer: Launchpad Patch Queue Manager <launchpad@xxxxxxxxxxxxxxxxx>
>> branch nick: launchpad
>> timestamp: Fri 2009-10-23 23:09:49 +0100
>> message:
>> [r=intellectronica][ui=none][bug=452070] Optimise
>> <distro>/+source/<package>/+changelog pages in order to prevent OOPSs
>> removed:
>> lib/lp/soyuz/templates/sourcepackagerelease-change-summary.pt
>> modified:
>> lib/canonical/launchpad/webapp/tales.py
>> lib/lp/bugs/doc/bug.txt
>> lib/lp/bugs/interfaces/bug.py
>> lib/lp/bugs/model/bug.py
>> lib/lp/registry/browser/distributionsourcepackage.py
>> lib/lp/registry/configure.zcml
>> lib/lp/registry/doc/sourcepackage.txt
>> lib/lp/registry/model/distributionsourcepackage.py
>> lib/lp/soyuz/browser/configure.zcml
>> lib/lp/soyuz/browser/sourcepackagerelease.py
>> lib/lp/soyuz/stories/soyuz/xx-distributionsourcepackagerelease-pages.txt
>> lib/lp/soyuz/templates/distributionsourcepackagerelease-changes.pt
>
>
>> === modified file 'lib/lp/bugs/doc/bug.txt'
>> --- lib/lp/bugs/doc/bug.txt 2009-07-08 03:14:59 +0000
>> +++ lib/lp/bugs/doc/bug.txt 2009-10-22 15:39:19 +0000
>> @@ -37,6 +37,34 @@
>> ...
>> NotFoundError: 'Unable to locate bug with nickname +bugs.'
>>
>> +It is also possible to retrieve a number of bugs by specifying the bug numbers
>> +of interest.
>> +
>> + >>> result_set = bugset.getByNumbers([6, 1234])
>> + >>> print result_set.count()
>> + 1
Hello Bjorn,
how are things? Hope you're doing well. Thank you very much for pointing
out improvements to the branch at hand.
> What's a bug number? Don't we usually talk about bug ids?
I touched base with Deryck before adding this method to BugSet and
that's one of the names he proposed that I liked.
> Also, it's highly confusing that you specify two ids/numbers, yet you
> get only one result!
>
>
>> +
>> + >>> [the_bug_found] = result_set
>> + >>> print the_bug_found.title
>> + Firefox crashes when Save As dialog for a nonexistent window is closed
>> +
>> + >>> result_set = bugset.getByNumbers([6, 4321, 1])
>> + >>> print result_set.count()
>> + 2
>
> Again, you get one bug less then you asked for. Does it always return
> one result less than you ask for?
Sorry for the misleading test. The changes in the enclosed diff fix this.
>> +
>> + >>> second_bug_found = result_set[1]
>
> Where do the results get ordered? Are you guaranteed that you will get
> this bug as the second result?
The getByNumbers() method did not order the returned result set.
The changes in the enclosed diff fix this.
>> + >>> print second_bug_found.title
>> + Firefox does not support SVG
>
> How about showing the actual ids of the bugs returned? It's quite hard
> to associating a title with an id.
Done.
>> === modified file 'lib/lp/bugs/model/bug.py'
>> --- lib/lp/bugs/model/bug.py 2009-08-26 01:54:39 +0000
>> +++ lib/lp/bugs/model/bug.py 2009-10-22 10:33:00 +0000
>> @@ -33,7 +33,7 @@
>> from sqlobject import SQLMultipleJoin, SQLRelatedJoin
>> from sqlobject import SQLObjectNotFound
>> from storm.expr import And, Count, In, LeftJoin, Select, SQLRaw, Func
>> -from storm.store import Store
>> +from storm.store import EmptyResultSet, Store
>>
>> from lazr.lifecycle.event import (
>> ObjectCreatedEvent, ObjectDeletedEvent, ObjectModifiedEvent)
>> @@ -49,6 +49,7 @@
>> from canonical.launchpad.interfaces.hwdb import IHWSubmissionBugSet
>> from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
>> from canonical.launchpad.interfaces.librarian import ILibraryFileAliasSet
>> +from canonical.launchpad.interfaces.lpstorm import IStore
>> from canonical.launchpad.interfaces.message import (
>> IMessage, IndexedMessage)
>> from canonical.launchpad.interfaces.structuralsubscription import (
>> @@ -1627,6 +1628,14 @@
>>
>> return bugs
>>
>> + def getByNumbers(self, bug_numbers):
>> + """see `IBugSet`."""
>> + if bug_numbers is None or len(bug_numbers) < 1:
>
> Can len(bug_numbers) ever be less than 0?
>
>> + return EmptyResultSet()
>> + store = IStore(Bug)
>> + result_set = store.find(Bug, In(Bug.id, bug_numbers))
>> + return result_set
>> +
>>
>> class BugAffectsPerson(SQLBase):
>> """A bug is marked as affecting a user."""
>
>
>> === modified file 'lib/lp/registry/model/distributionsourcepackage.py'
>> --- lib/lp/registry/model/distributionsourcepackage.py 2009-09-16 04:31:39 +0000
>> +++ lib/lp/registry/model/distributionsourcepackage.py 2009-10-22 15:04:42 +0000
>> @@ -408,6 +412,23 @@
>> 'BugTask.distribution = %s AND BugTask.sourcepackagename = %s' %
>> sqlvalues(self.distribution, self.sourcepackagename))
>>
>> + @staticmethod
>> + def getPersonsByEmail(email_addresses):
>> + """[(EmailAddress,Person), ..] iterable for given email addresses."""
>> + if email_addresses is None or len(email_addresses) < 1:
>> + return EmptyResultSet()
>> + # Perform basic sanitization of email addresses.
>> + email_addresses = [
>> + address.lower().strip() for address in email_addresses]
>> + store = IStore(Person)
>> + origin = [
>> + Person, Join(EmailAddress, EmailAddress.personID == Person.id)]
>> + # Get all persons whose email addresses are in the list.
>> + result_set = store.using(*origin).find(
>> + (EmailAddress, Person),
>> + In(Lower(EmailAddress.email), email_addresses))
>> + return result_set
>
> Why is getPersonsByEmail a static method on DistributionSourcePackage???
> What does it have to do with source packages? Why is it not in
> PersonSet?
I did email Curtis because that's where the method obviously belongs to.
He did not get back to me (probably too busy due to a sprint) so I left
it where it is with the intention to touch base with him again and
re-factor this code in the process.
> Where are the tests for this method?
I tested this branch on dogfood and made sure that getPersonsByEmail()
works correctly. Besides, the branch was quite big already and I was
anxious not to inflate it further.
The branch that relocates the method in question to PersonSet will have
the tests you requested.
Best regards
--
Muharem Hrnjadovic <muharem@xxxxxxxxxx>
Public key id : B2BBFCFC
Key fingerprint : A5A3 CC67 2B87 D641 103F 5602 219F 6B60 B2BB FCFC
=== modified file 'lib/lp/bugs/doc/bug.txt'
--- lib/lp/bugs/doc/bug.txt 2009-10-22 15:39:19 +0000
+++ lib/lp/bugs/doc/bug.txt 2009-10-26 17:10:37 +0000
@@ -40,6 +40,9 @@
It is also possible to retrieve a number of bugs by specifying the bug numbers
of interest.
+The method ignores bug numbers not found in the database. That's why the
+result set below has only one element.
+
>>> result_set = bugset.getByNumbers([6, 1234])
>>> print result_set.count()
1
@@ -48,13 +51,13 @@
>>> print the_bug_found.title
Firefox crashes when Save As dialog for a nonexistent window is closed
- >>> result_set = bugset.getByNumbers([6, 4321, 1])
+ >>> result_set = bugset.getByNumbers([6, 1])
>>> print result_set.count()
2
- >>> second_bug_found = result_set[1]
- >>> print second_bug_found.title
- Firefox does not support SVG
+ >>> print [(bug.id, bug.title[:40]) for bug in result_set]
+ [(1, u'Firefox does not support SVG'),
+ (6, u'Firefox crashes when Save As dialog for ')]
If no bug numbers are specified an empty result set is returned.
=== modified file 'lib/lp/bugs/model/bug.py'
--- lib/lp/bugs/model/bug.py 2009-10-22 10:33:00 +0000
+++ lib/lp/bugs/model/bug.py 2009-10-26 16:22:36 +0000
@@ -1634,7 +1634,7 @@
return EmptyResultSet()
store = IStore(Bug)
result_set = store.find(Bug, In(Bug.id, bug_numbers))
- return result_set
+ return result_set.order_by('id')
class BugAffectsPerson(SQLBase):
Attachment:
signature.asc
Description: OpenPGP digital signature
References