[12:07] <sabdfl> night all
[12:19] <BradB|afk> sabdfl: hi, back for a bit, if you're still around.
[12:20] <sabdfl> got it working
[12:20] <sabdfl> created a ProductFileBugView
[12:20] <BradB|afk> sweet...what'd you do?
[12:20] <sabdfl> which as a createAndAdd method
[12:21] <sabdfl> which pulls out the form data and creates the bug, then creates the BugAssignment
[12:21] <sabdfl> can't commit it yet because it needs the datecreated field approved by stub
[12:21] <sabdfl> have emailed him, so it will likely be committed tomorrow
[12:21] <sabdfl> i think i could generalise this and have the same view class used for package as well as product bugs
[12:22] <BradB|afk> we've already got a view that does that.
[12:22] <BradB|afk> also, it's important that the person who added it is subscribed, which the existing factory already does.
[12:22] <BradB|afk> (BugFactory)
[12:23] <BradB|afk> it's a content factory actually
[12:23] <BradB|afk> and it works for both packages and products, whichever is provided.
[12:25] <BradB|afk> createAndAdd is just a method in the base AddView that ends up calling the factory
[12:31] <BradB|afk> ok, gotta really be away now, catch ya later
[02:25] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: datecreated on ProductBugAssignment and SourcePackageBugAssignment for Mark (patch-766)
[02:53] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Bounty comments (patch-767)
[04:52] <daf> elmo: is there an easy way with GPG to print a summary of a key I have in a file?
[04:52] <daf> elmo: (without importing it)
[04:55] <bob2> gpg --keyring foo.gpg --list-keys
[04:56] <daf> > gpg --no-default-keyring --keyring key.gpg --list-keys
[04:56] <daf> gpg: keyring `/home/daf/.gnupg/key.gpg' created
[04:56] <daf> bob2: tried that already :)
[04:56] <bob2> hrm, I did something like that to see the buildbot keys
[04:59] <daf> hmm:
[04:59] <daf> > gpg --no-default-keyring --keyring ./key.gpg --list-keys
[04:59] <daf> gpg: [don't know] : invalid packet (ctb=2d)
[04:59] <daf> gpg: keydb_search_first failed: invalid packet
[05:01] <daf> maybe 'cause the file is ascii-armoured or something
[09:09] <dilys> New Malone bug #40: "Batching module needs refactoring", submitted by Stuart Bishop
[09:09] <dilys> https://launchpad.ubuntu.com/malone/bugs/40
[09:14] <sabdfl> lifeless: ping?
[09:16] <sabdfl> stub: do you think we can set test_on_merge to run the page tests first, and if they work, then to go on and run the functional tests?
[09:16] <sabdfl> i'm trying to get my 30 second test runs back :-)
[09:17] <stub> Buy a faster laptop? ;)
[09:17] <stub> There is no reason we can't do it like that.
[09:18] <stub> I personally just run test.py directly ('python test.py test_pages' should do what you want)
[09:20] <sabdfl> can we make it a separate makefile target?
[09:20] <sabdfl> make pagetests?
[09:21] <stub> Sure
[09:25] <stub> My 'we' do you mean 'me', or you just looking for feedback?
[09:28] <sabdfl> good point, i'll do it, what i know about Makefiles approximates zero though :-)
[09:30] <stub> Just remember that Makefiles require real tabs. I'm happy to put it in if you want - it is two lines
[09:32] <sabdfl> got it, thanks!
[09:32] <sabdfl> really wasn't that hard :-)
[09:33] <sabdfl> but the real tab thing would have stumped me if vim hadn't Just Worked.
[09:33] <stub> So simple even management can do it ;)
[09:34] <sabdfl> har
[09:34] <sabdfl> "baz - the revision control system so simple even your boss could use it"
[09:44] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Fix archivelocation instantiation bug. (patch-768)
[10:18] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: bounty cleanup, add bugs directly to products, show bugs for a product (patch-769)
[10:24] <dilys> Merge to rocketfuel@canonical.com/buildbot--devel--0: Fix taxi up. (patch-66)
[10:38] <stub> Anyone got any tips for updating previously working page tests to cope with changes? That diff output is monstrous.
[10:51] <sabdfl> stub: that's why i've been banging the "elide everything except one tiny feature per page" drum
[10:52] <stub> It is the elisions that are causing me grief in this case - the diff output doesn't know how to handle them so the entire output is different. Makes finding the bits that need changing a problem :-(
[10:52] <stub> Need a more intelligent diff
[10:56] <stub> Ohh... I think I can fix it.
[11:20] <SteveA> stub: yeah, we need to make pagetest diffs understand <BLANKSPACE> and ...
[11:20] <stub> Can '...' appear anywhere, or just on a blank line?
[11:21] <SteveA> it should be able to appear anywhere
[11:21] <SteveA> for example, to demonstrate that a particular header exists, but you don't care about the value
[11:25] <sabdfl> is there any good way to know the len() of a resultset?
[11:25] <sabdfl> or even just whether or not it actually contains a result?
[11:27] <sabdfl> spiv: around?
[11:33] <SteveA> does len() on it work?  If not, I think it has a count() method or something like that
[11:35] <sabdfl> Kinnison: morning
[11:35] <sabdfl> hi doko
[11:40] <Kinnison> sabdfl: Good morning
[11:40] <Kinnison> it makes hearing the alarm a might difficult :-(
[11:41] <sabdfl> wondered what had happened to you :-)
[11:41] <sabdfl> at least you should have enough rest to smack the domination bits into order :-)
[11:41] <Kinnison> Well; it's certainly time to write more unit-tests
[11:45] <sabdfl> bummer. can't access count from the page template
[11:45] <sabdfl> SteveA: any other suggestions?
[11:45] <doko> hi sabdfl
[11:45] <sabdfl> hiya doko
[11:45] <sabdfl> doko: see my mails?
[11:46] <doko> yes, thanks, will answer tonight. one mail yes, any more mails?
[11:47] <sabdfl> hmm... thought there was one yesterday, one today
[11:48] <sabdfl> SteveA: can i tal:define something as false, then, iterate of the resultset, and during the iteration, redefine that as true?
[11:48] <sabdfl> how do i tal:define something as false?
[11:50] <sabdfl> or true for that matter?
[11:52] <SteveA> you can tal define things to any python value using tal:define="foo python:False"
[11:52] <SteveA> but, that sounds like a case of programming in a page template
[11:52] <SteveA> maybe this logic can be moved to the view's class?
[11:53] <stub> tal:define="foo nothing"
[11:54] <stub> tal:define="foo string:whatever" for true, or tal:define="foo string:" for false as well
[11:54] <SteveA> sabdfl: it is a bug in sqlos.  sqlos things that ISelectResults has a __len__, but it does not.  it has a count()
[11:56] <SteveA> to work around, add this in some zcml file somewhere:
[11:56] <SteveA>   <class class="sqlobject.main.SelectResults">
[11:56] <SteveA>     <require permission="zope.Public" attributes="count" />
[11:56] <SteveA>   </class>
[11:56] <SteveA> add a comment saying "XXX: working around bug in sqlos.  remove when fixed upstream." and a suitable name and date :-)
[12:39] <Kinnison> python question:
[12:39] <Kinnison> from foo import bar as wibble
[12:39] <Kinnison> is that correct?
[12:40] <SteveA> if that's what you want
[12:40] <Kinnison> I think it is
[12:40] <SteveA> it is syntactically correct
[12:40] <Kinnison> cool
[12:40] <Kinnison> from canonical.sourcerer.deb.version import Version as DebianVersion
[12:40] <Kinnison> is what I want to say
[12:41] <Kinnison> to get 'DebianVersion' as canonical.sourcerer.deb.version.Version
[12:41] <SteveA> yes.  c.s.d.v.Version will be bound as DebianVersion in the module's namespace
[12:41] <Kinnison> coolie
[12:43] <Kinnison> For implementing a compare function for [] .sort() what does one use as the equivalent of the perl <=> operator?
[12:44] <SteveA> don't implement a compare function
[12:44] <SteveA> it is slow, and hard to read
[12:44] <SteveA> use the schwarzian transform idiom instead
[12:44] <Kinnison> explain...
[12:44] <SteveA> ok
[12:46] <SteveA> >>> foo = ['a4', 'b2', 'c6', 'd1'] 
[12:46] <SteveA> >>> L = [(item[1] , item) for item in foo] 
[12:46] <SteveA> >>> L.sort()
[12:46] <SteveA> >>> foo = [obj for sortkey, obj in L] 
[12:46] <SteveA> >>> foo
[12:46] <SteveA> ['d1', 'b2', 'a4', 'c6'] 
[12:46] <SteveA> >>>
[12:46] <SteveA> In this case, I wanted to sort the contents of `foo` by the second character
[12:46] <SteveA> that's where `item[1] ` comes from in the second line of code
[12:47] <Kinnison> Hmm
[12:47] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: popup work (patch-770)
[12:47] <SteveA> this is usually much clearer than using a comparison function, and vastly faster to execute
[12:48] <Kinnison>             templist = [ DebianVersion(foo) for foo in outpkgs[k]  ] 
[12:48] <Kinnison>             templist.sort()
[12:48] <Kinnison>             outpkgs[k]  = [ str(foo) for foo in templist ] 
[12:48] <stub> bah
[12:49] <Kinnison> SteveA: that kind of thing?
[12:49] <Kinnison> hang on
[12:49] <SteveA> Kinnison: in the first part of the transform, you want to get a list of tuples (sortkey, original)
[12:49] <Kinnison> sorting tuples only considers the first element?
[12:50] <SteveA> then you sort the list of tuples
[12:50] <SteveA> sorting a list of tuples onsiders the first element before the second
[12:50] <Kinnison> then the operation is unuseful
[12:50] <Kinnison> the original objects are incomparable
[12:50] <SteveA> you don't need all this in python 2.4, by the way
[12:51] <sabdfl> what's the python2.4 syntax?
[12:51] <Kinnison> I think that since the common-case is for the list to contain two or three elements; I'll put up with the slowness of a sort function
[12:51] <SteveA> Kinnison: should still work, if the sort keys are all unique
[12:52] <SteveA> >>> L = [(4, 1j), (2, 4j)] 
[12:52] <SteveA> >>> L.sort()
[12:52] <SteveA> >>> L
[12:52] <SteveA> [(2, 4j), (4, 1j)] 
[12:52] <SteveA> >>> 4j < 1j
[12:52] <SteveA> Traceback (most recent call last):
[12:52] <SteveA>   File "<stdin>", line 1, in ?
[12:52] <SteveA> TypeError: cannot compare complex numbers using <, <=, >, >=
[12:52] <SteveA> >>>
[12:52] <SteveA> Kinnison: okay.  Please write it as a function with docstring, and not a lambda
[12:52] <SteveA> (most of the examples use lambda)
[12:52] <Kinnison> I don't understand lambda so I don't use it
[12:53] <sabdfl> Kinnison: well said
[12:53] <Kinnison> cmp(o1,o2) does the right thing wrt. o1.__comp__(o2) yes?
[12:53] <Kinnison> s/comp/cmp/
[12:54] <SteveA> sort() will take a 'key' keyword argument
[12:54] <SteveA> you mean __cmp__
[12:54] <SteveA> implementing __cmp__ is invariably an arse
[12:55] <SteveA> implementing __eq__ and __ne__ and __le__ __and __ge__ is simpler
[12:55] <Kinnison> It's not my type I'm comparing
[12:55] <SteveA> (or, whatever subset of those you need)
[12:55] <SteveA> oh, ok
[12:55] <Kinnison> I'm using the sourceror debian-version tools
[12:55] <SteveA> then, yeah, cmp(x, y)
[12:55] <Kinnison> def compare_packages(p1,p2):
[12:55] <Kinnison>     """Compare packages p1 and p2 by their version; using Debian rules"""
[12:55] <Kinnison>     v1 = DebianVersion(p1.version)
[12:55] <Kinnison>     v2 = DebianVersion(p2.version)
[12:55] <Kinnison>     return cmp(v1,v2)
[12:55] <SteveA> __cmp__ was a mistake in python
[12:55] <Kinnison> is what I just wrote then
[12:56] <SteveA> looks good.  the python style guide recommends a space after commas. 
[12:56] <Kinnison> right
[12:56] <Kinnison> Is there an equiv of 'static' to mark a single def as being non-exported?
[12:57] <SteveA> what do you mean "non exported" ?
[12:57] <SteveA> you can import anything from anywhere
[12:57] <Kinnison> oh okay
[12:57] <SteveA> the python convention is to start something with an _
[12:57] <Kinnison> gotcha
[12:57] <SteveA> to say it is "private"
[12:58] <SteveA> sabdfl: http://www.sourcekeg.co.uk/www.python.org/peps/pep-0290.html#simplifying-custom-sorts
[12:59] <SteveA> or even, http://www.python.org/peps/pep-0290.html#simplifying-custom-sorts
[12:59] <SteveA> which is the same, but from the canonical source
[01:04] <sabdfl> SteveA: nice, thanks
[01:28] <stub> Anyone have any rules about what a valid version number is? I'm thinking same rules as the productname.
[01:28] <Kinnison> version numbers are very well defined in debian-policy
[01:28] <Kinnison> assuming that's what you're after
[01:28] <stub> yup.
[01:29] <Kinnison> canonical.sourceror.deb.version.Version is an implementation of debian versions
[01:29] <Kinnison> you can look there for regexps etc
[01:29] <stub> excellent
[01:30] <Kinnison> sourcerer even
[01:31] <stub> upstream is the upstream package's version number (the 2.4beta2 of python-2.4beta2) ?
[01:31] <Kinnison> yep
[01:31] <Kinnison> epoch:upstream-debian
[01:31] <Kinnison> where 'debian' is not permitted to contain hyphens IIRC
[01:31] <Kinnison> and epoch must be numeric
[01:32] <Kinnison> (or absent)
[01:32] <stub> Bad Scott - embedding utf8 characters in source code :-(
[01:33] <Kinnison> is that bad?
[01:34] <stub> It assumes everyone on the team has editors set to the correct encoding or autodetecting editors.
[01:34] <Kinnison> so long as they leave the utf-8 chars alone it'll be fine ;-)
[01:34] <Kinnison> testDomination (canonical.lucille.tests.test_domination.TestDominator) ... ok
[01:35] <Kinnison> Now to move on to the tool to move superceded packages to death row
[01:36] <sabdfl> yay!
[01:37] <sabdfl> Kinnison: i have a doubt about my decision to remove the superceded / removed items from the Publishing tables
[01:37] <sabdfl> based on malone
[01:37] <Kinnison> sabdfl: Oh?
[01:37] <sabdfl> it's a bit hazy, hear me out
[01:38] <sabdfl> a use case question is "is there a packagerelease that was uploaded to distrorelease x that fixes a given bug"?
[01:38] <sabdfl> now, we have bugpackageinfestation, so we can say "that packagerelease fixed this bug" 
[01:39] <sabdfl> but if that packagerelease has been superceded we don't necessarily know if it was ever uploaded to distrorelease c
[01:39] <sabdfl> x
[01:39] <Kinnison> that's a compelling use-case for something
[01:39] <Kinnison> Okay; we add one more PackagePublishingStatus
[01:39] <Kinnison> we add 'REMOVED' which is chronologically after PENDINGREMOVAL
[01:40] <sabdfl> don't do it yet
[01:40] <Kinnison> We never delete from PackagePublishing or SourcePackagePublishing
[01:40] <Kinnison> would that solve things?
[01:40] <sabdfl> i think it's worth thinking through the consequences
[01:40] <Kinnison> The primary consequence is that the publishing tables *will* become massive
[01:41] <sabdfl> we are working our way through malone, and this interaction between assignments "fix it in this package" and infestation "it's fixed in that package release" is a big grey area
[01:41] <sabdfl> yes, i don't know that we *have* to bloat the Publishing tables to achieve the goal
[01:41] <sabdfl> there may be a more elegant way
[01:42] <Kinnison> Okay; another idea just popped into my head
[01:42] <Kinnison> we have a 'Morgue' table which contains records which passed out of publishing
[01:42] <Kinnison> We only stash the sourcepackagereleases there
[01:42] <Kinnison> so the Morgue just says this sourcepackagerelease was in this distrorelease
[01:42] <Kinnison> and possibly a datetime it was removed
[01:43] <Kinnison> How does that sound?
[01:43] <sabdfl> we have to really understand the rest of the problem before i try to solve this bit
[01:44] <sabdfl> an extra REMOVED status is one solution
[01:44] <Kinnison> I think the Morgue table is preferable
[01:44] <sabdfl> ok
[01:44] <Kinnison> We should try to keep the publishing tables as small as possible
[01:44] <sabdfl> agreed
[01:44] <sabdfl> don't implement the Morgue just yet
[01:44] <Kinnison> I won't
[01:45] <Kinnison> will you want the solution decided before wednesday; or can we put it on the agenda for then?
[01:46] <sabdfl> not even by then
[01:53] <sabdfl> we won't need to decide this on wednesday, maybe during es-conf
[01:53] <Kinnison> Ok okay :-)
[01:53] <Kinnison> lucille is modular enough that whatever decision we make will be simple to do in her
[01:53] <sabdfl> super
[01:53] <sabdfl> zzzuuuuupppa
[02:00] <stub> SteveA: Are we running Zope3X or trunk?
[02:15] <stub> Wah!
[02:16] <stub> sabdfl: Source packages don't have unique names, so we have no unique human readable id to represent them :-(
[02:18] <sabdfl> stub: i know, it's a pain, but in the real world multiple distros all have the same name for totally different packages
[02:20] <stub> sabdfl: Can I get away with making UNIQUE(SourcePackage.sourcepackagename, SourcePackage.distro) ?
[02:20] <sabdfl> stub: alas not
[02:20] <sabdfl> because the source package in a given distro can change
[02:21] <sabdfl> for example, in warty (ubuntu) the sourcepackage foo might be different to the sourcepackage in hoary
[02:21] <stub> They are different sourcepackages though - 'hoary foo' and 'warty foo'
[02:22] <stub> Oh - that is distrorelease
[02:23] <stub> Well - if this is the case, there is no way for a user to select a sourcepackage.
[02:24] <stub> The only way of identifying a particular sourcepackage unambiguously is by its numeric database key.
[02:28] <SteveA> stub: we're running a zopex3 trunk from several weeks ago
[02:28] <stub> sabdfl: I suspect a sourcepackage should be linked to a distrorelease instead of a distribution. Then we can add the require unique constraint and identify a sourcepackage using the combination of its distrorelease.name and sourcepackagename.name and users won't have to guess
[02:29] <stub> SteveA: Ta.
[02:29] <SteveA> stub: for the next update, I'd like us to move to using a .deb, although I need to check whether anyone is still using macosX or something that it won't work with.
[02:29] <SteveA> basically, the .deb that will be in hoary
[02:30] <stub> SteveA: As long as it doesn't delay fixes we make to upstream getting back to our codebase.
[02:31] <stub> I think at the moment we are encouraged to work around Z3 problem rather than fixing them. It would be good if it is easier to sync upstream with our dev version.
[02:32] <SteveA> stub: yeah, we'll be able to generate a new .deb easily
[02:32] <SteveA> I've been talking to matthias about it.  he's produced some .debs that I need to look at
[02:44] <sabdfl> stub: afraid not
[02:45] <sabdfl> because the source package can change during the production of a distrorelease
[02:45] <sabdfl> when we start a new release, for example, we might just be using the debian package
[02:45] <sabdfl> then we modify it
[02:45] <sabdfl> and what we get is a new sourcepackage
[02:46] <sabdfl> and if the modified one fails to build on an architecture, then we will have TWO different sourcepackages in the same distrorelease at the same time
[02:46] <sabdfl> one with binary packages in one architecture, and a second in the others
[02:46] <stub> If we have two sourcepackages in the same distribution with the same name, it is useless because nothing can tell them apart except for a rather meaningless integer id.
[02:48] <stub> Or at least useless as far as users cannot choose one. This is a show stopper for Malone's sourcepackagebug assignment, as you could end up with a choice between assigning a bug to 'Ubuntu firefox', 'Ubuntu firefox' or 'Ubuntu firefox' and no way to decide between them.
[02:53] <sabdfl> well, exactly
[02:57] <sabdfl> what's the purpose behind "foo = property(foo)"?
[02:59] <stub> Makes a function call look like an attribute
[03:00] <sabdfl> ok
[03:00] <sabdfl> is it a Python thing?
[03:00] <SteveA> yes
[03:00] <SteveA> property(getter_func, setter_func, deleter_func, docstring)
[03:01] <sabdfl> ok
[03:01] <sabdfl> thanks
[03:01] <stub> sabdfl: So we have to drop sourcepackagebugassignment then?
[03:01] <SteveA> you can have any of those _funcs as None to say "this isn't possible"
[03:01] <sabdfl> *cough* what?
[03:01] <sabdfl> stub?
[03:01] <stub> It is impossible for a user to select a sourcepackage unambiguously.
[03:01] <SteveA> so, a read-only property is foo = property(get_foo).  write-only is foo = property(None, set_foo)
[03:02] <sabdfl> stub: right. one solution is to assign the bug to the tuple of (sourcepackagename, distro)
[03:02] <sabdfl> in other words "fix this damn bug in the package called foo in ubuntu"
[03:03] <stub> But that isn't unique either. We might have 100 rows in Sourcepackage with that name and distro
[03:03] <sabdfl> not likely
[03:03] <sabdfl> bugs would just show up against all of them
[03:04] <stub> So we would have to create a number of sourcepackagebugassignments instead of one, to match the number of matching rows in sourcepackage ?
[03:05] <sabdfl> no
[03:05] <sabdfl> just one assignment
[03:05] <stub> If we want to represent 'package named blah in ubuntu' we could do it by making the sourcepackagebugassignment link to sourcepackagename and distro
[03:05] <sabdfl> yes
[03:05] <sabdfl> "assign to the tuple..."
[03:06] <sabdfl> but im not quite ready for that yet
[03:06] <sabdfl> just assign to the *current package called foo"
[03:06] <sabdfl> which we can do
[03:06] <sabdfl> there is a big grey area between "assignment" and "infestation"
[03:06] <sabdfl> which we need to sort out
[03:06] <sabdfl> it will take a while, mainly using it and figuring out what works
[03:07] <stub> So we need to somehow determine the 'current' sourcepackages and only present them.
[03:07] <sabdfl> the soyuz guys have done a lot of work on this
[03:07] <sabdfl> figuring out which source package to display by default
[03:07] <stub> ok. I'll chat to them next week.
[03:09] <sabdfl> stub: where are you running into this?
[03:10] <sabdfl> in the popup selector?
[03:11] <stub> Yes - the select a sourcepackage widget. The current one is broken too - we just didn't have suitable sampledata to demonstrate it.
[03:14] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: popup search facility (patch-771)
[03:17] <sabdfl> SteveA: is there any way to turn a value into a dbschema ENUM object?
[03:18] <sabdfl> for example, given 40, I want the dbschema.BugSeverity item which has 40 as its vlaue
[03:18] <sabdfl> stub: we should first answer the questions on how we want it to behave
[03:18] <sabdfl> with regard to derivative distros
[03:19] <sabdfl> say someone has a derivative of ubuntu
[03:19] <sabdfl> kubuntu
[03:19] <sabdfl> or gnoppix
[03:19] <sabdfl> and they file a bug on the apache package in there, which is unchanged
[03:19] <sabdfl> it's basically the ubuntu apache package
[03:19] <sabdfl> should that bug show up for us, the ubuntu team? or for the gnoppix team?
[03:20] <sabdfl> if we have a clear answer to that we can implement it easily
[03:22] <stub> My gut feeling is that even though the apache package is unchanged in the derivative, bugs are still specific to that package/distro combination. For example, the bug might be that the unchanged apache just doesn't work under gnoppix
[03:26] <SteveA> sabdfl: BugSeverity.items[40] 
[03:28] <sabdfl> stub: well, my gut feel is that we should at least *record* where the bug report came from
[03:28] <sabdfl> so that we have the option to filter one way or another
[03:28] <sabdfl> but more than that, i'm ot certain of
[03:28] <sabdfl> i want to get malone working in the "single distro" sense before es-conf
[03:28] <sabdfl> es-conf will largely be about the derivative management process
[03:29] <sabdfl> for soyuz, lucille, malone, etc
[03:32] <stub> We still have the 'multiple identical rows in sourcepackage' issue. If we can guarentee that the sourcepackage.sourcepackagename is unique among all the 'current' sourcepackages (however we determine that), then the interface will cope for the time being.
[03:33] <sabdfl> i dont think this is so bad, actually stub
[03:34] <sabdfl> we need a slick interface where the dev can say "this isn't a bug in THIS sourcepackage, it's in THAT sourcepackage"
[03:34] <sabdfl> a reassignment
[03:34] <sabdfl> these packages are usually tightly related
[03:34] <sabdfl> the maintainer will know exactly what they are
[03:36] <stub> Mmm.... I still suspect that (sourcepackage.sourcepackagename, sourcepackage.distro) should be unique, as I thought sourcepackagerelease was suppose to capture snapshots.
[03:41] <sabdfl> tat's a lot closer, but i think it's still possible for there to be a completely different source package in the same distro with the same name
[03:41] <Kinnison> SteveA: is there an existing python class for parsing a configuration file from a string in memory or should I use ConfigParser and StringIO ?
[03:44] <stub> sabdfl: We need a real use case for that. I suspect that it shouldn't be allowed to happen. The only case I can see at the moment for that would be if different people were maintaining  the warty release of a package and the hoary release of a package.
[03:44] <Kinnison> SteveA: this is for stop-gap config until we normalise it into database columns
[03:45] <sabdfl> stub: es-conf :-)
[03:45] <sabdfl> for the moment, display them all, and display maintainer and distro
[03:45] <sabdfl> should be enough to distinguish them
[03:46] <debonzi> hi sabdfl, are you up to date with soyuz status? How does it look like?
[03:46] <sabdfl> debonzi: haven't had a look in a while
[03:46] <sabdfl> is it running on mawson with current data from hoary, via gina?
[03:46] <stub> ok. Can I enforce that? UNIQUE(maintainer, distro, sourcepackagename)? Or should we just trust none of the ubuntu package maintainers will break the interface?
[03:46] <debonzi> sabdfl, should be
[03:46] <SteveA> Kinnison: ConfigParser and StringIO sounds pretty reasonable
[03:47] <sabdfl> debonzi: i'll take a look
[03:47] <Kinnison> SteveA: okies
[03:47] <Kinnison> SteveA: at least I already know how to use that pair :-)
[03:48] <debonzi> sabdfl, right.. we know still a lot to do but we whould like to have some feed back 
[03:49] <stub> breaks the existing popup implementation though, because I don't have a unique human readable key to put in the textbox :-(
[03:50] <SteveA> stub: did you write the sessioning stuff for zope3?
[03:50] <stub> SteveA: yes
[03:50] <SteveA> stub: was it discussed at all to have a way of asking if there is a session, without actually starting one?
[03:51] <SteveA> right now, even looking to see if there is a session causes one to be created, and the cookie sent to the browser
[03:52] <stub> is there a use case for not having that behavior?
[03:54] <SteveA> well, using sessions for auth, and not wanting the overhead for the anonymous
[03:54] <stub> There is a method to do it in the implementation (getRequestId), but it isn't exposed in the interface
[03:54] <SteveA> right
[03:54] <SteveA> I noticed that
[04:01] <SteveA> also, the RAMSessionDataStorage thing is rather b0rked
[04:02] <SteveA> it doesn't seem to be tied into transactions at all
[04:02] <SteveA> so, it gives somewhat random results when used
[04:02] <stub> I assume this for the auth system, which is storing credentials in the session, so it can say 'there is no client id so I must be anonymous'
[04:02] <SteveA> at least, that's what I think was going on
[04:02] <SteveA> yes
[04:02] <stub> Really? The MappingStorage should be handling that.
[04:03] <SteveA> yeah, I thought it would do, but it didn't seem to
[04:03] <SteveA> I'll look into it later.  I've set things up to use the main zodb for launchpad
[04:04] <stub> If you get different results between the ZODB and the RAM storage there is a bug, since they should work identically.
[04:06] <BradB> sabdfl: did you see my comments about BugFactory?
[04:06] <sabdfl> BradB: no, where?
[04:06] <BradB> i was about a minute too late yesterday :)
[04:07] <BradB> sabdfl: basically, we need to ensure that all bugs are created with BugFactory
[04:07] <BradB> e.g. when a bug is created from a product
[04:07] <BradB> because BugFactory Does The Right Thing (e.g. adds the submitter as a Cc)
[04:07] <sabdfl> oh, ok
[04:08] <BradB> it handles both package and product adds
[04:08] <sabdfl> the submitter should become the owner and that's a special kind of cc anyway
[04:08] <sabdfl> we need to make owners, and assignment maintainers, visible
[04:08] <BradB> sabdfl: we're not special-casing that though anymore (if the owner *really* wants, they can unsubscribe)
[04:09] <sabdfl> hmm... seems to me that "owner" is a pretty fricken' special case :-)
[04:09] <SteveA> stub:  I think it is something to do with the ram storage not paying proper attention to transactions
[04:10] <SteveA> or rather, the ram storage in the sessions code 
[04:10] <SteveA> it isn't a problem with ram storage per se
[04:10] <BradB> sabdfl: in any case, BugFactory should be used, for whatever given rules we have as a bug gets created (rather than maintaining two or three forks of bug creation code)
[04:11] <sabdfl> ok
[04:11] <sabdfl> i'll take a look, couldyou file a bug on me please?
[04:12] <BradB> i haven't yet seen your code so i can't be specific, but i guess i can file a bug that says "BugFactory should be used for creating bugs"
[04:18] <stub> SteveA: If it isn't tying into the transaction system correctly, then it needs someone more familiar with the ZODB guts than me to look at it. Maybe there is a dead chicken to sacrifice to register the connection with the transaction system that has to be done for each request.
[04:18] <dilys> New Malone bug #41: "BugFactory should be used to create bugs", submitted by Brad Bollenbach
[04:18] <dilys> https://launchpad.ubuntu.com/malone/bugs/41
[04:18] <SteveA> stub: I think there might be.  ZODB stuff will be changing a bit soon, anyway.
[04:19] <SteveA> jim has the "multi-databases" stuff to add, and I really really want to get a lot of the zodb-as-root assumptions out of the code
[04:20] <stub> Mmm.... just annoying because I distinctly remember testing it, ensuring requests went to seperate threads and the results made sense.
[04:20] <SteveA> the threading works
[04:21] <SteveA> I think the transactional stuff doesn't
[04:21] <SteveA> it may be that it works inside a standardly-setup zope3
[04:21] <SteveA> but not launchpad
[04:22] <Kinnison> is there a python class which takes usefully represented time deltas?
[04:22] <Kinnison> datetime.timedelta appears to suck
[04:22] <SteveA> timedelta doesn't care about presentation
[04:22] <SteveA> it isn't in its job description
[04:22] <Kinnison> right
[04:22] <Kinnison> so is there something which does?
[04:22] <SteveA> there's datetime parsing stuff in zope3 somewhere
[04:23] <Kinnison> I want to be able to cope with deltas like "2d" "14h9m" etc
[04:23] <SteveA> and also a 3rd party class that is being considered for inclusion in the stanard lib
[04:23] <SteveA> I suggest coding that yourself -- doesn't look too complex
[04:24] <Kinnison> I'm happy to code it myself; I was just wondering if I would be duplicating effort unnecessarily
[04:24] <SteveA> timedelta(days=2), timedelta(hours=14, minutes=9)
[04:24] <SteveA> (just checking you know about the timedelta constructor)
[04:25] <Kinnison> Still need to pull apart the string then; okay
[04:26] <SteveA> there's something in schooltool's ical stuff to parse the ical format for durations
[04:26] <SteveA> probably not what you want, though
[04:31] <Kinnison> not really; no
[04:31] <Kinnison> Since I can control the format easily; I'll just split it up for now
[04:32] <SteveA> https://moin.conectiva.com.br/DateUtil
[04:33] <SteveA> doesn't have anything for timedelta though
[05:39] <sabdfl> BradB: was that your patch that changed the product selector?
[05:39] <sabdfl> stevea: i think we need a test that looks for "import pdb; pdb.set_trace()" because I see someone just committed that in some code :-)
[05:39] <sabdfl> i've done that before
[05:42] <BradB> sabdfl: how did the selector change? I don't think I've changed anything with it recently.
[05:42] <sabdfl> must be stub
[05:43] <stub> Mine. I'm trying to learn enough javascript so it isn't broken ;)
[05:43] <sabdfl> i noticed that in a recent (this afternoon) merge, the tests went from POST'ing an integer ("3") to a name ("arch-mirrors")
[05:44] <sabdfl> stub: that's going to break for sure, since product is only unique inside a project :-)
[05:45] <BradB> hm, that means the vocabulary was changed
[05:46] <BradB> that would have been caught with the previous pagetest suite, but oh well.
[05:48] <stub> sabdfl: That is no more broken than it was yesterday - it has never specified (project,product) but just product
[05:48] <stub> But will need to be fixed.
[05:52] <dilys> New Malone bug #42: "IMaloneBug needs to go away", submitted by Brad Bollenbach
[05:52] <dilys> https://launchpad.ubuntu.com/malone/bugs/42
[05:53] <sabdfl> the diff went from specifying an id (3) to a name (arch-mirrors)
[05:53] <sabdfl> 42!
[05:54] <sabdfl> stub: ^
[05:54] <BradB> woohoo, i filed #42
[05:54] <sabdfl> BradB: it was caught by the forcefield, because I didn't elide the fields, just the decoration
[05:55] <sabdfl> so stub had to change the test accordingly
[05:55] <BradB> ah
[05:55] <sabdfl> :-)
[05:57] <stub> no wonder there is so much crap javascript - all the online references suck majorly ;-(
[05:57] <BradB> i'm getting sick of seeing IMaloneBug, so in my next merge it's dead
[06:48] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: mainly code cleanup, in particular, replaced all mentions of 'MaloneBug' with simply 'Bug' (patch-772)
[06:59] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Sourcepackage popup (patch-773)
[08:10] <stub> elmo: pqm hung if you are around
[08:17] <sabdfl> stub: another dogfood code update tomorrow?
[08:17] <stub> yup
[08:18] <sabdfl> ok
[08:18] <sabdfl> malone is starting to shape up nicely
[08:18] <sabdfl> big push for es-conf so we can get the team straight onto it
[08:32] <Kinnison> Well; I'm off now. have fun guys
[08:32] <debonzi> Kinnison, see you
[08:49] <BradB> sabdfl: hm, we'll need owner columns on assignments too
[08:53] <BradB> and colours in the bug listing!
[08:53] <BradB> stub: ping
[09:30] <BradB> sabdfl: ping
[11:17] <BradB> elmo: ping
[11:36] <BradB> pqm loops are Just No Fun