[12:13] <carlos> daf: how was the party?
[12:34] <daf> it was good
[01:24] <carlos> good night, I want to wake up early tomorrow 
[10:09] <daf> good morning
[10:11] <carlos> daf: morning
[10:37] <daf> carlos: how was your day yesterday?
[10:38] <carlos> well, it was not as productive as I thought, the Efforts task took me more time I wanted.
[10:38] <carlos> but I think I have now a clear image about schema/label
[10:39] <daf> I thought we were working on beta-critical stuff?
[10:39] <carlos> daf: that should be working for beta
[10:39] <carlos> We talked about that
[10:39] <carlos> and was already on my tasks list
[10:39] <daf> oh, ok
[10:39] <daf> I thought it was non-beta-crtitical
[10:39] <carlos> Also, the statistics graphs are ready for limi's magic
[10:40] <carlos> daf: Don't worry, the "big" part of my work is also needed for the People/prefered languages
[10:40] <daf> ok
[10:41] <carlos> daf: Lu asked for it last week, I thought it was needed for the beta..
[10:42] <daf> hmm, I should have posted the list I made up on the wiki
[10:47] <carlos> daf: spoken-languages is fine for you as the name for the schema?
[10:48] <carlos> or 'know-languages'
[10:48] <daf> translation-languages, perhaps
[10:50] <carlos> Hmm, the Labels should be created with the script that fills the Languages/Countries tables
[10:52] <daf> hmm, it would be nice if the user didn't have to navigate through products to get to PO templates
[10:53] <carlos> daf: With lots of templates is not easy to do it without a bloated page
[10:53] <carlos> daf: we need to import data
[10:54] <carlos> real data
[10:54] <carlos> to see how will look like it
[10:55] <carlos> hmmm. I just had an idea about the schemas/labels
[10:56] <carlos> daf: I'm thinking on storing only the language code instead of the name, and then make another query to the Language table
[10:56] <carlos> to get the english name and the native name
[10:56] <carlos> that way the duplicated data is small 
[11:15] <daf> what's the status of the preferred languages things?
[11:15] <daf> do you think it will be ready soon?
[11:16] <carlos> daf: I have the sample data ready
[11:16] <carlos> I'm starting now with the code development
[11:16] <daf> cool
[11:16] <daf> I suppose it's not really going to have much effect until we have authentication working
[11:17] <carlos> Hmm, true, but we could "hardcode" one of the sample persons (you, lalo or I)
[11:17] <carlos> and then, if we change the database, the list of languages will also change
[11:21] <carlos> Breakfast time, see you later
[11:53] <daf> carlos: did you get a chance to look at my changes to the export document?
[11:53] <carlos> upps
[11:54] <carlos> I forgot it O:-)
[11:54] <carlos> sorry
[11:54] <carlos> I will do it today
[11:54] <daf> no problem
[12:07] <SteveA> hi
[12:09] <daf> hi Steve
[12:12] <carlos> hi
[01:20] <SteveA> lulu: can we talk about the authentication for the websites?
[01:43] <limi> apparently not :] 
[01:43] <SteveA> limi: hi
[01:44] <limi> hi SteveA
[01:44] <carlos> daf: Language preferences is working :-P
[01:45] <daf> carlos: ooh
[01:45] <carlos> daf: and you are the "default" until we get the login stuff in place :-P
[01:48] <daf> heh
[01:49] <carlos> wow, the arch commits list works again, no more garbage....
[01:51] <daf> yes, I think lifeless fixed it
[01:57] <carlos> daf: My next tasks is finish the efforts code
[01:57] <carlos> daf: Do you have anything more important for me?
[01:58] !dmwaters:*! Hi all, we're currently being nailed with drones, we're doing our best to get things under control
[01:58] <daf> there must be something more important thant that :)
[01:59] <carlos> Could you populate the task board with pending things?
[01:59] <daf> don't we need scripts for creating projects, products, people, etc?
[02:01] <carlos> yes, but I think Lalo is working on it already
[02:01] <daf> do we have a user interface for setting language preferences?
[02:01] <daf> I see that's on the task board
[02:02] <carlos> daf: but that should be added to the user preferences, shouldn't it?
[02:03] <carlos> daf: where you configure your login, email, etc, etc...
[02:03] <carlos> Do we have it already in any place?
[02:03] <carlos> limi: Could you review https://rosetta.warthogs.hbd.com/rosetta/projects/gnome and https://rosetta.warthogs.hbd.com/rosetta/projects/gnome/evolution/?
[02:04] <daf> carlos: yes, it should be on the preference page
[02:04] <daf> carlos: I don't think we have one yet
[02:05] <carlos> limi: when you have more than one language we have the same links for every language. Is that ok from the usability point of view?
[02:05] <carlos> daf: Is it included in Steve's work?
[02:05] <daf> carlos: I think the fact that clicking on different languages gives you the same thing is ugly/confusing
[02:06] <daf> carlos: no
[02:06] <carlos> daf: me too, that's why I'm asking limi, because I just noticied it :-(
[02:06] <daf> SteveA has been working on the non-UI side of the auth stuff
[02:06] <carlos> ok
[02:06] <daf> SteveA: have you merged any of the auth stuff yet?
[02:06] <carlos> Do we have any place where lists the things a user will be able to configure from there?
[02:07] <carlos> I suppose that the DB schema has been updated to store the user password, right? (I don't remember any field to store it)
[02:09] <limi> the Translation Overview page shouldn't have the languages before you have selected a product, afaik
[02:10] <limi> :)
[02:10] <limi> and, "A system error occurred." ;)
[02:10] <carlos> URL?
[02:10] <limi> https://rosetta.warthogs.hbd.com/rosetta/projects/gnome/evolution/evolution-2.0/translate
[02:10] <limi> you guys desperately need unit tests soon :)
[02:10] <limi> it's going to be totally unmanagable if not
[02:11] <daf> limi: we've just added unit tests to that page
[02:11] <daf> limi: I've fixed that bug but haven't merged it yet
[02:12] <carlos> limi: Then, If the project list does not know about any language...
[02:13] <carlos> limi: should I calculate the average of all languages?
[02:14] <carlos> That will break the statistics or we need to specify a list of translations we care
[02:14] <carlos> because there are lots of languages that does not have any translation
[02:14] <limi> yes, I thought this was the page where it would show the summary for all languages?
[02:15] <carlos> hmmm
[02:15] <carlos> sorry
[02:15] <carlos> :-P
[02:15] <carlos> only the summary of all languages a translator knows, right?
[02:17] <limi> on the overview page, full summary
[02:17] <carlos> daf: upps, You need to update your database to get working new rosetta
[02:17] <limi> this is the thing that Mark wanted, remember?
[02:17] <limi> with the overall project language stats
[02:17] <daf> carlos: huh?
[02:18] <carlos> daf: rosetta servers have my last code changes
[02:18] <carlos> but the database does not have the needed data
[02:18] <carlos> limi: I know
[02:18] <limi> ok
[02:18] <limi> :)@
[02:18] <carlos> but I'm focusing on the other part of the stats
[02:19] <limi> on the overview page (is this an Effort?), the current stats make less sense
[02:19] <carlos> limi: why?
[02:20] <limi> because you need some aggregation anyway
[02:21] <limi> if it should show anything, it's the summary of all the products inside the project
[02:21] <limi> can you easily report that?
[02:22] <carlos> per language or globally?
[02:23] <carlos> I can do both
[02:24] <limi> per language would be nice
[02:25] <carlos> limi: that's what we have already at https://rosetta.warthogs.hbd.com/++skin++Debug/rosetta/projects/gnome
[02:25] <carlos> hmm
[02:25] <limi> ok
[02:25] <carlos> no, sorry, is not the same
[02:25] <carlos> but the code is the same
[02:25] <carlos> so it's already done
[02:25] <limi> ok
[02:26] <limi> but we have separate pages for Effort and Project now, right?
[02:26] <carlos> not yet
[02:26] <carlos> but we will have it soon
[02:27] <carlos> SteveA: please ping me as soon as you are free, I need to know the status of the login/session code. thanks
[02:27] <carlos> daf: until I get an answer from Steve, I will finish the efforts part. Ok?
[02:28] <limi> ok
[02:28] <limi> :)
[02:28] <limi> nice work
[02:29] <carlos> limi: did you saw the new statistics vars? Do you need anything else?
[02:32] <carlos> limi: I suppose you should add a note at /rosetta/projects/gnome so the user knows that the values are related to all languages she's interested on translate
[02:32] <limi> yes
[02:32] <limi> I'm going to move things about a bit :)
[02:34] <carlos> limi: ok
[02:35] <daf> carlos: there are more important things than translation efforts
[02:35] <daf> carlos: I think you can start writing the template for the preference page without Steve's work
[02:36] <carlos> daf: But I don't have any idea about how will it work, where will it be hosted and if it's a rosetta specific page or launchpad one
[02:36] <daf> ok
[02:37] <daf> for now, we will put it at /rosetta/preferences
[02:37] <daf> and the only preference it will have is the language preferences
[02:37] <carlos> ok
[02:37] <SteveA> hi carlos.  I'll be merging the auth code today
[02:38] <daf> and I think it should work more or less like the other forms we have in Rosetta
[02:38] <carlos> SteveA: ok, please notify me it as soon as it's ready
[02:38] <daf> you might like to look at test/test_browser.py for test cases I've added for the view classes
[02:38] <SteveA> ok
[02:38] <carlos> daf: ok
[02:41] <limi> shhh, everybody be quiet, lulu is back O:)
[02:41] <carlos> :-P
[02:43] <lulu> SteveA: sorry hon - was away from my desk....
[02:43] <lulu> SteveA: sure...
[02:43] <SteveA> hi
[02:43] <lulu> hey - how was your trip back?
[02:44] <SteveA> it was okay.  I felt really tired yesterday, though.
[02:44] <SteveA> much better today
[02:45] <SteveA> so, I took yesterday off, as the bank holiday.
[02:45] <lulu> good - I'm sure everyone's needed some recovery time.
[02:45] <SteveA> websites and authentication:  we have the ubuntu plone site.
[02:45] <lulu> I also need to hat to you about the app server. James is already onto the webserver stuff. Zope and Plone are huge! :o)
[02:46] <SteveA> we discussed having the plone site do authentication against a launchpad app server via xmlrpc (or something similar)
[02:46] <lulu> yup
[02:47] <lulu> McQuarie = app server and not accessing Emperor direct makes James very happy.
[02:47] <SteveA> ok.  I can arrange for the code to be written in launchpad that will do this.  Who will write the code to make plone do this?
[02:47] <SteveA> is this part of upfront's contract?
[02:48] <lulu> No. They are purely commissioned to do installation and config. But I can ask them to quote on it, if they have the know how.
[02:48] <SteveA> limi: what's the standard way to do pluggable auth in plone?
[02:48] <lulu> I will need a comprehensive spec from you please.
[02:48] <limi> any way Zope does it
[02:49] <SteveA> I wonder what roche would recommend.
[02:50] <SteveA> lulu: how about I mail roche, explain the overall plan, and ask him what he'd suggest?
[02:50] <lulu> sure - I'll send you an email with his details - pls cc me on correspondence with him,
[02:51] <SteveA> I'll cc you.  I know roche already, though.
[02:54] <lulu> SteveA: great. 
[03:00] <daf> good idea
[03:07] <limi> lulu: btw, could you forward me the summary we made of the theft at the hotel? my insurance company wants it.
[03:08] <lulu> Limi: sure.
[03:09] <lulu> limi: Jane is looking for you & also - the Squid setup for Plone file - could you check with James that it's readable and what he needs. Thanks :o)
[03:11] <SteveA> the squid set-up for the parts that forward requests to launchpad will be a bit different.
[03:11] <SteveA> but, we can add that to the set-up later on, after the ubuntu and canonical parts are done.
[03:14] <limi> lulu: uhm, I've already sent the file twice, what's missing?
[03:16] <lulu> limi: as you saw from James' email - is that what he should be expecting? I cannot read the binary. Pls check with him he has what he needs. cheers.
[05:46] <carlos> limi: ping
[05:47] <carlos> limi: I need some help
[05:47] <carlos> with a page
[05:47] <limi> ok
[05:47] <carlos> it's a list of languages
[05:47] <carlos> and the user will select the ones he/she knows about
[05:48] <limi> ok
[05:48] <carlos> here you have the output I get:
[05:48] <carlos> http://gollum.pemas.net/~carlos/translator.html
[05:48] <carlos> I don't have the .css but it's the translator's dashboard modified
[05:49] <limi> yup
[05:49] <limi> I have a widget for that
[05:49] <carlos> I know it's not a good way to put that information
[05:49] <carlos> so don't blame me for the big list :-P
[05:50] <limi> why are all the language names in English?
[05:50] <carlos> The code that generate that page will be at rocketfuel in some minutes
[05:50] <carlos> limi: just testing :-)
[05:50] <limi> ok
[05:50] <carlos> should I change anything at browser.py to use the widget?
[05:52] <limi> no, I don't mean widgets in the Z3 sense ;)
[05:54] <carlos> daf: we need a way to cache the language list, we have now 632 in the database and the webpage I have to list all them takes about 3 seconds in my laptop to query the list do some checks and render it
[05:54] <limi> it can be cached heavily, it really doesn't change very often
[05:54] <carlos> limi: then, Should I do anything, or just implement the form summit for that page as I have it now?
[05:55] <limi> carlos: just put in what you have, and I will go and add the widgets
[05:55] <carlos> limi: it's now at rocketfuel
[05:56] <carlos> the submit is not yet at rocketfuel, I'm still working on it
[05:56] <limi> ok
[05:58] <daf> carlos: well, it should run much faster on the server
[05:59] <daf> carlos: if it's still slow on the server, we'll optimise it then
[05:59] <carlos> ok
[05:59] <carlos> daf: could you update the server's  database, rosetta is broken until it's update
[05:59] <carlos> ?
[05:59] <daf> ok
[06:00] <carlos> thanks
[06:03] <daf> one
[06:03] <daf> done
[06:03] <daf> (I think)
[06:05] <carlos> daf: yes, it works now
[06:06] <carlos> daf: hmm, I don't get this error in my computer: https://rosetta.warthogs.hbd.com/++skin++Debug/rosetta/translator
[06:08] <daf> neither do I
[06:09] <daf> SteveA: I'm getting a weird error
[06:10] <daf> SteveA: I think it's because sqlos is trying to create a DatabaseException with the wrong number of parameters
[06:10] <carlos> daf: it comes from my latest changes, do you have them?
[06:10] <daf> no, I don't
[06:10] <carlos> then it's normal you don't get the error in your local machine :-)
[06:11] <SteveA> daf: can you paste it into jabber?
[06:11] <daf> SteveA: sure
[06:11] <daf> carlos: :)
[06:32] <carlos> daf: How could I know if a checkbox is checked or not from the Submit method?
[06:33] <carlos> self.request.form[checkbox_name] .checked?
[06:33] <SteveA> this is a tough problem
[06:33] <SteveA> no
[06:33] <SteveA> so, all you can tell is if a checkbox is checked
[06:34] <SteveA> you cannot tell the difference between a checkbox being unchecked, and a checkbox not being there at all
[06:34] <carlos> hmm
[06:34] <carlos> ok, it should not be a problem
[06:34] <carlos> for this page in concrete
[06:34] <SteveA> to see what you get out of a particular form, put <div tal:content="request" /> a the bottom of a page
[06:34] <carlos> thanks
[06:34] <SteveA> you'll see a bulleted-list output of the request
[06:35] <carlos> ok
[06:39] <daf> or, to put it differently,
[06:42] <carlos> X-)
[06:43] <carlos> daf: the tla undo is the only thing that keeps me to blame arch :-)
[06:43] <daf> carlos: sorry?
[06:45] <carlos> daf: sorry, /s/blame/speak badly about/
[06:46] <daf> "keeps me to" or "keeps me from"? :)
[06:46] <carlos> from 
[06:47] <carlos> keep moving, nothing to see here...
[06:47] <carlos> :-P
[06:48] <daf> no worries, English idioms are hard :)
[06:50] <daf> muy difcil
[06:50] <carlos> daf: :-)
[06:52] <daf> humph:
[06:52] <daf> DatabaseException: unindexable object
[06:53] <carlos> SteveA: How could I use different sentences like <div tal:content="view/submit" /> inside the same template?, It's a template with three forms and I want to use different methods for every form
[06:53] <carlos> daf: URL?
[06:54] <SteveA> carlos: there are various ways of doing this
[06:54] <SteveA> first though, I must point out the usability pitfall:
[06:54] <SteveA> is it obvious to someone using one part of the form that values they enter or change in the other parts of the form will be lost?
[06:55] <SteveA> actually, you have a choice about this, if you take the approach I will describe.
[06:55] <SteveA> so, have one form.  That is, one set of <form action="+name" method="post"> ... </form>
[06:55] <carlos> yes, it's easy to know that the other changes will be lost
[06:56] <SteveA> inside the form, have three submit buttons with different names:
[06:56] <SteveA>  <input type="submit" name="submit1" value=" hello, button one here" />
[06:56] <SteveA>  <input type="submit" name="submit2" value=" hello, button two here" />
[06:56] <SteveA>  <input type="submit" name="submit3" value=" hello, button three here" />
[06:57] <SteveA> also, as with other forms, include a <div tal:replace="view/processForm" tal:omit-tag="" /> element, or something similar that calls "processForm()" on the view class.
[06:58] <SteveA> then, in the processForm method, you can have an "if" statement that decides which button was pressed.
[06:58] <SteveA> 
[06:58] <SteveA> Another method of doing this whole thing is to have three separate <form action="+name" method="post"> </form> elements.
[06:59] <carlos> hmm, and how could I know which button was pressed? like the checkbutton? if it's pressed it will be there as a form element?
[06:59] <SteveA> you can make the submit buttons have the magic name <input type="submit" name="handlerOne:action" value="press to submit" />
[06:59] <SteveA> this will cause the "handlerOne()" method on your view class to be called 
[06:59] <SteveA> when the form is submitted.
[06:59] <SteveA> I advise against doing this, though
[07:00] <SteveA> as it is rather magical
[07:00] <carlos> ok, then we forget this option :-)
[07:01] <SteveA> if you want to make the forms distinct, then have three form elements, but use different names on the submit buttons to distinguish them
[07:01] <SteveA> and handle them the same
[07:02] <daf> carlos: it's something to do with my local changes, I think
[07:02] <carlos> daf: ok
[07:02] <daf> the last bit of Rosetta code in the trace is a .count() call
[07:02] <carlos> SteveA: ok
[07:03] <carlos> thanks
[07:49] <carlos> daf: I need to get the ID for a row of the Schema table from browser.py and I don't know how could I do it without using the SQL Objects methods, is there any way to use getUtility to do it?
[07:55] <SteveA> if you need that, it should be part of the interface you're using
[07:55] <SteveA> that way, it is just an integer id
[07:55] <SteveA> you don't care if it comes from the database or whatever
[07:58] <carlos> SteveA: but I need a way to query that object
[07:59] <carlos> with the languages it's done with getUtility(ILanguages) and I get an object that let's me iterate over all available languages
[08:01] <SteveA> oh, okay
[08:01] <SteveA> so, you'll need one of those for schemas, I guess
[08:02] <carlos> ok
[08:03] <carlos> grrr
[08:03] <SteveA> you need to search for a particular schema object, right?
[08:04] <SteveA> so, you'll need an object that gives you an ability to do that search
[08:04] <carlos> yes
[08:04] <carlos> ok
[08:34] <SteveA> who wrote: from canonical.rosetta.interfaces import *  ?
[08:35] <SteveA> in sql.py
[08:35] <SteveA> we can only use "from xxx import *" where "xxx" defines an __all__ in the module
[08:37] <carlos> No idea
[08:56] <daf> SteveA: ok
[08:56] <daf> SteveA: I can't remember who wrote that
[08:56] <daf> I might be guilty
[08:56] <SteveA> the dependencies are now unclear
[08:57] <SteveA> I think I'm almost ready to check in the auth stuff
[08:57] <daf> I'll half-heartedly argue that it's not so bad in this case because interfaces.py contains (absolutely should contain) nothing but interface declarations
[08:57] <SteveA> it obviously also contains Interface and Attribute
[08:57] <SteveA> and perhaps other schema stuff
[08:58] <daf> ah, right
[08:58] <SteveA> and also any interfaces that the rosetta interfaces extend
[09:17] <carlos> hmm
[09:17] <carlos> funny...
[09:17] <carlos> ProgrammingError: ERROR: column personlabel.id does not exist SELECT PersonLabel.id, PersonLabel.person, PersonLabel.label FROM PersonLabel WHERE PersonLabel.person = 14 AND PersonLabel.label = 4 LIMIT 1
[09:17] <carlos> The table does not have such field 'id'
[09:19] <carlos> daf: Any idea about how could I do a select in that case?
[09:19] <carlos> personLabel = RosettaPersonLabel.select('''
[09:19] <carlos>             PersonLabel.person = %d AND
[09:19] <carlos>             PersonLabel.label = %d''' %
[09:19] <carlos>             (self.id, label.id))[0] 
[09:20] <daf> hmm
[09:20] <carlos> that's what I have now, before that I had a selectBy, but It also fails
[09:20] <daf> I think SQLObject does not like tables without IDs :)
[09:21] <SteveA> correct
[09:21] <carlos> funny
[09:21] <carlos> SteveA: any suggestion?
[09:21] <SteveA> I just merged auth into RF
[09:21] <SteveA> but, it was a messy merge
[09:21] <SteveA> so, I might have accidentally broken something
[09:21] <carlos> I only need a SQLObject to add and remove records to that table nothing more
[09:22] <SteveA> at your earliest convenience, can you try merging from RF, and see if stuff works for you?
[09:22] <carlos> the "normal" queries are handled by a RelatedJoin
[09:23] <daf> SteveA: according to the PQM log, your merge up contained patches doing nothing but merging down
[09:23] <SteveA> hmm
[09:24] <SteveA> tla changes here shows nothing
[09:24] <daf> did you merge the correct branch?
[09:24] <carlos> SteveA: are you sure you have your mirror updated?
[09:24] <SteveA> new files are committed to my archive
[09:25] <SteveA> perhaps I do not have my mirror updated
[09:25] <daf> "tla tree-lint"?
[09:25] <SteveA> what's the "do a mirror" command?
[09:26] <carlos> tla push-mirror $ARCH_ARCHIVE $ARCH_CATEGORY
[09:26] <SteveA> tla archive-mirror
[09:26] <daf> carlos: one of the ftests is failing because you added sample data, I think
[09:26] <carlos> hmmm
[09:26] <carlos> daf: yes, it's possible
[09:26] <daf> "make fullcheck"
[09:26] <carlos> daf: the multiline && plural forms one
[09:27] <SteveA> ok, I am mirroring
[09:27] <SteveA> thanks carlos
[09:27] <daf> carlos: exactly
[09:27] <carlos> I will fix it now
[09:29] <daf> thanks
[09:29] <carlos> daf: I need to leave now (after fixing the test) if I want to have a chance to pass tomorrow's exam. The Language edition is more or less implemented, It lacks some error checks and fix the problem with SQLObjects and perhaps any other thing I forgot, but I'm not able to fix it now. Do you want it committed or what should I do?
[09:31] <daf> go and revise :)
[09:31] <daf> if you like, you could send me a changeset and I could finish it off
[09:32] <daf> grmmm:
[09:32] <daf>   File "/home/daf/src/canonical/dists/launchpad/lib/sqlobject/dbconnection.py", line 189, in _executeRetry
[09:32] <daf>     return cursor.execute(query.encode('utf8'))
[09:32] <daf> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 96: ordinal not in range(128)
[09:32] <SteveA> well, indeed
[09:33] <SteveA> the query is not ascii nor unicode
[09:33] <carlos> daf: ok, I will send you the patch
[09:33] <SteveA> why that is, I do not know
[09:34] <daf> it's  in latin-1
[09:34] <SteveA> that is bad
[09:35] <SteveA> strings in python are just bytes
[09:35] <SteveA> they do not know what encoding they are in
[09:35] <SteveA> where does the latin-1 string come from?
[09:35] <daf> I was just observing
[09:35] <SteveA> for an?
[09:37] <carlos> daf: the ftest fails because a problem in sql.py
[09:37] <carlos>   File "/home/carlos/Work/dists/launchpad/lib/canonical/rosetta/sql.py", line 385, in __getitem__
[09:37] <carlos>     elif isinstance(key, string):
[09:37] <carlos> NameError: global name 'string' is not defined
[09:37] <carlos> also, I need to update the test
[09:37] <daf> SteveA: capital A with tilde
[09:37] <carlos> but there are other problems there
[09:37] <SteveA> ?
[09:37] <daf> that should be isinstance(key, str)
[09:38] <daf> there are other ocurrences of 0xc3, but no A-tilde
[09:38] <SteveA> there should not be an A-tilde in the source
[09:38] <SteveA> as our source should be all in ascii
[09:38] <daf> they are in the test data
[09:38] <SteveA> oh
[09:38] <SteveA> how is the test data getting into the software?
[09:39] <daf> through the test code, I imagine
[09:39] <daf> I'm not familiar with the import/export tests
[09:39] <carlos> daf: the test data should have only escaped unicode chars ..
[09:39] <daf> carlos: "escaped"?
[09:39] <daf> it all looks like UTF-8 to me
[09:39] <carlos> \traducci\xc3\xb3n
[09:40] <SteveA> ok, my merge went through
[09:40] <daf> carlos: gnome-terminal.po
[09:40] <carlos> yes, sorry, utf-8 chars not unicode ones
[09:40] <SteveA> apologies in advance if I broke something
[09:40] <carlos> daf: aahh, no idea then
[09:41] <SteveA> when strings get into the domain code, and the database code, they should be one of two things:
[09:41] <SteveA> * python unicode objects
[09:41] <SteveA> * python str objects that are to be treated as opaque 8-bit data
[09:41] <SteveA> there should be no str objects meant to be treated as character strings
[09:42] <SteveA> the code that interacts with the outside world (browser, files, database, etc.) must carefully deal with encoded strings, and convert them to unicode objects
[09:42] <SteveA> unless we really want to preserve the data, in which case it is "data"
[09:44] <carlos> daf: File "/home/carlos/Work/dists/launchpad/lib/canonical/rosetta/sql.py", line 397, in __getitem__
[09:44] <carlos>     sets = RosettaPOMessageSet.select('''
[09:44] <carlos> NameError: global name 'msgid_obj' is not defined
[09:45] <carlos> daf: I'm going to have dinner now, please commit all fixes when you finish and that way I will be able to get the missing data easily. Ok?
[09:45] <daf> carlos: I've fixed that one
[09:46] <carlos> daf: did you requested a merge?
[09:46] <daf> I'm tring to fix the Unicode problem first
[09:46] <carlos> ok
[09:47] <carlos> just tell me when it's done and I will fix it tonight
[09:47] <carlos> later
[09:50] <daf> ah, I think it was because of a message being encoded as UTF-8 twice
[09:51] <daf> once in canonical.rosetta.sql and again in sqlo{s,bject}
[10:13] <daf> SteveA: I think you forgot to update the SQL test generation code when you modified canonical.rosetta.interfaces
[11:27] <carlos> daf: Now that you mention it... I did some interfaces update and did not update it, sorry. I will add the tests tomorrow.