Re: [Tutor] decorators (the "at" sign)?

2010-10-25 Thread James Mills
On Tue, Oct 26, 2010 at 12:46 PM, Alex Hall  wrote:
> �...@set_index
>  def get_url(self, index=None):
>  return self.storage[index]['Url']

Decorators in python are used (almost as convenience) to wrap
functions/methods for various purposes.
It might be to do some logging before and after the actual function is
called, or setup static methods, etc.

The "@" symbol was chosen for this, and in the above example the
following is happening:

The method get_url(...) is being decorated (as opposed to being
wrapped) with the set_index(...) function.
(Without knowing too much more about the code you're looking at...)
set_index(...) would be doing something
with the get_url(...) method then returning it.

The best example of this is the following from PEP 318 (1):

def onexit(f):
import atexit
atexit.register(f)
return f

@onexit
def func():
...

This has a similar form to the code you're studying and registers func
with atexit hooks so that when
the application terminates, func(...) gets called.

Hope this helps,

cheers
James

1. http://www.python.org/dev/peps/pep-0318/

-- 
-- James Mills
--
-- "Problems are solved by method"
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] decorators (the "at" sign)?

2010-10-25 Thread Alex Hall
Hi all,
Now that I am able to run the source code of an open source
application I hope to one day help develop, I am trying to understand
how it works. One thing I keep seeing is an at sign followed by a
word, usually (maybe always) immediately preceeding a function
definition. For example, and I know this exact code will not make much
sense, but it gives the idea:
class Bing(Messages, Updating, Dismissable):

 @set_index
 def get_url(self, index=None):
  return self.storage[index]['Url']

What is the "@set_index" for? Specifically, what is the at sign doing?
Google was only able to provide me with a very vague idea of what is
going on, though it seems to crop up a lot in classmethod and
staticmethod calls (not sure about those either). I read PEP 318, but
it was not much help since I am coming at this having no idea what I
am looking at. The PEP did explain why I have never run into this
before, though - it is apparently specific to Python. I see this sort
of thing all over this source code so it seems like a good idea to get
exactly what it is for. TIA!


-- 
Have a great day,
Alex (msg sent from GMail website)
mehg...@gmail.com; http://www.facebook.com/mehgcap
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] connect through the ip sharers

2010-10-25 Thread Robert Berman
Hi,

 

As you well know networking opens a Pandora’s box of information so I tried 
using Google looking for ‘computer connectivity’ which has a wide range of 
topics. This may be a very good starting point you might wish to follow. The 
alternative is again using Google to look for ‘networking news groups’.

 

Also, when replying to information received by member(s) of a news group it is 
best to include the newsgroup when replying. Usually, hitting ‘reply to all’ 
will do the trick.

 

Hope this helps,

 

Robert

 

 

From: 김태윤 [mailto:kty1...@gmail.com] 
Sent: Monday, October 25, 2010 12:07 PM
To: Robert Berman
Subject: Re: [Tutor] connect through the ip sharers

 

could you tell me what group or mailing list is more attuned to network 
problems?

 

2010/10/26 Robert Berman 

Hi,

 

Since your post appears to be discussing a networking problem rather than a 
problem with the Python language you might have far better results posting to a 
group more attuned to network problems.

 

Good luck,

 

Robert 

 

From: tutor-bounces+bermanrl=cfl.rr@python.org 
[mailto:tutor-bounces+bermanrl  
=cfl.rr@python.org] On Behalf Of ???
Sent: Monday, October 25, 2010 11:54 AM
To: tutor@python.org
Subject: [Tutor] connect through the ip sharers

 

hello 

there are two computer. 

one is in here, and another is in other country.

both of two computer connected to internet by IP sharer.

I want to make program that connect both computer and send and receive data.

but my trying fails again and agian

 

it works when I try to connect each program in my computer but the other 
computer case, it fails


your little aid would be very helpful for me

thanks in advanced 

 

I've been sent similar question before but I still have no idea how to fix it 
so I submit similar question again sorry.

 

  _  

I am using the Free version of SPAMfighter  .
SPAMfighter has removed 16 of my spam emails to date.

Do you have a slow PC?   
Try free scan! 

 


  _  

I am using the Free version of SPAMfighter  .
SPAMfighter has removed 16 of my spam emails to date.

Do you have a slow PC?   
Try free scan! 
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to pass a python variable to subprocess.call?

2010-10-25 Thread Steve Willoughby

On 25-Oct-10 15:19, Abhijeet Rastogi wrote:

subprocess.call("ls -l "+mydir,shell=True)
will do the job. In python, we can simply concatenate the strings like that.

How do I replace /usr/local/bin in the subprocess call with the
mydir variable?


It's often preferable (for reasons ranging from security to coding 
style) to use the array call style for the subprocess methods, so 
instead of a string which must then be interpreted by the shell (and 
allowing for unintended interpretation of shell characters like quotes 
and wildcards), you instead pass a list of values for the new process, 
so the shell is never even involved:


subprocess.call(['ls', '-l', mydir])

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to pass a python variable to subprocess.call?

2010-10-25 Thread Bill Campbell
On Mon, Oct 25, 2010, Sean Carolan wrote:
>I'm rewriting a bunch of my bash scripts to get some python practice.
>There are some instances where python doesn't have the built-in text
>processing that I need, so I'm using subprocess.call.  How can I pass
>a python variable to these subprocesses?  For example:
>
>mydir = "/usr/local/bin"
>subprocess.call("ls -l /usr/local/bin", shell=True)
>
>How do I replace /usr/local/bin in the subprocess call with the mydir variable?

subprocess.call("ls -l '%s'" % mydir, shell=True)

Bill
-- 
INTERNET:   b...@celestial.com  Bill Campbell; Celestial Software LLC
URL: http://www.celestial.com/  PO Box 820; 6641 E. Mercer Way
Voice:  (206) 236-1676  Mercer Island, WA 98040-0820
Fax:(206) 232-9186  Skype: jwccsllc (206) 855-5792

Whatever the State saith is a lie; whatever it hath is a theft.
-- Nietzsche
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to pass a python variable to subprocess.call?

2010-10-25 Thread Abhijeet Rastogi
On Tue, Oct 26, 2010 at 3:31 AM, Sean Carolan  wrote:

> I'm rewriting a bunch of my bash scripts to get some python practice.
> There are some instances where python doesn't have the built-in text
> processing that I need, so I'm using subprocess.call.  How can I pass
> a python variable to these subprocesses?  For example:
>
> mydir = "/usr/local/bin"
> subprocess.call("ls -l /usr/local/bin", shell=True)
>
> subprocess.call("ls -l "+mydir,shell=True)
will do the job. In python, we can simply concatenate the strings like that.

How do I replace /usr/local/bin in the subprocess call with the mydir
> variable?
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>



-- 
Abhijeet Rastogi (shadyabhi)
http://www.google.com/profiles/abhijeet.1989
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] How to pass a python variable to subprocess.call?

2010-10-25 Thread Sean Carolan
I'm rewriting a bunch of my bash scripts to get some python practice.
There are some instances where python doesn't have the built-in text
processing that I need, so I'm using subprocess.call.  How can I pass
a python variable to these subprocesses?  For example:

mydir = "/usr/local/bin"
subprocess.call("ls -l /usr/local/bin", shell=True)

How do I replace /usr/local/bin in the subprocess call with the mydir variable?
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Need help with converting script using 2.6's urllib2 to Python 3.1

2010-10-25 Thread Richard D. Moores
So I finally find a relevant example in the docs:


The first example gave me some understanding and led me to revising my code to

import urllib.request
f = 
urllib.request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN')
a = f.read(20500).decode('utf-8')
b = a[19000:20500]
idx_pricewrap = b.find('pricewrap')
context = b[idx_pricewrap:idx_pricewrap+80]
idx_bgLast = context.find('bgLast')
rate = context[idx_bgLast+8:idx_bgLast+15]
print(rate)

which works like a charm.

Dick
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Need help with converting script using 2.6's urllib2 to Python 3.1

2010-10-25 Thread Sander Sweers
On 25 October 2010 18:19, Richard D. Moores  wrote:
> Doing it your way,
>
> from urllib import request
> a = 
> request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
> print(a[123:140])
>
> succeeds. Why?

Not sure how this exactly works but this is what I know. The
difference is that urllib is now a directory with files in it while
urllib2 was a single file. When you import  on a a single file
module normally all functions and classes are available to you.

Now that this is a directory some magic (or not?) has to happen in
__init__.py (read I also don't know). But I am sure someone here will
be able to explain this properly :-).

Greets
Sander
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Need help with converting script using 2.6's urllib2 to Python 3.1

2010-10-25 Thread Richard D. Moores
And trying 2to3.py, which I've used successfully before, gets

C:\P26Working\Finished\For2to3>2to3 -w -f urllib dollar2yen_rate_simple.py
Traceback (most recent call last):
  File "C:\P26Working\Finished\For2to3\2to3.py", line 2, in 
from lib2to3.main import main
  File "C:\P26Working\Finished\For2to3\lib2to3\main.py", line 34
except os.error, err:
   ^
SyntaxError: invalid syntax

dollar2yen_rate_simple.py can be seen at 

Also,

Running this code in Python 3.1:

from urllib import request
a = 
request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
b = a[19000:20500]
idx_pricewrap = b.find('pricewrap')
context = b[idx_pricewrap:idx_pricewrap+80]
idx_bgLast = context.find('bgLast')
rate = context[idx_bgLast+8:idx_bgLast+15]
print(rate)

gets

Traceback (most recent call last):
  File "c:\P31Working\test_urllib.py", line 4, in 
idx_pricewrap = b.find('pricewrap')
TypeError: expected an object with the buffer interface
Process terminated with an exit code of 1

I have NO idea what that error means.

Dick
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Need help with converting script using 2.6's urllib2 to Python 3.1

2010-10-25 Thread Richard D. Moores
On Mon, Oct 25, 2010 at 08:38, Sander Sweers  wrote:

> Have you actually tried reading the documentation?

Of course. Though I can see why you wondered.

>The _very_ first
> section of the urllib documentation we have urllib.request.urlopen
> [1]. Which looks to me what you are looking for as a replacement to
> urllib2.urlopen().

What I tried were these 3 lines:

import urllib
a = 
urllib.request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
print(a[123:140])

which got me

Traceback (most recent call last):
  File "c:\P31Working\test_urllib.py", line 2, in 
a = 
urllib.request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
AttributeError: 'module' object has no attribute 'request'
Process terminated with an exit code of 1

Doing it your way,

from urllib import request
a = 
request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
print(a[123:140])

succeeds. Why?

Anyway, thanks.

Dick
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] connect through the ip sharers

2010-10-25 Thread Robert Berman
Hi,

 

Since your post appears to be discussing a networking problem rather than a 
problem with the Python language you might have far better results posting to a 
group more attuned to network problems.

 

Good luck,

 

Robert 

 

From: tutor-bounces+bermanrl=cfl.rr@python.org 
[mailto:tutor-bounces+bermanrl=cfl.rr@python.org] On Behalf Of ???
Sent: Monday, October 25, 2010 11:54 AM
To: tutor@python.org
Subject: [Tutor] connect through the ip sharers

 

hello 

there are two computer. 

one is in here, and another is in other country.

both of two computer connected to internet by IP sharer.

I want to make program that connect both computer and send and receive data.

but my trying fails again and agian

 

it works when I try to connect each program in my computer but the other 
computer case, it fails


your little aid would be very helpful for me

thanks in advanced 

 

I've been sent similar question before but I still have no idea how to fix it 
so I submit similar question again sorry.


  _  

I am using the Free version of SPAMfighter  .
SPAMfighter has removed 16 of my spam emails to date.

Do you have a slow PC?   
Try free scan! 
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] connect through the ip sharers

2010-10-25 Thread 김태윤
hello
there are two computer.
one is in here, and another is in other country.
both of two computer connected to internet by IP sharer.
I want to make program that connect both computer and send and receive data.
but my trying fails again and agian

it works when I try to connect each program in my computer but the other
computer case, it fails

your little aid would be very helpful for me
thanks in advanced

I've been sent similar question before but I still have no idea how to fix
it so I submit similar question again sorry.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Need help with converting script using 2.6's urllib2 to Python 3.1

2010-10-25 Thread Sander Sweers
On 25 October 2010 14:46, Richard D. Moores  wrote:
> I'd like to convert the script to 3.1, but I can't understand the docs
> for the 3.1 urllib module. Please someone tell me what to do.
> (Converting   'print rate'   to   'print(rate)'   I understand.)

Have you actually tried reading the documentation? The _very_ first
section of the urllib documentation we have urllib.request.urlopen
[1]. Which looks to me what you are looking for as a replacement to
urllib2.urlopen().

Some *untested* inline comments below.

> import urllib2
from urllib import request
> a = 
> urllib2.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
a = 
request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
> b = a[19000:20500]
> idx_pricewrap = b.find('pricewrap')
> context = b[idx_pricewrap:idx_pricewrap+80]
> idx_bgLast = context.find('bgLast')
> rate = context[idx_bgLast+8:idx_bgLast+15]
> print rate
print(rate)

Also http://docs.python.org/library/2to3.html discusses the automated
tool for converting python code.

Greets
Sander

[1] 
http://docs.python.org/py3k/library/urllib.request.html#urllib.request.urlopen
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Python and excel writer: 'ascii' codec can't decode byte 0xf3 in position 49

2010-10-25 Thread Susana Iraiis Delgado Rodriguez
Hello members:

I'm starting an script for geospatial information using python and gdal
binaries, but I have problems saving the data I get into an excel shee. At
the beginning I thought it was because the characters the files have for
some records, but I run the code in a way it saves the path for each file
I'm looking for. The script throws th error:
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import imagen
Traceback (most recent call last):
  File "", line 1, in 
  File "imagen.py", line 20, in 
wrkbk.save('imagen.xls')
  File "C:\Python26\lib\site-packages\xlwt\Workbook.py", line 634, in save
doc.save(filename, self.get_biff_data())
  File "C:\Python26\lib\site-packages\xlwt\Workbook.py", line 609, in
get_biff_d
ata
shared_str_table   = self.__sst_rec()
  File "C:\Python26\lib\site-packages\xlwt\Workbook.py", line 571, in
__sst_rec
return self.__sst.get_biff_record()
  File "C:\Python26\lib\site-packages\xlwt\BIFFRecords.py", line 53, in
get_biff
_record
self._add_to_sst(s)
  File "C:\Python26\lib\site-packages\xlwt\BIFFRecords.py", line 66, in
_add_to_
sst
u_str = upack2(s, self.encoding)
  File "C:\Python26\lib\site-packages\xlwt\UnicodeUtils.py", line 50, in
upack2
us = unicode(s, encoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 49:
ordinal
 not in range(128)
>>>
My code is:
import os, time, socket
from xlwt import Workbook
from osgeo import gdal
from osgeo.gdalconst import *
from PIL import Image

gdal.AllRegister()
file_list = []
folders = None
 # look in this (root) folder for files with specified extension
for root, folders, files in os.walk( "C:\\" ):
 file_list.extend(os.path.join(root,fi) for fi in files if
fi.endswith(".tif") or fi.endswith(".tiff") or fi.endswith(".gtif") or
fi.endswith(".ecw") or fi.endswith(".bil") or fi.endswith(".til") or
fi.endswith(".jpeg"))
wrkbk = Workbook()
wksht = wrkbk.add_sheet('rasters')
wksht.row(0).write(0,'ruta')
for row, filepath in enumerate(file_list, start=1):
 #Llenar lista de archivos y ruta
 wksht.row(row).write(0, filepath)
wrkbk.save('imagen.xls')

Is there a way I can manage this error?
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Need help with converting script using 2.6's urllib2 to Python 3.1

2010-10-25 Thread Richard D. Moores
The lines below are the essence of a 2.6 script that gets the current
USD/yen quote.

I'd like to convert the script to 3.1, but I can't understand the docs
for the 3.1 urllib module. Please someone tell me what to do.
(Converting   'print rate'   to   'print(rate)'   I understand.)

import urllib2
a = 
urllib2.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
b = a[19000:20500]
idx_pricewrap = b.find('pricewrap')
context = b[idx_pricewrap:idx_pricewrap+80]
idx_bgLast = context.find('bgLast')
rate = context[idx_bgLast+8:idx_bgLast+15]
print rate

Thanks,

Dick Moores
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] 2.6 vs 2.7: package compatibility?

2010-10-25 Thread Alex Hall
On 10/25/10, Tim Golden  wrote:
>> It tells me that persistent_dict does not exist, when it clearly does.
>> Another user had the exact same problem when running the source on
>> 2.6, but he had no problem when running 2.7. If you had an msi to
>> install Durus for 2.6 specifically, it would be interesting to see if
>> the persistent_dict error went away...
>
> http://timgolden.me.uk/python/downloads/Durus-3.9.win32-py2.6.msi
>
> TJG
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
Thanks! I get an error in the source, but it is related to the
program, not Durus; there seems to be no Durus error anymore.
>


-- 
Have a great day,
Alex (msg sent from GMail website)
mehg...@gmail.com; http://www.facebook.com/mehgcap
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] 2.6 vs 2.7: package compatibility?

2010-10-25 Thread Tim Golden

It tells me that persistent_dict does not exist, when it clearly does.
Another user had the exact same problem when running the source on
2.6, but he had no problem when running 2.7. If you had an msi to
install Durus for 2.6 specifically, it would be interesting to see if
the persistent_dict error went away...


http://timgolden.me.uk/python/downloads/Durus-3.9.win32-py2.6.msi

TJG
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] 2.6 vs 2.7: package compatibility?

2010-10-25 Thread Alex Hall
On 10/25/10, Tim Golden  wrote:
> On 25/10/2010 02:20, Alex Hall wrote:
>> Hi all,
>> I want to run a certain program from source. One dependency, Durus,
>> keeps giving me an error that no one can figure out. Someone said that
>> it will work if I use 2.7 instead of 2.6, but a lot of packages I have
>> installed work only on 2.6. I know I can install both, but here is the
>> question: all these packages that say they need 2.6... would they work
>> on 2.7?
>
> I'm going to assume that you're running on Windows -- because
> you usually are :) The answer, then, is that pure python modules
> would need to be reinstalled into (or at least made visible to)
> the newer Python version, but that extension modules would need
> to be recompiled against the newer version -- possibly making use
> of a precompiled binary.
When I ran the source of the program (http://www.qwitter-client.net)
on 2.7 it worked, but it mentioned adding
c:\python26\lib\site-packages to sys.path. I am not sure if this means
it is accessing packages from 2.6...
>
> Just to try, I've compiled Durus without issue on Python 2.6
> from the tarball on their website:
>
>http://www.mems-exchange.org/software/durus/Durus-3.9.tar.gz
>
> but it's not clear from your message above whether it's the
> build which is the issue or some aspect of using it. Can
> you clarify? I'm quite happy to post up an .msi or something
> for you to use if that'll help.
It tells me that persistent_dict does not exist, when it clearly does.
Another user had the exact same problem when running the source on
2.6, but he had no problem when running 2.7. If you had an msi to
install Durus for 2.6 specifically, it would be interesting to see if
the persistent_dict error went away...
>
> TJG
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
Have a great day,
Alex (msg sent from GMail website)
mehg...@gmail.com; http://www.facebook.com/mehgcap
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] 2.6 vs 2.7: package compatibility?

2010-10-25 Thread Tim Golden

On 25/10/2010 02:20, Alex Hall wrote:

Hi all,
I want to run a certain program from source. One dependency, Durus,
keeps giving me an error that no one can figure out. Someone said that
it will work if I use 2.7 instead of 2.6, but a lot of packages I have
installed work only on 2.6. I know I can install both, but here is the
question: all these packages that say they need 2.6... would they work
on 2.7?


I'm going to assume that you're running on Windows -- because
you usually are :) The answer, then, is that pure python modules
would need to be reinstalled into (or at least made visible to)
the newer Python version, but that extension modules would need
to be recompiled against the newer version -- possibly making use
of a precompiled binary.

Just to try, I've compiled Durus without issue on Python 2.6
from the tarball on their website:

  http://www.mems-exchange.org/software/durus/Durus-3.9.tar.gz

but it's not clear from your message above whether it's the
build which is the issue or some aspect of using it. Can
you clarify? I'm quite happy to post up an .msi or something
for you to use if that'll help.

TJG
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor