Malcom, I understand your point, I really didn't know setlocale would be so poisonous, for now on I'm avoiding using it!
But locale format doesn't make any sense in a WKT representation, since it's simply spits data that is in a wrong format, so useless. About people talking of thread safety... even in the official python docs they talk abou this! http://docs.python.org/lib/module-locale.html ...setlocale() is not thread safe on most systems. Applications typically start with a call of... Thanks for the reply. Luiz Fernando Barbosa Vital ZNC Sistemas On Tue, Aug 26, 2008 at 2:26 PM, Malcolm Tredinnick <[EMAIL PROTECTED]> wrote: > > > On Tue, 2008-08-26 at 11:01 -0300, Luiz Vital wrote: >> Hello all, >> >> I've being using geodjango since it was in a branch in a number of >> projects, and in one project specifically I was getting and >> OGRGeometry Exception intermitently. >> >> After debuging the code I noticed that de wkt string generated from >> geometries were taking the current locale into account, thus raising >> the Exceptions due to a bad WKT string representation. Here goes an >> example: >> >> >>> import locale >> >>> from django.contrib.gis.geos import Point >> >>> p = Point(-45.23, -23.15) >> >>> p.wkt >> 'POINT (-45.2299999999999969 -23.1499999999999986)' >> >>> locale.getlocale() >> (None, None) >> >>> locale.setlocale(locale.LC_ALL, ('pt_BR','UTF-8')) >> 'pt_BR.UTF8' >> >>> p.wkt >> 'POINT (-45,2299999999999969 -23,1499999999999986)' >> >> Notice de comma "," for decimal separator in the last output. >> >> It must be something in the GEOS C library and in this case should be >> fixed there, but maybe it should be avoided reseting de locale before >> calling the C routine and restoring the locale to what it was just >> after. >> >> I think the reason this problem was not always happening is related to >> the some setlocale thread safety issue. > > People keep saying "thread safe" when they talk about setlocale(), but > the real point is that it simply has global effect. It's not local to > the current thread -- so there's no relevance in any thread safeness, > since it's not intended to be per-thread. > >> >> Any thoughts / tips on > > Yes, don't do that. > > It will affect things right down to the C library level and if the > library isn't designed to intentionally counteract those affects (which > is sometimes a library design bug and you could consider filing a bug > after researching if they've already considered this or not) you need to > make sure you play nicely with the library. > > Note that I say "sometimes" because it could be that it is only the > printed output which is affected here, in which case it's completely > correct: the string output *should* be presented in the locale you asked > for. However that can have unintended side-effects if, e.g, that is the > same format used to pass parameters to the database and the server isn't > expecting things in the same format. > > Python's setlocale() is unfortunately not particularly useful for > applications runnings multiple threads of execution. There are just too > many unintended side-effects. > > Regards, > Malcolm > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---