[07:34] morning... [07:49] morning all [07:52] good morning mandel [07:52] ralsina: buenas :) [07:53] lets see how the day goes today... [07:53] * ralsina da golpe en el hombro [07:55] :) [08:01] mandel: is the canonical IRC server working for you? [08:30] taking a short coffe break, will be back in 30 minutes or so [09:03] ralsina: it does work for me [09:03] blah, my quasselcore had become stuck [09:04] the crappy sftware only worked for 2 months without crashing! [09:05] ralsina: hehe that is the new idea for server code, 2 montsh is good enough ;) [09:06] on web, sure, since if you have not re-deployed for2 months, your company has probably died ;-) [09:20] hey guys, I think I've done something a bit foolish with Ubuntu one, I'm just wondering, do you guys keep backups for any period of time in case something goes wrong? [09:20] kazade: what has happened? [09:21] ralsina: can you reiew: https://code.launchpad.net/~mandel/ubuntuone-control-panel/use_correct_reactor/+merge/62961 [09:21] mandel: sure [09:21] mandel, well, I had ~30G of pictures in my storage, and the other day I reinstalled my laptop and decided I didn't need them on my laptop, so I unticked "Sync this folder".... [09:22] that didn't do what I thought it did [09:22] I thought it just wouldn't download that folder to my laptop, but apparently it removes it from U1 completely [09:22] kazade: well there is a way to recomber the files, but I dont have such a super power [09:22] now I'm hoping I have those pictures on my desktop, but in the worst case is there any way back [09:22] mandel: isn't that a conflict in line 30? [09:23] ralsina: let me check [09:23] kazade: try to see if you have them in your desktop and to be super save, start it with no internet connection [09:24] kazade: if you don't have them, pop here and ask for help and we will point you to the person with the super powers ;) [09:24] ok, thanks mandel [09:24] is there a way to stop a certain folder downloading on one PC? [09:24] I mean, I want the Ubuntu One folder on my work laptop, but not my pictures [09:25] kazade: yes, you can move the pict out of the 'Ubuntu One' folder and tell them to sync as a diff folder [09:25] then tell the app not to sync that udf (User Defined Folder) [09:25] ralsina: weird, I though there were no merge issues, let me fix it [09:26] mandel: ok [09:29] mandel, that's what I tried to do... I had ~/Pictures sharing as well as ~/Ubuntu One. I unticked "sync" on my laptop and it removed it totally from U1 [09:30] kazade: strange… ralsina that ^ is the correct way to do it right? [09:30] yes, that should not remove it [09:31] hmm, well it's definitely not there now :( [09:34] mandel, do you know how long U1 keeps backups for? [09:35] kazade: no idea, but I can find out, one sec :) [09:52] ralsina: can you run the test in ubuntone-control-panel like this: ./runtests -qt [09:52] ralsina: I think thee is a broken test in trunk [09:52] mandel: run them in trunk? Sure [09:52] ralsina: yes, trunk it is, there is a failing test in my system [09:53] and I'm sure I'm up to date with everything [09:53] mandel: ok, let me check [09:55] yep, there is one failing test [09:55] but that's a knwn problem in devtools that dobey is trying to fix [09:56] mandel: you get the one with REQUEST_NAME_REPLY_EXISTS right? That is the known one. [09:56] mandel, I don't suppose you could point me to that person with super restore powers? [09:56] I'm fairly sure that even if I do have them at home, I don't have all of them [09:57] kazade: I can, but he is in the US so you will have to wait a little, is that ok? [09:57] mandel, sure [09:57] kazade: the person to ask is joshuahoover [09:58] kazade: he should be around in 3 or 4 hours [09:58] ok thanks guys [09:58] np [09:58] * kazade is bricking it [09:58] my girlfriend will kill me if those pictures go missing! [09:59] kazade: he, girlfriends… you dont want to get in trouble with them ;) [10:00] ralsina: I have fixed the merge issue: https://code.launchpad.net/~mandel/ubuntuone-control-panel/use_correct_reactor/+merge/62961 [10:01] ralsina: I;l move to make the ui run on windows and later we can see what to do next [10:01] mandel: I am going to take a long break in a few minutes and come back in 4 hours or so [10:02] ralsina: ok, np, I'll be here working and then will walk the dog and exercise a little [10:02] :) [10:02] cool then [10:03] mandel: I will run the tests on this one, though === zyga-afk is now known as zyga [10:07] ralsina: cool [10:07] mandel: tests pass except the one we expect to fail, code looks good, so +1 from me [10:08] ralsina: ok, alecu will take a look at it later [10:08] oh, mine, my folders is showing actual information :-D [10:10] and the connect button works! [10:12] morning all [10:13] morning [12:11] facundobatista: was just looking at bug 786189 . I noticed you had commented on similar bugs in the past. Is this likely a problem with bad metadata? [12:11] Launchpad bug 786189 in ubuntuone-client (Ubuntu) "Ubuntu-One on 10.04 Netbook Edition will not sync from server to netbook (affects: 1) (heat: 498)" [Undecided,New] https://launchpad.net/bugs/786189 [12:30] duanedesign, let me see... [12:32] duanedesign, yes, this is very ugly: 'is_directory': 'T', 'changed': 'LOCAL', [12:35] hello everyone! [12:42] any ubuntuone devel here to help with one question about the UI? [12:44] Pretto: fire away [12:45] fagan: I looked for the code that changes the buttons in control center, but couldn't find [12:45] hello Ubuntu One! [12:45] Pretto: nessita can probably help with that [12:46] hey alecu [12:46] hi alecu! [12:46] Pretto: hi there, how can I help? meaning, what do you want to do with the buttons (and which ones?)? [12:46] nessita, btw... can you review this branch again? https://code.launchpad.net/~alecu/ubuntuone-control-panel/tx-web-client/+merge/62889 [12:46] alecu: sure! [12:47] rthanks! [12:48] Hola nessita, alecu [12:48] hola facu [12:49] hola facundobatista! what a pleasure seeing you around [12:49] nessita, that's because I finally took a shower? [12:50] it was about time! [13:31] alecu: there is a couple of needs fixing, when you fix those I'll test it IRL [13:33] nessita, thanks for the comments; looking now. [13:46] good evening folks! [13:46] hi ralsina [13:47] nessita, I certainly forgot the "twisted.internet.base.DelayedCall.debug" in there. But perhaps we could have u1trial set it before running. Or setting it as a cmdline option. [13:47] alecu: makes sense [13:47] can it be set from command line? [13:49] mandel, ralsina: the NAME_EXISTS issue should be fixed in nightlies now [13:49] dobey: cool! [13:49] dobey: yey! [13:50] OMG, it's standup time in 10'! [13:50] dobey: was it as hard as it seemed to be yesterday? [13:52] ralsina: well, was mostly fixed on tuesday. and the twisted issues aren't properly fixed. just worked around. will be insanely hard to fix them :-/ [13:52] dobey: fixing for the tests an incredibly hard issue that doesn't show up in the real usage makes no sense [13:53] Then again, I was fully grown up before being exposed to TDD so I have a strong immune response ;-) [13:54] * nessita gets scared by ralsina's comment [13:54] See? ;-) [13:54] * ralsina is on epater le bourgueoise mode [13:54] here's bug 791834 [13:54] Launchpad bug 791834 in ubuntuone-dev-tools "Add an option to enable DelayedCall.debug (affects: 1) (heat: 6)" [Undecided,New] https://launchpad.net/bugs/791834 [13:54] heh [13:54] * fagan doesnt know what that means [13:55] ralsina: I kinda agree on balancing the efforts regarding production code vs test development, but we need a sane running test suite to be able to throw new code in the "street" (cd, whatever) [13:55] it's the triptophan [13:55] ralsina: I fixed the bug other than breaking the tests [13:55] fagan: "scare the burgeois" [13:55] damn, is cool here! [13:55] ralsina: hah [13:56] i really don't like the 'version' property in NM [13:56] What's scary is that I mistyped it in french [13:56] i mean, i like that it's there [13:56] dobey: well its kinda needed [13:56] but the fact that it's the version of NM itself, and not the API, is totally f'n broken [13:57] dobey: version number comparison is one of those things that work based on good faith and pixie dust [13:57] NM is not convinced it's a system service [13:57] NM is convinced it's a system service. and it's API is a "free desktop standard" [13:58] dobey: that's their words talking. If their brains thought that, they would number APIs [13:58] fagan: did you fix your branch? [13:58] as in "numbered standard versions" that some NM version implements [13:58] nessita: working on it did some reading first [13:59] nessita: will have it by the end of the day [13:59] fagan: nice! [13:59] im supprised it didnt take me longer to actually get a working version [14:00] STANDUP!!!!!! [14:00] me [14:00] me [14:00] me [14:00] me [14:00] ralsina, dobey? [14:00] me [14:00] ralsina: mandel is not coming, right? [14:00] meh [14:00] mandel was here earlier but I don't know [14:00] alecu: go! [14:00] DONE: pushed fixed webclient branch; worked on devices tab branch [14:00] TODO: more fix for the webclient branch; push the devices tab; try to make the u1cp run on windows [14:00] BLOCKED: no [14:00] NOTE: tomorrow I'll be offline while travelling to london [14:00] LOVE: london on spring [14:00] HATE: travelling 13hs [14:00] NEXT! nessita [14:00] DONE: done listing and browsing of cloud folders, reviews [14:00] TODO: provide subscription functionality, reviews [14:00] BLOCKED: nopes [14:00] NEXT: fagan [14:00] NOTES: I will be taking an longer slot for lunch today (1.5 hr instead of the usual 0.5) [14:00] DONE [14:00] * Fixed the nm bug in my branch but was missing tests [14:00] * read up on mocker [14:01] Blocked [14:01] * nope [14:01] next thisfred ? [14:01] DONE: Bug #665024 (packaged new erlang and put it in nightlies) [14:01] TODO: See if ^ solves the bug, and if so, start SRU process [14:01] BLOCKED: No [14:01] NEXT: nessita [14:01] Launchpad bug 665024 in erlang (Ubuntu) (and 3 other projects) "Desktopcouch doesn't replicate with json_encode error 500 (affects: 9) (dups: 2) (heat: 52)" [High,Confirmed] https://launchpad.net/bugs/665024 [14:01] eh, next: dobey, I guess [14:01] nopes, ralsina [14:01] :-) [14:01] DONE: not a lot yet, complicated day :-( some reviews, updating installer screens with current texts [14:01] well, we're not really following the order anyway ;) [14:01] TODO: finish that, reviews, talk to lots of people, ping design, etc [14:01] BLOCKED: by my stomach, don't ask [14:02] dobey? [14:02] ewww [14:02] we take it in turn, to act as sort of governer for the week? [14:02] λ DONE: bug #789299 (part 2) [14:02] λ TODO: bug #789300, bug #771488, expenses [14:02] Launchpad bug 789299 in ubuntuone-dev-tools "DBusTestCase sometimes connects to real session bus (affects: 1) (heat: 6)" [Critical,Fix committed] https://launchpad.net/bugs/789299 [14:02] Launchpad bug 789300 in ubuntuone-dev-tools "DBusTestCase needs to work with Qt main loop as well (affects: 1) (heat: 6)" [Critical,In progress] https://launchpad.net/bugs/789300 [14:02] Launchpad bug 771488 in ubuntuone-dev-tools "u1trial should unset GTK_MODULES (affects: 1) (heat: 4)" [Medium,In progress] https://launchpad.net/bugs/771488 [14:02] ralsina: are you taking tomorrow off like you suggested you might? [14:03] * fagan gets onto that bug === kenvandine_ is now known as kenvandine [14:04] nessita: probably not [14:05] sorry, went for kunch [14:05] lunch* [14:05] kunch is a lot nicer than lunch [14:06] mandel: go! [14:06] karate + lunch > all other forms of eating [14:06] DONE: Fixed ling issues in creds branch. Updated correct reactor usage for control panel. Started working on getting the UI to run on Windows. [14:06] TODO: Some more control panel. [14:07] BLOCKED: no, but have some personal stuff bothering me later... [14:08] mandel: question, is there any plan on communicating syncdaemon with the control panel? I'm not sure if that's what you're working on from your standup DONE :-) [14:08] oops [14:08] bye mandel [14:09] welcome back mandel :-) [14:09] Those second-world internet connections... tsk tsk ;-) [14:09] ralsina: sorry I went or lunch and forgot to check the watch [14:12] mandel: question, is there any plan on communicating syncdaemon with the control panel? I'm not sure if that's what you're working on from your standup DONE :-) [14:12] nessita: working on it [14:12] mandel: AWESOME [14:12] nessita: I need to create a sdtool so that we can reuse most of the code [14:13] mandel: let me know if you need assistance with that, is extremely similar to the CredentialsManagementTool [14:13] ok [14:16] nessita, pushed fixes on https://code.launchpad.net/~alecu/ubuntuone-control-panel/tx-web-client/+merge/62889 [14:16] on it! === m_conley_away is now known as m_conley [14:27] Hmmmmm the logic for that version check is a little tricky [14:28] oh it would be easier to check if its lower than the version [14:29] fagan: which version numbers are involved? [14:30] dobey: so, I don't wanna be a party pooper but I'm still getting [14:30] self.assertNotEqual(name, dbus.bus.REQUEST_NAME_REPLY_EXISTS) [14:30] twisted.trial.unittest.FailTest: dbus.UInt32(3L) == 3 [14:30] when running -qt tests in the control panel. I'm running u1-dev-tools 0.1.3+r34-10~natty1 [14:30] ralsina: well I asked and its supposed to be anything below 0.8.99* [14:30] ralsina: ill check whats in natty too [14:31] * alecu gets the REQUEST_NAME_REPLY_EXISTS too [14:31] There *is* a distutils.version that you can use to compare those things but I am not sure we want to have that as a dependency [14:31] fagan: 0.8.99????? why not make the new API 0.9? Blargh. [14:31] ralsina: yeah thats why I was confused for a time yesterday on how to do it [14:32] if it was 0.9+ I would have just went string.split(".") and went if version[1]>8 [14:32] fagan: no, that fails for 1.0 [14:33] you *always* need to check all parts, left to right [14:33] it's just that this way you need to check three instead of 2 ;-) [14:33] ralsina: good point [14:33] alecu: is the 39% in use faked or real? [14:33] "39% in use" [14:34] nessita, faked [14:34] also, when you split, keep in mind that you may have 2 or 3 parts in the version. It's not trivial, but you can do it ;-) [14:34] ralsina, fagan: compare tuples [14:34] alecu: ah, makes sense now [14:34] alecu: better, split and zip() [14:35] alecu: approved! [14:35] nessita, cool!!!! thanks [14:35] alecu: why would a tuple be more useful than a list in this case? [14:35] * fagan doesnt really see the big difference [14:36] fagan, check what you get by doing zip(version1.split('.'), version2.split('.')) [14:36] fagan, for this case, there's no difference between a tuple and a list. Usually it does. [14:36] fagan: check the behaviour of the "<" operator between tuples. [14:37] but yes a list is the same thing [14:37] but split returns tuples [14:37] thisfred: hey there! are you arriving to heathrow? [14:37] nessita: yep [14:37] thisfred: shall we get together to go to the hotel? I land at 10:05, and your flight lands at 9:35 [14:38] thisfred: I will travel only with carry on, so I will not have luggage time wait [14:38] ralsina: I always get confused between tuples and lists when that kind of thing comes into play [14:38] * fagan is arriving at standsted [14:38] nessita: sure. I was thinking of taking the underground all the way. Do you have an oyster card? [14:39] nessita: huh [14:39] ralsina, I think split returns lists [14:39] thisfred: I do. Though beuno recommends heavily the heathrow express + underground. Last year I took only underground and it was a loooong trip (but completly doable) [14:39] dobey: yeah :-( [14:40] ralsina: huh? I thought split returned lists [14:40] nessita, thisfred: +1 to the heathrow express. [14:40] karni: hey, you're arriving at 9:35 to Heathrow as well? [14:41] thisfred: you are right! What was I thinking? [14:41] nessita: well, it takes about an hour the heathrow express shaves off maybe 20 minutes tops, considering that we'd have to get on the underground after anyway and change [14:41] ralsina, thinking about tuples? [14:41] yes, take the express. It takes 15 minutes instead of 45 [14:41] plus lovely views [14:41] thisfred: ^ that's what everybody says [14:41] nessita: but ok, let's take the express :) [14:41] thisfred: the express took about 15 minutes for me last month :-) [14:41] hehehe [14:41] hrmm [14:42] thisfred: and has wifi. And coffee [14:42] thisfred: I never had it, so I wanted to try it to see why everyone is so in love with it [14:42] wifi! [14:42] and coffee! [14:42] nessita: I took it on the way back once when I was in a hurry [14:42] oh, btw: what simcard should I get while on london? [14:42] nessita: where do you propose we meet? [14:42] of course, if you convert the cost to pesos, you want a massage and a donut, too. [14:42] nessita: 9:35, no idea where hahaha, I'm way to busy coding these days lol! :) [14:42] alecu: I got a vodafone for 1 week with 500MB of data for 10 quid [14:43] nessita: you too? [14:43] nessita: the error happens in cp trunk with --reactor=qt --gui? [14:43] ralsina, the kind of chocolate donut that usually comes included with massages? [14:43] karni: thisfred too, I'm arriving at 10:05, so I was proposing we can meet to go to the hotel together [14:43] thisfred: no idea, any suggestion? [14:43] dobey: ./run-tests -qt for me [14:43] alecu: I don't know where you are getting your massages but I like the attitude ;-) [14:44] nessita: thisfred: definitely! [14:44] thisfred: near the Heatrow express "door" (if such thing exists) [14:44] nessita: which terminals are we arriving at? [14:44] thisfred: let me check mine [14:44] ok [14:45] thisfred, karni: I'm arriving to Terminal 3 [14:45] ralsina, did you get that vodafone sim somewhere special? like a kiosk or some vodafone shop or something? [14:45] OMFG, they are playing "Hasta siempre comandante" on the bar's speakers. That's just weird. [14:45] alecu: vodafone shop [14:45] nessita: thisfred: I'm terminal 1 [14:45] cool [14:45] alecu: they are everywhere [14:45] nessita: I'm in terminal 5 [14:45] bu! [14:45] nessita: so we'd all have to get on at different stops [14:45] right [14:46] nessita: I would use these 15 minutes to start travelling to terminal 3, if that's on the way to the hotel :D [14:46] nessita: which makes it less practical [14:46] cool [14:46] yeah. Then maybe we can meet in the hotel [14:46] nessita: those terminals are not close [14:46] ok [14:46] * nessita drops friendly plans [14:46] :( [14:46] * karni hugs nessita [14:46] thisfred: right... I didn't consider terminals [14:46] * nessita hugs back, and cries [14:47] nessita: yeah: I will check in and wait for you guys in the lobby, and we can go out and do something fun? [14:47] SHOPPING to LILLY WHITES [14:47] fine by me :) [14:47] http://en.wikipedia.org/wiki/Lillywhites [14:47] I need to get my wife a birthday present [14:47] ah probably not from there :) [14:47] I'm hoping Lilly Whites is fulled with sales, I need tons of sport clothes [14:48] thisfred: well, we can go another places too [14:48] you know, there is ONE express. You would at worst be on different cars and meet at the end [14:48] but we can go on a shopping spree [14:48] and maybe a museum [14:48] Haven't been to the tate modern in a while [14:49] * thisfred will wait in the lobby for nessita and karni [14:49] thisfred: nessita: cool :) [14:49] * nessita acks [14:49] karni: I am tallish, very short hair. [14:50] * karni note to self: save nessita's and thisfred's mobile phones [14:50] thisfred: hah! I'm the same :D [14:50] mine won't work in the UK [14:50] I'm sure we can pick out the geeks ;) [14:50] thisfred: my pic is in the directory already, though I might be not shaved this time xD [14:50] thisfred: heheheh [14:50] karni: I will have mine turned off, so don't bother [14:50] same here [14:50] hahahah you people :) [14:50] brb [14:50] * thisfred checks directory [14:51] brb [14:52] ok I think I have the logic [14:52] http://paste.ubuntu.com/616761/ [14:53] but that is going by the presumption that they are going right for 0.9 after this release of nm [14:54] actually thats a little wrong too :/ [14:54] fagan: don't do it that way then ;-) [14:55] != True is better written as not [14:55] fagan: make a list of possible version numbers prior and later and see that your code works the right way with all of them. [14:55] as in "and not foo.startswith(bar)" [14:55] huh? "Your edit request has been forwarded to #ubuntu-irc. Thank you for your attention to detail" [14:55] ralsina: yeah the logic is a little bit tricky [14:56] ralsina: oh and the != True is me just coming from C [14:56] fagan: if it were easy, it would be done by computers. [14:57] wtf [14:58] ralsina: im going at it a little bit differently just to make it easier on myself [14:58] fagan also you're still using < with strings, which does not do what you want [14:58] i guess freenode doesn't like our standup [14:58] nessita: thisfred: I think it's a good idea to add the arrival terminal info on the wiki. Just added 'T1' in my row, so other ppl know. [14:58] sigh [14:59] thisfred: well I could go int(version[]) I suppose [14:59] fagan: on what exactly are you going at it a little bit different? Not about trying it with different version numbers, I hope. [14:59] ralsina: no no im just doing the logic a little bit differently because of the weird numbers [14:59] ralsina: just changing to a nested if [15:00] fagan: ok, if it makes more sense to you, that's fine [15:00] fagan: NM uses these in their versions? http://en.wikipedia.org/wiki/Weird_number :P [15:00] thisfred: yeah [15:00] fagan: write a function which takes two strings as input, write several tests that pass different strings in, and check for appropriate output, that all fail; then make the tests pass by fixing the function [15:00] thisfred: never heard of weird numbers before. I am way behind in discrete math, it seems :-) [15:01] fagan: what dobey said [15:05] anyone remember which days of UDS we had to buy our own dinner? [15:05] tue - wed - thu ? [15:05] I know it was 3 [15:07] thisfred: yes, monday and friday were pre-arranged [15:07] thx [15:09] ok now its good [15:09] im very sure of it [15:09] just going to test it now [15:09] man, qtreactor is full of broke [15:10] how the hell are we going to package it? === rodrigo__ is now known as rodrigo_ [15:11] nessita: oh right; those tests weren't getting run otherwise. meh [15:15] sigh, something is killing stdout/stderr too [15:15] dobey: can I help? [15:16] ok fixed http://paste.ubuntu.com/616772/ and working [15:16] karni: I added mine too [15:16] now on to the tests if there isnt anything wrong with the way I did that there [15:16] couldn't we just ship a private copy of qtreactor? It's a single file... [15:16] not sure; uno momento [15:17] ralsina: no; we should package it properly in ubuntu if we're goint to use it [15:17] fagan: what happens with 0.5 [15:17] ralsina: it works because it is auto false [15:17] ralsina: I tried out a few different values in the python shell and it worked ok [15:18] fagan: you don't seem to be getting the idea of automated testing [15:18] ralsina: I'm leaving for a couple of hours, will be back later [15:18] ! [15:18] ralsina: well I havent fixed the tests yet [15:18] fagan: since you just "tried things on the shell" we don't see what you tried [15:18] nessita: \m/ [15:19] ralsina: ill fix them and then be able to say that its working fine [15:19] fagan: nope [15:19] fix the tests then the logic? [15:19] fagan: there are two parts to a god test. 1) it hould fail before the fix 2) it should work after the fix [15:19] and hopefully, writing the code to fix it was step 1.5 ;-) [15:20] oh ok so then I should probably have run the tests a bit more and fixed them as I went along [15:20] in this case, you should create a "check_nm_version function (or whatever) and you should write tests for it with different version numbers, and they all should be somewhere we can see them for review [15:20] ralsina: ok thats easy enough to do [15:21] ralsina: wouldn't a god test be a logical fallacy? [15:21] dobey: hahaha [15:21] s/god/mohammed/ ;-) [15:22] dobey: isnt the god test throwing a rock into the air and if it hits you then god obviously was getting retaliation [15:22] fagan: that way, you make sure your function works correctly. After that, you use it to fix the app code [15:22] * dobey hands fagan a rock to go throw up in the air [15:23] must be thrown directly vertical and you must not move [15:23] ralsina: why don't people listen to me? :) [15:24] dobey: what? ;-) [15:24] writing tests :) [15:25] what????! ;-) [15:25] sorry, stupid joke ;-) [15:25] i think you need a hearing aid; you're getting old ;) [15:25] dobey: yes, I can hardly hear what you type. Type louder! ;-) [15:26] heh [15:26] CLICK CLACK CLICK CLACK! [15:26] Or, use a type M keyboard! ;-) [15:28] ok, time for a short break to go back to the house. See you all in half an hour or so [15:28] ok wtf [15:28] i put sys.exit(1) inside a test [15:28] err, inside the setUp() even [15:28] and it doesn't exit! [15:28] ralsina: ack [15:28] and sys.stderr.write() isn't printing my message! [15:28] why are we using qt again? :( [15:29] dobey: I know your feeling [15:29] nice its working with the method [15:29] brb getting tea [15:32] fagan: if "the method" is that thing you pastebinned last, it's not working. [15:33] what the hell [15:35] oh [15:35] ffs [15:35] a) i'm an idiot [15:37] dobey: no no no I mean I made a method out of that code (that is working in 11.10 but not tested yet on 11.04) [15:37] b) twisted is the worst thing ever. [15:38] fagan: and i mean, if your method simply uses that check you use in that pastebin, it doesn't work; whether or not it appears to for you [15:39] dobey: well I fiddled with the logic again since but it does work [15:40] oh crap missed 1 little bit [15:43] "pass the tests fagan is doing by hand" != "work" [15:43] dobey: I forgot == 0 because im used to C where if its 0 its false [15:44] dobey: well I did debug it pretty heavily to make sure the logic was working as i should [15:44] (and just an intern and first proper development job and first branch to do...) [15:57] alecu: ping [15:58] nessita, pong [15:58] alecu: not sure how I miss this in the review, but when running trunk I'm getting an AttributeError from the account code your branch added: http://pastebin.ubuntu.com/616800/ [15:58] let's see... [15:59] nessita, weird! [15:59] right! [15:59] maybe something wasn't merge? not sure [15:59] I'm re branching to see if it happens again [16:00] alecu: ah! maybe my build was old! [16:00] alecu: is very likely, I don't run build often there [16:01] alecu: yeap, my bad... sorry [16:01] nessita, oh, a missing ./setup.py build ? [16:01] alecu: yes :-( I'm not used to it [16:01] no prob :-) [16:01] I will get used to it... [16:01] nessita, me neither. It has already bitten me a few times. [16:02] well i *THOUGHT* i had this stuff working well enough [16:02] but twisted hath proved that wrong :( [16:02] nessita, I think the best solution is to have a script to run the cp that builds first. [16:02] alecu: not sure about that... [16:02] maybe? can't tell [16:02] dobey: shoot [16:03] exceptions.AttributeError: 'SSOClientTestCase' object has no attribute 'bus' [16:03] dobey: are you calling super for every single parent when dealing with multiple inheritance? [16:03] dobey: if you inherit from 2 classes, you need to call setUp for boths [16:04] (when you redefine a method) [16:04] if you don't redefine the method, first is called the setUP from the first parent class, then from the second, etc [16:05] there is no MI involved here [16:07] Hmmm I dont know how to fix the tests [16:07] dobey: you sure? SSOClientTestCase inherits from the DBusTestCase [16:09] ralsina: im almost done for the day so it looks like im not going to fix it before EOD. Would you mind setting aside a little time tomorrow to walk me through what I have to do for the tests and all that. I read up on mocker but still not in practice so im a little lost on what to do [16:10] hrmm [16:11] ok, needed a couple of yields [16:11] but now, other broken tests [16:13] nessita: http://pastebin.ubuntu.com/616814/ <- now getting these with ./run-tests -qt after my fixes [16:14] checking [16:14] http://pastebin.ubuntu.com/616816/ <- my current diff [16:15] dobey: that's very odd, "twisted.trial.unittest.FailTest: did not catch an error, instead got dbus.String(u'Ubuntu One')" means that we're explicitly testing for a error signal and we're not getting one [16:15] dobey: what did you change in your end? [16:16] dobey: smells like the faked dbus backend is not in place [16:16] nessita: maybe; but i'm surprised these tests were actually working at all :-/ [16:16] dobey: why? [16:17] dobey: I have checked them and write some of them, as far as I remember they looked correct [16:17] nessita: i'm also getting some errors with just ./run-tests now too, about no .service file for SSO [16:17] dobey: that indicates that you're trying to run the real SSO, somehow? [16:17] dobey: what test suite are you running? ussoc or u1cp? [16:18] u1cp [16:18] dobey: what devtools branch are you running? so I can reproduce locally [16:19] nessita: installed nightlies is what i'm using [16:19] guh [16:19] dobey:did you do any modification to u1cp or is plain trunk? [16:19] nessita: the diff i pastebinned are the changes to u1cp [16:19] ah, missed that, looking [16:21] dobey: I'm finishing a branch up, as soon as I push it for review I'll grab that and work it out [16:21] ok [16:22] ralsina, are we meeting today? [16:23] fagan: sure thing. I didn't expect it to take you less than 3 or 4 days ;-) [16:24] alecu: you mean the weekly team meeting? I am not really up to mumble from here (son taking nap) [16:25] ralsina, yes, the weekly team meeting... but it probably makes no sense since we are all meeting on monday anyway. [16:26] alecu: yeah [16:26] we'll start having them next week, I promise [16:26] ralsina: well im 90% sure I have the logic correct but the tests would make sure of that [16:27] ralsina: thats why id like to do it :) [16:27] fagan: that's the whole idea :-) [16:27] ralsina: anyway ping me in the morning when you are free [16:28] ill take a look at it and see what I can do for the like half hour I have left [16:28] fagan: ok, will do [16:29] cool [16:34] what a mess these imports are [16:40] fagan: where do UDFs show up on Windows? [16:40] fagan: in My documents directly? [16:42] karni: UDFs? [16:42] fagan: User Defined Folder = Cloud folder [16:42] ah ok [16:42] karni: under the profile directory [16:42] the obvious-obvious folder in the cloud ;) [16:42] karni: what dobey said [16:42] dobey: thanks [16:42] karni: iow, under the home :) [16:43] dobey: ack [16:43] :) [16:43] * fagan hates some lingo [16:53] bah i give up for now. i need to get lunch and do a couple things. bbiab [17:00] ok, lunchtime [17:00] I'll be back in 1.5 hrs [17:00] see ya later! [17:20] eod for me, but will be back for a little while in about 4 hours [17:35] huh [17:35] so the more stuff i fix, the more stuff breaks :( [17:52] sigh [18:01] dobey: any thoughts on bug #791927 ? As in, how do I fix that? Fiddle with setup.py? [18:01] Launchpad bug 791927 in desktopcouch (Ubuntu) "apport hook in source package not installed (affects: 1) (heat: 6)" [Medium,New] https://launchpad.net/bugs/791927 [18:04] uhm [18:04] * dobey looks [18:07] ugh, the desktopcouch setup.py needs a lot of love, but yes you need to tweak the setup.py for that [18:07] ok [18:08] I'll look at the other packages to see what it need [18:08] s [18:08] well, lunch was shorter than expected :-) [18:08] * nessita is back [18:08] thisfred: btw, does the hackers couchdb-bin result in 400 errors for oauth? [18:09] dobey eh, not sure, in what situation? [18:09] thisfred: basically all the data_files bits that use "/usr/share/..." need to not start with "/usr/" but just be "share/..." [18:09] kk [18:09] thisfred: well, chad's branch didn't land because the tests failed with lots of 400 errors [18:10] I'll run the tests here [18:10] dobey: ah oh I remember, there's a couchdb setting that has to be changed if you use the hackers couchdb: [18:12] where do i makes that change? [18:12] [couch_httpd_oauth] [18:12] use_user_db = false [18:13] in /etc/couchdb/default.ini [18:16] thisfred: uhm; why don't we put that in the default.ini in desktopcouch? [18:17] dobey: because it's a temporary work around (I think) for something we broke in the server version of couchdb. Bottom line, we should not be running this on the desktop [18:17] But putting it in the local.ini/default.ini manually should also work, I think [18:18] I mean in the ones that dc uses in ~/.local/share [18:18] well [18:18] it shouldn't be using that in tests [18:19] karni: did you see you and me are roomies for the week :) [18:19] fagan: no I haven't, I'm a roomie with alecu in Londin AFAIK ? [18:20] fagan: when? [18:20] thisfred: hrmm, the fact that tarmac user has a .local-share/desktop-couch/ is not a good sign :( [18:22] hmm, yeah I thought all the tests talked to a couchdb instance in /tmp [18:22] karni, since I'm arriving a day earlier, marianna asked me to be ralsina's roommate, so we can share the room on saturday as well. [18:22] well it shouldn't be in /tmp either [18:22] it should all be inside ./_trial_temp/ really [18:23] we made this before we used trial [18:23] but yeah [18:23] alecu: fagan: ah! you guys no more then I know \o/ : [18:23] :) [18:23] well, we made unit tests before we had a sane test runner; and now everything is f'n breaking :( [18:26] karni: hah [18:26] * fagan didnt really mind who he rooms with [18:29] * alecu neither, but he wanted to take the chance to discuss android stuff with karni. [18:29] fagan, guess you'll have it now :-) [18:30] alecu: we'll talk some about SSO in London, huh ? :) [18:30] karni, sure! [18:31] karni: I just had a weird vision of you and alecu cuddling and talking :D [18:31] fagan: you're weird ;] [18:31] karni: yeah I little [18:31] fagan, click it off, dude! [18:31] :D [18:32] grr, apt is so braindead sometimes [18:37] dobey: make a replacement [18:37] :D [18:38] can I have a couple of reviews for https://code.launchpad.net/~nataliabidart/ubuntuone-control-panel/subscribe-folders/+merge/63266 ? [18:38] dobey: I'll start debugging the failures now. Where are you at with that? [18:38] DanRabbit: man, really nice work with these icons! [18:38] karni: thanks :) [18:39] DanRabbit: now you can make more for all Libre Office extentions, MS Office extentions, PDFs, and... hahah j/k ;) [18:40] karni: LOL, well I do have a few more mimes I can slide your way if you'd like them ;) [18:40] karni: these are the new mime's I'm working on for elementary 4 (and of course proposed for Humanity when they're complete) [18:40] DanRabbit: hahah, let's leave it for now, but keep these sources safe! [18:40] :) [18:41] are we still calling it humanity? [18:41] dobey: where should the file with the apport hook go? lib/desktopcouch? [18:41] * fagan thought the themes are called mono or something [18:42] no [18:42] dobey: did you read my message? [18:43] thisfred: share/apport/package-hooks/ [18:43] ah [18:43] nessita: i didn't see it. sorry; i am in an abyss is where i am with it. :( [18:43] dobey: but, did your diff changes or can I start from there? [18:44] exceptions.AttributeError: 'ShutdownTestCase' object has no attribute 'backend' [18:44] nessita: i think i changed a couple more super() calls [18:44] nessita: let me paste a new one [18:46] nessita: actually i'll just push what i currently have [18:46] dobey: please, I'll go from there [18:46] dobey: even better [18:47] nessita: lp:~dobey/ubuntuone-control-panel/testing [18:47] dobey: ack, I'll be back with news! [18:54] dobey: if i remove '/usr/' in desktopcouch, setup.py installs everything in /usr/local/lib/python2.7/dist-packages/desktopcouch-1.0.7-py2.7.egg/share/ which I don't think is right [18:54] it needs the clever thing to put the prefix in right? [18:54] thisfred: because you didn't install with --prefix [18:55] hrmm, but shouldn't be in the egg, that is a bit weird [18:55] dobey: well without prefix it should go to /usr/local/share, no? [18:55] i would think so [18:55] not inside the egg, that will never work [18:55] but this /is/ python we're talking about [18:55] I think we need to do the prefix substitution like we do in other packages [18:56] thisfred: http://bazaar.launchpad.net/~ubuntuone-control-tower/ubuntu-sso-client/trunk/view/head:/setup.py#L357 [18:56] thisfred: that's basically how the data_files should look [18:57] thisfred: we don't do prefix substitution anywhere [18:57] that's how it does look, and it doesn't work. [18:58] can a UDF be renamed? do we support that? [18:58] thisfred: ok, well leave it for now and i can look at it more later. need to deal with the test stupidity, and then get the gnome3 compat issues fixed up so stuff will work on oneiric [18:59] karni: not sure; verterok, facundobatist, or lucio_ ^^? [18:59] karni: no, it can't be renamed [18:59] verterok: \o/ thanks === lucio_ is now known as __lucio__ [19:03] dobey: fixed it, we needed DistutilsExtra's setup, rather than the one from setuptools [19:03] that doesn't seem like a "fix" to me [19:04] anyway, whatever; this twisted stuff is killing me [19:06] dobey well, that's what the file you pointed to does as well. setuptools.setup just doesn't do prefixes in this way. (so at all really) [19:06] yes, because sso needs stuff in distutilsextra [19:07] dobey we have one hardcoded path left that puts something in /etc/ [19:07] anyway, like i said. if it works it works; i'm more concerned about all the stuff not working for me [19:07] thisfred: yeah, the /etc/ has to be there i think [19:07] right [19:09] anyone care for a quick review? https://code.launchpad.net/~thisfred/desktopcouch/lp-791927/+merge/63271 [19:16] thisfred: looks good in general; out of curiousity, what's the deal with the installation paths being changed from absolute to relative? [19:19] tcole: this means we can install with a --prefix [19:19] only works with distutilsextra's setup though [19:20] gotcha [19:21] +1 [19:24] nessita: any luck yet? [19:25] dobey: I'm trying to fix all the u1cp tests to be, what I think is, correct [19:25] dobey: I'm getting tons of: [19:25] len(self.bus.list_names())) [19:25] ubuntuone.devtools.testcase.InvalidSessionBus: Too many bus connections: 100 [19:25] but I think we're not cleaning up the connection after being used, because the number increases by one after each test [19:26] so we're using the proper dbus but we're not cleaning up correctly [19:27] you are breaking stuff then [19:27] dobey: meaning? [19:27] well 100 is a lot; even when i was trying to make that check work correctly in devtools, i never got more than like 45 for the too many connections error, in u1cp tests [19:28] dobey: 100 is the amount of tests, I can show you the trace [19:28] so if it's at 100, it seems like maybe you're doing something that makes it connect to the live session bus [19:28] I don't think so, it grows by one after each test [19:29] grows by one just means that the connections aren't getting cleaned up. has nothing to do with which daemon it's connected to; does it start at 3 and grow by one all the way to 100? [19:30] checking that right now, but seems like it [19:30] FAILED (skips=1, errors=61, successes=14) [19:30] yeap [19:30] so those numbers do not add up to 100 [19:30] err, nevermind [19:30] ... [19:30] that was me only testing one file [19:31] ;-) [19:31] how are you running the tests that you get 100 tests? [19:31] dobey: I think I can make some progress, or at least I will do some serious cleanup on u1cp tests [19:31] I've found several bugs already [19:32] well i am stuck at this: [19:32] exceptions.AttributeError: 'ShutdownTestCase' object has no attribute 'backend' [19:33] dobey: inside what folder/module? [19:33] which makes no sense to me [19:33] ubuntuone.controlpanel.integrationtests.test_dbus_service.ShutdownTestCase.test_shutdown [19:33] hum [19:33] sounds like... not sure [19:34] it seems like the BaseTestCase.setUp() is not being run, which would be weird [19:34] well, I'm also at the point where: [19:34] exceptions.AttributeError: 'OperationsErrorTestCase' object has no attribute 'backend' [19:34] :D [19:36] right same problem [19:36] but ShutDownTestCase only has one test, and it's at the end, so i was looking to try and fix it first (since fixing it would probably also mean the rest get fixed as well) [19:37] weird [19:37] so for some reason, setUp is not getting run [19:37] yield super(ShutdownTestCase, self).setUp() [19:38] put that inside the test_shutdown(), and the error went away [19:38] dobey: look, I made the exception more verbose for the InvalidSession and I can tell that all those are test names ( and not the system ones) http://pastebin.ubuntu.com/616957/ [19:39] tcole: ^^ have ANY idea why that would be? subclass without a setUp(), and the parent setUp() not being run at all? [19:39] nessita: ok, so you broke tearDown() chain somewhere, because i have not hit any of those yet [19:39] dobey: if you move stuff around and it suddendly starts to work, it means we're having timing issues. Very, very likely that a deferred that is not waited for in a setUp manages to finish when the test is executed [19:39] dobey: I added all the missing (I KNOW) inlineCallbacks [19:40] oh [19:40] do not do that [19:40] dobey: there is no point of yielding if we're not waiting for those deferred [19:40] yes there is [19:40] twisted is horribly awfully broken [19:40] dobey: having yield there is pointless without the inlineCallbacks [19:40] no it isn't [19:40] dobey: what do we gain having it? [19:41] nessita: forcing synchronous calling [19:41] dobey: no without the inlineCallbacks [19:41] nessita: yes, without the inlineCallbacks [19:41] dobey: how are you so sure? :-) [19:42] um, yield without the callbacks certainly is pointless [19:42] nessita: because twisted TestCase calls setUp asynchronously via deferreds internally, and causes lots of race conditions [19:42] inlineCallbacks consumes the output of the generator and actually waits for the callbacks [19:42] tcole: maybe if twisted wasn't broken, that would be true [19:42] if you just use yield without inlineCallbacks, then most of that function will never even get called [19:42] because nothing is consuming the generator [19:43] dobey: my point exactly [19:43] (what tcole says) [19:43] when can we get rid of twisted? [19:43] anyways, dobey, you can try moving forward with your way, I can try mine, and see where we are at in one hour~ [19:44] I'm convinced we need to use yield+inlineCallbacks. If that breaks stuff, we need to fix our bugs! :-) [19:44] * nessita will try [19:44] nessita: well it doesn't matter, because you will never make it work with @inlineCallbacks on the setUp/tearDown [19:44] dobey: I'm amazed by your certainty... what makes you be so sure? [19:45] nessita: because i spent over a day just trying to make it work correctly for the 2 tests in devtools, and never got it working right. [19:45] dobey: so, using yield+inlineCallbacks in the devtools suite shows the issue? [19:45] which is why the DBusTestCase setUp/tearDown does not have inlineCallbacks, because twisted is horribly broken and doesn't work [19:46] nessita: yes, it causes pretty much all the tests in sso and cp to fail, because the stuff never gets called correctly [19:46] dobey: I switch to yield+inlineCallbacks on devtools and the suite runs fro devtools runs fine. Let me try u1cp :-) [19:47] twisted has some design problems, but we need to distinguish between what's actually broken and a lack of understanding of some aspects of python [19:47] nessita: yeah i think it works ok in devtools itself now because there are so few tests [19:47] and for that matter what's broken in the tests themselves [19:47] yeah, I'm not sure that devtools itself has adequate test coverage in this regard [19:47] dobey: I'll try, I think I can make it work. Using yield+inlineCallbacks on setUp/tearDown is what we did all along in u1client when I was in foundations [19:48] so I have some knowledge about this. Worst case scenario I get as frustrated as you got yesterday, and we cry together [19:48] nessita: but it doesn't mean it is correct, either; afaict, no matter what one does with twisted, it is wrong. [19:48] :( [19:48] dobey: that sentence will get you nowhere :-) cheer up! [19:49] nessita: there are, unfortunately, some issues with twisted's TestCase and MI, since it doesn't provide a "ground" implementation of setUp and tearDown that return deferreds :/ [19:50] tcole: I read that yesterday, while you were talking about that... I still find that hard to understand since inside syncdaemon we've been doing that all along [19:50] I've been doing it myself, generally [19:50] right [19:51] anyway, if you d = super().setUp() and hit TestCase, the way it's written right now, you'll get None back [19:51] and not a deferred [19:52] I think the thing that has saved us so far is that most of our test case subclasses don't super() that far up [19:52] I see [19:52] well, maybe we can avoid supering all that way up... [19:52] which unfortunately is bad in the case where the nearest common ancestor is twisted's TestCase [19:55] nessita: the REALLY weird thing that we were seeing yesterday though was that super().setUp was itself None in some cases :( [19:57] tcole: no, it just returned None [19:59] mm, the error we were seeing was when we tried to call the result of super().setUp and it wasn't callable because it was None [19:59] (note the lack of () ) [19:59] (I'm not talking about the result of super().setUp()) [19:59] yes i am noting the lack of [20:00] and you are confusing the issue i think [20:00] maybe [20:00] I was getting pretty tired [20:00] the problem was that setUp() returned None (because it was plain synchronous unittest.TestCase.setUp()) [20:01] there was that, too [20:01] the attribute itself was never None, because it just ended up pointing at that from the inheritance [20:01] hm [20:02] you made some example code that was based on the assumption that setUp itself was None; but it didn't actually work, since it wasn't None [20:02] ok [20:02] when i changed it to check the result instead of the attribute, there were still issues, though [20:02] the setup_dbus() bits never got called by the addBoth() for it [20:03] and i used addBoth just to test that it was ever getting called, whether from an error or not [20:06] but it never got called :( [20:07] the deferred returned by maybeDeferred wasn't firing for some reason [20:08] right [20:11] anyway, for today I guess I'll stick with a bug and a test case and a branch for twisted [20:13] dobey, tcole: what I've found out (and is the only issue for running tests so far) is that the self.bus.list_names() gets dirtier after each test, so I'm trying to a) fail in tearDown if self.bus.list_names is not the same than when the test startes b) find out what cleanup we're missing [20:16] in particular, we never call self.bus.release_name, which is a bug! [20:16] :-) [20:16] nessita: yes, because tearDown isn't getting called, or is just ending up as a deferred that doesn't block on the close() [20:16] nessita: you don't need to call release_name if you just drop the connection to the daemon [20:16] dobey: it is being called for me, every single time [20:16] I have a pdb in it [20:16] is being called, but the list_names() is not being cleaned up [20:16] nessita: the self.bus.flush()/self.bus.close() aren't [20:16] dobey: I can confirm they are [20:17] put prints in between [20:17] (as long as you have inlineCallbacks added, otherwise, of course they will not be called) [20:17] that makes absolutely no sense :) [20:17] aux contraire! [20:17] because it was working without the inlineCallbacks [20:18] otherwise that code wouldn't be in trunk [20:18] well, not really, we have the NAME_ALREADY EXISTS thing going on [20:18] if tests pass is a timing issue plus lucj [20:18] luck* [20:18] nessita: yes, because your tests are connecting to the wrong bus [20:19] dobey: let's discussed when I have the branch working or I'm totally frustrated :-) [20:19] discuss* [20:19] nessita: http://bazaar.launchpad.net/~dobey/ubuntuone-control-panel/testing/revision/157#ubuntuone/controlpanel/integrationtests/__init__.py [20:20] nessita: the code in register_mockserver() was why you were getting the NAME_EXISTS running under qt reactor [20:20] dobey: I did all those changes PLUS I added inlineCallbacks. There and in devtools [20:20] nessita: i told you this the other day [20:21] dobey: yeah, but if I fixed that the other day all the non-qt tests broke terribly [20:21] yes, because all the tests are terribly broken :) [20:21] so let's fix this where we should fix it! [20:21] * nessita fixes [20:21] which is why we're here now with all these problems :( [20:22] dobey: so, I already added those changes, they make sense. I added some more, I'll show you later, now I need some time to debug [20:28] thisfred: you know what is annoying [20:28] thisfred: the inconsistent usage of "desktopcouch" and "desktop-couch" inside desktopcouch [20:30] agree [20:30] me, I blame someone else [20:31] must be that eric guy [20:31] he can be such a pain to work with [20:31] 'tis true === thisfred is now known as thateric [20:31] hey! === thateric is now known as thisfred [20:34] dobey: so, one mistake I made last night was that I was tired and misused maybeDeferred [20:34] should have been maybeDeferred(super(...).setUp) and not maybeDeferred(super(...).setUp()) [20:35] well two days ago at this point, but hey :) [20:36] i don't think it matters though, and we'd still have the same issues [20:36] well, that was the source of my confusion about None anyway [20:37] using maybeDeferred correctly seems to address one of the problems at least [20:38] well it addresses the problem of getting a deferred to return, but inlineCallbacks does that too, right? [20:38] I thought inlineCallbacks used maybeDeferred, but apparently it doesn't [20:39] so we'd need to use it explicitly with or without inlineCallbacks+yield (versus addCallback) [20:39] ok, now i'm confused again [20:42] why would we need maybeDeferred with iC+yield? [20:52] Well, roughly speaking what inlineCallbacks does is something like this, to the generator that the wrapped function returns: [20:52] def chainCallback(gen): [20:52] gen.next().addCallback(lambda _: chainCallback(gen)) [20:53] i.e. it consumes a deferred from the generator, and adds a callback to it which consumes the next deferred and so on [20:53] but it IS expecting deferreds [20:53] whereas I'd erroneously thought that it did e.g. maybeDeferred(gen.next()).addCallback(...) instead of just gen.next().addCallback(...) [20:55] (does that make sense? to put it a different way, inlineCallbacks + yield works in two halves: a [generator] function that yields deferreds, and a decorator that consumes the deferreds and chains them together in sequence with addCallback) [20:56] so yield in an inlineCallbacks wrapped function, has to be on something that returns a deferred? [20:57] yeah, or more directly speaking the yielded value should be adeferred [20:57] so basically, yield is useless for doing what i thought it did [20:57] yes! :-) [20:58] well i can't help it if tcole explained it wrong to me :-/ [20:58] dobey: sorry, seems like I failed to explain it too [20:58] anyways, I narrowed the problems to dbus only [20:59] at least I was able to explain it better this time [20:59] the list_names() grow and I can't understand why. Before creating a dbus service instance, the list names is: [20:59] dbus.Array([dbus.UTF8String('org.freedesktop.DBus'), dbus.UTF8String(':1.0')], signature=dbus.Signature('s')) [20:59] after creating a service for the cp, I have: [20:59] dbus.Array([dbus.UTF8String('org.freedesktop.DBus'), dbus.UTF8String(':1.0'), dbus.UTF8String(':1.1'), dbus.UTF8String('com.ubuntuone.controlpanel')], signature=dbus.Signature('s')) [21:00] right [21:00] but when I release the name and shutdown the service, the list_names count goes down to 3, not 2 [21:00] result list_items is: [21:00] (dbus.Array([dbus.UTF8String('org.freedesktop.DBus'), dbus.UTF8String(':1.0'), dbus.UTF8String(':1.1')], signature=dbus.Signature('s'))) [21:00] nessita: because there is still the client connection [21:00] :1:1 is the extra one [21:00] hum... [21:00] :1.1 is the client connection [21:01] dobey: good tip, I know where to go now [21:02] no wait, I don't :-D [21:02] dobey: how do I disconnect a client connection? [21:02] doh. my laptop no longer boots [21:03] dobey: also, the list_names() grows from 2 to 4 before even connecting any client [21:03] nessita: the DBusTestCase does it [21:03] ah there it goes [21:03] dobey: but the list_names() grows from 2 to 4 before even connecting any client, how do you explain that? [21:03] nessita: no it doesn't [21:03] dobey: yes, I'm testing it IRL... [21:03] 155 def __init__(self, backend, conn=None, object_path=None, bus_name=None): [21:03] 156 """Create this instance of the backend.""" [21:03] 157 super(ControlPanelBackend, self).__init__(conn=conn, [21:03] 158 object_path=object_padth, [21:03] 159 bus_name=bus_name) [21:03] 160 print '\n-----------------', len(self.connection.list_names()), [21:03] nessita: how are you testing it? [21:04] that makes a print with the 4 connections [21:04] pastebin child :) [21:04] dobey: sorry [21:04] hey all, can I get reviews on this? [21:04] https://code.launchpad.net/~alecu/ubuntuone-control-panel/more-devices-tab/+merge/63292 [21:04] dobey: right after calling be = dbus_service.publish_backend() inside test_dbus_service.py:BaseTestCase the list_names growns to 4 [21:05] dobey: at that point there is no client whatsoever [21:05] i don't know what publish_bakend does exactly [21:05] but i guess it creates a connection to dbus, and then registers a name [21:05] dobey: it just creates an instance of ControlPanelBackend [21:06] dobey: http://pastebin.ubuntu.com/617013/ [21:06] alecu: can I trade? https://code.launchpad.net/~nataliabidart/ubuntuone-control-panel/subscribe-folders/+merge/63266 [21:06] nessita, ok, but I [21:07] nessita, ok, but I'll do it later [21:07] * alecu needs to go to pick Amelia right now. [21:07] cheers, all! [21:07] nessita: I'll do it [21:07] thisfred: thanks!!! [21:08] well i'm sure ControlBackend() and ControlPanelBackend() connect to dbus? [21:08] return dbus.service.BusName(DBUS_BUS_NAME, bus=dbus.SessionBus()) [21:08] ugh, that is a problem [21:08] dobey: ControlBackend is dbus-agnostic, and ControlPanelBackend is a dbus service [21:08] dobey: so not sure if I understand your question, but no, they don't connect to dbus [21:09] nessita: yes ControlPanelBackend does [21:09] dobey: where? [21:09] nessita: get_busname(); the line i just pasted which is the only line in that function [21:10] dobey: ... get_busname() == connect to dbus? why? [21:10] maybe I don't know what you mean with "connect to dbus" [21:10] alecu, in your branch Does the term "Other devices connected to my cloud" refer to devices that are actually connected now? [21:11] alecu, I know those aren't your words, I'm just curious [21:12] nessita: dbus.SessionBus() == connect to dbus [21:12] dobey: the line dbus.service.BusName(DBUS_BUS_NAME, bus=dbus.SessionBus()) generates a new connection bind to 'com.ubuntuone.controlpanel' [21:13] dobey: I've added prints before and after [21:13] nessita: prints that do what? [21:13] and before that call, the ':1.1' is already there [21:13] that code needs to be like this: http://pastebin.ubuntu.com/617022/ [21:13] and the tests need to pass in the already existing bus connection [21:14] dobey: http://pastebin.ubuntu.com/617023/ [21:14] anyways, that doesn't explain where the 1:1 conn comes from [21:14] I mean, seems like dbus.Session() is not an issue [21:14] well i don't know where it came from [21:15] it came from somewhere in the code whwere a bus connection is created [21:15] from the print itself? Since that does dbus.SessionBus() [21:15] probably [21:16] thisfred: if I remove the print and list the list_names further in the code, the list is the same [21:16] the 1:1 appears [21:16] nessita: how are you listing the names? [21:16] nessita: are you doing self.bus.list_names() in the test? or are you doing dbus.SessionBus.list_names() somewhere again? [21:17] self.bus [21:17] but not in the prints [21:17] or am I stupid? [21:17] thisfred: yes in the prints inside tests [21:18] thisfred: the pastebin is not test code but "live" code [21:18] ok [21:19] fukfukfuk, I might not have a working laptop for the sprint [21:19] heh, did you install 11.10 on it? [21:19] reinstall attempt 2 [21:19] time to buy a new laptop? [21:19] dobey I tried, stupidly [21:20] nessita: you should also print unique_name() if you really want to debug that; otherwise you can't tell which is you and which is others. [21:21] dobey: ok, I'll do that [21:21] nessita: which is another reason that bus needs passed in [21:21] using d-feet, both 1:0 and 1:1 are associated to python /home/nessita/canonical/u1/devtools/trunk/bin/u1trial -t test_dbus_service.ShutdownTestCase ubuntuone [21:22] which is... nosense? [21:22] nessita: right [21:22] no [21:22] one is probably created by DBusTestCase, and the other is probably a dbus.SessionBus() singleton that never gets closed [21:22] because you're calling SessionBus() when you shouldn't be :) [21:23] dobey: let me prove you or me wrong [21:23] * nessita adds anothe key print [21:24] dobey: YOU ARE RIGHT! [21:24] :-) [21:25] great, I know how to move on with this [21:25] dobey: thanks! I'll remove all the explicit calls to dbus.Session [21:25] passing the testing bus session around [21:26] :) [21:48] ok, am off for the evening. have a good one [21:50] you too === m_conley is now known as m_conley_away [22:23] nessita: hmm, I can't run DEBUG=True PYTHONPATH=. ./bin/ubuntuone-control-panel-qt [22:23] it gives me an import error [22:23] thisfred: for qtreactor? [22:24] no [22:24] I have that [22:24] Traceback (most recent call last): [22:24] File "./bin/ubuntuone-control-panel-qt", line 33, in [22:24] from ubuntuone.controlpanel.gui.qt import main [22:24] ImportError: No module named qt [22:24] did you run ./setup.py build? [22:24] ah no, that's the missing step [22:24] also, is weird, that path is versioned [22:25] nessita: after I ran that, I get the same though :( [22:25] thisfred: is weird, ubuntuone.controlpanel.gui.qt is a versioned path [22:25] what does that mean? [22:25] the QT dir is in the repo [22:25] ls -l ubuntuone/controlpanel/gui [22:26] oh yeah the dir is there [22:26] I suspect the import error is caused by something else [22:26] are the __init__.py files there? [22:26] nessita: yep [22:27] you sure you're running PYTHONPATH=. ? [22:27] can you try: [22:27] PYTHONPATH=. python -c "from ubuntuone.controlpanel.gui.qt import main" [22:28] nessita: DOH! typo in PYTHONPATH :) [22:28] ah! [22:28] well, the world is in place (still) [22:31] nessita: so we have to do this through subprocess.Popen? Probably because we have no dbus on windows, I guess? But is there really no API we can use from sd? [22:33] thisfred: we do it from subprocess.Popen as a hack becasue qt + twisted reactor + dbus = seg Faults [22:34] thisfred: is a 110% ugly hack, the main part is building the QT ui [22:34] nessita: ok, works for me :) [22:34] for me too! :-P) [22:35] nessita: one more question: I really don't understand the reason for @gui.defer.inlineCallbacks [22:36] instead of @defer.inlineCallbacks? [22:36] or why they are there at all? [22:36] it's just getting t.i.d.inlineCallbacks [22:36] the first [22:36] do we monkey patch defer? [22:36] nopes [22:37] I just like to use the import from the module I'm testing [22:37] no folders doesn't do anything with it [22:37] Why? [22:38] from my POV, is cleaner. For example, if we change twisted deferred's for plain python deferreds, we just change that in the gui module [22:38] This implies that it's some special version of defer, to me, so it makes the tests more mysterious [22:38] I strongly disagree that it's cleaner [22:38] for me is like the implementation gets really hidden [22:38] Your choosing programmer laziness over readability [22:38] through all my tests I always use: gui.os, gui.gtk, etc [22:38] that is horrible [22:39] * alecu reviews nessita's branch [22:39] IMO :) [22:39] * alecu does not like it either. [22:39] thisfred: I disagree, I find it cleaner. But I don't think we will reach an agreement here [22:39] I can remove the gui., no problem [22:39] I'll fix it soon, I'm trying to debug a dbus nightmare here [22:40] please, other than that, it is great. (Also, renaming folders to gui I would not do, only do import as when there are name clashes) [22:40] this all breaks the principle of least surprise [22:40] alecu: any idea why sig.remove(), where sig is the result of a proxy.connect_to_signal, is not removing the connection between the handler and the proxy from the dbus? [22:41] nessita, that sounds like a qtreactor+dbus issue [22:41] alecu: I'm running plain glib reactor :-( [22:41] :P [22:41] but, good guess! it made sense :-D [22:42] nessita, then no idea :-( [22:42] I know! [22:42] * nessita fixes [22:43] also: independent of opinion on cleanliness: these things make refactoring harder. It's exactly like using relative imports [22:43] thisfred: from my POV, is the exact opposite. After actually doing several refactors, these things ease it. AT least in my experience :-) [22:44] at least if we assume that our code changes more frequently than we switch between different libraries [22:44] which is not that true... [22:44] I know we're going through big changes *now* but that's fairly atypical [22:45] or at least I hope to god it is :) [22:46] nessita: ok, have to walk the dog, ping me when a new version is pushed, and I'll approve in a bit [22:46] thisfred: thanks! [22:48] nessita, I'm following the dbus code and can't find a quick reason to give. There should be something wrong in the setup in order for the remove to not work. [22:48] alecu: yes, I found it [22:48] nessita, it even has a thread lock, so it does not looks too conspicuous. [22:49] alecu: we're mixing the real session bus with the test bus [22:49] nessita, oh, that. [22:49] I'm fixing that [22:49] (it will not be pretty) [22:49] nessita, how are we mixing it???? [22:49] thisfred: pushed to revision 162. [22:49] alecu: by calling dbus.SessionBus() anywhere in live code or test code [22:50] nessita: thx, rereviewing (waiting for the mail, and the dog thinks it's too hot anyway) [22:50] thisfred: lol [22:50] nessita, hmmm... but since we are setting the ENV with the value of our connection... the dbus.SessionBus() should use our test daemon, right? [22:51] seems like that is not happening [22:51] empiric prints and tests shows that is not happening [22:52] ok. [22:56] science does not lie [22:56] :-D [23:02] nessita, approved. [23:03] thanks! [23:03] nessita, you didn't get to review my branch, right? [23:03] alecu: not yet, is in my ToDO [23:03] oh, but you leave tomorrow! [23:04] nessita, right. In fact, I'm going to fill my lugagge right now. [23:04] alecu: I will have to leave it for tomorrow, I need to run to a dinner... [23:04] * alecu will be back later. [23:04] I will tomorrow [23:04] nessita, no problem. [23:05] * alecu will be back later anyway. [23:05] ok [23:05] bye alecu [23:05] have a safe trip! [23:06] ok, gotta run [23:06] bye all!