Re: (n00b) Tkinter trouble

2011-11-13 Thread Jason Swails
On Sun, Nov 13, 2011 at 1:27 PM, Jason Swails wrote:

> Hello,
>
> I'm trying my hand at creating a Tkinter application, but not having much
> luck.  I'm trying to have my top level window be a series of buttons with
> different options on them.  Every time a button is pressed, it opens up a
> new window with options.  While that new window is open, all of the buttons
> on the original window are disabled.  However, I want all of those buttons
> to become active again once I quit my new window.  I can't seem to
> reactivate those buttons no matter what I do.
>
> This is the approach I'm trying:
>
> #!/usr/bin/env python
>
> from Tkinter import *
>
> class ActionButton(Button):
>def __init__(self, frame, text):
>   self.frame = frame
>   Button.__init__(self, master=self.frame, text=text,
> command=self.execute)
>def execute(self):
>   window = Toplevel()
>   new_button = ActionButton(window, '2nd level button')
>   quit_button = Button(window, text='Quit!', command=window.destroy)
>   window.buttons = [new_button, quit_button]
>   for button in window.buttons: button.pack()
>   # Deactivate buttons from containing shell
>   for button in self.frame.buttons: button.config(state=DISABLED)
>   window.mainloop()
>   for button in self.frame.buttons: button.config(state=ACTIVE)
>
>
> top = Tk()
> top_button = ActionButton(top, 'Button on top!')
> top_button.pack()
> quit_button = Button(top, text='Quit', command=top.destroy)
> quit_button.pack()
>
> top.buttons = [top_button, quit_button]
>
> top.mainloop()
>
> I'm really kind of running around in the dark here, so any advice or
> explanation is appreciated.
>

Another approach I think will work, and that I'm going to try, is to
subclass Toplevel and simply assign the higher-level frame/window as an
instance attribute.  Then, I can reactivate all of the buttons in the
destroy() method before calling the destroy() method of Toplevel on self.
Something like this:

[untested]

class MyToplevel(Toplevel):

   def __init__(self, root, **options):
  self.root = root
  Toplevel.__init__(self, options)
  for button in self.root.buttons: button.config(state=DISABLED)

   def destroy(self):
  for button in self.root.buttons: button.config(state=ACTIVE)
  Toplevel.destroy(self)

This allows me to avoid running "mainloop()" on a non-root Toplevel
instance, but links the re-activation of the buttons with the destruction
of the child window (which was the effect I was going for).  I must not
understand what mainloop() does, fully (does it only make sense to run it
on Tkinter.Tk()?)

Thanks!
Jason
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Get keys from a dicionary

2011-11-13 Thread alex23
On Nov 11, 11:31 pm, macm  wrote:
>
> I pass a nested dictionary to a function.
>
> def Dicty( dict[k1][k2] ):
> print k1
> print k2
>
> There is a fast way (trick) to get k1 and k2 as string.

It might be possible to do something using a reverse dictionary and
getting rid of the nested dictionary.

This is a quick and simple 'two-way' dictionary class that works by
maintaining two dictionaries: the original key/value, and the reversed
value/key. It returns a list of keys, allowing for a value to be
assigned against more than

from collections import defaultdict

class TwoWayDict(dict):
def __init__(self, *args, **kwargs):
self._reversed = defaultdict(list)
for key, val in kwargs.iteritems():
self[key] = val

def __setitem__(self, key, value):
super(TwoWayDict, self).__setitem__(key, value)
self._reversed[value].append(key)

def getkeys(self, match):
return self._reversed[match]

>>> original = TwoWayDict(a=100,b='foo',c=int,d='foo')
>>> original.getkeys(100)
['a']
>>> original.getkeys('foo')
['b', 'd']

As for the nested dictionary, you could replace it with a _single_
dictionary that uses a composite key:

>>> original = TwoWayDict(a=100,b=100)
>>> original.getkeys(100)
['a', 'b']
>>> original = TwoWayDict()
>>> original['record1','user1'] = 'martin'
>>> original['record1','user2'] = 'robert'
>>> original['record2','user1'] = 'robert'
>>> original.getkeys('robert')
[('record1', 'user2'), ('record2', 'user1')]

> Whithout loop all dict. Just it!

The TwoWayDict class removes the need to loop across the dict looking
for keys that match a value by replacing it with another dict lookup.
Reducing the nested dict to a single dict with composite keys removes
the need to traverse the outer dict to compare against its children.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Get keys from a dicionary

2011-11-13 Thread alex23
On Nov 11, 11:31 pm, macm  wrote:
>
> I pass a nested dictionary to a function.
>
> def Dicty( dict[k1][k2] ):
> print k1
> print k2
>
> There is a fast way (trick) to get k1 and k2 as string.

It might be possible to do something using a reverse dictionary and
getting rid of the nested dictionary.

This is a quick and simple 'two-way' dictionary class that works by
maintaining two dictionaries: the original key/value, and the reversed
value/key. It returns a list of keys, allowing for a value to be
assigned against more than

from collections import defaultdict

class TwoWayDict(dict):
def __init__(self, *args, **kwargs):
self._reversed = defaultdict(list)
for key, val in kwargs.iteritems():
self[key] = val

def __setitem__(self, key, value):
super(TwoWayDict, self).__setitem__(key, value)
self._reversed[value].append(key)

def getkeys(self, match):
return self._reversed[match]

>>> original = TwoWayDict(a=100,b='foo',c=int,d='foo')
>>> original.getkeys(100)
['a']
>>> original.getkeys('foo')
['b', 'd']

As for the nested dictionary, you could replace it with a _single_
dictionary that uses a composite key:

>>> original = TwoWayDict(a=100,b=100)
>>> original.getkeys(100)
['a', 'b']
>>> original = TwoWayDict()
>>> original['record1','user1'] = 'martin'
>>> original['record1','user2'] = 'robert'
>>> original['record2','user1'] = 'robert'
>>> original.getkeys('robert')
[('record1', 'user2'), ('record2', 'user1')]

> Whithout loop all dict. Just it!

The TwoWayDict class removes the need to loop across the dict looking
for keys that match a value by replacing it with another dict lookup.
Reducing the nested dict to a single dict with composite keys removes
the need to traverse the outer dict to compare against its children.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Uninstalling Py 2.5.2 from Windows 7 (Invalid on Win 32 app)

2011-11-13 Thread W. eWatson
I just pushed aside the python25 folder by renaming it, and installed py 
2.5.2. However, when I try to open the simplest of py programs with 
IDLE, I get an error from Win7.


c:\Users\blah\...\junk.py is not a valid Win 32 app.

Here's one:
def abc(one):
print "abc: ", one, " is one"

def duh(two):
print "duh: ",abc(2)

abc(1)
duh(2)
duh("so what")
abc(36.333)

--
http://mail.python.org/mailman/listinfo/python-list


Re: all() is slow?

2011-11-13 Thread Devin Jeanpierre
> It states equivalence for two values _based on the name_.

I don't know what you mean. "Based on the name" doesn't mean anything
in particular to me in this context.

> So you're outright ignoring the comments that this behaviour is to
> make CPython more performant?

I don't see how I'm ignoring the comment. Yes, breaking the spec
improves performance. Is that a reason to not fix the spec, or
something?

Devin

On Sun, Nov 13, 2011 at 9:50 PM, alex23  wrote:
> On Nov 13, 4:28 pm, Devin Jeanpierre  wrote:
>> > which implies that getattr(x, 'a!b') should be equivalent to x.a!b
>>
>> No, it does not. The documentation states equivalence for two
>> particular values
>
> It states equivalence for two values _based on the name_.
>
> "If the string is the name of one of the object’s attributes, the
> result is the value of that attribute. For example, getattr(x,
> 'foobar') is equivalent to x.foobar."
>
> The string 'a!b' is the name of the attribute, ergo getattr(x, 'a!b')
> _is_ x.a!b. If x.a!b isn't valid CPython, then etc.
>
>> CPython breaks that equivalence
>
> So you're outright ignoring the comments that this behaviour is to
> make CPython more performant?
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: all() is slow?

2011-11-13 Thread alex23
On Nov 13, 4:28 pm, Devin Jeanpierre  wrote:
> > which implies that getattr(x, 'a!b') should be equivalent to x.a!b
>
> No, it does not. The documentation states equivalence for two
> particular values

It states equivalence for two values _based on the name_.

"If the string is the name of one of the object’s attributes, the
result is the value of that attribute. For example, getattr(x,
'foobar') is equivalent to x.foobar."

The string 'a!b' is the name of the attribute, ergo getattr(x, 'a!b')
_is_ x.a!b. If x.a!b isn't valid CPython, then etc.

> CPython breaks that equivalence

So you're outright ignoring the comments that this behaviour is to
make CPython more performant?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Slave to master auto linking.

2011-11-13 Thread Chris Angelico
2011/11/14 Богун Дмитрий :
> m = master()
> s = m.slave()
> s.master is m
>

Can you simply have m.slave() pass a parameter to the slave's constructor?

class Master(object):
   class Slave(object):
   def __init__(self,master):
   self.master=master
   print 'Slave.__init__: self.master: ', self.master
   def slave(self):
   return self.Slave(self)

Alternatively, you don't have to nest the classes at all:

class Slave(object):
   def __init__(self,master):
  self.master=master
  print 'Slave.__init__: self.master: ', self.master

class Master(object):
   def slave(self):
   return Slave(self)

By passing 'self' to the Slave() constructor, I give the slave a
chance to keep a reference to its own master.

Chris Angelico
-- 
http://mail.python.org/mailman/listinfo/python-list


Slave to master auto linking.

2011-11-13 Thread Богун Дмитрий

Hello.
I try make some weird thing. I want to get from code like this:
class master:
...
class slave:
...

m = master()
s = m.slave()
s.master is m

Last expression must be true. I want link "master" to be set 
automatically by master object while creating slave object. Additional 
requirement - "master" link must be available for constructor of slave 
object.


Best what I can get is:

import functools
from weakref import WeakKeyDictionary
from threading import RLock

class meth_wrap(object):
def __init__(self, func):
object.__init__(self)
self.func = func
functools.update_wrapper(self, func, updated=())

class lazy_attr(meth_wrap):
def __get__(self, obj, type=None):
if obj is None:
return self
val = self.func(obj)
setattr(obj, self.__name__, val)
return val

class slave_mixin(object):
@lazy_attr
def master(self):
m = slave_gen._unbound_master
assert m is not None, '"Slave" object can\'t find master link. 
Is it was correctly created? obj:%s' % repr(self)

return m

class slave_gen(meth_wrap):
_storage = WeakKeyDictionary()
# Используется глобально
_unbound_master = None
_lock = RLock()

def __get__(self, mobj, type=None):
if mobj is None:
return self.func
d = {
'm': mobj,
'w': self}
obj = self.delay_init()
self._storage[obj] = d
functools.update_wrapper(obj, self.func, updated=())
return obj

class delay_init(object):
def __call__(self, *args, **kw_args):
d = slave_gen._storage[self]
slave_gen._lock.acquire()
try:
slave_gen._unbound_master = d['m']
obj = d['w'].func(*args, **kw_args)
obj.master = d['m']
slave_gen._unbound_master = None
finally:
slave_gen._lock.release()
return obj

def __getattr__(self, attr):
d = slave_gen._storage[self]
return getattr(d['m'], attr)
def __setattr__(self, attr, val):
d = slave_gen._storage[self]
return setattr(d['m'], attr, val)

class Master(object):
@slave_gen
class Slave(slave_mixin):
def __init__(self):
slave_mixin.__init__(self)
print 'Slave.__init__: self.master: ', self.master

if __name__ == '__main__':
m = Master()
s = m.Slave()
print 's.master: ', s.master

It works, by looking little weird... and I can't find way to escape from 
using lock at object creation phase. It can be done by adding mandatory 
attribute to slave class constructor, but this is even worse(for me) 
than using lock.


Please show me more clear way to make this slave to master link.

PS Sorry for my English.

--
Богун Дмитрий aka vugluskr

--
http://mail.python.org/mailman/listinfo/python-list


[ANN] PikoTest.py - a small testing library

2011-11-13 Thread Makoto Kuwata
I released PikoTest.py 0.1.0.
http://pypi.python.org/pypi/PicoTest

PikoTest.py is a samll testing library for Python.

Features:

* Structured Test
* Setup/Teardown
* Fixture Injection
* Skip Test
* TODO

Example::

from __future__ import with_statement
import picotest
test = picotest.new()

with test("type 'str'"):

with test("operator '*'"):

@test("repeats string N times.")
def _(self):
self.assertEqual("AAA", "A" * 3)

@test("returns empty string when N is negative.")
def _(self):
self.assertEqual("", "A" * -1)

if __name__ == '__main__':
picotest.main()


Output example::

$ python -m picotest -h# show help
$ python example_test.py   # or python -m picotest example_test.py
 example_test.py
* type 'str'
  * operator '*'
- [passed] repeats string N times.
- [passed] returns empty string when N is negative.
## total:2, passed:2, failed:0, error:0, skipped:0, todo:0


See http://pypi.python.org/pypi/PicoTest for details.

--
regards,
makoto kuwata
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Uninstalling Py 2.5.2 from Windows 7

2011-11-13 Thread W. eWatson
Well, let be a careful a little more. I have PIL, numpy, scipy, 
pymatplotlib and pyephem installed, I think. There are Removeexe 
files in the python25 folder for them.  There's also a Removepy2exe.exe. 
Probably that was somehow used to get out py2.5.

--
http://mail.python.org/mailman/listinfo/python-list


Re: Uninstalling Py 2.5.2 from Windows 7

2011-11-13 Thread W. eWatson

On 11/13/2011 2:08 PM, Terry Reedy wrote:

On 11/13/2011 12:46 PM, W. eWatson wrote:

For many months I had sporadically used 2.5.2 under Win 7, then
something went awry. I tried an uninstall/install and it didn't get any
better. I thought I'd take another shot at it today. The uninstall went
OK, but c:\python25 remained with several py files and a folder, Lib. I
went ahead with the install and got a msg that asked if I wanted to
write over the python25 folder.


Uninstall (should) only uninstall files that it installed and
directories that are empty. The 'several py files' should be files that
you or some third-party software installed. I personally put everything
I write under /pythonxy in a subdirectory thereof that install and
uninstall pay no attention to. The Lib directory contains all the
python-coded stdlib modules. Unless you know there is something that you
wrote that you want, I would delete it before re-installing.

I suspect that current installers work a bit better than 2.5. I would
definitely use the latest 2.5.z that comes with an installer and not
2.5.2. They are all the same version of the language. The only
difference is bug fixes.

Thanks to both of you. Deleting python25 folder. Nothing of personal use 
in it.

--
http://mail.python.org/mailman/listinfo/python-list


Re: Trying to write beautifulsoup result to a file and get error message

2011-11-13 Thread MRAB

On 13/11/2011 22:37, goldtech wrote:

If I try:
...
soup = BeautifulSoup(ft3)
f = open(r'c:\NewFolder\clean4.html', "w")
f.write(soup)
f.close()

I get error message:

Traceback (most recent call last):
   File "C:\Documents and Settings\user01\Desktop\py\tb1a.py", line
203, in
 f.write(soup)
TypeError: expected a character buffer object

I want to write beautiful soup's result to a file, I am doing
something wrong. Help appreciated.


What do you mean by "beautiful soup's result"?

The original HTML is text, and you want it to write some text to the
file, but what exactly are you expecting it to write?
--
http://mail.python.org/mailman/listinfo/python-list


Trying to write beautifulsoup result to a file and get error message

2011-11-13 Thread goldtech
If I try:
...
soup = BeautifulSoup(ft3)
f = open(r'c:\NewFolder\clean4.html', "w")
f.write(soup)
f.close()

I get error message:

Traceback (most recent call last):
  File "C:\Documents and Settings\user01\Desktop\py\tb1a.py", line
203, in 
f.write(soup)
TypeError: expected a character buffer object

I want to write beautiful soup's result to a file, I am doing
something wrong. Help appreciated.

Thanks
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Use and usefulness of the as syntax

2011-11-13 Thread Terry Reedy

On 11/13/2011 3:55 AM, 0xfn wrote:

On Nov 12, 7:48 am, Rafael Durán Castañeda
  wrote:

El 12/11/11 13:43, Tim Chase escribió:> I hate trying to track down 
variable-names if one did something like


   from Tkinter import *


+1


Really, this questionable code is always mentioned as example in
Tkinter tuts.


I see it is still in the 3.2 tkinter doc, near the top.


IMHO much better is

import Tkinter as tk


My opinion also. I will think about changing it someday, but then all 
the examples will need to be changed ;-). So it will not be trivial.


--
Terry Jan Reedy


--
http://mail.python.org/mailman/listinfo/python-list


Re: Uninstalling Py 2.5.2 from Windows 7

2011-11-13 Thread Terry Reedy

On 11/13/2011 12:46 PM, W. eWatson wrote:

For many months I had sporadically used 2.5.2 under Win 7, then
something went awry. I tried an uninstall/install and it didn't get any
better. I thought I'd take another shot at it today. The uninstall went
OK, but c:\python25 remained with several py files and a folder, Lib. I
went ahead with the install and got a msg that asked if I wanted to
write over the python25 folder.


Uninstall (should) only uninstall files that it installed and 
directories that are empty. The 'several py files' should be files that 
you or some third-party software installed. I personally put everything 
I write under /pythonxy in a subdirectory thereof that install and 
uninstall pay no attention to. The Lib directory contains all the 
python-coded stdlib modules. Unless you know there is something that you 
wrote that you want, I would delete it before re-installing.


I suspect that current installers work a bit better than 2.5. I would 
definitely use the latest 2.5.z that comes with an installer and not 
2.5.2. They are all the same version of the language. The only 
difference is bug fixes.


--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list


Re: can't decompress data; zlib not available

2011-11-13 Thread Tim Wintle
On Sun, 2011-11-13 at 11:17 -0700, Steve Edlefsen wrote:
> 
> which appears to install zlib when python is reinstalled.  Except I
> can't run make without errors and there is no configuration file.
> 
> How do I reinstall python to include zlib?

Which OS are you on? Linux? BSD?

How did you install Plone?

First I'd check if there's a module shadowing the builtin zlib module -
i.e. if you've got a local file called "zlib.py" which is getting
imported by mistake.


Fairly much all *nix systems will have a python installation out of the
box - it looks like you need python2.6

I've never had a missing zlib module - but it's possible that it might
be missing if you don't have the zlib/deflate headers installed - if
they're not available then I'd try installing them and then reinstalling
the package you started with.

Tim Wintle

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Uninstalling Py 2.5.2 from Windows 7

2011-11-13 Thread Irmen de Jong

On 13-11-11 18:46, W. eWatson wrote:

For many months I had sporadically used 2.5.2 under Win 7, then
something went awry. I tried an uninstall/install and it didn't get any
better. I thought I'd take another shot at it today. The uninstall went
OK, but c:\python25 remained with several py files and a folder, Lib. I
went ahead with the install and got a msg that asked if I wanted to
write over the python25 folder.

I figured maybe I should ask about this. It's probably OK. Yes, I know I
have an old version of Python, but I need it occasionally.

Comments?


Just go ahead and manually delete c:\python25 and everything in it.
But make sure that the leftover stuff in there is something you won't 
need again, or that you can get back by re-installing the third party 
library that it was part of.


Then re-install from the 2.5.2 msi. (Or perhaps 2.5.4).

Irmen

--
http://mail.python.org/mailman/listinfo/python-list


(n00b) Tkinter trouble

2011-11-13 Thread Jason Swails
Hello,

I'm trying my hand at creating a Tkinter application, but not having much
luck.  I'm trying to have my top level window be a series of buttons with
different options on them.  Every time a button is pressed, it opens up a
new window with options.  While that new window is open, all of the buttons
on the original window are disabled.  However, I want all of those buttons
to become active again once I quit my new window.  I can't seem to
reactivate those buttons no matter what I do.

This is the approach I'm trying:

#!/usr/bin/env python

from Tkinter import *

class ActionButton(Button):
   def __init__(self, frame, text):
  self.frame = frame
  Button.__init__(self, master=self.frame, text=text,
command=self.execute)
   def execute(self):
  window = Toplevel()
  new_button = ActionButton(window, '2nd level button')
  quit_button = Button(window, text='Quit!', command=window.destroy)
  window.buttons = [new_button, quit_button]
  for button in window.buttons: button.pack()
  # Deactivate buttons from containing shell
  for button in self.frame.buttons: button.config(state=DISABLED)
  window.mainloop()
  for button in self.frame.buttons: button.config(state=ACTIVE)


top = Tk()
top_button = ActionButton(top, 'Button on top!')
top_button.pack()
quit_button = Button(top, text='Quit', command=top.destroy)
quit_button.pack()

top.buttons = [top_button, quit_button]

top.mainloop()

I'm really kind of running around in the dark here, so any advice or
explanation is appreciated.

Thanks!
Jason
-- 
http://mail.python.org/mailman/listinfo/python-list


can't decompress data; zlib not available

2011-11-13 Thread Steve Edlefsen

Hi,

I'm trying to install a tool for Plone called ZopeSkel, but
when I run the setup file ez_setup.py, I get

dr_shred@merle:~$ ez_setup.py
Downloading 
http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg

Traceback (most recent call last):
  File "/home/dr_shred/python/ez_setup.py", line 279, in ?
main(sys.argv[1:])
  File "/home/dr_shred/python/ez_setup.py", line 213, in main
from setuptools.command.easy_install import main
zipimport.ZipImportError: can't decompress data; zlib not available

I believe this means the python installation didn't include zlib.  Python
was installed with Plone and has the following config directory:

dr_shred@merle:/usr/local/Plone/Python-2.6/lib/python2.6/config$ ls -l
total 10208
-rw-r--r-- 1 root root 2139 2011-10-24 17:53 config.c
-rw-r--r-- 1 root root 1507 2011-10-24 17:53 config.c.in
-rwxr-xr-x 1 root root 7122 2011-10-24 17:53 install-sh
-rw-r--r-- 1 root root 10342706 2011-10-24 17:53 libpython2.6.a
-rw-r--r-- 1 root root42568 2011-10-24 17:53 Makefile
-rwxr-xr-x 1 root root 7431 2011-10-24 17:53 makesetup
-rw-r--r-- 1 root root 6528 2011-10-24 17:53 python.o
-rw-r--r-- 1 root root18265 2011-10-24 17:53 Setup
-rw-r--r-- 1 root root  368 2011-10-24 17:53 Setup.config
-rw-r--r-- 1 root root   41 2011-10-24 17:53 Setup.local

There's no readme file, or anything to describe how it all works.
The Setup file has an entry

zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

which appears to install zlib when python is reinstalled.  Except I
can't run make without errors and there is no configuration file.

How do I reinstall python to include zlib?

Many Thanks,

Steve Edlefsen

--
http://mail.python.org/mailman/listinfo/python-list


Uninstalling Py 2.5.2 from Windows 7

2011-11-13 Thread W. eWatson
For many months I had sporadically used 2.5.2 under Win 7, then 
something went awry. I tried an uninstall/install and it didn't get any 
better. I thought I'd take another shot at it today. The uninstall went 
OK, but c:\python25 remained with several py files and a folder, Lib. I 
went ahead with the install and got a msg that asked if I wanted to 
write over the python25 folder.


I figured maybe I should ask about this. It's probably OK. Yes, I know I 
have an old version of Python, but I need it occasionally.


Comments?
--
http://mail.python.org/mailman/listinfo/python-list


Re: xmlrpclib date times and a trailing Z

2011-11-13 Thread Travis Parks
On Nov 11, 7:20 pm, Travis Parks  wrote:
> I am trying to connect to Marchex's a call tracking software using
> xmlrpclib. I was able to get some code working, but I ran into a
> problem dealing with transfering datetimes.
>
> When I construct a xmlrpclib.ServerProxy, I am setting the
> use_datetime flag to indicate that I want to automatically convert
> back and forth between date times in the datetime library.
>
> I have a working version that doesn't use this flag, and I have to
> convert from the xmlrpclib.DateTime type to the datetime.datetime type
> manually, via string parsing.
>
> The thing is, Marchex's API returns date's with a trailing Z, after
> the time component. I did some research and this is supposed to be an
> indicator that UTC was used. However, it doesn't seem like the
> xmlrpclib likes it very much.
>
> It looks like it is using this code internally: time.strptime(data, "%Y
> %m%dT%H:%M:%S")
>
> This code doesn't look like it handles time zones at all. I guess, is
> there a way to tell xmlrpclib to include time zones when parsing date
> times?
>
> Thanks,
> Travis Parks

I did some chatting on IRC and it seems that the date/time format is
not very well defined in XML RPC specs. So, basically, Marchex is
using a format that the XML RPC library doesn't support. Strangely,
Marchex supports incoming dates with the format MMddThhmmss. It
just spits dates back out with -MM-ddThh:mm:ssZ. The ISO8601
standard seems to be used a lot, so it is surprising the library
doesn't try multiple formats, at least.

I find it strange that the library, in light of the fact that date
formats aren't standardized, doesn't provide the ability to configure
this. I also find it strange that the library doesn't incorporate
Basic Authentication using urllib2, but instead rolls its own method
of putting username:password@ before the netloc.

I wish Python's libraries acted more like an integrated framework than
just unrelated libraries. I suppose I am spoiled from years of working
with all-in-one frameworks managed by a single group. That is not the
way C/C++ works or how Linux works. The power generated by using a
conglomeration of unrelated libraries is indisputable, even if it can
be a productivity killer and just plain confusing.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to indent blocks when readline completion is on?

2011-11-13 Thread Chris Angelico
On Mon, Nov 14, 2011 at 12:30 AM, Steven D'Aprano
 wrote:
> I thought I could add a wrapper around the rlcompleter method, like this:
>
 import readline
 import rlcompleter
 readline.parse_and_bind("tab: complete")
 completer = readline.get_completer()
 def wrapped_completer(text, state):
> ...     if not text or text.isspace():
> ...         return "\t"
> ...     else:
> ...         return completer(text, state)
> ...
 readline.set_completer(wrapped_completer)

Attempting to duplicate this failed in my Py3 (no readline module -
probably I didn't have the dev version when I built that Python), but
in Py2, I can see the same issue. The wrapped_completer function is
called repeatedly with successive values for 'state', and it needs to
return None at some point to indicate that there are no more
possibilities. (Why isn't it specced to simply return an iterable?)

>>> def wrapped_completer(text, state):
... if not text or text.isspace():
... if state: return None
... return "\t"
... else:
... return completer(text, state)
...

This function appears (to me!) to do what you're looking for; it
allows me to enter tabs while still using tab completion. However, I
seem to have some slightly different tab-completion settings somewhere
(for instance, typing "whi"  produces "while" with no space after
it, so I need to type " Tr" not "Tr"), so this may not work on your
setup.

ChrisA
-- 
http://mail.python.org/mailman/listinfo/python-list


How to indent blocks when readline completion is on?

2011-11-13 Thread Steven D'Aprano
I have set up readline completion as described here:

http://docs.python.org/library/rlcompleter.html

Now how do I indent blocks in the interactive interpreter? If I press the 
TAB key, the completer prompts me instead of indenting:

>>> readline.parse_and_bind("tab: complete")
>>> while True:
... 
Display all 182 possibilities? (y or n)
... 


Surely I'm not stuck with indenting by manually typing spaces?


I thought I could add a wrapper around the rlcompleter method, like this:

>>> import readline
>>> import rlcompleter
>>> readline.parse_and_bind("tab: complete")
>>> completer = readline.get_completer()
>>> def wrapped_completer(text, state):
... if not text or text.isspace():
... return "\t"
... else:
... return completer(text, state)
... 
>>> readline.set_completer(wrapped_completer)


Completion appears to work if I have something in the line to start with, 
e.g. if I type "whi" TAB "Tr" TAB I get "while True", but if I press TAB 
on an empty line (intending to get an actual tab character for 
indentation), it plays merry havoc with my session. All keyboard input 
appears to be dead, eventually I used Ctrl-Z to interrupt the process and 
killed it from the shell.


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


socket.socket.makefile

2011-11-13 Thread Matt Joiner
I'm writing an alternative socket module, and have come across the
code for the makefile call, which mentions the following:
(XXX refactor to share code?)
http://hg.python.org/cpython/file/27adb952813b/Lib/socket.py#l149
Has this been refactored elsewhere? Is there something I can use to
wrap the SocketIO inheriting from RawIOBase in all the variants the
io.open/socket.makefile functions return for me?
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Dynamically altering __init__

2011-11-13 Thread Kääriäinen Anssi
I wrote:
"""
I will post a link to a complete example once I have done the AST
transformations etc. I hope this will be useful to readers of this list.
I didn't find such an example, so maybe the next asker will find it...
"""

Finally got time to do this. The example can be found at:
https://github.com/akaariai/ast_model

In the example I rewrote a small part of Django's model __init__ to
use:
self.field1, self.field2, ... = args
instead of:
for f_name, val in izip(field_names, args):
setattr(self, f_name, val)

The speedup of that rewrote is about 50% for a model having 10 fields.

The example implementation might not be optimal, but it seems to
work. I hope it will be useful to the readers of this list. It was a nice
learning experience for me.

Thanks for your help,
 - Anssi Kääriäinen
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Use and usefulness of the as syntax

2011-11-13 Thread 0xfn
On Nov 12, 7:48 am, Rafael Durán Castañeda
 wrote:
> El 12/11/11 13:43, Tim Chase escribió:>   I hate trying to track down 
> variable-names if one did something like
>
> >   from Tkinter import *
>
> +1

Really, this questionable code is always mentioned as example in
Tkinter tuts.
IMHO much better is
>>> import Tkinter as tk
In common case `as` is useful when:
1. You `import ThirdPartyModuleWithTerriblyLongName as tpm`
2. Whant to free some common variable name, which is engaged by module
name by default
   (right what Mel Wilson has pictured)
-- 
http://mail.python.org/mailman/listinfo/python-list