Re: More on unicode (plus new i18n features like fallbacks)

2007-02-02 Thread James Gardner

Hi Uwe,

Uwe Feldtmann wrote:
 All is translating fine using _() although it would be nice if there was 
 some quick way to get all the strings from a template.

As luck would have it I was documenting this yesterday around line 844 here:

http://pylonshq.com/project/pylonshq/browser/Pylons/trunk/docs/internationalization.txt?order=name

You can do something like this to extract strings, if you give it a go 
I'd be interested to hear if you have any problems.

find translate_demo -type f -name '*myt'  translate_demo/i18n/filelist
find translate_demo -type f -name '*mak' translate_demo/i18n/filelist
find translate_demo -type f -name '*py'  translate_demo/i18n/filelist
cat translate_demo/i18n/filelist | xargs xgettext -o \  
 translate_demo/i18n/messages.pot \
 --language=Python --from-code=utf-8 \
 --keyword=_ --keyword=N_ --keyword=ugettext \
 --keyword=gettext --keyword=ngettext --keyword=ungettext

 Another question however:
 
 Is  request.environ['HTTP_ACCEPT_LANGUAGE'] the best way to get access 
 to the languages acceptable to the browser? 
 
 This is what I get when I execute the above:-
 en-GB,en;q=0.9,en-us;q=0.8,en-US;q=0.6,ar-AE;q=0.5,ar;q=0.4,en-gb;q=0.3,en;q=0.1
 
 Is there a further breakdown or list or should I parse the line manually?
 
 request.environ.languages returing a list would be cool.
 
 The list for the above might look like 
 ['en-GB','en',en-us','en-US','ar-AE','ar','en-gb']
 leaving off the duplicate 'en' off the end.

Believe it or not you are in luck again. Ben has just implemented this. 
If you upgrade to the latest paste and pylons dev you should be able to 
access all the languages as request.languages.

One other thing I implemented yesterday, but have yet to test properly 
and write up, was language fallbacks so that if a word doesn't exist in 
one catalog you can look it up in a fallback or the source instead. This 
means you can setup fallbacks for all the languages in 
request.languages. You'll need Pylons dev again but here's how it works:

from helloworld.lib.base import *
from pylons.i18n.translation import add_fallback

class HelloController(BaseController):
 def index(self):
 h.set_lang('en')
 add_fallback('es')
 return Response(_('Hello')+' '+_('World')+_('!'))

If Hello is in the en .mo file as Hi, World is only in es as 
Mundo and none of the catalogs defined ! you will get the english, 
spanish then the source words. So the message would be Hi Mundo!.

Cheers,

James


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode (plus new i18n features like fallbacks)

2007-02-02 Thread Max Ischenko



On Feb 2, 3:39 pm, James Gardner [EMAIL PROTECTED] wrote:
 Believe it or not you are in luck again. Ben has just implemented this.
 If you upgrade to the latest paste and pylons dev you should be able to
 access all the languages as request.languages.

Interesting. Look forward to seeing 0.9.5 release.

 One other thing I implemented yesterday, but have yet to test properly
 and write up, was language fallbacks so that if a word doesn't exist in
 one catalog you can look it up in a fallback or the source instead. This
 means you can setup fallbacks for all the languages in
 request.languages. You'll need Pylons dev again but here's how it works:

 from helloworld.lib.base import *
 from pylons.i18n.translation import add_fallback

 class HelloController(BaseController):
  def index(self):
  h.set_lang('en')
  add_fallback('es')
  return Response(_('Hello')+' '+_('World')+_('!'))

 If Hello is in the en .mo file as Hi, World is only in es as
 Mundo and none of the catalogs defined ! you will get the english,
 spanish then the source words. So the message would be Hi Mundo!.

Is there is a way to setup this in config file?

E.g.: lang = ru en

If not, how can I setup this fallback globally? Add this to
BaseController?

Max.


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode (plus new i18n features like fallbacks)

2007-02-02 Thread James Gardner

Hi Max,

 from helloworld.lib.base import *
 from pylons.i18n.translation import add_fallback

 class HelloController(BaseController):
  def index(self):
  h.set_lang('en')
  add_fallback('es')
  return Response(_('Hello')+' '+_('World')+_('!'))

 If Hello is in the en .mo file as Hi, World is only in es as
 Mundo and none of the catalogs defined ! you will get the english,
 spanish then the source words. So the message would be Hi Mundo!.
 
 Is there is a way to setup this in config file?
 
 E.g.: lang = ru en

Well, you can do lang=en already to specify the main language but it's a 
good idea to able to specify the fallbacks too, I'll implement that.

 If not, how can I setup this fallback globally? Add this to
 BaseController?

Best place is probably the __init__() method of the Globals object in 
lib/app_globals.py actually. I'd have thought it was best not to do it 
in a controller action like I described above otherwise you will be 
adding numerous fallbacks. I'll also write some code so that fallbacks 
are only added if they aren't in place already.

Cheers,

James

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode

2007-02-02 Thread Damjan

While on the topic ... can someone take a look at
http://routes.groovie.org/trac/routes/ticket/37


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode

2007-02-02 Thread James Gardner

Hi Damjan,

Damjan wrote:
 While on the topic ... can someone take a look at
 http://routes.groovie.org/trac/routes/ticket/37

This is fixed in the latest routes. Try:

easy_install -U routes==dev

I've closed the ticket.

Cheers,

James

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode

2007-02-02 Thread Damjan

Thanks, it works... I also notice that with this version of Routes
1.6.3dev-r325 controller arguments are unicode now.

for example, I have
def show(self, pagename):
...
pagename was a byte string before, but now it's unicode... which is
great.


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode

2007-02-02 Thread Shannon -jj Behrens

On 2/1/07, Uwe Feldtmann [EMAIL PROTECTED] wrote:

 Hi James.

 James Gardner wrote:
  The translation should occur at run time so this shouldn't be a problem.
  How are you doing the translation?
 
 On closer inspection it doesn't seem to be a problem. I was thinking
 that the pre-compiled templates were what was being sent to the browser.
 My mistake.
  If you are using the Pylons _() function in the template everything
  should be fine surely?
 
 All is translating fine using _() although it would be nice if there was
 some quick way to get all the strings from a template.

If you're using Mako, then the answer is easy.  Just compile the
templates down to Python and then run xgettext on the Python.

 Another question however:

 Is  request.environ['HTTP_ACCEPT_LANGUAGE'] the best way to get access
 to the languages acceptable to the browser?

There's some stuff that I submitted to the most recent version of
Paste for parsing that.

 This is what I get when I execute the above:-
 en-GB,en;q=0.9,en-us;q=0.8,en-US;q=0.6,ar-AE;q=0.5,ar;q=0.4,en-gb;q=0.3,en;q=0.1

 Is there a further breakdown or list or should I parse the line manually?

 request.environ.languages returing a list would be cool.

 The list for the above might look like
 ['en-GB','en',en-us','en-US','ar-AE','ar','en-gb']
 leaving off the duplicate 'en' off the end.

Yep.  I hope that code works for you.

Best Regards,
-jj

-- 
http://jjinux.blogspot.com/

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode (plus new i18n features like fallbacks)

2007-02-02 Thread Shannon -jj Behrens

On 2/2/07, Max Ischenko [EMAIL PROTECTED] wrote:
 On Feb 2, 3:39 pm, James Gardner [EMAIL PROTECTED] wrote:
  Believe it or not you are in luck again. Ben has just implemented this.
  If you upgrade to the latest paste and pylons dev you should be able to
  access all the languages as request.languages.

 Interesting. Look forward to seeing 0.9.5 release.

  One other thing I implemented yesterday, but have yet to test properly
  and write up, was language fallbacks so that if a word doesn't exist in
  one catalog you can look it up in a fallback or the source instead. This
  means you can setup fallbacks for all the languages in
  request.languages. You'll need Pylons dev again but here's how it works:
 
  from helloworld.lib.base import *
  from pylons.i18n.translation import add_fallback
 
  class HelloController(BaseController):
   def index(self):
   h.set_lang('en')
   add_fallback('es')
   return Response(_('Hello')+' '+_('World')+_('!'))
 
  If Hello is in the en .mo file as Hi, World is only in es as
  Mundo and none of the catalogs defined ! you will get the english,
  spanish then the source words. So the message would be Hi Mundo!.

 Is there is a way to setup this in config file?

 E.g.: lang = ru en

 If not, how can I setup this fallback globally? Add this to
 BaseController?

If I'm understanding the question correctly, the code that I sent to
Ben from Aquarium ULTIMATE_FALLBACK, or something like that,
addresses this problem :)

Best Regards,
-jj

-- 
http://jjinux.blogspot.com/

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: More on unicode (plus new i18n features like fallbacks)

2007-02-02 Thread Shannon -jj Behrens

On 2/2/07, Max Ischenko [EMAIL PROTECTED] wrote:
 On Feb 2, 3:39 pm, James Gardner [EMAIL PROTECTED] wrote:
  Believe it or not you are in luck again. Ben has just implemented this.
  If you upgrade to the latest paste and pylons dev you should be able to
  access all the languages as request.languages.

 Interesting. Look forward to seeing 0.9.5 release.

  One other thing I implemented yesterday, but have yet to test properly
  and write up, was language fallbacks so that if a word doesn't exist in
  one catalog you can look it up in a fallback or the source instead. This
  means you can setup fallbacks for all the languages in
  request.languages. You'll need Pylons dev again but here's how it works:
 
  from helloworld.lib.base import *
  from pylons.i18n.translation import add_fallback
 
  class HelloController(BaseController):
   def index(self):
   h.set_lang('en')
   add_fallback('es')
   return Response(_('Hello')+' '+_('World')+_('!'))
 
  If Hello is in the en .mo file as Hi, World is only in es as
  Mundo and none of the catalogs defined ! you will get the english,
  spanish then the source words. So the message would be Hi Mundo!.

 Is there is a way to setup this in config file?

 E.g.: lang = ru en

 If not, how can I setup this fallback globally? Add this to
 BaseController?

By the way, in case it isn't obvious, it's very bad practice to break
up sentences into multiple translations this way.  What if a language
translates Hello World! into World Hello!?  In general, you should
keep sentences and phrases together.

Happy Hacking!
-jj

-- 
http://jjinux.blogspot.com/

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: IDEs and Pylons applications

2007-02-02 Thread Jose Galvez
Dear jj,
I tried to use your code below, and it basically crashes the controller.
How do you use it to debug a pylons app? When I run it I get a Pdb consul
where I can get variable results and stuff like that, but I can't figure out
how to make it close and go on executing my controller.  Thanks in advance
for any and all help
Jose

On 2/1/07, Shannon -jj Behrens [EMAIL PROTECTED] wrote:


 On 1/31/07, Christoph Haas [EMAIL PROTECTED] wrote:
  Hi, $ALL...
 
  I'm currently trying to rewrite the webhelpers.pagination module and
  sometimes find it hard to understand what each variable is set to and
 even
  what type it is. Sure, I can raise exceptions all the time as a poor
  man's way to debug the application. But SPE or Eric3 already offer a
 good
  debugger. Has anyone tried to write Pylons applications with such an
 IDE?
  My problem seems to be that I actually need to run paster from the IDE
  and that seems to confuse it, because it's not a file in my project. I
  also tried to copy /usr/bin/paster into my projects directory but Eric3
  insists that it cannot run it either.

 I use the following in my code all the time:

 import pdb
 pdb.set_trace()

 By the way, Wing IDE has a remote debugger so that you can connect to
 a separate process and debug it from within Wing IDE.

 Best Regards,
 -jj

 --
 http://jjinux.blogspot.com/

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: [Paste] Paste's HTTP server thread pool (reliability)

2007-02-02 Thread Ian Bicking

Shannon -jj Behrens wrote:
 On 2/2/07, Ian Bicking [EMAIL PROTECTED] wrote:
 Shannon -jj Behrens wrote:
  All of this can get really sticky, and I fear there are no good,
  general answers.  If you do decide to start killing long-running
  threads, I do like the idea of letting the programmer explicitly state
  that the thread should be long running.  Do you really have a problem
  of threads hanging?  It's just not something I've had a problem with
  in general.

 Generally no, but occasionally yes, and that's enough to concern me.
 Also currently there are no tools or even logs to really help someone
 figure out what might be causing problems.

 The specific project we're working on involves fetching other URLs,
 which is something that can block in awkward ways.  We have some ideas
 to avoid that (probably not performing the subrequests in the request
 thread), but even so I would like some additional places where we can
 catch problems.  Generally when something goes wrong I really don't like
 the current behavior, which is that there's no way to notice until the
 whole server stops responding, and no resolution except restarting the
 server.

 I don't think there's a firm general answer -- in an effort to protect
 some requests from other requests, you might instead mess up the entire
 machine (e.g., if you let the number of threads simply increase, which I
 think is how the non-pooled httpserver would act currently).  Or, you
 may want to partition requests so that some family of requests is kept
 separate from another family (e.g., we'd like to partition along domain
 names), but that's a fairly complicated heuristics.  And along with that
 bursts of traffic are always fairly likely, and you don't want to
 mistake those for actual problems -- that's just what you should expect
 to happen.

 I'd really like a Paste app to be something you can start up and just
 depend on it to keep working indefinitely without lots of tending.  This
 is one of the pieces to make that happen.  Actually, I think all that's
 needed is:

 1. Isolated Python environment (workingenv, virtual-python): without
 this an installation can easily be broken by other activity on the 
 machine.

 2. A process supervisor (supervisor2, daemontools): just in case it
 segfaults.

 3. Exception handling that actively tells you when things are broken.
 E.g., if a database goes down everything will respond, but every page
 will give a server error.

 4. Of course, application state should never disappear because of a
 process restart.  In-memory sessions are right out as a result;
 everything has to be serializable.  That won't always work perfectly
 (e.g., when there's a hard restart or a segfault), but doing a proper
 restart should never be a problem.

 5. Reasonable handling of these thread problems, if they occur.
 Alternately a forking (or generally multi-process) server that monitors
 its child processes could work.  Sadly we don't have an HTTP server that
 does that.  I'm not sure if flup really monitors its children either, or
 just spawns them and expects them to die.

 6. Some monitor that checks URL(s) and handles when the URL is gone or
 misbehaving.  Ideally it could restart the process if the URL is just
 gone or not responding (supervisor2 has an XMLRPC API, for instance).
 Server errors should probably be handled via notification; restarts
 don't (or at least shouldn't) just fix those.

 7. In addition to looking for responding URLs, memory leaks (or greedy
 CPU usage over a long time) would be good to detect.  These are a little
 trickier, and need a soft limit (when notification happens) then a hard
 limit (when a restart is automatically done).  Handling ulimit might be
 enough, not sure.


 Right now we have 1-4.  Then we just need 5-7, and to plug them all
 together nicely so people can easily deploy the entire combination.  The
 result should be something as reliable as PHP, and also reliable in
 situations when the sysadmin really doesn't want to tend to individual
 applications.
 
 I don't have anything really useful to say.  By the way, we're using
 Nagios to provide *some* assurances that things haven't gone awry.

I've tried Nagios a little bit in the past, but found it rather hard to 
set up for the small task I had in mind (just checking some URLs).  And 
it couldn't do something like restart a service (AFAIK).  Still, this is 
certainly something that any serious developer should have (be it Nagios 
or mon or Big Brother or whatever).

It would be a nice addition to Pylons to add a convention for a pingable 
URL in an application.  The URL should do little work, but users could 
add on to it -- typically if you have a database, you might check you 
can connect to the database, for instance.  Or check that critical 
directories existed and were writable, etc.

I had intended PyPeriodic to be the basis for a URL checker, since the 
periodic part felt harder to me than the actual URL fetching, and it 
would 

Re: [Paste] Paste's HTTP server thread pool (reliability)

2007-02-02 Thread Cliff Wells

On Fri, 2007-02-02 at 16:03 -0600, Ian Bicking wrote:
 Shannon -jj Behrens wrote:

 
  The specific project we're working on involves fetching other URLs,
  which is something that can block in awkward ways.  We have some ideas
  to avoid that (probably not performing the subrequests in the request
  thread), but even so I would like some additional places where we can
  catch problems.  Generally when something goes wrong I really don't like
  the current behavior, which is that there's no way to notice until the
  whole server stops responding, and no resolution except restarting the
  server.
 


This doesn't really address the larger issue, but I've found that using
Twisted for such things works great.  I've never really been able to
manage writing an entire application in Twisted but writing simple apps
that do things like fetch a bunch of URLS and republish the results of
that as a local service is remarkably simple and robust.  Also, unlike
much of Twisted, there tends to be lots of examples for doing such
things lying about the web.  

A few months ago I wrote an RSS aggregator in Twisted that would fetch
remote feeds and republish them as a local service that a TurboGears app
could then quickly and reliably fetch from.  This nicely sidesteps
blocking threads in your Paste/Pylons/CherryPy server.

Regards,
Cliff


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: IDEs and Pylons applications

2007-02-02 Thread Shannon -jj Behrens

Type continue to keep going.  Use help to learn about other commands.

Best Regards,
-jj

On 2/2/07, Jose Galvez [EMAIL PROTECTED] wrote:
 Dear jj,
 I tried to use your code below, and it basically crashes the controller.
 How do you use it to debug a pylons app? When I run it I get a Pdb consul
 where I can get variable results and stuff like that, but I can't figure out
 how to make it close and go on executing my controller.  Thanks in advance
 for any and all help
 Jose

 On 2/1/07, Shannon -jj Behrens [EMAIL PROTECTED] wrote:
 
 
  On 1/31/07, Christoph Haas [EMAIL PROTECTED] wrote:
   Hi, $ALL...
  
   I'm currently trying to rewrite the webhelpers.pagination module and
   sometimes find it hard to understand what each variable is set to and
 even
   what type it is. Sure, I can raise exceptions all the time as a poor
   man's way to debug the application. But SPE or Eric3 already offer a
 good
   debugger. Has anyone tried to write Pylons applications with such an
 IDE?
   My problem seems to be that I actually need to run paster from the IDE
   and that seems to confuse it, because it's not a file in my project. I
   also tried to copy /usr/bin/paster into my projects directory but Eric3
   insists that it cannot run it either.
 
  I use the following in my code all the time:
 
  import pdb
  pdb.set_trace()
 
  By the way, Wing IDE has a remote debugger so that you can connect to
  a separate process and debug it from within Wing IDE.
 
  Best Regards,
  -jj
 
  --
  http://jjinux.blogspot.com/
 
   
 



-- 
http://jjinux.blogspot.com/

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---



Re: IDEs and Pylons applications

2007-02-02 Thread Jose Galvez
WOW thats so cool, thanks
Jose

On 2/2/07, Shannon -jj Behrens [EMAIL PROTECTED] wrote:


 Type continue to keep going.  Use help to learn about other commands.

 Best Regards,
 -jj

 On 2/2/07, Jose Galvez [EMAIL PROTECTED] wrote:
  Dear jj,
  I tried to use your code below, and it basically crashes the controller.
  How do you use it to debug a pylons app? When I run it I get a Pdb
 consul
  where I can get variable results and stuff like that, but I can't figure
 out
  how to make it close and go on executing my controller.  Thanks in
 advance
  for any and all help
  Jose
 
  On 2/1/07, Shannon -jj Behrens [EMAIL PROTECTED] wrote:
  
  
   On 1/31/07, Christoph Haas [EMAIL PROTECTED] wrote:
Hi, $ALL...
   
I'm currently trying to rewrite the webhelpers.pagination module and
sometimes find it hard to understand what each variable is set to
 and
  even
what type it is. Sure, I can raise exceptions all the time as a
 poor
man's way to debug the application. But SPE or Eric3 already offer a
  good
debugger. Has anyone tried to write Pylons applications with such an
  IDE?
My problem seems to be that I actually need to run paster from the
 IDE
and that seems to confuse it, because it's not a file in my project.
 I
also tried to copy /usr/bin/paster into my projects directory but
 Eric3
insists that it cannot run it either.
  
   I use the following in my code all the time:
  
   import pdb
   pdb.set_trace()
  
   By the way, Wing IDE has a remote debugger so that you can connect to
   a separate process and debug it from within Wing IDE.
  
   Best Regards,
   -jj
  
   --
   http://jjinux.blogspot.com/
  

  
 


 --
 http://jjinux.blogspot.com/

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
pylons-discuss group.
To post to this group, send email to pylons-discuss@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~--~~~~--~~--~--~---