ANN: ActivePython 2.7.1.4 is now available
ActiveState is pleased to announce ActivePython 2.7.1.4, a complete, ready-to-install binary distribution of Python 2.7. http://www.activestate.com/activepython/downloads What's New in ActivePython-2.7.1.4 == *Release date: 14-Feb-2011* New Features Upgrades --- - Upgrade to PyPM 1.3.1: - Programmatic use via ``pypm.cmd(['install', 'foo'])`` - Support for postinstall and conditional user-notes - Upgraded the following packages: - SQLAlchemy-0.6.6 Noteworthy Changes Bug Fixes -- - PyPM bug fixes: - Bug #88791: fail immediately for missing dependencies - Fix needless truncation of output when piping (eg: ``pypm list | less``) - Respect download cache of ``*.pypm`` packages (don't redownload) What is ActivePython? = ActivePython is ActiveState's binary distribution of Python. Builds for Windows, Mac OS X, Linux are made freely available. Solaris, HP-UX and AIX builds, and access to older versions are available in ActivePython Business, Enterprise and OEM editions: http://www.activestate.com/python ActivePython includes the Python core and the many core extensions: zlib and bzip2 for data compression, the Berkeley DB (bsddb) and SQLite (sqlite3) database libraries, OpenSSL bindings for HTTPS support, the Tix GUI widgets for Tkinter, ElementTree for XML processing, ctypes (on supported platforms) for low-level library access, and others. The Windows distribution ships with PyWin32 -- a suite of Windows tools developed by Mark Hammond, including bindings to the Win32 API and Windows COM. ActivePython also includes a binary package manager for Python (PyPM) that can be used to install packages much easily. For example: C:\pypm install mysql-python [...] C:\python import MySQLdb See this page for full details: http://docs.activestate.com/activepython/2.7/whatsincluded.html As well, ActivePython ships with a wealth of documentation for both new and experienced Python programmers. In addition to the core Python docs, ActivePython includes the What's New in Python series, Dive into Python, the Python FAQs HOWTOs, and the Python Enhancement Proposals (PEPs). An online version of the docs can be found here: http://docs.activestate.com/activepython/2.7/ We would welcome any and all feedback to: activepython-feedb...@activestate.com Please file bugs against ActivePython at: http://bugs.activestate.com/enter_bug.cgi?product=ActivePython Supported Platforms === ActivePython is available for the following platforms: - Windows (x86 and x64) - Mac OS X (x86 and x86_64; 10.5+) - Linux (x86 and x86_64) - Solaris/SPARC (32-bit and 64-bit) (Business, Enterprise or OEM edition only) - Solaris/x86 (32-bit)(Business, Enterprise or OEM edition only) - HP-UX/PA-RISC (32-bit)(Business, Enterprise or OEM edition only) - HP-UX/IA-64 (32-bit and 64-bit) (Enterprise or OEM edition only) - AIX/PowerPC (32-bit and 64-bit) (Business, Enterprise or OEM edition only) More information about the Business Edition can be found here: http://www.activestate.com/business-edition Custom builds are available in the Enterprise Edition: http://www.activestate.com/enterprise-edition Thanks, and enjoy! The Python Team -- Sridhar Ratnakumar sridharr at activestate.com -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
Release of faulthandler 1.4
faulthandler is a module to display the Python backtrace on a fatal error (eg. segfault), after a delay (eg. 60 minutes) or when a user signal is send (eg. SIGUSR1). Changes of the version 1.4: * Add register() and unregister() functions * Add optional all_threads argument to enable() * Limit the backtrace to 100 threads * Allocate an alternative stack for the fatal signal handler to be able to display a backtrace on a stack overflow (define HAVE_SIGALTSTACK). Not available on Windows. * Windows installer for Python 3.2(RC3) You can choose the output file (sys.stderr by default) and to dump the backtrace of the current thread (default) or of all threads. faulthandler works on Python 2.5, 2.6, 2.7, 3.1 and 3.2. It is tested on Linux, FreeBSD on Windows, it should work on any operating system. For more information, see: https://github.com/haypo/faulthandler/wiki/ http://pypi.python.org/pypi/faulthandler/ Victor Stinner aka haypo -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
[ANN] Data Plotting Library DISLIN 10.1
Dear Python users, I am pleased to announce version 10.1 of the data plotting software DISLIN. DISLIN is a high-level and easy to use plotting library for displaying data as curves, bar graphs, pie charts, 3D-colour plots, surfaces, contours and maps. Several output formats are supported such as X11, VGA, PostScript, PDF, CGM, WMF, HPGL, TIFF, GIF, PNG, BMP and SVG. The software is available for the most C, Fortran 77 and Fortran 90/95 compilers. Plotting extensions for the interpreting languages Perl, Python and Java are also supported. DISLIN distributions can be copied from the DISLIN home page http://www.dislin.de and via FTP from the server ftp://ftp.gwdg.de/pub/grafik/dislin All DISLIN distributions are free for non-commercial use. Licenses for commercial use are available from the site http://www.dislin.de. --- Helmut Michels Max Planck Institute for Solar System Research Phone: +49 5556 979-334 Max-Planck-Str. 2 Fax : +49 5556 979-240 D-37191 Katlenburg-Lindau Mail : mich...@mps.mpg.de -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
PythonCamp Cologne on 16th/17th April 2011
Hi all! On April 16th and 17th 2011 the second PythonCamp Cologne, Germany will be held. From a one day event last year we now go for two days! So if you are in the area and interested, please come over! The event is held in Barcamp format which means that no program is defined before the event but organized by all the participants during the event. So if you want to discuss something, give a presentation of a project or just share ideas, this is for you. And the best: Entrance is free! :-) You can register for it either on Facebook or the Etherpad. Esp. last minute Information will also be shared via twitter. Language will probably be mostly german but if english speaking guests attend we will of course accomodate them and switch to english. Date: 16./17. April 2011 Location: Cyrus AG, Cologne, Germany Facebook: http://www.facebook.com/event.php?eid=182166728482906 Etherpad: http://openetherpad.org/pycamp Homepage: http://pythoncamp.de Twitter: http://twitter.com/pythoncamp I hope to see you there! -- Christian -- Christian Scholz, COM.lounge GmbH, tel. +49 241 400 730 0, http://comlounge.net Blog: http://mrtopf.de/blog, Twitter: http://twitter.com/mrtopf Podcasts: Der OpenWeb-Podcast (http://openwebpodcast.de) Data Without Borders (http://datawithoutborders.net) Politisches: http://politfunk.de/ -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
Re: Extending classes __init__behavior for newbies
Westley Martínez aniko...@gmail.com wrote: In the end i promise they will respect you more for your honesty. And it will not be a respect forged from fear, no, it will be something greater! A respect forged from collaboration. A respect of comrades in arms. This is the future i bring to c.l.py! HEIL DER FUHRER! Godwin was right. You lose. -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list
Re: lint warnings
Il giorno 15/feb/2011, alle ore 04.10, Ben Finney ha scritto: Andrea Crotti andrea.crott...@gmail.com writes: The ‘map’ builtin is deprecated; using a list comprehension is neater and more efficient. Ok well it depends, map(int, biglist) is better than: [int(x) for x in biglist] at least for me. Efficiency is probably not a big issue apparently, and it's really not important until I see that this is a bottleneck. It makes the code unnecessarily ambiguous; the person reading the code can't tell that it's a relative import. Yes but what if I move those two files (parameter and the importing module) away, the import will continue to work if it's not relative to the upper directory. -- http://mail.python.org/mailman/listinfo/python-list
Re: generating .zip including __main__.py file in top root using distutils
I answer myself to put my question on top of the list again. On Feb 12, 7:47 pm, aspineux aspin...@gmail.com wrote: Python 2.6 can run a zip file, searching for __main__.py in the root of the zip archive and running it. How can I create such an archive using distutils (and not setuptools) ? If I use # python setup.py bdist --format=zip I get a dumb zip file with a deep tree structure from / and I cannot put the __main__.py in the root archive If I use # python setup.py sdist --format=zip I get a more compact tree. But the tree start bellow directory named mypackage-version, my-package-1.0/ setup.py __main__.py If I use setuptool, generating .EGG I get exacly what I want ! But I read it is bad to use setuptool and EGGs since pip is available :-) I was hopping distutils have been updated when adding the zip trick, but I didn't find the trick. Help -- http://mail.python.org/mailman/listinfo/python-list
interleave string
Just a curiosity not a real problem, I want to pass from a string like xxaabbddee to xx:aa:bb:dd:ee so every two characters insert a :. At the moment I have this ugly inliner interleaved = ':'.join(orig[x:x+2] for x in range(0, len(orig), 2)) but also something like this would work [''.join((x,y)) for x, y in zip(orig[0::2], orig[1::2])] any other ideas? -- http://mail.python.org/mailman/listinfo/python-list
Re: interleave string
On Tue, 15 Feb 2011 10:53:56 +0100 Andrea Crotti andrea.crott...@gmail.com wrote: Just a curiosity not a real problem, I want to pass from a string like xxaabbddee to xx:aa:bb:dd:ee so every two characters insert a :. At the moment I have this ugly inliner interleaved = ':'.join(orig[x:x+2] for x in range(0, len(orig), 2)) but also something like this would work [''.join((x,y)) for x, y in zip(orig[0::2], orig[1::2])] any other ideas? import re s = 'xxaabbddee' m = re.compile((..)) s1 = m.sub(\\1:, s)[:-1] w. -- http://mail.python.org/mailman/listinfo/python-list
Re: interleave string
Hello, How about this: str = 'xxaabbddee' ':'.join(map(''.join, zip(str[::2], str[1::2]))) In my example, it should not matter that the letters are repeating. On Tue, Feb 15, 2011 at 11:53 AM, Andrea Crotti andrea.crott...@gmail.comwrote: Just a curiosity not a real problem, I want to pass from a string like xxaabbddee to xx:aa:bb:dd:ee so every two characters insert a :. At the moment I have this ugly inliner interleaved = ':'.join(orig[x:x+2] for x in range(0, len(orig), 2)) but also something like this would work [''.join((x,y)) for x, y in zip(orig[0::2], orig[1::2])] any other ideas? -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Missing SIGCHLD
Hi, I currently build a process management system which is able to fork child processes (fork()) and keep them alive (waitpid() ). if pid in self.current_workers: os.waitpid(pid, 0) If a child process dies, it should trigger a SIGCHLD signal and a handler is installed to catch the signal and start a new child process. The code is nothing special, just can be seen in any Python tutorial you can find on the net. signal.signal(signal.SIGCHLD, self.restart_child_process) signal.signal(signal.SIGHUP, self.handle) # reload signal.signal(signal.SIGINT, self.handle) signal.signal(signal.SIGTERM, self.handle) signal.signal(signal.SIGQUIT, self.handle) However, this code does not always work as expected. Most of the time, it works. When a child process exits, the master process receives a SIGCHLD and restart_child_process() method is invoked automatically to start a new child process. But the problem is that sometimes, I know a child process exits due to an unexpected exception (via log file) but it seems that master process does not know about it. No SIGCHLD and so restart_child_process() is not triggered. Therefore, no new child process is forked. Could you please kindly tell me why this happens? Is there any special code that need being installed to ensure that every dead child will be informed correctly? Mac OSX 10.6 Python 2.6.6 Thanks Dinh -- http://mail.python.org/mailman/listinfo/python-list
Re: Question on Creating exe file with py2exe
On 13 fév, 06:20, joy99 subhakolkata1...@gmail.com wrote: On Feb 13, 1:29 am, aspineux aspin...@gmail.com wrote: Hi I'm releasing a .exe made with py2exe myself an got this problem too. 99% of the time the required DLL is already installed by another application and you don't need to care about it. The 1% is about empty or fresh windows install (server most of the time) For them, I provide a link to the M$ vcredist and a warning in my download page asking them to install it them self. Take a look at my site for the vcredist link :http://www.magikmon.com/mksbackup/download.en.html Regards Alain On Feb 12, 9:06 pm, joy99 subhakolkata1...@gmail.com wrote: Dear Room, I am using Windows XP (SP2) and a Python Version Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32. I was looking to create exe files. Reviewing various posts here, I felt py2exe may be the best thing I can opt for. But for Python2.6 I found the following note in the py2exe tutorial: For Python 2.6, the DLL you need is called MSVCR90.dll. Py2exe is not able to automatically include this DLL in your dist directory, so you must provide it yourself. To complicate things, there is more than one version of this DLL in existance, each with the same filename. You need the same version that the Python interpreter was compiled with, which is version 9.0.21022.8. Through the remainder of these instructions, hover your mouse over the dll file (or the vcredist_x86.exe installer executable) to confirm which version you've got. My questions are: (i) From where I can download MSVCR90.dll ? Is there any trusted site? (ii) How to install the same? (iii) Would py2exe work fine if I install it? (iv) Is there any other exe creating program which does not have all these problems? As it is a room for expert python developers, I felt to ask you, if any one can kindly find some time to resolve my query, I would be honored. Thanks in Advance, Best Regards, Subhabrata. Hi Alain, Thank you for your product information. But, with my problem installation is okay. The first two steps: from distutils.core import setup import py2exe but as I am giving setup(console=['file.py']) the setup file is not being generated. What do you mean ? Do you expect the 3 lines above will generate a setup.py file ? You are wrong you must create your setup.py file yourself, and this file must contains the 3 lines above, and more a lot more .. Then you will run python setup.py py2exe to generate your .exe file It is giving some error messages. Any suggestions? Best Regards, Subhabrata.- Masquer le texte des messages précédents - - Afficher le texte des messages précédents - -- http://mail.python.org/mailman/listinfo/python-list
[ANN] Data Plotting Library DISLIN 10.1
Dear Python users, I am pleased to announce version 10.1 of the data plotting software DISLIN. DISLIN is a high-level and easy to use plotting library for displaying data as curves, bar graphs, pie charts, 3D-colour plots, surfaces, contours and maps. Several output formats are supported such as X11, VGA, PostScript, PDF, CGM, WMF, HPGL, TIFF, GIF, PNG, BMP and SVG. The software is available for the most C, Fortran 77 and Fortran 90/95 compilers. Plotting extensions for the interpreting languages Perl, Python and Java are also supported. DISLIN distributions can be copied from the DISLIN home page http://www.dislin.de and via FTP from the server ftp://ftp.gwdg.de/pub/grafik/dislin All DISLIN distributions are free for non-commercial use. Licenses for commercial use are available from the site http://www.dislin.de. --- Helmut Michels Max Planck Institute for Solar System Research Phone: +49 5556 979-334 Max-Planck-Str. 2 Fax : +49 5556 979-240 D-37191 Katlenburg-Lindau Mail : mich...@mps.mpg.de -- http://mail.python.org/mailman/listinfo/python-list
Re: interleave string
On Feb 15, 10:09 am, Wojciech Muła wojciech_m...@poczta.null.onet.pl.invalid wrote: import re s = 'xxaabbddee' m = re.compile((..)) s1 = m.sub(\\1:, s)[:-1] One can modify this slightly: s = 'xxaabbddee' m = re.compile('..') s1 = ':'.join(m.findall(s)) Depending on one's taste this could be clearer. The more general answer, from the itertools docs: from itertools import izip_longest def grouper(n, iterable, fillvalue=None): grouper(3, 'ABCDEFG', 'x') -- ABC DEF Gxx args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) s2 = ':'.join(''.join(pair) for pair in grouper(2, s, '')) Note that this behaves differently to the previous solutions, for sequences with an odd length. -- http://mail.python.org/mailman/listinfo/python-list
lint warnings
I find: map(func, iterable) to be neater than: [func(item) for item in iterable] If nothing else, the map version is shorter. More importantly, in the 2.x series (which I am often limited to for compatibility reasons), the variable used in the list comprehension leaks to the following code: $ python Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) [GCC 4.4.5] on linux2 Type help, copyright, credits or license for more information. del item Traceback (most recent call last): File stdin, line 1, in module NameError: name 'item' is not defined [int(item) for item in range(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] item 9 which can cause hard-to-find bugs. Fortunately this has been corrected in 3.x. Also, as already shown, the map version is faster. BTW, if you like: [item for item in iterable if predicate(item)] you can use: filter(predicate, item) I find the latter neater for the same reasons as above -- Gerald Britton -- http://mail.python.org/mailman/listinfo/python-list
Re: lint warnings
Gerald Britton gerald.brit...@gmail.com wrote: I find: map(func, iterable) to be neater than: [func(item) for item in iterable] If nothing else, the map version is shorter. That's only true if you wanted to call an existing function. If you wanted to do something involving a more complex expression that you can write inline then the list comprehension is shorter. snip Also, as already shown, the map version is faster. In most cases the list comprehension is faster. Try timing it. C:\Python27python.exe lib\timeit.py -s def double(x): return x*2 -s data=range(1) map(double, data) 1000 loops, best of 3: 1.82 msec per loop C:\Python27python.exe lib\timeit.py -s def double(x): return x*2 -s data=range(1) [x*2 for x in data] 1000 loops, best of 3: 879 usec per loop map is only likely to be faster if you wanted to call a function in both cases. If you have an expression that can be inlined you save the function call overhead with the list comprehension. -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Extending classes __init__behavior for newbies
On Tue, 2011-02-15 at 08:36 +, Duncan Booth wrote: Westley Martínez aniko...@gmail.com wrote: In the end i promise they will respect you more for your honesty. And it will not be a respect forged from fear, no, it will be something greater! A respect forged from collaboration. A respect of comrades in arms. This is the future i bring to c.l.py! HEIL DER FUHRER! Godwin was right. You lose. -- Duncan Booth http://kupuguy.blogspot.com Who's more trollish? The troll, or the troll who follows him? -- http://mail.python.org/mailman/listinfo/python-list
Re: interleave string
On 15/02/2011 09:53, Andrea Crotti wrote: Just a curiosity not a real problem, I want to pass from a string like xxaabbddee to xx:aa:bb:dd:ee so every two characters insert a :. At the moment I have this ugly inliner interleaved = ':'.join(orig[x:x+2] for x in range(0, len(orig), 2)) but also something like this would work [''.join((x,y)) for x, y in zip(orig[0::2], orig[1::2])] any other ideas? interleaved = {}{}:{}{}:{}{}:{}{}.format(*orig) -- http://mail.python.org/mailman/listinfo/python-list
How to inspect a variable (sys.modules) for changes in the execution of a program?
Hello, I have the following situation. In a big project that involves many dependencies (and sadly some sys.module hacks) we have a bug, and it will really help if i could monitor all changes made to that variable. Is there a way to trace those changes ? -- http://mail.python.org/mailman/listinfo/python-list
lint warnings
I find: map(func, iterable) to be neater than: [func(item) for item in iterable] If nothing else, the map version is shorter. That's only true if you wanted to call an existing function. If you wanted to do something involving a more complex expression that you can write inline then the list comprehension is shorter. not necessarily, no. [-i if i 0 else i for i in range(-10,0)] [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] vs. map(abs, range(-10,0)) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] snip Also, as already shown, the map version is faster. In most cases the list comprehension is faster. Try timing it. I have as have many others (including the previous poster who provided timings) C:\Python27python.exe lib\timeit.py -s def double(x): return x*2 -s data=range(1) map(double, data) 1000 loops, best of 3: 1.82 msec per loop C:\Python27python.exe lib\timeit.py -s def double(x): return x*2 -s data=range(1) [x*2 for x in data] 1000 loops, best of 3: 879 usec per loop granted, but not on topic here. we're talking about map vs list comps when you want to use a function. map is only likely to be faster if you wanted to call a function in both cases. Which is exactly the point. f you have an expression that can be inlined you save the function call overhead with the list comprehension. Of course, but that's not the point. -- Gerald Britton -- http://mail.python.org/mailman/listinfo/python-list
[ANN] Oktest 0.8.0 released - a new-style testing library
I released Oktest 0.8.0. http://pypi.python.org/pypi/Oktest/ http://packages.python.org/Oktest/ Oktest is a new-style testing library for Python. :: from oktest import ok, NG ok (x) 0 # same as assert_(x 0) ok (s) == 'foo'# same as assertEqual(s, 'foo') ok (s) != 'foo'# same as assertNotEqual(s, 'foo') ok (f).raises(ValueError) # same as assertRaises(ValueError, f) ok (u'foo').is_a(unicode) # same as assert_(isinstance(u'foo', unicode)) NG (u'foo').is_a(int) # same as assert_(not isinstance(u'foo', int)) ok ('A.txt').is_file() # same as assert_(os.path.isfile('A.txt')) NG ('A.txt').is_dir() # same as assert_(not os.path.isdir('A.txt')) See http://packages.python.org/Oktest/ for details. NOTICE!! Oktest is a young project and specification may change in the future. Enhancements and Changes * add ``NG()`` which is same as not_ok(). * enhanced to proive egg files for Python 3. * enhanced to support assertion method chaining. :: ok (sos.upper()).is_a(str).matches(r'^[A-Z]+$') == SOS * ``ok().matches()`` can take flag parameter which is passed to re.compile(). ok (\nSOS\n).matches(r'^[A-Z]+$', re.M) ## same as: #ok(\nSOS\n).matches(r.compile(r'^[A-Z]$', re.M)) * enhance helper methods to be available without with-statement. (this is necessary for Python 2.4 which is default version on CentOS.) from oktest.helper import chdir def fn(): ok (os.getcwd()) == /tmp chdir(/tmp).run(fn) ## this is same as: #with chdir(/tmp): # ok (os.getcwd()) == /tmp from oktest.dummy import dummy_file def fn(): ok (A.txt).is_file() ok (open(A.txt).read()) == SOS dummy_file(A.txt, SOS).run(fun) ## this is same as: #with dummy_file(A.txt, SOS): # ok (open(A.txt).read()) == SOS * ``spec()`` now checks environment variable $SPEC. This is useful to filter test cases. ## test script from oktest import oktest, run class StrTest(object): def test_upper(self): if spec(returns upper case string): ok (sos.upper()) == SOS if spec(doesn't change non-alphabetics): ok (sos123.upper()) == SOS123 if __name__ == __main__: run() ## terminal $ SPEC=returns upper case string python test1.py * fix ``oktest.run()`` to print correct traceback if ok() is called from nested function. * fix content of README.txt. -- regards, makoto kuwata -- http://mail.python.org/mailman/listinfo/python-list
Re: Non-linear regression help in Python
On 15 Feb, 05:24, Akand Islam sohel...@gmail.com wrote: Dear Sturlamolden, Thanks for reply. I will follow-up if I need further assistance. -- Akand You should rather use the SciPy user mailing list than comp.lang.python for this. Sturla -- http://mail.python.org/mailman/listinfo/python-list
newbie question about PYTHONPATH
I am to the point in _Learning_Python_ where functions are introduced. I decided to experiment by putting a function into a file and importing it into Idle. Of course, Idle couldn't find it, so I executed the following command in Bash: PYTHONPATH=/home/foo/prog/learning_python export PYTHONPATH env | grep PYTHONPATH ~$PYTHONPATH=/home/foo/prog/learning_python Idle still won't find it. I'm doing something wrong? -- http://mail.python.org/mailman/listinfo/python-list
Re: newbie question about PYTHONPATH
I think the command line should look something along this line export PYTHONPATH=$HOME/foo/prog/learning_python/: with a colon at the end. On Wed, Feb 16, 2011 at 12:49 AM, Tim Hanson tjhan...@yahoo.com wrote: I am to the point in _Learning_Python_ where functions are introduced. I decided to experiment by putting a function into a file and importing it into Idle. Of course, Idle couldn't find it, so I executed the following command in Bash: PYTHONPATH=/home/foo/prog/learning_python export PYTHONPATH env | grep PYTHONPATH ~$PYTHONPATH=/home/foo/prog/learning_python Idle still won't find it. I'm doing something wrong? -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: How to inspect a variable (sys.modules) for changes in the execution of a program?
On Tue, Feb 15, 2011 at 7:17 AM, Jorge Vargas jorge.var...@gmail.com wrote: Hello, I have the following situation. In a big project that involves many dependencies (and sadly some sys.module hacks) we have a bug, and it will really help if i could monitor all changes made to that variable. Is there a way to trace those changes ? Is the variable's value of a mutable or immutable type? What is the variable's scope (e.g. module-level global, or object attribute)? Is the variable subject to getting rebound to an entirely new value/object? The answers to these questions will determine how much work will be required to trace changes to the variable. I know of no built-in way to directly do such a thing, but the underlying functionality necessary to implement such a feature (e.g. sys.settrace, __getattribute__, __setattr__) does exist. Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Missing SIGCHLD
On Tue, Feb 15, 2011 at 2:57 AM, Dinh pcd...@gmail.com wrote: Hi, I currently build a process management system which is able to fork child processes (fork()) and keep them alive (waitpid() ). if pid in self.current_workers: os.waitpid(pid, 0) If a child process dies, it should trigger a SIGCHLD signal and a handler is installed to catch the signal and start a new child process. The code is nothing special, just can be seen in any Python tutorial you can find on the net. signal.signal(signal.SIGCHLD, self.restart_child_process) signal.signal(signal.SIGHUP, self.handle) # reload signal.signal(signal.SIGINT, self.handle) signal.signal(signal.SIGTERM, self.handle) signal.signal(signal.SIGQUIT, self.handle) However, this code does not always work as expected. Most of the time, it works. When a child process exits, the master process receives a SIGCHLD and restart_child_process() method is invoked automatically to start a new child process. But the problem is that sometimes, I know a child process exits due to an unexpected exception (via log file) but it seems that master process does not know about it. No SIGCHLD and so restart_child_process() is not triggered. Therefore, no new child process is forked. Could you please kindly tell me why this happens? Is there any special code that need being installed to ensure that every dead child will be informed correctly? Mac OSX 10.6 Python 2.6.6 Hi Dinh. I've done no Mac OS/X programming, but I've done Python and *ix signals some - so I'm going to try to help you, but it'll be kind of stabbing in the dark. *ix signals have historically been rather unreliable and troublesome when used heavily. There are BSD signals, SysV signals, and POSIX signals - they all try to solve the problems in different ways. Oh, and Linux has a way of doing signals using file descriptors that apparently helps quite a bit. I'm guessing your Mac will have available BSD and maybe POSIX signals, but you might check on that. You might try using ktrace on your Mac to see if any SIGCHLD signals are getting lost (it definitely happens in some scenarios), and hopefully, which kind of (C level) signal API CPython is using on your Mac also. You might also make sure your SIGCHLD signal handler is not just waitpid'ing once per invocation, but rather doing a nonblocking waitpid in a loop until no process is found, in case signals are lost (especially if/when signals occur during signal handler processing). If the loop in your signal handler doesn't help (enough), you could also try using a nonblocking waitpid in a SIGALARM handler in addition to your SIGCHLD handler. Some signal API's want you to reenable the signal as your first action in your signal handler to shorten a race window. Hopefully Mac OS/X doesn't need this, but you might check on it. BTW, CPython signals and CPython threads don't play very nicely together; if you're combining them, you might want to study up on this. Oh, also, signals in CPython will tend to cause system calls to return without completing, and giving an EINTR in errno, and not all CPython modules will understand what to do with that. :( Sadly, many application programmers tend to ignore the EINTR possibility. HTH -- http://mail.python.org/mailman/listinfo/python-list
file find skips first letter
I'm using code def getFiles(self, fileBase): return a list of the filenames in a director containing a base word allFiles = os.listdir(self.resultDir) baseFiles = [] for f in allFiles: if f.find(fileBase) 0: baseFiles.append(f) return baseFiles but the code can't find files with fileBase in it if the fileBase starts the filename. if the filenames are rnoise##.tif and fileBase is rnoise the file won't be found. If fileBase is noise the files will be found. -- http://mail.python.org/mailman/listinfo/python-list
Re: file find skips first letter
Wanderer wrote: I'm using code def getFiles(self, fileBase): return a list of the filenames in a director containing a base word allFiles = os.listdir(self.resultDir) baseFiles = [] for f in allFiles: if f.find(fileBase) 0: baseFiles.append(f) return baseFiles but the code can't find files with fileBase in it if the fileBase starts the filename. if the filenames are rnoise##.tif and fileBase is rnoise the file won't be found. If fileBase is noise the files will be found. (untested) Try if f.find(fileBase) -1: Mel. -- http://mail.python.org/mailman/listinfo/python-list
Re: file find skips first letter
On 15.02.2011 19:32, Wanderer wrote: I'm using code def getFiles(self, fileBase): return a list of the filenames in a director containing a base word allFiles = os.listdir(self.resultDir) baseFiles = [] for f in allFiles: if f.find(fileBase) 0: baseFiles.append(f) return baseFiles but the code can't find files with fileBase in it if the fileBase starts the filename. if the filenames are rnoise##.tif and fileBase is rnoise the file won't be found. If fileBase is noise the files will be found. str.find() returns the index to the left-most occurrence or -1 if the substring is not found. So, if the file name starts with fileBase, find() return 0 which you filter out with your test f.find(fileBase) 0. Either use f.find(fileBase) = 0 or better: baseFiles = [] for f in allFiles: if fileBase in f: baseFiles.append(f) HTH -- http://mail.python.org/mailman/listinfo/python-list
Re: file find skips first letter
def getFiles(self, fileBase): return a list of the filenames in a director containing a base word ... Have a look at the glob module, it does what you want. HTH -- Miki Tebeka miki.teb...@gmail.com http://pythonwise.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list
Re: newbie question about PYTHONPATH
On 15.02.2011 19:12, Panupat Chongstitwattana wrote: Panupat, please don't top-post, it messes the the natural order of the discussion. Thanks. I think the command line should look something along this line export PYTHONPATH=$HOME/foo/prog/learning_python/: with a colon at the end. Nope, the colon is only needed as a delimiter if you give more than one file. On Wed, Feb 16, 2011 at 12:49 AM, Tim Hansontjhan...@yahoo.com wrote: I am to the point in _Learning_Python_ where functions are introduced. I decided to experiment by putting a function into a file and importing it into Idle. Of course, Idle couldn't find it, so I executed the following command in Bash: PYTHONPATH=/home/foo/prog/learning_python export PYTHONPATH env | grep PYTHONPATH ~$PYTHONPATH=/home/foo/prog/learning_python Idle still won't find it. I'm doing something wrong? $ export PYTHONPATH=~/src/python/ $ idle works fine here. Where are you setting PYTHONPATH and from where do you run idle? If you set it in a terminal window, but run idle from a Desktop menu it won't work as exporting environment variables does only affect sub-processes. You might want to set PYTHONPATH in your ~/.bash_profile and then re-login. Also, how do you name your file? A Python module must end in .py HTH -- http://mail.python.org/mailman/listinfo/python-list
Re: file find skips first letter
On 15/02/2011 18:48, Mel wrote: Wanderer wrote: I'm using code def getFiles(self, fileBase): return a list of the filenames in a director containing a base word allFiles = os.listdir(self.resultDir) baseFiles = [] for f in allFiles: if f.find(fileBase) 0: baseFiles.append(f) return baseFiles but the code can't find files with fileBase in it if the fileBase starts the filename. if the filenames are rnoise##.tif and fileBase is rnoise the file won't be found. If fileBase is noise the files will be found. (untested) Try if f.find(fileBase) -1: Python is a 0-based language, so if fileBase is at the start of f then the result is 0. If fileBase isn't in f then the result is -1. An alternative is: if fileBase in f: -- http://mail.python.org/mailman/listinfo/python-list
Displaying SVG in tkinter using cairo and rsvg
Hi all, Information on using tkinter for displaying an svg image seems a bit low spread on the Internet. I recently played around with pygame and svg and realized, hold on this can be done with tk too. So I thought I post a little example for future generations :-) (and also have stored at http://dcuktec.googlecode.com/hg/source/examples/cairo_rsvg_tkinter.py). So here it is if you are interested: --- #! /usr/bin/env python Tkinter example for displaying SVG in a PhotoImage class using cairo and rsvg. Note that this is relatively slow, this is mainly due to converting the cairo surface data to the appropriate rgb values and putting each pixel in the PhotoImage class. import cairo import rsvg # I had a bit of trouble finding the rsvg python wrapper, turns out it is part # of the GnomePythonDesktop package, windows users are even less supported see: # http://cairographics.org/cairo_rsvg_and_python_in_windows/ to get it working. import Tkinter def _alpha_blending(rgba, back): Return a rgb tuple composed from a rgba and back(ground) tuple/list. paired = zip(rgba[:-1], back) alpha = rgba[-1] tmp = list() for upper, lower in paired: blend = (((255 - alpha) * lower) + (alpha * upper)) / 255 tmp.append(blend) return(tuple(tmp)) def convert(bgra_buffer, width, height): Convert bgra buffer to photoimage put idx = 0 end = len(bgra_buffer) arguments = list() while idx end: rgba = (ord(bgra_buffer[idx + 2]), ord(bgra_buffer[idx + 1]), ord(bgra_buffer[idx + 0]), ord(bgra_buffer[idx + 3])) back = (255, 255, 255) rgb = _alpha_blending(rgba, back) arguments += rgb idx += 4 template = ' '.join(height *['{%s}' % (' '.join(width*[#%02x%02x%02x]))]) return(template % tuple(arguments)) def photoimage_from_svg(file_path_name): Return a Tkinter.PhotoImage with the content set to the rendered SVG. svg = rsvg.Handle(file=file_path_name) width, height = svg.get_dimension_data()[:2] surface = cairo.ImageSurface(cairo.FORMAT_RGB24, int(width), int(height)) context = cairo.Context(surface) svg.render_cairo(context) image = Tkinter.PhotoImage(width=width, height=height) data = convert(surface.get_data(), width, height) image.put(data) return(image) if __name__ == '__main__': SVG = ?xml version=1.0 encoding=UTF-8 standalone=no? svg xmlns:rdf=http://www.w3.org/1999/02/22-rdf-syntax-ns#; xmlns:svg=http://www.w3.org/2000/svg; xmlns=http://www.w3.org/2000/svg; id=test version=1.1 width=900 height=600 rect id=redwidth=300 height=300 x=000 y=000 style=fill:#ff;fill-opacity:1.0;stroke:none / rect id=green width=300 height=300 x=300 y=000 style=fill:#00ff00;fill-opacity:1.0;stroke:none / rect id=blue width=300 height=300 x=600 y=000 style=fill:#ff;fill-opacity:1.0;stroke:none / rect id=black width=300 height=300 x=000 y=300 style=fill:#00;fill-opacity:1.0;stroke:none / rect id=grey width=300 height=300 x=300 y=300 style=fill:#00;fill-opacity:0.5;stroke:none / rect id=white width=300 height=300 x=600 y=300 style=fill:#ff;fill-opacity:1.0;stroke:none / /svg import os, tempfile # PATH = tempfile.mkstemp()[1] OPEN = open(PATH, 'w') OPEN.writelines(SVG) OPEN.close() ROOT = Tkinter.Tk() # IMAGE = photoimage_from_svg(PATH) # os.remove(PATH) BUTTON = Tkinter.Button(ROOT, image=IMAGE) BUTTON._photoimage = IMAGE BUTTON.grid() Tkinter.mainloop() --- -- mph -- http://mail.python.org/mailman/listinfo/python-list
Problem w/ MySQLdb
Hi; I have a function that calls the following class: #!/usr/bin/python import sys,os sys.path.append(os.getcwd()) import MySQLdb from login import login import re, string def buildTableColorShortOptions(): user, passwd, db, host = login() database = MySQLdb.connect(host, user, passwd, db) cursor = database.cursor() cursor.execute('''create table if not exists colorShortOptions ( Color varchar(40) not null, Value bool not null default '0' ) engine=innodb''') cursor.execute(insert into colorShortOptions (Color) values ('indigo')) cursor.execute(insert into colorShortOptions (Color) values ('maroon')) cursor.execute(insert into colorShortOptions (Color) values ('violet')) cursor.execute(insert into colorShortOptions (Color) values ('tan')) cursor.execute(insert into colorShortOptions (Color) values ('lime')) cursor.execute(insert into colorShortOptions (Color) values ('blue')) cursor.execute(insert into colorShortOptions (Color) values ('fuchsia')) cursor.execute(insert into colorShortOptions (Color) values ('cobalt blue')) cursor.execute(insert into colorShortOptions (Color) values ('black')) cursor.execute(insert into colorShortOptions (Color) values ('rose pink')) cursor.execute(insert into colorShortOptions (Color) values ('air force blue')) cursor.execute(insert into colorShortOptions (Color) values ('orange')) cursor.execute(insert into colorShortOptions (Color) values ('white')) cursor.execute(insert into colorShortOptions (Color) values ('red')) cursor.execute(insert into colorShortOptions (Color) values ('yellow green')) cursor.execute(insert into colorShortOptions (Color) values ('navy blue')) cursor.execute(insert into colorShortOptions (Color) values ('salmon')) cursor.execute(insert into colorShortOptions (Color) values ('yellow')) cursor.execute(insert into colorShortOptions (Color) values ('olive')) cursor.execute(insert into colorShortOptions (Color) values ('sky blue')) cursor.execute(insert into colorShortOptions (Color) values ('silver')) cursor.execute(insert into colorShortOptions (Color) values ('gray')) cursor.execute(insert into colorShortOptions (Color) values ('green')) cursor.execute(insert into colorShortOptions (Color) values ('teal')) cursor.close() It builds the table but fails from the first insertion. Trying to insert using that code directly in MySQL does indeed work. Why? TIA, Beno -- http://mail.python.org/mailman/listinfo/python-list
How can I define __getattr__ to operate on all items of container and pass arguments?
I have a container object. It is quite frequent that I want to call a function on each item in the container. I would like to do this whenever I call a function on the container that doesn't exist, i.e., the container would return an attribute error. For example class Cont(object): def __init__(self): self.items = [] def contMethod(self, args): print(I'm in contMethod.) def __getattr__(self, name): for I in self.items: # How can I pass arguments to I.__dict__[name]? I.__dict__[name] C = Cont() # Add some items to C C.contMethod() I'm in contMethod. C.itemMethod('abc') ?? The trouble I'm getting into is that I can't pass arguments to the attributes in the contained item. In the example above, I can't pass 'abc' to the 'itemMethod' method of each item in the container. Does someone know how I can accomplish this? Thanks, Jeremy -- http://mail.python.org/mailman/listinfo/python-list
Re: file find skips first letter
On 02/15/2011 12:32 PM, Wanderer wrote: if f.find(fileBase) 0: .find() returns -1 on failure, not 0. You want = instead of just , or even more readably if fileBase in f: -tkc -- http://mail.python.org/mailman/listinfo/python-list
logging module -- better timestamp accuracy on Windows
The Python logging module calls time.time() in LogRecord.__init__ to fetch the timestamp of the log record. However, time.time() isn't particularly accurate on Windows. We're logging start and end of our requests in our web server, which can be milliseconds apart, and the log timestamps often show up as identical, but time.clock() is telling us several milliseconds have actually elapsed. The fix is to use time.clock() if running on win32 (like timeit does). Here's how I've improved the accuracy for us: - if sys.platform == 'win32': # Running on win32, time.clock() is much more accurate than # time.time(), use it for LogRecord timestamps # Get the initial time and call time.clock() once to start it _start_time = time.time() time.clock() def _formatTimeAccurate(self, record, datefmt): # This is a bit nasty, as it modifies record.created and # record.msecs, but apart from monkey-patching Formatter.__init__, # how else do we do it? accurate_time = _start_time + time.clock() record.created = time.localtime(accurate_time) record.msecs = (accurate_time - int(accurate_time)) * 1000 return time.strftime(datefmt, record.created) # Override logging.Formatter's formatTime() so all logging calls # go through this logging.Formatter.formatTime = _formatTimeAccurate - This works, but as you can see, it's a bit hacky. Is there a better way to fix it? (I'd like the fix to affect all loggers, including the root logger.) I'm somewhat surprised that no one else has run into this before. Maybe I'm the only one who uses logging heavily under Windows ... :-) Thanks, Ben. -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I define __getattr__ to operate on all items of container and pass arguments?
On Tue, Feb 15, 2011 at 12:29 PM, Jeremy jlcon...@gmail.com wrote: I have a container object. It is quite frequent that I want to call a function on each item in the container. I would like to do this whenever I call a function on the container that doesn't exist, i.e., the container would return an attribute error. s/function/method/ For example class Cont(object): def __init__(self): self.items = [] def contMethod(self, args): print(I'm in contMethod.) def __getattr__(self, name): for I in self.items: # How can I pass arguments to I.__dict__[name]? I.__dict__[name] snip The trouble I'm getting into is that I can't pass arguments to the attributes in the contained item. In the example above, I can't pass 'abc' to the 'itemMethod' method of each item in the container. Does someone know how I can accomplish this? Recall that: x.y(z) is basically equivalent to: _a = x.y _a(z) So the arguments haven't yet been passed when __getattr__() is invoked. Instead, you must return a function from __getattr__(); this function will then get called with the arguments. Thus (untested): def __getattr__(self, name): def _multiplexed(*args, **kwargs): return [getattr(item, name)(*args, **kwargs) for item in self.items] return _multiplexed Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Problem w/ MySQLdb
On 15/02/2011 20:24, Victor Subervi wrote: Hi; I have a function that calls the following class: #!/usr/bin/python import sys,os sys.path.append(os.getcwd()) import MySQLdb from login import login import re, string def buildTableColorShortOptions(): user, passwd, db, host = login() database = MySQLdb.connect(host, user, passwd, db) cursor = database.cursor() cursor.execute('''create table if not exists colorShortOptions ( Color varchar(40) not null, Value bool not null default '0' ) engine=innodb''') cursor.execute(insert into colorShortOptions (Color) values ('indigo')) cursor.execute(insert into colorShortOptions (Color) values ('maroon')) [snip] cursor.execute(insert into colorShortOptions (Color) values ('teal')) cursor.close() It builds the table but fails from the first insertion. Trying to insert using that code directly in MySQL does indeed work. Why? You didn't commit the changes. -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I define __getattr__ to operate on all items of container and pass arguments?
On 15/02/2011 20:29, Jeremy wrote: I have a container object. It is quite frequent that I want to call a function on each item in the container. I would like to do this whenever I call a function on the container that doesn't exist, i.e., the container would return an attribute error. For example class Cont(object): def __init__(self): self.items = [] def contMethod(self, args): print(I'm in contMethod.) def __getattr__(self, name): for I in self.items: # How can I pass arguments to I.__dict__[name]? I.__dict__[name] C = Cont() # Add some items to C C.contMethod() I'm in contMethod. C.itemMethod('abc') ?? The trouble I'm getting into is that I can't pass arguments to the attributes in the contained item. In the example above, I can't pass 'abc' to the 'itemMethod' method of each item in the container. Does someone know how I can accomplish this? Try calling it. All you're currently doing is looking it up and then discarding it. -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I define __getattr__ to operate on all items of container and pass arguments?
On Tue, 15 Feb 2011 12:29:36 -0800, Jeremy wrote: def __getattr__(self, name): for I in self.items: # How can I pass arguments to I.__dict__[name]? I.__dict__[name] The same way you would pass arguments to any other function: with function call syntax. I.__dict__[name](arg1, arg2, arg3, ...) -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Extending classes __init__behavior for newbies
On Tue, Feb 15, 2011 at 1:44 PM, Steven D'Aprano steve+comp.lang.pyt...@pearwood.info wrote: I don't. If you (generic you) have separate write the code and test the code phases, your project is in trouble. You can probably get away with it if it's a tiny throw-away script, but for anything more substantial, you should be testing *as you are writing*. The two need to go in parallel. I don't follow full-blown test driven development where you write the test before you write the code, but still, the time to find out your infrastructure is fundamentally broken is *before* you have finished it, not three months later when you have built the entire app on top of it. Perhaps I should have clarified. I agreed only with the fact that if you spend more time in careful design you might spend less time fixing defects. Agreed, test-driven development tends to lend itself to higher quality code. cheers James -- -- James Mills -- -- Problems are solved by method -- http://mail.python.org/mailman/listinfo/python-list
Re: Problem w/ MySQLdb
On Tue, Feb 15, 2011 at 3:24 PM, Victor Subervi victorsube...@gmail.com wrote: It builds the table but fails from the first insertion. Trying to insert using that code directly in MySQL does indeed work. Why? In what way does it fail? Does it give you a stack trace, and if so, what does it say? Does it create the table, but not populate any data? If that's the case, you probably need to call commit() after you do your inserts. I'm not familiar with the MySQLDB module in particular, but python database adapters typically do not autocommit, unless you explicitly ask for that behavior. -- Jerry -- http://mail.python.org/mailman/listinfo/python-list
Re: How to inspect a variable (sys.modules) for changes in the execution of a program?
On 2/15/2011 10:19 AM Chris Rebert said... On Tue, Feb 15, 2011 at 7:17 AM, Jorge Vargasjorge.var...@gmail.com wrote: Hello, I have the following situation. In a big project that involves many dependencies (and sadly some sys.module hacks) we have a bug, and it will really help if i could monitor all changes made to that variable. Is there a way to trace those changes ? Is the variable's value of a mutable or immutable type? What is the variable's scope (e.g. module-level global, or object attribute)? Is the variable subject to getting rebound to an entirely new value/object? The answers to these questions will determine how much work will be required to trace changes to the variable. I know of no built-in way to directly do such a thing, but the underlying functionality necessary to implement such a feature (e.g. sys.settrace, __getattribute__, __setattr__) does exist. Out of curiosity, if it's immutable, what approach might you try to capture/trace reassignment? I've got a toy tracer that breaks with simple assignment: A=tracer(3) A 3 A+=3 value changed by 3 by add A 6 B=A+6 value changed by 6 by add B 12 B+=3 value changed by 3 by add B 15 A = 4 A+=4 Emile -- http://mail.python.org/mailman/listinfo/python-list
Re: lint warnings
On Tue, 15 Feb 2011 14:32:13 +, Duncan Booth wrote: snip Also, as already shown, the map version is faster. In most cases the list comprehension is faster. Try timing it. For an extremely specialised and minimal definition of most cases. C:\Python27python.exe lib\timeit.py -s def double(x): return x*2 -s data=range(1) map(double, data) 1000 loops, best of 3: 1.82 msec per loop C:\Python27python.exe lib\timeit.py -s def double(x): return x*2 -s data=range(1) [x*2 for x in data] 1000 loops, best of 3: 879 usec per loop You're not comparing apples and apples. Try calling the function double() from the list comp, instead of inlining it. Yes, if you can avoid a function call, list comps are faster than map. That's a valuable micro-optimization, although the warning about premature optimizations and small efficiencies apply. But the number of operations that can be inlined is only a vanishingly small subset of all operations you might choose to perform, and in general, map is faster than list comps with both C built-ins and pure Python functions. There's no doubt that list comps are a moderate win for readability and speed when you can inline the function as opposed to defining a lambda inside the map. But otherwise, it's a myth that map is generally slower and longer than list comps. It's usually the other way around: map(function, data) [function(x) for x in data] Even in Python3 where map becomes an iterator, it's still shorter: list(map(function, data)) [function(x) for x in data] (by two whole characters! Woo hoo, I don't need to upgrade my hard drive!!! *wink*) Conceptually, a map is a single operation. You don't have to think about the implementation, namely, iterate over the sequence, extracting each item into a temporary variable, and call the function on that temporary variable. You just map the function to the sequence, and don't worry about the implementation. I really appreciate that. Sometimes I wish that Python would let me write function(data), although given that this would be ambiguous, map is the next best thing. map is only likely to be faster if you wanted to call a function in both cases. If you have an expression that can be inlined you save the function call overhead with the list comprehension. Exactly. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I define __getattr__ to operate on all items of container and pass arguments?
On Tuesday, February 15, 2011 1:44:55 PM UTC-7, Chris Rebert wrote: On Tue, Feb 15, 2011 at 12:29 PM, Jeremy jlco...@gmail.com wrote: I have a container object. It is quite frequent that I want to call a function on each item in the container. I would like to do this whenever I call a function on the container that doesn't exist, i.e., the container would return an attribute error. s/function/method/ For example class Cont(object): def __init__(self): self.items = [] def contMethod(self, args): print(I'm in contMethod.) def __getattr__(self, name): for I in self.items: # How can I pass arguments to I.__dict__[name]? I.__dict__[name] snip The trouble I'm getting into is that I can't pass arguments to the attributes in the contained item. In the example above, I can't pass 'abc' to the 'itemMethod' method of each item in the container. Does someone know how I can accomplish this? Recall that: x.y(z) is basically equivalent to: _a = x.y _a(z) So the arguments haven't yet been passed when __getattr__() is invoked. Instead, you must return a function from __getattr__(); this function will then get called with the arguments. Thus (untested): def __getattr__(self, name): def _multiplexed(*args, **kwargs): return [getattr(item, name)(*args, **kwargs) for item in self.items] return _multiplexed Perfect, that's what I needed. I realized that I didn't have the arguments to the function, but couldn't figure out how to do it. This works like a charm. Thanks a lot! Jeremy -- http://mail.python.org/mailman/listinfo/python-list
Re: How to inspect a variable (sys.modules) for changes in the execution of a program?
Emile van Sebille wrote: Out of curiosity, if it's immutable, what approach might you try to capture/trace reassignment? I've got a toy tracer that breaks with simple assignment: AFAIK you'd have to replace the namespace dictionaries with dictionary-like things that would react to rebinding. Mel. -- http://mail.python.org/mailman/listinfo/python-list
Re: Problem w/ MySQLdb
It's been too long since I've worked on this. Yep, I forgot to commit. Thanks, Beno On Tue, Feb 15, 2011 at 5:21 PM, Jerry Hill malaclyp...@gmail.com wrote: On Tue, Feb 15, 2011 at 3:24 PM, Victor Subervi victorsube...@gmail.com wrote: It builds the table but fails from the first insertion. Trying to insert using that code directly in MySQL does indeed work. Why? In what way does it fail? Does it give you a stack trace, and if so, what does it say? Does it create the table, but not populate any data? If that's the case, you probably need to call commit() after you do your inserts. I'm not familiar with the MySQLDB module in particular, but python database adapters typically do not autocommit, unless you explicitly ask for that behavior. -- Jerry -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Extending classes __init__behavior for newbies
On Feb 14, 9:44 pm, Steven D'Aprano steve +comp.lang.pyt...@pearwood.info wrote: On Tue, 15 Feb 2011 09:47:54 +1000, James Mills wrote: On Tue, Feb 15, 2011 at 9:32 AM, rantingrick rantingr...@gmail.com wrote: Those who write code bases should design-in practicality, re- usability, and extendability as a forethought and NOT an afterthought. Of course i am not suggesting that everyone must be clairvoyant. However the vast amount of time involved in a coding project should be spent in the design and testing phases and NOT actually writing code. If you spend more time writing code you are not being professional, you are being sloppy -- and it WILL catch up to you. I actually agree with this. :) I don't. If you (generic you) have separate write the code and test the code phases, your project is in trouble. You can probably get away with it if it's a tiny throw-away script, but for anything more substantial, you should be testing *as you are writing*. The two need to go in parallel. My statement made no such mention of separate phases or how each phase should be ordered. Here, l'll paraphrase for the folks who's attention span cannot last for a full paragraph. *ahem*... You should spend more time designing and testing code than writing it... I hope that was clear enough for you. # In Code form. if (dev.design_time + dev.test_time) dev.write_time: print('Good Job Skippy!') else: raise ScriptKiddieError -- http://mail.python.org/mailman/listinfo/python-list
Re: Extending classes __init__behavior for newbies
On Feb 15, 4:16 pm, rantingrick rantingr...@gmail.com wrote: # In Code form. if (dev.design_time + dev.test_time) dev.write_time: print('Good Job Skippy!') else: raise ScriptKiddieError Oops, you see what i mean!!! :-) if (dev.design_time + dev.test_time) dev.write_time: print('Good Job Skippy!') else: raise ScriptKiddieError -- http://mail.python.org/mailman/listinfo/python-list
Re: How to inspect a variable (sys.modules) for changes in the execution of a program?
Jorge, It's been a while since I felt the need to use a Python debugger, but I could swear that most (all?) Python debuggers allow you to watch a specific variable. Check out the debuggers on the following page: http://wiki.python.org/moin/PythonDebuggers Malcolm -- http://mail.python.org/mailman/listinfo/python-list
Re: How to inspect a variable (sys.modules) for changes in the execution of a program?
On Tue, Feb 15, 2011 at 1:29 PM, Emile van Sebille em...@fenx.com wrote: On 2/15/2011 10:19 AM Chris Rebert said... On Tue, Feb 15, 2011 at 7:17 AM, Jorge Vargasjorge.var...@gmail.com wrote: snip I have the following situation. In a big project that involves many dependencies (and sadly some sys.module hacks) we have a bug, and it will really help if i could monitor all changes made to that variable. Is there a way to trace those changes ? Is the variable's value of a mutable or immutable type? What is the variable's scope (e.g. module-level global, or object attribute)? Is the variable subject to getting rebound to an entirely new value/object? The answers to these questions will determine how much work will be required to trace changes to the variable. I know of no built-in way to directly do such a thing, but the underlying functionality necessary to implement such a feature (e.g. sys.settrace, __getattribute__, __setattr__) does exist. Out of curiosity, if it's immutable, what approach might you try to capture/trace reassignment? I've got a toy tracer that breaks with simple assignment: A=tracer(3) A 3 A+=3 value changed by 3 by add I was thinking of a trace (as in sys.settrace()) function that'd grab the value (or possibly object ID) of the variable every time it was called (possibly excluding certain event types) and see whether it changed vs. the value the variable had the last time it was called. This would obviously be rather inefficient. Cheers, Chris -- http://mail.python.org/mailman/listinfo/python-list
floating point woes
Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? Pete Python 2.6 (r26:66714, Feb 8 2011, 08:50:11) [GCC 4.3.2 [gcc-4_3-branch revision 141291]] on linux2 -- http://mail.python.org/mailman/listinfo/python-list
Map vs. List Comprehensions (was lint warnings)
Generally, I prefer map() over list comprehensions since they are more succinct and run faster for non-trivial examples. However, I've been considering another use case related to functions in the operator module. Here are some examples: [x.method() for x in data] [x[0] for x in data] [x.attr for x in data] can be implemented as: from operator import methodcaller, itemgetter, attrgetter m = methodcaller('method') g = itemgetter(0) a = attrgetter('attr') map(m, data) map(g, data) map(a, data) I find that using map here generally is a little slower than the list comprehension, perhaps because of the extra work the operator methods have to do: m = methodcaller('upper') g = itemgetter(0) a = attrgetter('__class__') s = a Timer('[x.upper() for x in s]', 'from __main__ import s').timeit() 1.8678569793701172 Timer('map(m, s)', 'from __main__ import s, m').timeit() 2.1330718994140625 Timer('[x[0] for x in s]', 'from __main__ import s').timeit() 1.6577358245849609 Timer('map(g, s)', 'from __main__ import s, g').timeit() 1.8645310401916504 Timer('[x.__class__ for x in s]', 'from __main__ import s').timeit() 1.7232599258422852 Timer('map(a, s)', 'from __main__ import s, a').timeit() 2.4131419658660889 So, what's the feeling out there? Go with map and the operators or stick with the list comps? -- Gerald Britton -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Tuesday, February 15, 2011 7:49:34 PM UTC-4, Hans-Peter Jansen wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? The problem is probably that 2.385 can not be represented as 2.3850 a = 2.385 a 2.3848 André quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? Pete Python 2.6 (r26:66714, Feb 8 2011, 08:50:11) [GCC 4.3.2 [gcc-4_3-branch revision 141291]] on linux2 -- http://mail.python.org/mailman/listinfo/python-list
Re: Extending classes __init__behavior for newbies
On Tue, 2011-02-15 at 14:16 -0800, rantingrick wrote: On Feb 14, 9:44 pm, Steven D'Aprano steve +comp.lang.pyt...@pearwood.info wrote: On Tue, 15 Feb 2011 09:47:54 +1000, James Mills wrote: On Tue, Feb 15, 2011 at 9:32 AM, rantingrick rantingr...@gmail.com wrote: Those who write code bases should design-in practicality, re- usability, and extendability as a forethought and NOT an afterthought. Of course i am not suggesting that everyone must be clairvoyant. However the vast amount of time involved in a coding project should be spent in the design and testing phases and NOT actually writing code. If you spend more time writing code you are not being professional, you are being sloppy -- and it WILL catch up to you. I actually agree with this. :) I don't. If you (generic you) have separate write the code and test the code phases, your project is in trouble. You can probably get away with it if it's a tiny throw-away script, but for anything more substantial, you should be testing *as you are writing*. The two need to go in parallel. My statement made no such mention of separate phases or how each phase should be ordered. Here, l'll paraphrase for the folks who's attention span cannot last for a full paragraph. *ahem*... You should spend more time designing and testing code than writing it... I hope that was clear enough for you. # In Code form. if (dev.design_time + dev.test_time) dev.write_time: print('Good Job Skippy!') else: raise ScriptKiddieError It doesn't matter; you'll always end up spending the most time debugging the code -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Wed, 2011-02-16 at 00:49 +0100, Hans-Peter Jansen wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? Pete Python 2.6 (r26:66714, Feb 8 2011, 08:50:11) [GCC 4.3.2 [gcc-4_3-branch revision 141291]] on linux2 It's actually rounding up, but 2.38 cannot be represented precisely by floating points. This was fixed in Python 3.1. -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Tue, Feb 15, 2011 at 6:49 PM, Hans-Peter Jansen h...@urpla.net wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? Pete The number you are rounding is not 2.385. It is not possible to represent that number in binary, just like you cannot represent the value 1/3 in decimal. So instead, you're using the nearest approximation that an IEEE 754 Double-Precision Floating Point number can get you, which happens to be about 2.3848. And that rounds down to 2.38. Which also cannot be precisely represented in binary, so you get 2.3799 instead. -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Tue, Feb 15, 2011 at 4:49 PM, Hans-Peter Jansen h...@urpla.net wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32 Type help, copyright, credits or license for more information. 2.385 2.3848 Looks to me like it's working as expected... -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Tue, Feb 15, 2011 at 3:49 PM, Hans-Peter Jansen h...@urpla.net wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? http://docs.python.org/library/functions.html#round : Note: The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations[1] for more information. [1]: http://docs.python.org/tutorial/floatingpoint.html And indeed: from decimal import Decimal Decimal(2.385) Decimal('2.3847868371792719699442386627197265625') Which, rounded to 2 decimal places, gives us 2.38, which is in turn approximated as: 2.37989341858963598497211933135986328125 I encourage reading [1]. Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Tue, Feb 15, 2011 at 4:09 PM, Chris Rebert c...@rebertia.com wrote: On Tue, Feb 15, 2011 at 3:49 PM, Hans-Peter Jansen h...@urpla.net wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? http://docs.python.org/library/functions.html#round : Note: The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations[1] for more information. [1]: http://docs.python.org/tutorial/floatingpoint.html And indeed: from decimal import Decimal Decimal(2.385) Decimal('2.3847868371792719699442386627197265625') Which, rounded to 2 decimal places, gives us 2.38, which is in turn approximated as: [*whacks forehead hard*] Nevermind. - Chris -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Wednesday 16 February 2011, 01:06:08 Benjamin Kaplan wrote: On Tue, Feb 15, 2011 at 6:49 PM, Hans-Peter Jansen h...@urpla.net wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? Pete The number you are rounding is not 2.385. It is not possible to represent that number in binary, just like you cannot represent the value 1/3 in decimal. So instead, you're using the nearest approximation that an IEEE 754 Double-Precision Floating Point number can get you, which happens to be about 2.3848. And that rounds down to 2.38. Which also cannot be precisely represented in binary, so you get 2.3799 instead. Thanks for the explanation, Benjamin. Not that I like it, but anyway. If I hadn't quitted smoking a long time ago, I would go and ask, what these engineers smoked during the course of inventing this sh*t. Even more probably, they took way too much of a special form of lysergic acid. OTOH, cdecimals, as in Stefan Krah's package are long overdue to get into the core. Pete -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On Wednesday 16 February 2011, 01:24:59 Chris Rebert wrote: On Tue, Feb 15, 2011 at 4:09 PM, Chris Rebert c...@rebertia.com wrote: On Tue, Feb 15, 2011 at 3:49 PM, Hans-Peter Jansen h...@urpla.net wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? http://docs.python.org/library/functions.html#round : Note: The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations[1] for more information. [1]: http://docs.python.org/tutorial/floatingpoint.html And indeed: from decimal import Decimal Decimal(2.385) Decimal('2.3847868371792719699442386627197265625') Which, rounded to 2 decimal places, gives us 2.38, which is in turn approximated as: If that only wouldn't be so arkward to use: from cdecimal import Decimal, ROUND_HALF_UP d = Decimal(2.385) d Decimal('2.385') d.quantize(Decimal('1.00')) Decimal('2.38') hrmpf. d.quantize(Decimal('1.00'), ROUND_HALF_UP) Decimal('2.39') Oh, well. This is a bit too Cobolesque. (Yes, sure, I know, I can define any context, I like.) [*whacks forehead hard*] Nevermind. Too true. - Chris Pete -- http://mail.python.org/mailman/listinfo/python-list
return an object of a different class
How can I do something like this in python: #!/usr/bin/python3.1 class MyNumbers: def __init__(self, n): self.original_value = n if n = 100: self = SmallNumers(self) else: self = BigNumbers(self) class SmallNumbers: def __init__(self, n): self.size = 'small' class BigNumbers: def __init__(self, n): self.size = 'big' t = MyNumbers(200) When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers, because BigNumbers and SmallNumbers will have different methods etc... Do I need to use metaclasses? Thanks. -- Yves. http://www.SollerS.ca/ http://blog.zioup.org/ -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
On 16/02/2011 02:23, s...@uce.gov wrote: How can I do something like this in python: #!/usr/bin/python3.1 class MyNumbers: def __init__(self, n): self.original_value = n if n = 100: self = SmallNumers(self) else: self = BigNumbers(self) class SmallNumbers: def __init__(self, n): self.size = 'small' class BigNumbers: def __init__(self, n): self.size = 'big' t = MyNumbers(200) When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers, because BigNumbers and SmallNumbers will have different methods etc... Do I need to use metaclasses? Why not just make MyNumbers a function? -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
s...@uce.gov writes: How can I do something like this in python: #!/usr/bin/python3.1 class MyNumbers: def __init__(self, n): self.original_value = n if n = 100: self = SmallNumers(self) else: self = BigNumbers(self) A class defines a type of object. If you don't actually want instances of that class, then you don't really want a class. class SmallNumbers: def __init__(self, n): self.size = 'small' class BigNumbers: def __init__(self, n): self.size = 'big' t = MyNumbers(200) When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers, because BigNumbers and SmallNumbers will have different methods etc... Do I need to use metaclasses? You could. Or you could simply use a factory function:: def make_number(value): if value = 100: result = SmallNumbers(value) else: result = BigNumbers(value) result.original_value = value return result t = make_number(200) -- \ “Programs must be written for people to read, and only | `\incidentally for machines to execute.” —Abelson Sussman, | _o__) _Structure and Interpretation of Computer Programs_ | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
On Feb 16, 12:23 pm, s...@uce.gov wrote: How can I do something like this in python: #!/usr/bin/python3.1 class MyNumbers: def __init__(self, n): self.original_value = n if n = 100: self = SmallNumers(self) else: self = BigNumbers(self) class SmallNumbers: def __init__(self, n): self.size = 'small' class BigNumbers: def __init__(self, n): self.size = 'big' t = MyNumbers(200) When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers, because BigNumbers and SmallNumbers will have different methods etc... Firstly, does MyNumbers _have_ to be a class? Or would a function acting as a class factory be sufficient? Otherwise, you can change the class of an object, even within its own methods: class MyNumbers(object): def __init__(self, n = 0): self.original_value = n self.__class__ = BigNumbers if n 100 else SmallThing class BigNumbers(MyNumbers): size = 'big' class SmallNumbers(MyNumbers): size = 'small' from test import * s = MyNumbers(50) b = MyNumbers(200) type(s) class 'test.SmallNumbers' s.size 'small' type(b) class 'test.BigNumbers' b.size 'big' Hope this helps. -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
alex23 wuwe...@gmail.com wrote: self.__class__ = BigNumbers if n 100 else SmallThing That should, of course, be SmallNumbers :) -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
er I think you need a NumberFactory that makes SmallNumber and BigNumber according to the initial value. ?? 2011-2-16 10:23, s...@uce.gov : How can I do something like this in python: #!/usr/bin/python3.1 class MyNumbers: def __init__(self, n): self.original_value = n if n = 100: self = SmallNumers(self) else: self = BigNumbers(self) class SmallNumbers: def __init__(self, n): self.size = 'small' class BigNumbers: def __init__(self, n): self.size = 'big' t = MyNumbers(200) When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers, because BigNumbers and SmallNumbers will have different methods etc... Do I need to use metaclasses? Thanks. -- http://mail.python.org/mailman/listinfo/python-list
Re: logging module -- better timestamp accuracy on Windows
benhoyt comp.lang.pyt...@googlegroups.com wrote: This works, but as you can see, it's a bit hacky. Is there a better way to = fix it? (I'd like the fix to affect all loggers, including the root logger.= ) A simpler solution would be to caclulate the time it takes to the handle the request using time.clock() and include it in the log message. Something like: timer = time.time if sys.platform == 'win32': timer = time.clock def handler(...): start = timer() ... logging.debug(processing time %.0fms, (timer() - start) * 1000) Saves you from having to do the math in your head when you look at the logs. Ross Ridge -- l/ // Ross Ridge -- The Great HTMU [oo][oo] rri...@csclub.uwaterloo.ca -()-/()/ http://www.csclub.uwaterloo.ca/~rridge/ db // -- http://mail.python.org/mailman/listinfo/python-list
Re: interleave string
Andrea Crotti andrea.crott...@gmail.com wrote: At the moment I have this ugly inliner interleaved = ':'.join(orig[x:x+2] for x in range(0, len(orig), 2)) I actually prefer this over every other solution to date. If you feel its too much behaviour in one line, I sometimes break it out into separate values to provide some in-code documentation: s = xxaabbddee get_two_chars_at = lambda i: s[i:i+2] string_index = xrange(0, len(s), 2) ':'.join(get_two_chars_at(i) for i in string_index) 'xx:aa:bb:dd:ee' -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On 2011-02-16, Ian Kelly ian.g.ke...@gmail.com wrote: On Tue, Feb 15, 2011 at 4:49 PM, Hans-Peter Jansen h...@urpla.net wrote: while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? [...] Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32 Type help, copyright, credits or license for more information. 2.385 2.3848 Looks to me like it's working as expected... Well, it's working as it's supposed to... Whether it's working as expected depends on the user. :) -- Grant -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
On 2011-02-16, Hans-Peter Jansen h...@urpla.net wrote: Thanks for the explanation, Benjamin. Not that I like it, but anyway. If I hadn't quitted smoking a long time ago, I would go and ask, what these engineers smoked during the course of inventing this sh*t. Like most tools, IEEE floating point works brilliantly for what it was intended when used by people who know how to use it. The problem is that it's used for all sorts of things it shouldn't be by people who don't understand how it works (again, like most tools). The problem is that it _appears_ easy to use, but it actually takes some study and effort to use it right. Back in the days before FP hardware was affordable, it used to be fairly common for BCD to be the default FP representation in many non-Fortran languages (BASIC, Pascal, etc.). I think that probably provided a lot fewer surprises to most users. Even more probably, they took way too much of a special form of lysergic acid. OTOH, cdecimals, as in Stefan Krah's package are long overdue to get into the core. There probably needs to be some sort of BCD FP option for the casual user since most people would probably be better off with BCD. Those who need HW FP probably know it (and might even know how to use it). [I may have just barely passed undergrad numerical analysis, but I learned enough to know how ignorant I was.] -- Grant -- http://mail.python.org/mailman/listinfo/python-list
unicode shutil.copy() changes a file name during copy?
i'm on windows, using active python 2.7.1 i've written a script to copy a folder of files to dest folder.. one if the files in this folder has the section symbol (§, '\x15') as part of the file name shutil.copy(src_file, dst_file) can't find the file specified when it does the os.chmod() part, can't find dest file, cuz the file got copied with _ in place of the section symbol. gar. Traceback (most recent call last): File ../../python/post_build.py, line 159, in module main(proB, debugB) File ../../python/post_build.py, line 105, in main paths.copy_folder(srcResFolder + 'Export', destRes + '/codecs/ Export') File F:\Users\davec\Developer\depot\kJams\Development\xplat\python \paths.py, line 77, in copy_folder copy_folder(srcPath, new_dst_obj) File F:\Users\davec\Developer\depot\kJams\Development\xplat\python \paths.py, line 80, in copy_folder copy_file(srcPath, new_dst_obj) File F:\Users\davec\Developer\depot\kJams\Development\xplat\python \paths.py, line 37, in copy_file shutil.copy(src_file, dst_file) File C:\Python27\lib\shutil.py, line 117, in copy copymode(src, dst) File C:\Python27\lib\shutil.py, line 90, in copymode os.chmod(dst, mode) WindowsError: [Error 2] The system cannot find the file specified: 'build\\kJams Pro Debug.app/Contents/Resources/codecs/Export/Codec [MooV]/Animation \xa7 AAC.rtm' if i replace that with shutil.copyfile(src_file, dst_file) it works, again by replacing the section symbol with underbar. but that leaves me to call os.chmod() myself, which of course fails because of the character substitution. i'm gathering the list of files to iterate over the folder via: fileList = os.listdir(src_dir) for fileName in fileList: and yes, src_dir is unicode. but the fileName when i print it shows the degree symbol (°, '\xa7') in place of the section symbol. i suspect it's a 'dbcs' or 'latin_1' problem? this same exact python code works on the mac (it's utf8 down to the metal) and, get this, it works when running Windows under Parallels Desktop. It fails only when running Windows natively. I can't see how that makes a difference. i can give a whole lot more info, but i just want to know if i'm trying to do something impossible. If this seems strange to y'all gladly i'll fill in all the details, but hoping it can be short circuited by someone going ah hah! you have to do such and so. -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
On Feb 16, 2:23 am, s...@uce.gov wrote: How can I do something like this in python: #!/usr/bin/python3.1 class MyNumbers: def __init__(self, n): self.original_value = n if n = 100: self = SmallNumers(self) else: self = BigNumbers(self) class SmallNumbers: def __init__(self, n): self.size = 'small' class BigNumbers: def __init__(self, n): self.size = 'big' t = MyNumbers(200) When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers, because BigNumbers and SmallNumbers will have different methods etc... Do I need to use metaclasses? Thanks. -- Yves. http://www.SollerS.ca/ http://blog.zioup.org/ If you don't want to use a factory function I believe you can do this: class MyNumber(object): def __new__(cls, n): if n = 100: cls = SmallNumbers else: cls = BigNumbers return object.__new__(cls, n) ... Chard. -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
On 11-02-15 07:45 PM, alex23 wrote: Firstly, does MyNumbers _have_ to be a class? Or would a function acting as a class factory be sufficient? Yes it does. I didn't explain my problem, chose a terrible example. This is more what I'm trying to do: class thingy: def __init__(self, athingy): self.basic_extract() if self.sortof = def basic_extract(self): do a bunch of things self.sortof = .. def general_method(self) class ThingyTypeA: def __init__(self): further_extract() class ThingyTypeB: def __init__(self): further_extract() Otherwise, you can change the class of an object, even within its own methods: And then I just call __init__ method? class MyNumbers(object): def __init__(self, n = 0): self.original_value = n self.__class__ = BigNumbers if n 100 else SmallThing self.__init__() class BigNumbers(MyNumbers): def __init__(self): size = 'big' self.newvalue = self.original_value * y class SmallNumbers(MyNumbers): def __init__(self): size = 'small' self.newvalue = self.original_value * x Hope this helps. Yes, thanks! -- Yves. http://www.SollerS.ca/ http://blog.zioup.org/ -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
I didn't explain my problem, chose a terrible example. This is more what I'm trying to do: class thingy: def __init__(self, athingy): self.basic_extract() if self.typeof = A .../... def basic_extract(self): # complicated logic to extract data out of the thingy here # and set a bunch of values base on the data we extract self.size = xxx self.typeof = yyy self.weight = zzz def general_method(self) # Method that can be used on both types of thingy class ThingyTypeA: def __init__(self): # do some further extraction specific to type A further_extract() class ThingyTypeB: def __init__(self): # do some further extraction specific to type B further_extract() -- Yves. http://www.SollerS.ca/ http://blog.zioup.org/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Missing SIGCHLD
On Feb 15, 1:28 pm, Dan Stromberg drsali...@gmail.com wrote: *ix signals have historically been rather unreliable and troublesome when used heavily. There are BSD signals, SysV signals, and POSIX signals - they all try to solve the problems in different ways. No, there are just signals[1]. There are several different APIs for handling signals, depending on the situation, but they're all driving the same functionality underneath the covers. These days, only sigaction(2) is remotely usable (in C) for installing handlers and all the other APIs should normally be ignored. You might also make sure your SIGCHLD signal handler is not just waitpid'ing once per invocation, but rather doing a nonblocking waitpid in a loop until no process is found, in case signals are lost (especially if/when signals occur during signal handler processing). This is the most likely the issue. Multiple instances of the same pending signals are coalesced together automatically. It would also help to make sure the signal handler just sets a flag, within the application's main loop it should then respond to that flag appropriately. Running anything inside a signal handler is a recipe for disaster. Also, SIGCHLD handlers may not get reinstalled on some operating systems (even in Python), so the application code needs to reinstall it. If not done within the signal handler, this can caused signals to get lost. That being said, I'd just spawn a thread and wait there and avoid SIGCHLD altogether. It's typically not worth the hassle. Oh, also, signals in CPython will tend to cause system calls to return without completing, and giving an EINTR in errno, and not all CPython modules will understand what to do with that. :( Sadly, many application programmers tend to ignore the EINTR possibility. This can be disabled by signal.siginterrupt(). Regardless, the signal handling facilities provided by Python are rather poor. Adam [1] Ok, I lied, there's regular signals and realtime signals, which have a few minor differences. -- http://mail.python.org/mailman/listinfo/python-list
Re: floating point woes
Hans-Peter Jansen wrote: Hi, while I usually cope with the woes of floating point issues, this is one, that I didn't expect: round(2.385, 2) 2.3799 Doesn't the docs say, it's rounded up for this case? quote Values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done away from 0 /quote Well, that one is clearly rounding down. What's up, eh, down here? 2.385 isn't really 2.385: Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2 Type help, copyright, credits or license for more information. repr (2.385) '2.3848' so it correctly rounded down. You need to use Decimal numbers if you want numbers that behave the way they look. Mel. -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
s...@uce.gov writes: I didn't explain my problem, chose a terrible example. This is more what I'm trying to do: Unfortunately, it's still very contrived, and the names don't give any suggestion as to what you're trying to achieve. Can you improve on that? class ThingyTypeA: def __init__(self): # do some further extraction specific to type A further_extract() class ThingyTypeB: def __init__(self): # do some further extraction specific to type B further_extract() Perhaps you want those classes to inherit from your base class. Have you done the Python tutorial? It covers inheritance and how to use it. -- \ “Are you pondering what I'm pondering?” “I think so, Brain, but | `\I don't think Kay Ballard's in the union.” —_Pinky and The | _o__) Brain_ | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Python-GUI Button arrangement Help
Dear all, I am new to python programming, I am developing some small application, user agreement using Tkinter , totally my application having four buttons AGREE, DISAGREE , QUIT ,NEXT. AGREE---Enable the Next Button DISAGREE--- One Waring message will show up yes are no QUIT Quit the application Next --Calling one python script exit the GUI I have created application all working fine button will show up the top of the screen.. i want show bottom of the frame... plz... Help me... code #! /usr/bin/python from Tkinter import Tk, RIGHT, BOTH, RAISED from ttk import Frame, Button, Style import sys import os sys.path[:0] = ['../../..'] import string import Tkinter import Pmw import wx from Tkinter import * import tkMessageBox import gtk b1 = 'True' c1 = 'False' a1 = 1 class Example(Frame): def __init__(self1, parent): Frame.__init__(self1, parent) self1.parent = parent self1.initUI() #fixedFont = Pmw.logicalfont('Fixed') self1.st = Pmw.ScrolledText(parent, labelpos = 'n', label_text='User Aggrement', usehullsize = 1, hull_width = 600, hull_height = 400, text_wrap='none', #text_font = fixedFont, text_padx = 4, text_pady = 4, ) self1.st.importfile('python.txt'); self1.st.pack(padx = 5, pady = 5, fill = 'both', expand = 1) # Prevent users' modifying text and headers self1.st.configure(text_state = 'disabled') def initUI(self1): self1.parent.title(User Aggrement) self1.style = Style() self1.style.theme_use(default) frame = Frame(self1, relief=RAISED, borderwidth=.5) frame.pack(fill=BOTH, expand=1) self1.pack(fill=BOTH, expand=1) def buttonPress(var): #print 'The %s button was pressed' % var if var == 'ok': #os.system(ls -l) os.system(man man) widget.configure(state=NORMAL) elif var == 'dhana': os.system(top) exit() elif var == 'close': a1 = tkMessageBox.askyesno(DisAgree, Do you really wish to Disagree? ) #print a1 if a1 == 1: exit() else: sys.exit widget = Tkinter.Button(self1, text='Next',command = lambda b='dhana': buttonPress(b) ) widget.pack(side=RIGHT, padx=5, pady=5) widget.configure(state=DISABLED ) def defaultKey(event): def make_widgets(self1): buttonBox.invoke() self1.make_widgets() root = Tkinter.tk() okButton = Tkinter.Button(self1, text=Quit,command = sys.exit , font=('Arial', 10), fg=black) okButton.pack(side=RIGHT, padx=5, pady=5) CloseButton = Tkinter.Button(self1, text=DisAgree,command = lambda b='close': buttonPress(b) , font=('Arial', 10), fg=black) CloseButton.pack(side=RIGHT, padx=5, pady=5) okButton = Tkinter.Button(self1, text=Agree,command = lambda b='ok': buttonPress(b) , font=('Arial', 10), fg=black) okButton.pack(side=RIGHT, padx=5, pady=5) okButton.focus_force() #self1.mainloop() def main(): root = Tkinter.Tk() root.geometry(600x400+30+30) app = Example(root) root.mainloop() if __name__ == '__main__': main() /code -- Did I learn something today? If not, I wasted it. -- http://mail.python.org/mailman/listinfo/python-list
Is this a bug of str.join?
Hi, all I'm just working around to generate some fake file for parsing. and I notice some weired thing happen. time = str(random.randint(1000, )) s_id = str(random.randint(1000, )) p_id = str(random.randint(1000, )) a_id = str(random.randint(1000, )) s = test a = [time, s_id, p_id, a_id, s] print '\t'.join(a) the output is: 31079035823210326101282916386924719897196119318 1780339444980186test you can notice that there is no tab between a_id and s if I switch a_id and p_id, it still happen, but if I delete one of ids, the problem gone. I tried this with python2.6 from debian source and python2.3 which I compiled from source. the result are both the same. What happened to str.join? thanks -- http://mail.python.org/mailman/listinfo/python-list
Python GUI Tkinter Button arrangement
Hi.. I am new to python , i have creating one application user agreement..using Tkinter, The Content of the agreement will reading one file...Agree button will click means enable next button. And activate script, Quit button for exit the program,, Dis agree means one warning message will show up.. all are working but one buttons are top of the screen. i want button in bottom of the frame plz. help me.. this my source code Source Code http://pastebin.com/Lm5teAtS Thanks in Advance -Ganesh. -- Did I learn something today? If not, I wasted it. -- http://mail.python.org/mailman/listinfo/python-list
Re: Is this a bug of str.join?
On Feb 16, 1:24 am, fireinice zhzhqi...@gmail.com wrote: Hi, all I'm just working around to generate some fake file for parsing. and I notice some weired thing happen. time = str(random.randint(1000, )) s_id = str(random.randint(1000, )) p_id = str(random.randint(1000, )) a_id = str(random.randint(1000, )) s = test a = [time, s_id, p_id, a_id, s] print '\t'.join(a) the output is: 3107903582321032 6101282916386924 719897196119318 1780339444980186test you can notice that there is no tab between a_id and s if I switch a_id and p_id, it still happen, but if I delete one of ids, the problem gone. I tried this with python2.6 from debian source and python2.3 which I compiled from source. the result are both the same. What happened to str.join? thanks I'm sorry, I found it should be the terminal width caused visual problem, please kindly ignore this post. -- http://mail.python.org/mailman/listinfo/python-list
Re: Is this a bug of str.join?
fireinice, 16.02.2011 07:24: Hi, all I'm just working around to generate some fake file for parsing. and I notice some weired thing happen. time = str(random.randint(1000, )) s_id = str(random.randint(1000, )) p_id = str(random.randint(1000, )) a_id = str(random.randint(1000, )) s = test a = [time, s_id, p_id, a_id, s] print '\t'.join(a) the output is: 31079035823210326101282916386924719897196119318 1780339444980186test you can notice that there is no tab between a_id and s Likely just a presentation problem in your terminal. Try with a single space instead of tabs and see the difference. Stefan -- http://mail.python.org/mailman/listinfo/python-list
Re: Is this a bug of str.join?
fireinice, 16.02.2011 07:32: On Feb 16, 1:24 am, fireinicezhzhqi...@gmail.com wrote: Hi, all I'm just working around to generate some fake file for parsing. and I notice some weired thing happen. time = str(random.randint(1000, )) s_id = str(random.randint(1000, )) p_id = str(random.randint(1000, )) a_id = str(random.randint(1000, )) s = test a = [time, s_id, p_id, a_id, s] print '\t'.join(a) the output is: 31079035823210326101282916386924719897196119318 1780339444980186test you can notice that there is no tab between a_id and s if I switch a_id and p_id, it still happen, but if I delete one of ids, the problem gone. I tried this with python2.6 from debian source and python2.3 which I compiled from source. the result are both the same. What happened to str.join? thanks I'm sorry, I found it should be the terminal width caused visual problem, please kindly ignore this post. Well, there's always this that's worth remembering: http://www.catb.org/~esr/faqs/smart-questions.html#id478549 Stefan -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
I didn't explain my problem, chose a terrible example. This is more what I'm trying to do: Basically the subclass I want to use is based on some of the data I extract from a blob of data. If I use a function to extract the data before I create the objects, then I need to do a bunch of assignments afterwards. Unfortunately, it's still very contrived, and the names don't give any suggestion as to what you're trying to achieve. Can you improve on that? class ThingyTypeA: def __init__(self): # do some further extraction specific to type A further_extract() class ThingyTypeB: def __init__(self): # do some further extraction specific to type B further_extract() Perhaps you want those classes to inherit from your base class. Have you done the Python tutorial? It covers inheritance and how to use it. Yes, I have done subclasing before, and yes ThingyTypeA and B should be subclassing Thingy -- Yves. http://www.SollerS.ca/ http://blog.zioup.org/ -- http://mail.python.org/mailman/listinfo/python-list
Re: return an object of a different class
s...@uce.gov writes: Perhaps you want those classes to inherit from your base class. Have you done the Python tutorial? It covers inheritance and how to use it. Yes, I have done subclasing before, and yes ThingyTypeA and B should be subclassing Thingy Then your example still gives no indication why inheritance (allowing the common behaviour to be in the base class), along with a factory function (allowing the input data to determine which class gets instantiated), is not sufficient. -- \ “When people believe that they have absolute knowledge, with no | `\ test in reality, this [the Auschwitz crematorium] is how they | _o__) behave.” —Jacob Bronowski, _The Ascent of Man_, 1973 | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] Accessing query results html frame :The solution
On 02/14/2011 01:41 PM, Karim wrote: Hello, As I get no response from the tutor python list, I am continuing to investigate my problem. In fact the issue is that there are 2 forms in the interactive page and my request does nothing instead I get the interactive page not the submission I asked (query results). The 2 forms are: 1. FORM METHOD=POST ACTION=/ddts/ddts_main ENCTYPE=application/x-www-form-urlencoded NAME=form1 2. FORM METHOD=POST ACTION=/ddts/ddts_main ENCTYPE=application/x-www-form-urlencoded NAME=form9 And the parameters for each are: 1) INPUT TYPE=hidden NAME=init VALUE= INPUT TYPE=hidden NAME=LastForm VALUE=SavedQuery INPUT TYPE=hidden NAME=NextForm VALUE= INPUT TYPE=hidden NAME=REMOTE_USER VALUE=karim.liateni INPUT TYPE=submit NAME=ACTION VALUE=Querynbsp; INPUT TYPE=submit NAME=ACTION VALUE=Reportnbsp; INPUT TYPE=submit NAME=ACTION VALUE=Editnbsp; INPUT TYPE=submit NAME=ACTION VALUE=Deletenbsp; INPUT TYPE=submit NAME=ACTION VALUE=Create ONCLICK=oncreate()nbsp; INPUT TYPE=submit NAME=ACTION VALUE=Create String Query INPUT TYPE=hidden NAME=.cgifields VALUE=personalQuery INPUT TYPE=hidden NAME=.cgifields VALUE=sharedQuery 2) INPUT TYPE=hidden NAME=LastForm VALUE=DumpBug INPUT TYPE=hidden NAME=REMOTE_USER VALUE=karim.liateni INPUT TYPE=text NAME=bug_id VALUE= SIZE=10 MAXLENGTH=10 INPUT TYPE=submit NAME=.submit VALUE=View And I recall my data of the progam below: data = { 'init' : , 'LastForm': SavedQuery, 'prompted': yes, 'class': Development, 'personalQuery': DKPV, 'REMOTE_USER': username, 'QS': -p DKPVALIDATION_PLUGIN \(Class 'isequal' quot;Developmentquot; \), 'use_field_defs':false, 'QueryName': DKPV, 'QueryType': personal, 'ACTION': Query } So the question is how could I specify the correct FORM submission and how could I chose the correct action because there are several TYPE='submit' and I am only interested by this one VALUE=Query? Regards Karim On 02/11/2011 08:51 AM, Karim wrote: Hello, In fact as found in the net: The concept of browser frames is completely outside the scope of HTTP. However, browser frames are defined in HTML, and so is the target property on form elements: lt;form action=/somescript?x=y method=POST target=_topgt; This will make the form submit to the _top frame, which means use the full browser window That means that my post form: FORM METHOD=POST ACTION=/ddts/ddts_main ENCTYPE=application/x-www-form-urlencoded TARGET=rightframe has a target property to make the submit to the 'rightframe'. Any ideas how I can modified the code (I think the request data or whatever) below to access without knowing the temporary html file name generically. Regards Karim On 02/10/2011 07:12 PM, Karim wrote: Hello All, I get from Steven an very useful link (void space) for http authentication. I added some codes to be able to POST FORM a query as I do it by clicking a query button to get a list of bug Id on a server. The problem is I get a html page which refers 2 frames. And I am interesting in one particular frame namely for example, http://{server}:{port}/wt/tmp/results:karim.liateni.31_3917.html'.format(server=server, port=port). But this pages is created every times in a tmp directory each time with a different name. 1) How can I get the name of this page because with python the page resulting of my query is not mentionned (hidden like)? Interactively there are 3 frames but only this one is of interest for me. But no name of this page is visible in the main html page. Is there a method to get all the nested frames locations? 2) I can see this page interactively when I click on a submit query button. Do I need to add 'ACTION': Query input form in the query dictionnary to simulate a click for submission (type=submit button) ? 3) Interactively I see that cgi arg NextForm is empty so I let it like that in my query and LastForm was set to SavedQuery. I put the same value in my python code. Is this ok? import urllib import urllib2 server='dummy.com' port='8081' username = 'karim.liateni' password = 'dummy_pass' theurl = 'http://{server}:{port}/ddts/ddts_main'.format(server=server, port=port) #theurl = 'http://{server}:{port}:8081/wt/tmp/results:karim.liateni.31_3917.html'.format(server=server, port=port) #MEMO: #FORM METHOD=POST ACTION=/ddts/ddts_main ENCTYPE=application/x-www-form-urlencoded TARGET=rightframe data = { 'NextForm': , 'LastForm': SavedQuery, 'prompted': yes, 'class': Development, 'personalQuery': DKPV, 'REMOTE_USER': username, 'QS': -p DKPVALIDATION_PLUGIN \(Class 'isequal' quot;Developmentquot; \), 'use_field_defs':false, 'QueryName': DKPV, 'QueryType': personal, 'ACTION': Query } query = urllib.urlencode(data) request = urllib2.Request(theurl, query) passman =
[issue11218] pattern=None when following documentation for load_tests and unittest.main()
New submission from Martin von Gagern martin.vgag...@gmx.net: If I follow the documentation at http://docs.python.org/library/unittest.html#unittest.main by putting the following two snippets of code in my module file: def load_tests(loader, standard_tests, pattern='test*.py'): # top level directory cached on loader instance this_dir = os.path.dirname(__file__) package_tests = loader.discover(start_dir=this_dir, pattern=pattern) standard_tests.addTests(package_tests) return standard_tests if __name__ == __main__: unittest.main() then the application will fail with an obscure error message: == ERROR: __main__ (unittest.loader.LoadTestsFailure) -- TypeError: object of type 'NoneType' has no len() -- Ran 1 test in 0.000s Monkeypatching unittest.loader._make_failed_load_tests to display a stack trace, I got this: Traceback (most recent call last): File /usr/lib64/python2.7/unittest/loader.py, line 71, in loadTestsFromModule return load_tests(self, tests, None) File tester.py, line 15, in load_tests package_tests = loader.discover(start_dir=this_dir, pattern=pattern) File /usr/lib64/python2.7/unittest/loader.py, line 204, in discover tests = list(self._find_tests(start_dir, pattern)) File /usr/lib64/python2.7/unittest/loader.py, line 247, in _find_tests if not self._match_path(path, full_path, pattern): File /usr/lib64/python2.7/unittest/loader.py, line 235, in _match_path return fnmatch(path, pattern) File /usr/lib64/python2.7/fnmatch.py, line 43, in fnmatch return fnmatchcase(name, pat) File /usr/lib64/python2.7/fnmatch.py, line 75, in fnmatchcase res = translate(pat) File /usr/lib64/python2.7/fnmatch.py, line 87, in translate i, n = 0, len(pat) TypeError: object of type 'NoneType' has no len() The error is due to the fact that pattern is passed as None to load_tests, but apparently loader.discover doesn't loke a None pattern. I would suggest that a) discover internally translates None to the default of 'test*.py' or b) the documentation is changed to cater for this common use case, i.e. by including a pattern is None case distinction in its load_tests snippet. In case b) is implemented but not a), it would be nice to have a more expressive error message by catching the error somewhat sooner. -- assignee: docs@python components: Documentation, Library (Lib) files: tester.py messages: 128579 nosy: docs@python, gagern priority: normal severity: normal status: open title: pattern=None when following documentation for load_tests and unittest.main() type: feature request versions: Python 2.7 Added file: http://bugs.python.org/file20763/tester.py ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue11218 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7305] urllib2.urlopen() segfault using SSL on Solaris
Fabian Groffen grob...@gentoo.org added the comment: Sorry for the noise. My issue seems to be caused by a broken openssl. It is a specific problem with the code for sparcv9 and the T1 CPU. Python can't do much about this. -- versions: -Python 2.7 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7305 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7305] urllib2.urlopen() segfault using SSL on Solaris
Senthil Kumaran orsent...@gmail.com added the comment: Thanks for the update on this issue. -- nosy: +orsenthil resolution: - invalid stage: - committed/rejected status: open - closed ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7305 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue11217] python-32 not linked in /usr/local/bin in framework builds
Ned Deily n...@acm.org added the comment: Taking a quick look at it, it appears that the Mac Makefile installunixtools target could/should create those links. Note, this is not a problem for the standard OS X installers as Mac/BuildScript/build-installer.py (in buildPython) ensures that links are made in /usr/local/bin for all files in the framework bin directory at the end of the build. -- assignee: ronaldoussoren - ned.deily nosy: +ned.deily stage: - needs patch versions: +Python 3.2, Python 3.3 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue11217 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue11216] email.message.Message set_charset does not encode properly?
Steffen Daode Nurpmeso sdao...@googlemail.com added the comment: Shay.Rojansky: because of the fact that i needed a free last saturday for just having the time to click around a bit to find the relevant docs in the python.org jungle ... http://wiki.python.org/moin/Email%20SIG and *especially* http://wiki.python.org/moin/Email%20SIG/DesignThoughts may be of interest for you - read those when you are starting to think that it's you who is broken. Nope! It's really the package! P.S.: sorry, David, i really didn't know, and somehow i also missed that single minute to look at bitdance.com. But now i've found the docs and maybe here time is being worth enough for a broken package to be fixed, the right way. Then even more people can earn more money in a hurry - with it. (It's only school english in the end.) -- nosy: +sdaoden ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue11216 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue877121] configure detects incorrect compiler optimization
Sébastien Sablé sa...@users.sourceforge.net added the comment: If have the same issue with Oracle Studio 12.2 on Solaris 10 with Python 2.7.1: cc -G -L/livraison/test/sparc-sun-solaris2.10/support/support-2.6.x-py27/lib -L/livraison/test/sparc-sun-solaris2.10/support/support-internal-2.6.x-py27/lib -L/livraison/test/sparc-sun-solaris2.10/support/support-2.6.x-py27/lib -L/livraison/test/sparc-sun-solaris2.10/support/support-internal-2.6.x-py27/lib -OPT:Olimit=0 -g -DNDEBUG -xO4 -I. -IInclude -I./Include -I/livraison/test/sparc-sun-solaris2.10/support/support-2.6.x-py27/include -I/livraison/test/sparc-sun-solaris2.10/support/support-2.6.x-py27/include/ncurses -I/livraison/test/sparc-sun-solaris2.10/support/support-internal-2.6.x-py27/include build/temp.solaris-2.10-sun4u-2.7/san_u10/home/recette/ssa/support-2.6.x/Python-2.7.1/Modules/_struct.o -L/livraison/test/sparc-sun-solaris2.10/support/support-2.6.x-py27/lib -L/usr/local/lib -L. -lpython2.7 -o build/lib.solaris-2.10-sun4u-2.7/_struct.so cc: Warning: Option -OPT:Olimit=0 passed to ld, if ld is invoked, ignored otherwise /usr/ccs/bin/ld: illegal option -- O usage: ld [-6:abc:d:e:f:h:il:mo:p:rstu:z:B:CD:F:GI:L:M:N:P:Q:R:S:VY:?] file(s) -- nosy: +sable ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue877121 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue877121] configure detects incorrect compiler optimization
Antoine Pitrou pit...@free.fr added the comment: Was fixed in r85656 by Martin (in 3.2), but needs backporting. -- assignee: - loewis nosy: +loewis, pitrou stage: needs patch - committed/rejected versions: -Python 3.2 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue877121 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue11210] PyErr_SetFromWindowsErrWithFilenameObject() doesn't exist: remove it from pyerrors.h
Changes by Antoine Pitrou pit...@free.fr: -- nosy: +loewis, mhammond ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue11210 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue941346] AIX shared library fix
Sébastien Sablé sa...@users.sourceforge.net added the comment: Hum, I was incorrect in previous note: You can remove -L\$(srcdir) on this line, but then you need to specify the full path to Modules/python.exp. See patch below: Index: configure.in === --- configure.in(revision 88422) +++ configure.in(working copy) @@ -1642,7 +1655,7 @@ then case $ac_sys_system/$ac_sys_release in AIX*) - BLDSHARED=\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:Modules/python.exp -L\$(srcdir) + BLDSHARED=\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:\$(srcdir)/Modules/python.exp LDSHARED=\$(BINLIBDEST)/config/ld_so_aix \$(CC) -bI:\$(BINLIBDEST)/config/python.exp ;; IRIX/5*) LDSHARED=ld -shared;; Also, I think there are other issues with building Python 3.2 with shared libraries. I am currently investigating. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue941346 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue5831] Doc mistake : threading.Timer is *not* a class
Martijn van Oosterhout klep...@gmail.com added the comment: Note this is a behaviour change. Under the old scheme (Foo is a class) Foo.timerclass = Timer created a method, whereas now it will just assign the class as an attribute. To work around this you had to use _Timer. Will that dummy class remain as an alias to avoid breaking code (in 2.7 at least)? -- nosy: +Martijn.van.Oosterhout ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue5831 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7305] urllib2.urlopen() segfault using SSL on Solaris
River Tarnell r.tarn...@ieee.org added the comment: If no one else can reproduce this I suppose there's no point leaving it open, but it's still present for me using Python 2.7.1: % bzip2 -dc Python-2.7.1.tar.bz | tar xvf - % cd Python-2.7.1 % CC=cc CXX=CC CPPFLAGS='-I/usr/sfw/include' LDFLAGS='-L/usr/sfw/lib -R/usr/sfw/lib' ./configure --enable-ipv6 --prefix=$HOME/pytest % gmake -j5 % gmake install % $HOME/pytest/bin/python Python 2.7.1 (r271:86832, Feb 15 2011, 12:06:37) [C] on sunos5 Type help, copyright, credits or license for more information. import urllib2 urllib2.urlopen('https://wiki.toolserver.org') zsh: segmentation fault (core dumped) $HOME/pytest/bin/python % pstack core core 'core' of 12301: /home/rriver/pytest/bin/python feb265bd AES_encrypt () + f1 % cat /etc/release Oracle Solaris 10 9/10 s10x_u9wos_14a X86 -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7305 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com