[12:00] spiv: interesting, I did not know that [12:00] Try select * from emailaddress where emailaddress.person = person.id; [12:00] daf: hmmm [12:00] daf: put it inside sql.py :-P [12:01] (or select emailaddress.* from emailaddress inner join person on (emailaddress.person = person.id); :) [12:01] carlos: I could do, but... [12:01] daf: It was a joke [12:01] And EXPLAIN claims they're identical. [12:01] spiv: ok [12:02] spiv: so the inner join and the from tablea, tableb... will be always the same? [12:02] we don't get any improvement? [12:03] I'm getting identical query plans according to EXPLAIN ANALYZE, with the same speeds. [12:03] (on a ridiculously small dataset, though) [12:04] Anyway, you can specifiy INNER JOIN explicitly with SQLObject if you want to, it's just a bit evil: [12:04] don't worry [12:04] I will do some performance test before without sqlobject [12:04] EmailAddress.select('', clauseTables='select emailaddress.* from emailaddress inner join person on (emailaddress.person = person.id)'), I think ;) [12:05] Oh, actually, I think that'll put an extra comma in, breaking it. Damn. Oh well :) [12:05] that's really ugly :-D [12:05] Er, I mean: [12:05] EmailAddress.select('', clauseTables='inner join person on (emailaddress.person = person.id)'), I think ;) [12:05] Silly copy & paste. [12:06] Anyway, it's probably worth checking all our uses of clauseTables to make sure we haven't made the same mistake everywhere :) [12:07] spiv: I'm fixing Rosetta ones [12:07] spiv: wow, nice hack :) [12:07] carlos: Great :) [12:12] carlos: looks like you're King of PQM again :) [12:12] daf: I know :-( [12:12] daf: seems like my postfix problem broke it again [12:12] oh, how did that happen? [12:13] daf: I have as relay host my home machine [12:13] and I'm not in my home now [12:13] so all my requests were rejected [12:13] and I notice it after a day [12:14] thus, I sent merge requests and star-merge before the merge was done [12:14] After sending a merge request, aren't you supposed to wait for a rejection/success message from PQM before doing a merge from rocketfuel to $myarchive? [12:15] carlos: I don't understand -- if the emails didn't go anywhere, how can they have affected things? [12:16] daf: I think they do anything to my local archive [12:16] spiv: the problem is that I sent it before going to sleep [12:16] and I did the star-merge when I woke up [12:16] without checking it [12:17] carlos: Ah. I see :) [12:17] daf: if that's not the case, It's not my fault then :-D [12:18] The submit-arch-merge script doesn't touch your local archive. [12:19] then it's not my fault [12:19] It simmply sends a gpg-signed message saying "tla star-merge $mytree rocketfuel@canonical.com" [12:22] Bug 2003 resolved: Implement edit personal information [12:28] cprov: did you reused the code we have in rosetta to edit the people personal information? (name, displayname, password, etc...) [12:37] daf: I sent a merge request with some sqlobject changes so some queries should be faster [12:40] carlos: cool [12:40] carlos: no ! [12:40] cprov: :-( [12:40] carlos: should I use ? [12:41] cprov: If you are changing those fields.. [12:41] carlos: i know this is really bad ! [12:43] carlos: maybe we need to have a brief meeting soon, about reusable code produced by rosetta continuos Sprint , what do you think? [12:45] cprov: well, we don't have much more code to share (outside our Rosetta sqlobjects ) [12:46] carlos: anyway, what you just said to me about Edit Person is interesting [12:47] but I talked about that already (not sure if you were present, I suppose you were not) [12:47] daf: Btw, I've attached a patch to 2030 [12:47] carlos: what i have implemented is poor, untested, quick&dirty solution and so far from what should be a good component [12:48] cprov: my code is not the best one out there but works :-) [12:48] rosetta/prefs [12:48] (but launchpad is now broken to see it) [12:48] cprov: is something like the bugzilla form to change the user data + password === spiv sleeps [12:48] carlos: the same as mine, i just suggesting that if there was just one it could be much better :) [12:48] spiv: night [12:49] carlos: I see [12:49] cprov: we know that we only need one, but for the alpha we need it inside rosetta [12:49] spiv: night [12:50] carlos: of course, the rosetta team is feeling the Release Pain for a long [01:01] !lilo:*! Happy big 24, Matt. :) [01:05] carlos: daf : see you later, good night [01:20] good night [01:51] night all === sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has left #launchpad [] === stub [~stub@dsl-246.248.240.220.dsl.comindico.com.au] has joined #launchpad === daf [daf@muse.19inch.net] has joined #launchpad === kiko-afk is now known as kiko [04:31] man [04:31] I need sleep === npmccallum [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad [05:22] New bug 2031 for Launchpad/Launchpad: PQM success or failure messages being bounced? [05:47] New bug 2032 for Project Admin/General: Broken functionality at lists.ubuntu.com === stub [~stub@dsl-246.248.240.220.dsl.comindico.com.au] has joined #launchpad === justdave [~dave@24.247.63.44.gha.mi.chartermi.net] has joined #launchpad === justdave_ [~justdave@24.247.63.44.gha.mi.chartermi.net] has joined #launchpad === justdave_ is now known as justdave === stub [~stub@dsl-246.248.240.220.dsl.comindico.com.au] has joined #launchpad === ddaa [~david@nemesis.xlii.org] has joined #launchpad [09:13] hi stub [09:14] Morning [09:14] lifeless was interested in auth stuff too === sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad [09:17] lifeless was going to write up his requirements for auth [09:18] ok. I'm mainly interested in what permissions we are using (zope.Public, zope.View? canonical.Foo?) and recommended ways for running the dev environment at this time (add some principals to principals.zcml that happen to match rows in the Person table?) [09:19] right now, we're using two permissions: zope.Public (the pass-through always public permission) and launchpad.AnyPerson [09:20] launchpad.AnyPerson is granted to any Person in the database [09:20] you need to run the database to run the dev environment [09:20] you need to be using Persons that are in the database in your dev environment [09:20] there is a script to add a person to the database [09:21] don't use principals.zcml [09:22] soon (most likely at the sprint that starts next week), we'll be adding a more interesting security system that allows permissions to be granted based on the contents of the database [09:23] ok - so for right now nothing more granular than those two permissions. [09:23] I think that is pretty much all I need for now - I'll give it a go :-) [09:23] ok [09:24] with developing malone, right now, you're getting it working properly given the changes to launchpad while you've been away. [09:24] you mentioned that you'd done some stuff on the "bug assignment" changes [09:25] can we talk a bit about what the state of malone is, and what you intend to do next? [09:26] we also need to talk about portlets === SteveA pings stub [09:33] Yo [09:34] re: BugAssignments - a SourcepackageBugAssignment and a ProductBugAssignment now has an assignee, which will default to the owner of the Sourcepackage or the Product. [09:35] I suppose we'll need a UI to change assignments [09:36] and, this is a point where being able to mail out would be good [09:36] Yup - the existing edit pages for the bug assignments will pick up the new field. I just need to update the tempates to display it. [09:36] Oh... and a widget to select an assignee (like the existing sourcepackage selector and product selectors). [09:37] I think the next thing is the email interface - I might do the soyuz portlets first since they should be quick. === stub is on the fence [09:37] doing the soyuz portlets next would be good, because of the sprint next week [09:38] we'll be doing serious work on the soyuz ui [09:38] At least outgoing notifications. Handling replies and embedded commands are not an absolute requirement for the functionality. [09:38] yep. I'd like outgoing mail to be done transactionally, using the maildir stuff in zope3 [09:38] If you get some sort of a widget that lets you efficiently select a sourcepackage from a list of 1000, I'll be happy. [09:38] as it doesn't make sense to send out mail on a failed transaction [09:39] Yup - nice I don't have to implement transactional email like I did on the last project :-) [09:40] 1000 isn't all that much to store, hidden, in a webpage [09:41] so, some simple javascript should help there [09:41] if we need 10000, then we'll need to consider fancy javascript-does-web-request kind of things [09:41] Rendering 1000 items using tal takes time though. [09:41] don't render them with tal [09:41] use python [09:42] ok. Doing it that way should plug in happily to the Malone forms (so I shouldn't have to worry about efficient controls for now). [09:43] yeah. It would be good to have a list of the controls in the application that will need some scalability work === SteveA wonders about putting up a ScalableWidgets wiki page [09:44] We are going to need something more complex than that eventually though. I have pages where you select the 'product', and from that it should restrict the allowed 'sourcepackage' values to something reasonable. And the selected 'sourcepackage' should restrict the binarypackage. And the binary package should restrict the binarypackage.version. [09:44] hmm... co-dependent widgets [09:44] But for now I won't worry about that. [09:45] I can *imagine* the kind of javascript that would allow a bunch of widgets to collaborate like that, with a shared context object [09:45] it feels like it is do-able [09:47] with outgoing mail, where will mail templates be put? [09:47] will they be text files with %{varname}s replacement in them, then re-wrapped? [09:48] in one of my own projects, emails have replacements in ALL CAPITAL LETTERS, but that's for mails that are editable by end-users. [09:49] Hmm... last time I implemented something like this I just sent HTML mail and used page templates [09:50] I think text files with %(foo)s substitution is a good start. [09:50] I'm pretty sure a lot of our target audience will hate HTML mail [09:50] It would be funny but :) === SteveA wonders why he used {} in the substituation syntax [09:50] there's a textwrap library (by greg ewing iirc) in python 2.3 [09:51] so, I have malone tasks so far as: [09:51] 1. security: make malone with with zope.Public and launchpad.AnyPerson [09:51] 2. malone portlets for soyuz [09:51] 3. transactional outgoing mail for malone [09:51] 4. bug assignee stuff [09:51] what's next? [09:51] stuff so that we can use it for dogfood with launchpad perhaps? [09:51] Bug assignee needs to be simultaneuous with 1 - it is a mandatory field so forms won't work without it. [09:52] I think that is it pretty much [09:52] is there a notion of dependency between bugs in malone? [09:53] Yes. It is not being used for any of the rendering or searches though. [09:53] You can enter the information, but it ain't used for anything. [09:53] a simple text page listing the bugs that a bug depends on would be useful for launchpad [09:54] Yup - that and all the other useful reports :-) [09:54] I think we'd be able to start using it for launchpad then, but I'll need to check the wiki page [09:55] I'm not sure that the other reports are so essential. Well, other than "what bugs are assigned to me" [09:55] Hmm... now that I think of it... the current schema only supports a bug being dependent on one other :-( [09:55] Might need to scrap the existing dependant column and add a new table if out use of Bugzilla is anything to go by [09:56] c/out/our [09:56] what about attachments -- is malone up to date with the new way of representing attachments and messages? [09:56] can attachments be added TTW ? [09:57] No. No attachments at the moment. I've got some bugs in Bugzilla about that. The first dependancy was 'migrate librarian to launchpad' which has been done. [09:57] So I guess that is another item for the list. [09:58] do you know the bug number? [09:59] I suppose we need to work out how to do the librarian stuff in a development environment [09:59] Bugs # 1921 - 1924 [09:59] (although they are actually issues ;) ) === lalo [~lalo@200.102.200.224] has joined #launchpad [09:59] 1921, 1922, 1923 and 1924 ? [09:59] Yup === SteveA finds it odd to consider opaque ids in a sequence ;-) [10:00] I submitted the bugs in sequence :-) [10:00] any ideas about making librarian work in a dev environment? [10:00] I'm getting worried about the weight of the dev environment [10:01] Yup - we define the high level interface and don't use it. [10:01] is there a way to make a dependency on librarian optional for launchpad? [10:01] Erm... we define the high level interface and don't use librarian... just a stub. [10:01] I suppose when I hook up zodb, zodb can be used as a librarian for development [10:02] does that sound sensible or not? [10:02] (haha, stub said "stub") [10:02] We have setfile, getfile, geturl etc. Just need to make them store the files somewhere (fs is fine), and generate URL's that launchpad serves === stub punches SteveA [10:02] ok, fs sounds ok [10:03] can I add that to the malone work, or do you want spiv to do that? [10:03] We then cross our fingers and hope the real librarian works the same way in production (or perhaps we should test ;) ) [10:03] I'm happy to do it, since I have what is needed in my head. If someone else has time though it would be great. [10:04] ok, I have you on the hook for writing a spec for the stub librarian [10:04] I don't think any other launchpad stuff is using it except for Malone? [10:04] well, buttress [10:05] and soyuz will eventually I guess [10:05] but malone first of all, sure [10:06] so... [10:06] [10:06] ok. People should have a look at the bug and add any thoughts before it is coded. [10:06] 1. security: make malone with with zope.Public and launchpad.AnyPerson [10:06] 2. bug assignee stuff [10:06] 3. malone portlets for soyuz [10:06] 4. transactional outgoing mail for malone [10:06] 5. make attachments work properly, #1921 #1922 #1923 #1924 [10:06] 6. write spec for a stub librarian that uses the fs for the dev environment [10:06] 7. maybe implement stub librarian spec [10:06] 8. making a bug dependent on many others [10:06] 9. dependency report [10:06] [10:06] does that get us to the point where we can use malone for dogfood? [10:07] we may want justdave to cook up a script to import open bugs [10:07] I think 5,6,7 are in the wrong order [10:07] what's a good order? [10:07] 6,7,5 (where 7 is done if 6 looks simple) [10:08] ok [10:11] what else before starting project dogfood? [10:11] Nothing I can think of, but I've said that before... [10:12] Oh... private stuff [10:12] ok. I'll add this list to a bugzilla bug. [10:12] we don't need private stuff to dogfood on launchpad [10:12] Is that needed for dogfood, or post dogfood? [10:12] k [10:12] that's needed for when we use the golden database [10:17] Other stuff is more general launchpad issues such as bug 2005 [10:18] New bug 2033 for Launchpad/Malone: Tasks that get us to eating our own dogfood [10:18] I take it dilys is a bot :-) [10:19] dilys: say hi to stub. [10:19] I think dilys only has advanced AI features when daf is awake and at his keyboard ;-) [10:21] stub: please add whatever dependencies make sense on that bug, and add comments to track progress / issues / whatever [10:21] ok [10:25] https://www.warthogs.hbd.com/ScalableWidgets [10:26] I've noted the requirements you mentioned, and also that the Malone source-package widget needs some of this [10:26] Please add to this page for what you know about malone, maybe being a bit more specific about the requirements for the widgets than I have been [10:33] New bug 2034 for Launchpad/Launchpad: allow 'count' method of SelectResults in SQLOS [10:37] oops.... https://bugzilla.warthogs.hbd.com/bugzilla/showdependencygraph.cgi?id=2033 [10:37] justdave: Known bugzilla probem? [10:46] argh... what a scam [10:47] nominet, the .*.uk monopoly introduced new terms a few months ago. they now want 35 quid to transfer any .uk domain names. [11:06] wow, that's a funky graph [11:06] no, haven't seen it do that before. [11:09] printk("Help, too many green dots!") [11:10] heh. was just going to ask, is that like every bug in the system on that chart? :) === carlos [~carlos@167.Red-83-38-95.pooles.rima-tde.net] has joined #launchpad === sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has left #launchpad [] === sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad [11:11] morning [11:11] hey carlos [11:14] morning carlos, sabdfl [11:28] Moaning, er, morning ;) [12:10] SteveA: hi to stub [12:10] (morning) [12:11] I think dilys is a little slow [12:11] X-) [12:12] well, those advanced AI features cost a lot of processing time [12:15] hmm [12:15] ConfigurationError: ('No such file', '/home/carlos/Work/dists/launchpad/lib/canonical/soyuz/templates/person-join.pt') [12:17] should I comment the reference and commit? [12:17] yeah [12:18] it would be nice to find who's responsible so you can chastise them :) === ddaa [~david@nemesis.xlii.org] has joined #launchpad [12:24] daf: I suppose it was Celso [12:25] daf: he was working yesterday on it [01:28] stub: do you want that I execute the import test with the new indexes you sent to the mailing list? [01:28] to generate a new report [01:30] carlos: If you have time it would be great. Saves me some research, and empirical data is probably better anyway ;) [01:31] ok [01:31] stub: I can work in other things at the same time [01:40] hmm [01:41] seems like some changes I did yesterday broke rosetta :-? === carlos is working on it now [01:41] sqlobject.main.SQLObjectNotFound: The RosettaPOMessageID by alternateID msgid=u'_About' does not exist [01:42] spiv: we had it as RosettaPOMessageID.selectBy(msgid=u'_About') [01:42] and we check later if it's empty or not, is there an easy way to do it with the alternateID without catching the exception? [01:43] well, I suppose that it's the "normal" way to do it now... [01:44] Yeah, it is. [01:44] For the same reason that Foo.get(id) should raise an exception if there is no row with that ID. [01:45] hmm, the code looks cleaner now, catching this exception :-) [01:45] bonus :) [01:45] def poTemplate(self, name): [01:45] - results = RosettaPOTemplate.byName(name) [01:45] - count = results.count() [01:45] - [01:45] - if count == 0: [01:45] + try: [01:45] + return RosettaPOTemplate.byName(name) [01:45] + except SQLObjectNotFound: [01:46] raise KeyError, name [01:46] - elif count > 1: [01:46] - raise RuntimeError("Duplicate PO file name.") [01:46] - else: [01:46] - return results[0] [01:46] That looks much better :) [01:47] definitely :) [01:47] we have lots of similar code [01:47] daf: I'm fixing it now [01:48] where is byName defined? [01:48] daf: by setting alternateID in the column def. [01:48] carlos: You haven't updated the SQLObjectGuide? I can do that now if you like? [01:48] aha [01:48] spiv: no, It's a pending task [01:49] spiv: I'm busy now, so if you can do it now, it's yours [01:49] Ok, I will. [01:49] I think there's some code which follows the old pattern which can't be changed so easily [01:49] because the uniqueness is conditional [01:50] daf: I only added the alternateID when it's unique in the database [01:50] carlos: of course [01:50] hmmm and I did a mistake with poTemplate (we have a bug with the old code also) a template name is not unique [01:51] I'm just saying that we can't fix all our code in the same way [01:51] it's only unique inside a product [01:51] true [01:53] daf: the database has it still incorrectly === carlos prepares a patch [01:53] thanks === daf goes to have breakfast while PQM deliberates over his merge request [01:56] stub: could you apply this?: ALTER TABLE POTemplate DROP CONSTRAINT potemplate_name_key; [01:59] Can I put that in with the indexes? [01:59] stub: sure [01:59] I will send you the final list [02:00] daf: could I remove xxxRosetta... classes? [02:08] please do [02:10] ok [02:32] stub: a new import of a po file (all rows are inserted) with your indexes took about 4 extra minutes than with the indexes I sent :-O, I need to do more testing to get an average [02:34] Don't worry - I think that answers my question. It is trivial to change indexes later anyway since there are no dependancies outside postgresql. [02:35] I'll stick in the indexes and the dropped key in a minute. [02:35] stub: wait, I'm doing more tests [02:35] stub: that's the time needed to create new rows [02:35] I'm doing now the tests using those indexes [02:35] oic [02:36] daf: rocketfuel has now the needed patch so the alternateID works now as it should [02:42] cool [02:45] hi spiv [02:45] I got started on the twisted process handling thing. [02:45] Going well, I hope? [02:46] I'm doing the simple case right now, running a command whose exit status is expected to be 0, and which yields no interesting output. [02:46] I'm mostly putting up the infrastructure at this point... [02:47] So, the plan is the codes which calls pyarch expects to be in a thread, that thread will sleep until the process is finished. [02:47] Process handling is done in the reactor of course. [02:48] The process can terminate two ways: [02:48] 1. Everything's okay, unblock the thread. [02:48] 2. Something went wrong, raise ExecProblem in the thread. [02:49] Do you have hints about the right way to do that? [02:51] Sounds like a job for Deferred. What concerns me is that I am not sure that twisted provides any way to blocking communication... [02:52] I might just pass the exit status out to the thread through a synchronized queue, but there might be something more twistedish. [03:00] lalo: canonical.rosetta.pofile.DEBUG does not exists [03:00] carlos: indeed [03:00] oh, I'll be damned, I didn't commit the patch that removes that reference [03:01] lalo: also, the poparser is broken now [03:01] and this morning was working [03:01] broken? [03:01] transl = self.translation_factory(header=self.header, [03:01] File "/home/carlos/Work/dists/launchpad/lib/canonical/rosetta/pofile_adapters.py", line 412, in __call__ [03:01] raise POInvalidInputError [03:01] canonical.rosetta.pofile.POInvalidInputError: Po file: invalid input on entry at line 277 [03:01] lalo: I was timing it and the only difference between executions is a star-merge [03:02] gnome-applets-2.0.pot [03:02] spiv: hints? Do you think a synchronized queue is the way to go? Can you think of a better way? [03:04] #: battstat/battstat_applet.c:391 [03:04] #, c-format [03:04] msgid "%d minute (%d%) remaining" [03:04] msgid_plural "%d minutes (%d%) remaining" [03:04] msgstr[0] "" [03:04] msgstr[1] "" [03:04] lalo: the line #277 is the c-format [03:11] "The rosetta-users@lists.ubuntu.com mailing list has -1 request(s) waiting for your consideration" - ?!? [03:12] daf: we don't need the ProxyPassReverse configuration, just the ProxyPass configuration [03:13] Zope 3 itself takes care of the ProxyPassReverse stuff [03:13] daf: who is using it already? :-P [03:13] but, it does no harm [03:13] ddaa: just a sec === SteveA goes for lunxh [03:14] ddaa: Yeah, getting the thread to block on a Queue.Queue is the simplest way. [03:14] carlos: I'm looking into it, let me merge [03:15] spiv: thanks [03:15] Deferreds aren't something you'd want to pass between threads, btw. [03:16] I'll keep that in mind... but do not believe i understand most of what I say when I speak twisted... :-) [03:16] There has been some discussion on the mailing list about better facilities for interacting with threads, but nothing in the code yet, and I'm not sure it would help this particular case anyway. [03:17] Or rather, I don't think it would offer significant benefits over using the standard Queue module in this case ): [03:17] er, :) [03:17] I'm going to have more elaborate requirements soon. [03:18] Next step is passing one chunk of output in addition to the status. [03:18] ddaa: fwiw, I get the feeling that you think Twisted is more complex than it really is (which is a pretty common reaction), but that's just a guess :) [03:18] (Of course, my perspective on the complexity of twisted is somewhat biased, I guess) [03:18] Then multiple chunks... I will end up with a simple type-based protocol through the queue. [03:19] Right, a queue definitely sounds like the right thing, then. [03:19] lalo: ok, thanks [03:19] Twisted is a big chunk. I'm beginning to grok it, but I ask you in case I'm missing some useful facilities. [03:20] The main thing I think you might be missing about Twisted atm is Deferreds. They are actually really simple, although it seems hard to explain this to people ;) [03:21] he, that's why I was asking "would a Deferred be more appropriate" [03:21] Right :) [03:22] Ho btw, how can I know what are the reserved names in ProcessProtocol? [03:23] atm I'm making all the instance variable privates to be safe, but that's almost certainly overkill. [03:24] The twisted API doc seriously lacks documentation for instance variables... [03:24] Just connected and transport, I think. [03:24] (aside from the actual method names, of course ;) [03:25] Is there a particular convention in Twisted for "instance variable names which are safe to use in subclasses"? [03:25] Nope. === carlos goes to have lunch [03:26] It hasn't proven to be a problem, which I find interesting. [03:26] daf: the canonical wiki is moving to wiki.canonical.com [03:27] carlos: I didn't know that [03:27] daf: that's why I tell you it :-) [03:29] daf: the draft is ok for me [03:29] see you later!! [03:29] later :) [04:31] Bug 2030 resolved: After authenticate, launchpad fails with a system error [04:35] stub: psycopg.ProgrammingError: ERROR: date/time value "current" is no longer supported [04:35] UPDATE POMsgIDSighting SET inlastrevision = 't', datelastseen = 'CURRENT_TIMESTAMP AT TIME ZONE ''UTC''' WHERE id = 79 [04:36] Yup - looks like SQL object is quoting it as a string. [04:38] I recall trying it too and failing - it will need a patch to do properly, unless someone works out a string that postgresql parses as 'current time in utc' [04:38] Maybe try sqlobject.sqlbuilder.SQLConstant, or something like that? === carlos looking at postgres documentation [04:39] Sounds promising - I'm not very well read in the sqlobject api. I couldn't see anything in the postgres docs that would help before, but another pair of eyeballs is good. [04:40] Or else: [04:41] class NowUTC: [04:41] Oh... soyuz had a similar issue and they are just passing datetime.utcnow() (with XXX: comments to fix later) [04:41] def __sqlrepr__(self): return "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'" [04:41] ? === stub gives spiv a banana [04:41] (untested!) [04:42] But that's ok, I'll bet that banana is untested too ;) [04:42] You wouldn't want it after I've tested it ;) [04:42] then ? datetime.utcnow()? [04:43] carlos: Try spiv's approach [04:43] should I create that class? or where is it defined? [04:44] carlos: gnome-applets imports correctly for me [04:44] carlos: You would have to create it (canonical.database somewhere I guess). Pass an instance of it through in the constructor and see if it works. [04:45] lalo: I'm fixing a bug I introduced to be able to test it [04:45] ok [04:45] stub: I prefer if you suggest me a place instead of choose one random place under database :-P [04:46] canonical.database.__init__.py ? [04:47] ok [04:47] I'd vote for canonical.database.constants, but that's just because I tend not to put code in __init__.py files... [04:48] We probably want a single instance of it as a module global rather than having to construct an instance of it every time. [04:48] spiv: Sounds good. I'm not fussed :-) [04:51] then? canonical.database.constants? [04:51] and how could be done the single instance? [04:51] a singleton? [04:52] daf: ? === kiko [~kiko@200-206-134-238.async.com.br] has joined #launchpad [04:54] actually, a singleton isn't necessary [04:54] morning [04:54] hi kiko! [04:54] https://rosetta.ubuntulinux.org/projects/gnome/gnome-panel [04:54] raises an error, daf :) [04:54] yeah, it does [04:55] kiko: morning [04:55] how are you guys doing? [04:55] daf, the only comment on the release would be having something about bugreporting in the Caveat section, but since you already have a Bug section there.. [04:56] kiko: hmm, maybe I could amalgamate those two [04:57] carlos: the single instance could be done just with having "nowUTC = NowUTC()" in the module [04:58] daf: so, it's a global var [04:58] carlos: module global [04:58] carlos: canonical.database.constants.nowUTC [04:58] (not sure if my terminology is correct here) [04:58] and I will need to do from canonical.database.constants import nowUTC [04:58] ok [04:59] actually [04:59] I think you might as well just stick it in canonical.database [04:59] daf, I don't think it's critical, rock and roll it [04:59] kiko: I'm not sure whether I should push the Big Red Button without getting sabdfl's stamp of approval [05:00] daf, you should wait for mark, really. give him a call? [05:00] kiko: sure, I could do, but it would be nice to have him look at the doc [05:01] (I'd call the class _NowUTC, and the instance NowUTC) [05:01] daf, calling him is a good way of getting attention :) [05:01] kiko: his ADSL is down [05:01] kiko: and probably will be until tomorrow [05:01] daf, fax it. [05:01] :D [05:01] I don't have a fax :( [05:01] but your neighbor does [05:02] they do?! [05:02] they never told me [05:04] just print it out and bike down to the print shop, or have your kid sister do it [05:05] I think I'm going to reorganise the server, so we may experience a little turbulence [05:07] daf: :-) [05:08] soyuz team fastens seatbelts [05:09] I'll do rosetta.w.h.c first [05:20] ddaa/lifeless: "tla changes" is not printing permissions changes -- is this normal? [05:20] Looks like there is a bug in tla. [05:21] You need to touche the files for the perms change to be detected. [05:21] ewwwww [05:21] Assuming of course you are not using a hardlinked-to-revlib tree. [05:21] I might be [05:21] how do I find out? [05:22] Check the link count of files in your tree with "ls -l" [05:22] ok, I'm not [05:22] But if you do not know, you are probably not. [05:22] That's a dangerous feature,but useful because it really boosts change detection. [05:22] dangerous? [05:23] Can corrupt the revlib. [05:23] because you can inadvertantly change the revlib [05:23] right [05:23] In addition, perms changes in the revlib are not detected, so that can cause inconsistent permission info to be put in the archive. [05:24] These are relatively trivial and well known bugs. [05:24] if they're trivial, why are they not fixed? :) [05:24] let me guess: [05:24] Same reason as usual :-) [05:24] because the release process is f*cked? [05:24] daf: touchy subject ;) [05:24] Ho, that's not the specific reason. [05:24] Here it's "because no one has bothered yet". [05:25] grumble [05:26] daf: feel free to step up. === daf laughs manically [05:26] This stuff is amply documented in the mailing list archives. [05:27] I don't think I have the time to tackle it right now [05:27] Essentually, the trick would be to change the inode-sigs to account for permissions. [05:28] if I took the time to read the mailing list archives and get up to speed on the code, I might be able to fix it [05:29] daf: I not you volunteering as stable release manager :-P [05:29] *I note your [05:29] spiv: pig [05:29] spiv: piNg [05:30] ddaa: that was already done in a patch IIRC [05:30] SteveA: pog :) [05:30] might be in the buggoo [05:30] did you update your interface in the authserver? === ddaa hate patch trackers which turn into black holes [05:30] SteveA: Oh, hmm! [05:30] Oops, no. [05:31] also, it should state the contents of a user dictionary [05:32] lifeless: good news, I'm getting somewhere with the twisted process handling. I will probably not finish before I leave, but then it's going to be mostly a matter of filling the blanks. [05:32] Ok, I'll fix that now. [05:33] also, what does createUser do if the email address is already taken? [05:37] Return {} [05:40] (it relies on the db constraints to enforce that; it will catch the resulting error, rollback the transaction and fire the error callback which returns {}) [05:43] ok, that needs to be in the interface [05:43] it just said TBD [05:43] ddaa: I tried an amateur analysis of the current PQM confusion with carlos' launchpad--devel--0-patch-183..186, but couldn't work out why it was happening [05:43] ddaa: most of my analysis consisted of running "tla missing" [05:44] Right, because I wasn't sure I wanted that to be the final behaviour :) [05:44] (Hence the discussion of error handling in the bug) [05:44] (TBD == To Be Defined in this case, which I realise now is not necessarily clear) [05:44] daf: the trick to unwedge the merge is to: [05:45] 1. tla revisions, write down the latest revision R in rocketfuel [05:45] ddaa: this isn't a wedged merge [05:45] ? [05:45] Something new? [05:45] this is rocketfuel log-for-merges being wedgified. [05:46] grab rocketfuel [05:46] do a star-merge with your branch, or anyones [05:46] log-for-merge will show carlo's patches. [05:46] If carlos has new patches, try merging them in, that might unwedge it. [05:46] I thought that issue was fixed... [05:47] ddaa: hahahahaha [05:47] if it doesn't, then I can sync-tree with those patches manually. [05:47] which I've had to do 3 times now. [05:47] I would love to have the time to sit down and do the forensics on the cause. [05:47] This is seperate to the crossing-the-streams issue? [05:48] yes [05:48] AFAICT [05:48] I bet carlos is unwedging merges with --skip-present and do not do sync-tree [05:48] That would explain the missing patchlogs. [05:48] carlos: accusations are being made! [05:48] ddaa: I did the sync-tree yesterday [05:48] well, I'm not aking bets until I do the forensics. [05:48] carlos: you should not need to sync tree ever. [05:48] lifeless: I did the --skip-present [05:49] why? [05:49] because my repository was broken [05:49] but I'm sure I did not a star-merge before the merge request ended [05:49] asctually, tell ddaa. Its 2am on friday night, I'm not up to this. === lifeless waves to everyone [05:50] lifeless: G'night :) [05:50] lifeless: enjoy your weekend :) [05:51] lifeless: night [05:53] carlos, care to describe what was your problem and what you did to fix it? [05:53] Not pretending I'll give you a better solution, but that will help me figure out what's going on. [05:54] ddaa: the problem is the same you help me fixing in Oxford [05:54] and I fixed it in the same way, but the sync-tree command was new for me and I executed it after lalo suggestion [05:55] so it was one or two days after the break [05:55] okay [05:55] You are aware of the racy nature of that command? [05:55] and how you should always use it with a fqrev when syncing against a shared branch? [05:56] ddaa: no, could you explain it to me? === lifeless peeks in [05:56] OH GOD NO. [05:56] Please guys. [05:56] DO NOT share 'FIXES' amongst the team. === ddaa hides under a rock [05:56] thats like going to a friend who had a broken leg and asking for help with your sore stomach. [05:56] lifeless: people are doinh that anyway already [05:56] Ask ddaa/me/jblack/bob2 [05:57] better tell them the whole story so they are not going to shoot their foot [05:57] PLEASE. [05:57] your scheduled analysis can now resume, thank you for your attention. [05:57] Okay... [05:58] lifeless: well, the --skip-present solved my problem as the arch team told me, I thought the sync-tree was to help with the logs errors, sorry about that [05:58] lifeless, it's very hard to know what is and what isn't appropriate to do when fixing a tree. [05:58] carlos: you should not perform any 'fix' without someone from the arch team. [05:58] carlos: that's essentially right. But sync-tree is dangerous. [05:58] kiko: ^^^ [05:58] sure, but somebody has deadlines to meet and a broken repo means delays. [05:59] kiko: we're working to reduce the number of problems you have, by introducing better procedures & workflow. [05:59] kiko: anything other than what you would do during the normal development cycle is suspect [05:59] What it does: get all the patchlogs from the given REVISION and put them into the tree. [05:59] lifeless: then, the is it ok if I execute --skip-present if I get this kind of break or should I ask always arch team? [05:59] carlos: do not execute skip-present. [05:59] its not the merge operator we use. [05:59] I'm just saying you can't reasonably expect the developer to do whatever he can to get things fixed, so it's something to watch out for. [05:59] carlos: if in doubt, ask [05:59] I understand [06:00] kiko: we have roughly 24x7 coverage: GMT +10 -> GMT - 8 [06:00] lifeless: I only execute it when arch tries to apply again the same patch I already have in my tree [06:00] If this adds some patchlogs for a revision that you have not yet merged, what get effectively recorded in "star-merge perspective" is "applied the patches then reverted the changes". [06:00] carlos: it won't do that if you follow the star-merge rules published a fortnight back. [06:00] but please, chat with ddaa. [06:00] lifeless: ok [06:01] So a later star-merge into rocketfuel will remove from rocketfuel the changes you skipped. [06:01] I wanted to get the point in that: *what fixes lalo's tree is likely to break carlos' tree. Unless you understand the cause, choosing the solution is impossible'. === lifeless waves again. [06:01] ddaa: then, I broke any patch from rocketfuel? [06:02] :-( [06:02] not saying that [06:02] lifeless: go to bed! [06:02] sayinh that using sync-tree is dangerous [06:02] ok [06:02] and that you have to be aware of the danger before usinh it === carlos hopes nothing was broken... [06:03] What is safe to do, and that hopefully you did, is to sync-tree to a revision you are up to date to. === carlos will never execute sync-tree until any member of arch team asks for it... [06:04] wait a min please [06:06] spiv: class NowUTC: [06:06] def __sqlrepr__(self, dbName): [06:06] return "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'" [06:06] nowUTC = NowUTC() [06:07] carlos: ...and does it work? :) [06:07] spiv: __sqlrepr__ asked for a second argument [06:07] Oh, right. [06:07] python does not fails :-) [06:07] Ignoring that is fine for us :) === carlos looks at the database [06:09] hmmm [06:09] the select from psql gives me the date in my UTC+0200 [06:09] daf: how was the command to change the zone? [06:10] LC_TIMEZONE=UTC foo ? [06:10] TZ? [06:10] TZ=UTC ? [06:11] Probably. [06:11] $ TZ=UTC date [06:11] Fri Sep 24 16:10:57 UTC 2004 [06:11] hmm [06:11] then it's not working [06:11] or psql does not cares about that env var [06:14] I'd suspect the latter first [06:14] hmm [06:14] ok, it's postgresql which should be restarted with TZ=UTC... [06:15] hmm [06:16] no [06:16] I get always the same date [06:16] and I executed tzconfig [06:16] changing my timezone to UTC [06:16] and restarted postgresql [06:17] and I got the same date that I'm sure is not UTC [06:17] because now it's 16:18 UTC [06:17] and the date is 17:10 [06:17] so that's impossible === justdave [~justdave@24.247.63.44.gha.mi.chartermi.net] has joined #launchpad [06:18] but it's not a sqlobject problem [06:18] UPDATE POMsgIDSighting SET inlastrevision = 't', datelastseen = CURRENT_TIMESTAMP AT TIME ZONE 'UTC' WHERE id = 1359 [06:19] that's the query that it's executed === carlos does not understand it... [06:22] looks ok here... [06:26] carlos: show TimeZone; ? [06:26] from psql? [06:26] Yeah. [06:27] TimeZone [06:27] ---------- [06:27] unknown [06:27] (1 row) [06:28] stub: hi [06:28] just been chatting with mark, then with jim, about sessions of various kinds [06:30] I want to put some kind of cookie-based auth into launchpad soonish [06:31] carlos: Are you getting localtime in the database, or some sort of random time? [06:31] stub: local time [06:31] mark wants to talk about doing session-based auth for xml-rpc clients. Personally, I'd prefer that they authenticated on each request. cookie auth in the browser is for usability (nice login forms) and so that you can authenticate across domains. [06:32] SteveA: Cookie based auth should be doable by simply storing the authenticated username in the standard session implementation (either using the ZODB or the Memory implementation as appropriate). [06:32] in jim's "client stores last access time" model, the session id held by the client changes on each request. You need to trust the client to do this right, but if they don't, they can only make their session expire sooner. [06:33] stub: yep, i guess so. [06:33] SteveA: I've never quite worked out how Jim's model is supposed to work. Because the client stores the last access time, the server doesn't have it when it needs to clean up. [06:33] I've done that for a zope3 application before. it was okay. I had to implement various parts of the session stuff iirc, as they weren't implemented in zope3. [06:34] the server doesn't need it when it needs to clean up. [06:34] the server cleans up regardless [06:34] Yup - which means it might clean up an active session [06:34] the server and its GC says "Your session will last at least 48 hours. I'll clean up some time after 48 hours." [06:35] the app can look at the session of a request and say "this session expires in under 1 hour. I'd better make a new session and copy the old data to it." === npmccallum [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad [06:37] ok - that makes sense. The Z3 API doesn't have to change to accommodate that either. === SteveA tries to remember what he had to implement when he last used sessions with zope3 [06:37] it was the component that stores the data [06:39] SteveA: Actually, with that model there is a race condition. The browser is sending 4 requests simultaneously. All will be dealing with the old session data (as no fresh token has been returned yet). Only one of the new sessions will take effect. [06:40] And any changes made in 3 of those 4 requests to the old-session will be lost. [06:41] hmm [06:41] yeah [06:41] well, what if you put a "see new" pointer in the old session? [06:42] It would work if we just kept the same session alive, updating a the expiry time. Which is pretty much what we have implemented already. [06:42] Just change the defaults from a 1 hour expiry with a precision of 5 minutes to a 48 hour expiry with a precision of a few hours. [06:43] (Or a precision of 48 hours even) === justdave_ [~dave@24.247.63.44.gha.mi.chartermi.net] has joined #launchpad [06:47] Mh... indeed something is borked on rocketfuel [06:47] ddaa, ouch. [06:47] i mean, regarding the missing patchlogs [06:48] nothing serious [06:50] ddaa: you've worked it out? [06:50] not yet... and I'm going to have to leave soon. [06:50] I'll check when I come back. [06:50] no worries [06:58] that's it... [06:59] in patch-394, the patch-369 was removed [06:59] patch-394 is the merge from carlos immediately following patch-369 === ddaa frienly larts carlos for good measure [07:00] ddaa: O:-) [07:00] ddaa: then, did I reverted a patch? [07:01] I guess not... [07:02] I have not checked that. [07:02] When did you use sync-tree, btw? [07:02] hmm [07:02] I'm not sure, I think it was on Wednesday [07:03] archer do not have calendars, they count time in patchlogs ;-) [07:04] ddaa: but I suppose we could see it from the time for that patch [07:04] a 'ls' in chinstrap [07:04] patch dates are not accurate they are set by the client ;-) [07:05] ddaa: I can certify you that my computer clock is correct, I'm using ntp to sync it [07:05] :-) [07:05] is it set on UTC or on GMT? [07:06] UTC+0200 [07:06] are you sure your computer's clock is not set to GMT+0200? [07:07] ddaa: seriously, the difference between UTC and GMT should not be affecting our use of Arch... [07:07] daf: :-D yeah, I was just havinh some fun... that thread on gau was stupid. [07:07] ddaa: phew, I thought you were being serious :D [07:08] daf: it's affecting your use of archers ;) [07:08] ddaa: isn't it the same? [07:08] :-P [07:08] carlos: there's a whole thread on gau about the difference between UTC and GMT [07:08] carlos: yes and no :) [07:08] ok, it's the same, I prefer to live in the ignorance [07:08] :-D [07:09] :) [07:09] So UTC isn't just GMT after the French got through with it? [07:09] That mostly matter if you are interested in unnatural acts involving insects. === daf decides not to ask [07:13] merge request on the way [07:15] carlos are you using a local mirror? [07:15] for rocketfuel? [07:16] ddaa: yes [07:16] when do you update it? [07:16] a revision-library [07:16] I suppose it's done automatically [07:16] Pardon? [07:19] So, you are not using a local mirror? [07:19] A revision library is a different thing.... [07:20] rats... gotta go now. [07:22] ok [07:22] so it's not a local mirror [07:24] care to send me the output of "tla archives | grep rocketfuel" privately? [07:25] ok === mdz [~mdz@69-167-148-207.vnnyca.adelphia.net] has joined #launchpad === kiko is now known as kiko-fud [08:53] daf: Could I assume that rosetta will be announced after the weekend? [09:03] we have a regression with the poimporter [09:06] a regression? [09:06] which bug? [09:07] New bug 2035 for Launchpad/Rosetta: PO parser broken (again) [09:07] well, I filed a new bug because I'm not sure if it's the same [09:07] ok [09:07] it's the generic parser error [09:07] and breaks any .po file import [09:07] the .pot file works [09:07] gnu-arch-users has been, uh, entertaining recently. [09:08] carlos: do you know which line is causing the error? [09:09] carlos: do the PO file test cases pass? [09:11] make check pass [09:11] can you find out the smallest PO file that exhibits the error? [09:12] #: charpick/GNOME_CharpickerApplet.server.in.in.h:2 [09:12] msgid "Charpicker Applet Factory" [09:12] msgstr "Ffatri Rhaglennig Dewis Nodau" [09:12] it fails in that msgstr [09:12] ?! [09:12] I don't see any thing different there... [09:12] daf: will investigate it [09:12] there must be something like that in our unit tests [09:13] try adding a unit test with just that message set and see if it still fails [09:14] I mean, if it still passes [09:14] well, I suppose you can look at it either way: either the unit tests still succeed, or that message still fails [09:17] daf: ok === npmccallum [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad [09:18] I've just tried that, and it worked for me [09:18] daf: so the problem is not that msgset [09:19] carlos, daf: I've uploaded a patch to that bug that might help diagnosis slightly. [09:19] spiv: thanks [09:22] carlos: or the adapters are causing it to fail in some mysterious way [09:22] carlos: which file are you testing with? [09:22] I was testing the import of all gnome-applets .po files [09:22] and all failed [09:23] ok [09:23] (Incidentally, both KeyError and IndexError inherit from LookupError, so that except clause could be slightly simpler) [09:23] :) [09:23] spiv: patches welcome :) [09:23] the ones without a plural expression had a warning that it's not available but the exception was raised and the ones with the plural forms expression only raised the exception === carlos hates long process before he gets the error... [09:26] carlos: try seeing if you can replicate the same error without the importer? [09:27] daf: without the importer? [09:27] ooh only with the parser [09:27] good idea === justdave_ [~dave@24.247.63.44.gha.mi.chartermi.net] has joined #launchpad [09:30] what???? [09:30] daf: it worked now [09:30] carlos: Eek. [09:30] the only change I did was spiv's patch [09:30] it makes no sense... === carlos recreates the database and starts again... [09:37] TemplateImporter and POFileImporter have a scary amount of duplicated (and nearly duplicated) code. [09:39] spiv: are more or less same code [09:40] so it's normal that the code is duplicated, if it's a way to improve it... ask lalo [09:43] Well, it's just an impression I get from glancing at it, not an informed opinion :) [09:47] daf: I think that it's related with the header and the database [09:48] daf: first time you try to import the .po file fails [09:48] seconde try success [09:48] /s/seconde/second/ [09:48] spiv: do you know if there are any important passwords in the golden database yet? === justdave_ [~dave@24.247.63.44.gha.mi.chartermi.net] has joined #launchpad [09:49] I should leave now, Will look at it later === npmccallum_ [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad === justdave_ is now known as justdave [09:53] spiv: I don't see any extra information with your patch... [09:53] File "/home/carlos/Work/launchpad/lib/canonical/rosetta/pofile.py", line 461, in append [09:53] transl = self.translation_factory(header=self.header, [09:53] File "/home/carlos/Work/launchpad/lib/canonical/rosetta/pofile_adapters.py", line 505, in __call__ [09:53] raise POInvalidInputError, e [09:53] canonical.rosetta.pofile.POInvalidInputError [09:54] ok, I got the wrong patch :-P [10:00] later === kiko-fud is now known as kiko [10:48] carlos: Oops :) [10:51] SteveA: Doesn't look like it. [10:53] SteveA: The only people in the DB so far are Mark Shuttleworth, Robert Collins, Roche Compaan, Roche Compaan, Andrew Test, Steve rle Alexander testing, apasto, Roche TestX7 -- and the first two don't have pards. [10:53] s/pards/passwords/ [11:28] ok. Any idea how hard it would be to discard existing passwords, and increase the size of the salt in the passwords for code that touches the golden database? [11:28] We can change the code in the plone product easily enough, and send roche a patch [11:28] we can change the code in launchpad easily enough [11:28] delete from person where password is not null; is pretty easy ;) [11:29] Actually, you'd need to delete the emailaddress entries too, but that's still not hard. [11:31] do you still have access to the plone server code? === SteveA goes to sleep [11:36] You mean the authserver on macquarie? [11:36] (if so, the answer is yes) [11:44] no, I meant the plone website code === SteveA really goes [11:45] SteveA: night === carlos is back [11:46] I've never had access to that.