[ANN] pyjamas 0.6pre3 released
much as we'd very much like to declare a 0.6 stable release, really really soon and move forward, the ChangeLog just keeps growing (133 and counting) with the bugfixes, testing and contributions since 0.5p1. pyjamas is a port of GWT to python, and includes a python-to-javascript compiler and a widget UI toolkit that is similar to pyqt4, pygtk2 etc. applications can either be run as javascript (in a web browser) or on the desktop (using pyjamas-desktop) as python. conceptually therefore, pyjamas is similar to adobe AIR - except that it's python, not ActionScript, and it's entirely free software. hurrah! key changes: * the python-to-javascript has been significantly reworked, and now includes a --strict option which adds python strict features at the expense of speed. to disable these, and obtain speed instead, use -O * pyjamas-desktop has been merged into the pyjamas distribution, which includes support for one stable browser engine (XULrunner, the same engine behind firefox); pywebkitgtk (the engine behind safari and the iphone) and MSHTML (IE's engine). pywebkitgtk is useable (but unfriendly - no DOM exception handling); MSHTML is even less friendly - COM gets in the way at present, and eats even python exceptions). there's a lot more that could be said, but you've probably noticed all the other prerelease notices so 'nuff said, other than: thank you to the people who've been helping and contributing with testing, patches and more. downloads and more information: http://pypi.python.org/pypi/Pyjamas http://sf.net/projects/pyjamas http://code.google.com/p/pyjamas http://pyjs.org -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
ANN: mpmath 0.13 released
Hi all, Version 0.13 of mpmath is now available from the website: http://code.google.com/p/mpmath/ It can also be downloaded from the Python Package Index: http://pypi.python.org/pypi/mpmath/0.13 Mpmath is a pure-Python library for arbitrary-precision floating-point arithmetic that implements an extensive set of mathematical functions. It can be used as a standalone library or via SymPy (http://code.google.com/p/sympy/), and is also available as a component of Sage (http://sagemath.org/). Version 0.13 implements about 30 new special functions, including Kelvin, Struve, Coulomb, Whittaker, associated Legendre, Meijer G, Appell, incomplete beta, generalized exponential integral, Hurwitz zeta and Clausen functions. The algorithms for hypergeometric-type functions have been greatly improved to robustly handle arbitrarily large arguments and limit cases of the parameters. Other new features and bug fixes are included as well. For a more comprehensive changelog, see: http://mpmath.googlecode.com/svn/tags/0.13/CHANGES For development tidbits and demonstrations of the new features, see the blog: http://fredrik-j.blogspot.com/ Extensive documentation is available at: http://mpmath.googlecode.com/svn/tags/0.13/doc/build/index.html Bug reports and other comments are welcome on the issue tracker at http://code.google.com/p/mpmath/issues/list or the mpmath mailing list: http://groups.google.com/group/mpmath My work on mpmath 0.13 was made with the goal to bring arbitrary-precision evaluation of special functions in Sage up to par with Mathematica and Maple, and was kindly sponsored by the American Institute of Mathematics under the support of National Science Foundation Grant No. 0757627. Special thanks to Sage's lead developer William Stein for offering his grant resources to support this project, and for providing much encouragement. The new version of mpmath will soon be available in Sage. Enjoy, Fredrik Johansson -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
[RELEASED] Python 3.1.1 Release Candidate
On behalf of the Python development team, I'm pleased to announce the first release candidate of Python 3.1.1. This bug fix release fixes many normal bugs and several critical ones including potential data corruption in the io library. The final version should be out within the next week. Python 3.1 focuses on the stabilization and optimization of the features and changes that Python 3.0 introduced. For example, the new I/O system has been rewritten in C for speed. File system APIs that use unicode strings now handle paths with undecodable bytes in them. Other features include an ordered dictionary implementation, a condensed syntax for nested with statements, and support for ttk Tile in Tkinter. For a more extensive list of changes in 3.1, see http://doc.python.org/3.1/whatsnew/3.1.html or Misc/NEWS in the Python distribution. To download Python 3.1.1 visit: http://www.python.org/download/releases/3.1/ The 3.1 documentation can be found at: http://docs.python.org/3.1 Bugs can always be reported to: http://bugs.python.org Enjoy! -- Benjamin Peterson Release Manager benjamin at python.org (on behalf of the entire python-dev team and 3.1.1's contributors) -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
PyCon 2010: Call for Proposals
Call for proposals -- PyCon 2010 -- http://us.pycon.org/2010/ === Due date: October 1st, 2009 Want to showcase your skills as a Python Hacker? Want to have hundreds of people see your talk on the subject of your choice? Have some hot button issue you think the community needs to address, or have some package, code or project you simply love talking about? Want to launch your master plan to take over the world with python? PyCon is your platform for getting the word out and teaching something new to hundreds of people, face to face. Previous PyCon conferences have had a broad range of presentations, from reports on academic and commercial projects, tutorials on a broad range of subjects and case studies. All conference speakers are volunteers and come from a myriad of backgrounds. Some are new speakers, some are old speakers. Everyone is welcome so bring your passion and your code! We're looking to you to help us top the previous years of success PyCon has had. PyCon 2010 is looking for proposals to fill the formal presentation tracks. The PyCon conference days will be February 19-22, 2010 in Atlanta, Georgia, preceded by the tutorial days (February 17-18), and followed by four days of development sprints (February 22-25). Online proposal submission is open now! Proposals will be accepted through October 1st, with acceptance notifications coming out on November 15th. For the detailed call for proposals, please see: http://us.pycon.org/2010/conference/proposals/ For videos of talks from previous years - check out: http://pycon.blip.tv We look forward to seeing you in Atlanta! -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ I saw `cout' being shifted Hello world times to the left and stopped right there. --Steve Gonedes -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/
OptionParser How to: prog cmd [options] [arguments]
Hi, I am using OptionParser, but I've not managed figure out a way to support what I wanted command line format prog cmd [options] [arguments]. E.g., svn ls -r123 http://hello.world;. Can I do this using OptionParser? Thanks. -- Life is the only flaw in an otherwise perfect nonexistence -- Schopenhauer narke public key at http://subkeys.pgp.net:11371 (narkewo...@gmail.com) -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
On Aug 13, 10:36 pm, Dr. Phillip M. Feldman pfeld...@verizon.net wrote: Actually, I've tried both of these, and I get (different) errors in both cases: In [1]: from mymath import * In [2]: reload(mymath) NameError: name 'mymath' is not defined In [3]: reload('mymath') TypeError: reload() argument must be module Two problems here. 1. You have to call reload on an actual module object. When you write from mymath import * you are not actually binding the mytmath module to the mymath symbol. So, if you were to then write print mymath Python would raise a NameError exception. OTOH, if you were to write import mymath, then the symbol mymath would bound to the mymath module. If you then write print mymath, Python would output module 'mymath' from '/wherever', the module object. Only then can you pass it to reload. 2. If you use from mymath import *, even if you were to reload the mymath module (say, by importing it directly and calling reload on that), you will find that the functions you had originally imported will not be updated. They will still refer to the old functions. Why? Because when you reload a module, it only affects that's module's namespace. When you import a function from a module, you are now referencing the function from your own namespace. Even if the function in the module is replaced, the reference to that function in your own namespace hasn't been replaced. So, what do you do? My advice is to dispense with importing functions altogether; only import modules. It's more typing and a bit less efficient, but it makes everything more straightforward and consistent. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
[David] I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a = None,b = None) self.start = a self.end = b from datetime import datetime c = datetime(2009,8,13,6,15,0) d = datetime(2009,8,14,12,0,0) afoo = foo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start = datetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, but I can't figure out how to determine which values is being set. You're on the right track, but it is easier to use property() than to write your own custom descriptor with __get__ and __set__. class foo(object): def __init__(self,a = None,b = None): self._start = a self._end = b def get_start(self): return self._start def set_start(self, value): if self._end is None or value self._end: self._start = value else: self._end = value start = property(get_start, set_start) def get_end(self): return self._end def set_end(self, value): if self._start is None or value self._start: self._end = value else: self._start = value end = property(get_end, set_end) Raymond -- http://mail.python.org/mailman/listinfo/python-list
Re: How to launch a function at regular time intervals ?
On Aug 14, 12:52 am, David davig...@googlemail.com wrote: Yes, I guess it would be more simple. Here is really what I am trying to do. I simplified the functions, but the purpose is to write some text in a local file every x seconds (here, I'm just writing the timestamp, i.e. a string representing the date time, every 10 seconds) and to transfer this file to a distant server via FTP every y seconds (20 seconds in the example below). My code is a little bit more complicated because each time I transfer the file, I delete the local file which is then recreated when data is written, but for simplicity I left this out in the code below. So, here is the code I've been using to test Frank's code. I've been struggling with using or not a While True loop or not, and everything I try seems to run into issues. import threading from datetime import datetime import ftplib class CFtpConnection: FTP Connection parameters def __init__(self, host, port, timeout, user, passwd): self.host = self.port = 21 self.timeout = 60 self.user = self.passwd = class CStoreData(threading.Thread): Write timestamp in a file every 10 seconds in separate thread def __init__(self, timestamp): threading.Thread.__init__(self) self.event = threading.Event() self.timestamp = timestamp def run(self): while not self.event.is_set(): file_handler = open(Test.txt, 'a') file_handler.write(self.timestamp.strftime(%y%m%d%H%M%S \n)) file_handler.close() self.event.wait(10) def stop(self): self.event.set() class CTransferData(threading.Thread): Transfer timestamp file every 20 seconds in separate thread def __init__(self, ftp_connection): threading.Thread.__init__(self) self.event = threading.Event() self.ftp_connection = ftp_connection def run(self): while not self.event.is_set(): file_handler = open(Test.txt, 'r') Ftp_handler = ftplib.FTP('') Ftp_handler.connect(self.ftp_connection.host, self.ftp_connection.port, self.ftp_connection.timeout) Ftp_handler.login(self.ftp_connection.user, self.ftp_connection.passwd) Ftp_handler.storbinary(STOR Test.txt, file_handler) file_handler.close() Ftp_handler.close() self.event.wait(20) def stop(self): self.event.set() ftp_connection = CFtpConnection(, 21, 60, , ) ftp_connection.host = '127.0.0.1' ftp_connection.user = admin ftp_connection.passwd = admin while(1): timestamp = datetime.now() func_store_data = CStoreData(timestamp) func_store_data.start() func_transfer_data = CTransferData(ftp_connection) func_transfer_data.start() func_store_data.stop() func_store_data.join() func_transfer_data.stop() func_transfer_data.join() Hi David I think that the main problem is your use of while(1) (usually written as 'while 1' BTW). The effect is that you create multiple copies of CStoreData and CTransferData, each running simultaneously. As you bind them to the same name each time, the previous one presumably gets garbage collected. I don't know if this effectively kills the running thread or not. Either way, this is not what you want to happen. Here are some initial thoughts - 1. You say that you want the main program to continue running in the background. Personally I find it easier to think of the main program running in the foreground, and each of the functions running in the background. 2. As you speak of launching several functions, you may want to keep a list of them to make it easier to stop them at the end. 3. Instead of passing 'timestamp' as an argument to each function, it is probably better to call datatime.now() within the function itself. Based on these thoughts, maybe your program should look something like this - running_functions = [] while 1: if some_condition: # start function to store data func = CStoreData() func.start() running_functions.append(func) if some_other_condition: # start function to transfer data func = CTransferData() func.start() running_functions.append(func) if end_condition: # terminate program break # break out of while loop time.sleep(0.1) # to avoid hogging the cpu # stop all running functions at end for func in running_functions: func.stop() func.join() I hope this gives you some ideas. Frank -- http://mail.python.org/mailman/listinfo/python-list
Re: Nice copy in interactive terminal
I mainly develop on Linux these days, but if I ever end up doing anything on windows I'll make sure to look at that. On Aug 13, 6:56 pm, Elias Fotinis \(eliasf\) efoti...@y...@h00.com wrote: casebash wrote: I've been wondering for a while if there exists an interactive terminal which has nice copy feature (ie. I can copy code without getting the in front of every line). It would help if we knew what platform you're interested in -- your User-Agent is G2/1.0, but I don't know what that is. :o) On Windows, PythonWin can copy from the interactive window without the prompts. -- http://mail.python.org/mailman/listinfo/python-list
socket.send : (11, 'Resource temporarily unavailable')
Hello everyone, I get a (11, 'Resource temporarily unavailable') error when I try to send a file using a socket. Is there s size limit? I tried sending a smaller file and ii poses no problem. Am I doing something wrong? Here is the code: def sendMessage(host, port, msg): if isinstance(msg, unicode): msg = msg.encode(utf-8) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.setblocking(0) totalsent = 0 while totalsent len(msg): sent = sock.send(msg[totalsent:]) if sent == 0: raise RuntimeError, socket connection broken totalsent = totalsent + sent sock.close() Thank you, Gabriel -- http://mail.python.org/mailman/listinfo/python-list
Re: OptionParser How to: prog cmd [options] [arguments]
Hello, I think that this isn't possible with optparse library. However, it's possible with argparse (http://code.google.com/p/argparse/): http://argparse.googlecode.com/svn/trunk/doc/other-methods.html#sub-commands It's not a standard library, but it's worth to take a look at it. Best regards, Javier 2009/8/14 Steven Woody narkewo...@gmail.com: Hi, I am using OptionParser, but I've not managed figure out a way to support what I wanted command line format prog cmd [options] [arguments]. E.g., svn ls -r123 http://hello.world. Can I do this using OptionParser? Thanks. -- Life is the only flaw in an otherwise perfect nonexistence -- Schopenhauer narke public key at http://subkeys.pgp.net:11371 (narkewo...@gmail.com) -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Plotting Quadratic Functions, pygame
Hello Senad, You might find this style guide useful too in your toolbox of Python skills tricks. http://www.python.org/dev/peps/pep-0008/ This is a great and helpful group of people here, we are lucky to have access to groups like this. Best, Esmail -- http://mail.python.org/mailman/listinfo/python-list
Re: Plotting Quadratic Functions, pygame
Hello Senad, You might find this style guide useful too in your toolbox of Python skills tricks. http://www.python.org/dev/peps/pep-0008/ This is a great and helpful group of people here, we are lucky to have access to groups like this. Best, Esmail -- http://mail.python.org/mailman/listinfo/python-list
Re: Format Code Repeat Counts?
Thanks all! That was most helpful and informative. Best, Josiah -- http://mail.python.org/mailman/listinfo/python-list
Pygresql, and query meta informations
Hi! Pygresql, DB-API. I search for a solution to get meta information about last query, because I must export these infos to Delphi. Delphi have TDataSet, and it have meta structure that must be defined before I create it. For char/varchar fields I must define their sizes! Pygresql is not retreive the field sizes. Ok, it have solution that CHAR fields values have full size; but varchars are not. Ok, secondary I can calc all field lengths before I export, and I can set THIS CALCULATED size to the field, but this is data dependent. If I have NULL only, the field size = 0. Next query get 71 to the field len. Next query is 234... So I wanna ask that a.) have I some special way in Pygresql to retreive the char/varchar field's length? b.) if not, how to I realize this (other ways)? Thanks for your help: dd -- http://mail.python.org/mailman/listinfo/python-list
Re: socket.send : (11, 'Resource temporarily unavailable')
Gabriel Rossetti wrote: Hello everyone, I get a (11, 'Resource temporarily unavailable') error when I try to send a file using a socket. Is there s size limit? I tried sending a smaller file and ii poses no problem. Am I doing something wrong? Here is the code: def sendMessage(host, port, msg): if isinstance(msg, unicode): msg = msg.encode(utf-8) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.setblocking(0) totalsent = 0 while totalsent len(msg): sent = sock.send(msg[totalsent:]) if sent == 0: raise RuntimeError, socket connection broken totalsent = totalsent + sent sock.close() Thank you, Gabriel Actually, the original code didn't have the sock.setblocking(0), the problem I am trying to find is that the server does have sock.setblocking(0) (I can't change that) and it is getting the same error as my client has with the sock.setblocking(0), except it gets it on the accept() call. I tried modifying my code to be like this : def sendMessage(host, port, msg): if isinstance(msg, unicode): msg = msg.encode(utf-8) burstSize = 4096 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) while msg: sent = sock.send(msg[:burstSize]) print Sending %d bytes... % sent if sent == 0: raise RuntimeError, socket connection broken msg = msg[burstSize:] sock.close() thinking maybe if I send small parts it would work better but this does not seem to change anything. How are large msgs sent w/ a socket in python to a non-blocking server? The msg I'm trying to send is 175213 bytes long. Thank, Gabriel -- http://mail.python.org/mailman/listinfo/python-list
Re: socket.send : (11, 'Resource temporarily unavailable')
On Friday 14 August 2009 09:15:34 Gabriel Rossetti wrote: Hello everyone, I get a (11, 'Resource temporarily unavailable') error when I try to send a file using a socket. Is there s size limit? I tried sending a smaller file and ii poses no problem. Am I doing something wrong? Here is the code: def sendMessage(host, port, msg): if isinstance(msg, unicode): msg = msg.encode(utf-8) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.setblocking(0) This is the problem - if the socket does not block, it will return the temporarily unavailable error when it is busy. If you want to use it non blocking then you have to handle the error in a try except, and loop. - Hendrik -- http://mail.python.org/mailman/listinfo/python-list
Re: socket.send : (11, 'Resource temporarily unavailable')
On Friday 14 August 2009 09:47:50 Gabriel Rossetti wrote: Gabriel Rossetti wrote: 8 -- Actually, the original code didn't have the sock.setblocking(0), the problem I am trying to find is that the server does have sock.setblocking(0) (I can't change that) and it is getting the same error as my client has with the sock.setblocking(0), except it gets it on the accept() call. I tried modifying my code to be like this : def sendMessage(host, port, msg): if isinstance(msg, unicode): msg = msg.encode(utf-8) burstSize = 4096 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) while msg: sent = sock.send(msg[:burstSize]) print Sending %d bytes... % sent if sent == 0: raise RuntimeError, socket connection broken msg = msg[burstSize:] sock.close() thinking maybe if I send small parts it would work better but this does not seem to change anything. How are large msgs sent w/ a socket in python to a non-blocking server? The msg I'm trying to send is 175213 bytes long. Google for netstring, and also look at sock.sendall instead of send. - Hendrik -- http://mail.python.org/mailman/listinfo/python-list
Re: Plotting Quadratic Functions, pygame
Senad Ibraimoski Of Belgrade: Hello, I'm a new guy to this group, my professor recommend this group to me, because I was boring him with questions.I'm new to python, and I have problem plotting Quadratic Functions. Using module pygame. Python is a tool you use to learn something else, but tools are important, they also help shape the way you think. So tell your teacher that questions about tools are important enough. If your purpose is to learn something then using Pygame to plot functions is OK. If your purpose is just to plot them, and you don't have strange needs, then MatPlotLib can be better. Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
On Fri, 14 Aug 2009 13:49:19 +0900, Terry Reedy wrote: Dr. Phillip M. Feldman wrote: According to the Python documentation, 'reload' reloads a previously imported module (so that changes made via an external editor will be effective). But, when I try to use this command, I get the following error message: TypeError: reload() argument must be module Any suggestions will be appreciated. Besides the other answers, do not use reload. It is removed in Py3 because it cannot be made to work as people reasonably expect. That's a damn shame, because it is very useful for interactive use once you get it's quirks. Is it gone-gone or just removed from built-ins? If the former, would the following be a reasonable replacement? def reload(module): if type(module) is not type(__builtins__): raise TypeError(reload() argument must be module) name = module.__name__ del globals()[name] del sys.modules[name] globals()[name] = __import__(name) It seems to work for me, but I'm not sure if I've missed something. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Python and behavior
On Aug 13, 8:36 pm, goldtech goldt...@worldpost.com wrote: Could you explain or link me to an explanation of this? http://docs.python.org/tutorial/datastructures.html#more-on-conditions Give the whole tutorial a good read. -- http://mail.python.org/mailman/listinfo/python-list
Is it possible to use python to get True Full Duplex on a Serial port?
In the past, on this group, I have made statements that said that on Linux, the serial port handling somehow does not allow transmitting and receiving at the same time, and nobody contradicted me. I am running into the self same issue again. What I normally do is to open the port like this: port = open(/dev/ttyS0,r+b,0) and then I unblock it with: def unblock(f): Given file 'f', sets its unblock flag to true. fcntl.fcntl(f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK) Then I can write a loop that uses a try-except to see if there are characters available, and that examines a queue to see if there is something to transmit, to give the appearance of full duplex functionality. What I would really like is to have two threads - one that does blocking input waiting for a character, and one that examines an output queue and transmits the stuff it finds. When I try to do this, it does not seem to work - as far as I can see, it is as if the underlying implementation is somehow single threaded - if it is waiting for a received character, it waits until something comes in before it will transmit anything. So if you are talking to a device that does not respond, the whole thing freezes up waiting for a character that never comes, and nothing is transmitted either, despite the call to port.write(somestring). The write blocks, and everything stops, waiting for the receipt to finish. Is there a way to get full duplex, so that the transmit and receive are independent of each other? Or are we stuck with a disk-like model that forces a sequence on reads and writes? - Hendrik -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
Dr. Phillip M. Feldman wrote: Actually, I've tried both of these, and I get (different) errors in both cases: In [1]: from mymath import * In [2]: reload(mymath) NameError: name 'mymath' is not defined In [3]: reload('mymath') TypeError: reload() argument must be module Please don't top post :o) 1/ Do not use the 'from module import *' form, unless you don't have any other choice, it will set in your namespace an undefined number of symbols, you may get some name collisions which usually lead to very nasty bugs. import mymath reload(mymath) will do the trick. If you are of those lazy coders you can write import mymath as mm reload(mm) mm.aFunction() If you are using a few functions and don't what to prefix them with the module name you can also write import mymath from mymath import func1, func2, func3 # reload the functions reload(mymath) func1 = mymath.func1 func2 = mymath.func2 func3 = mymath.func3 JM -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
En Fri, 14 Aug 2009 05:34:52 -0300, Steven D'Aprano st...@remove-this-cybersource.com.au escribió: On Fri, 14 Aug 2009 13:49:19 +0900, Terry Reedy wrote: Besides the other answers, do not use reload. It is removed in Py3 because it cannot be made to work as people reasonably expect. That's a damn shame, because it is very useful for interactive use once you get it's quirks. Is it gone-gone or just removed from built-ins? Just relocated: p3 import imp p3 imp.reload built-in function reload -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: OptionParser How to: prog cmd [options] [arguments]
On Aug 14, 12:18 am, Javier Collado javier.coll...@gmail.com wrote: 2009/8/14 Steven Woody narkewo...@gmail.com: Hi, I am using OptionParser, but I've not managed figure out a way to support what I wanted command line format prog cmd [options] [arguments]. E.g., svn ls -r123http://hello.world;. Can I do this using OptionParser? Thanks. Hello, I think that this isn't possible with optparse library. It's possible if you remove sys.argv[1] before invoking optparse. But... However, it's possible with argparse (http://code.google.com/p/argparse/): http://argparse.googlecode.com/svn/trunk/doc/other-methods.html#sub-c... It's not a standard library, but it's worth to take a look at it. It's more than worth looking at, it's a slam dunk. It's superior to optparse in every way I can think of. Unless you don't want the third- party dependency there is no reason to use optparse instead of argparse. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list
Re: OptionParser How to: prog cmd [options] [arguments]
En Fri, 14 Aug 2009 03:22:49 -0300, Steven Woody narkewo...@gmail.com escribió: I am using OptionParser, but I've not managed figure out a way to support what I wanted command line format prog cmd [options] [arguments]. E.g., svn ls -r123 http://hello.world;. Can I do this using OptionParser? Extract the cmd yourself, and pass the remaining arguments (that is, sys.argv[2:]) to parser.parse_args() -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
Emile van Sebille wrote: On 8/13/2009 3:17 PM dippim said... I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a = None,b = None) self.start = a self.end = b from datetime import datetime c = datetime(2009,8,13,6,15,0) d = datetime(2009,8,14,12,0,0) afoo = foo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start = datetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, why not... class foo(object): def __init__(self,a = None,b = None) self.start = min(a,b) self.end = max(a,b) Emile or class foo(object): def __init__(self, start, end) self.start = start self.end = end Problem solved by design :o) JM -- http://mail.python.org/mailman/listinfo/python-list
Re: Python and behavior
MRAB pyt...@mrabarnett.plus.com wrote: Operation Result |x or y| x if x else y |x and y| y if x else x |not x| False if x else False :-) That's not a terribly good definition for the 'not' operator. Try: |not x| False if x else True -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
Hendrik van Rooyen schrieb: In the past, on this group, I have made statements that said that on Linux, the serial port handling somehow does not allow transmitting and receiving at the same time, and nobody contradicted me. I am running into the self same issue again. What I normally do is to open the port like this: port = open(/dev/ttyS0,r+b,0) How about using pyserial? With that, I never had any problems accessing the the serial ports, and AFAIK no duplex-problems as well. And I seriously doubt that these are a python-related problem - python only has a very thin, direct layer above the posix-calls, and doesn't do anything that would explain your observed behavior. The GIL is not the issue here either - it won't interfer with blocking IO. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: get the pause status from amarok 2.1
Sleepy Cabbage schrieb: As the title says, I'm trying to find a way to get the pause status from amarok 2.1. I'm running kubuntu 9.04 with kde 4.2.2, python 2.6.2. Thanks in advance. Not at my linux-system right now, but dcop and the respective python-module should help. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: need help calculating point between two coordinates.
On Thu, 13 Aug 2009 14:26:54 -0700, PeteDK wrote: Hi there I'am working on a route comparison tool for carpools. The route comparison is based on 'steps' retrieved from google maps GDirection. These steps vary in length and i use the coordinates at the beginning of each step. However, sometimes the distance of these steps is too long(ex. driving 30-40 km. on the freeway). Therefore i would like to calculate/find the coordinate located in between two given coordinates. Lets say one step starts at: 56.043185,9.922714 and ends at: 56.234287,9.864521 I would then like to calculate the point right in the middle of these coordinates. Can you assume that the coordinate system is virtually flat between those points? That is, are the distances small enough that the curvature of the earth isn't relevant? If so, the following should be close enough: def midpoint(a, b): Return the two-dimensional point midway between points a and b. x = (a[0] + b[0])/2.0 y = (a[1] + b[1])/2.0 return (x, y) Otherwise, you can probably start here: http://www.geomidpoint.com/methods.html http://mathforum.org/library/drmath/results.html?contexts=drmathlevels=collegepassed_id=51416passed_title=College+Physicssearch_cats=notextsearch=sphericaltextsearch_bool_type=andtopics=physics -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Database query execution times in Python?
Look up EXPLAIN Thanks for the suggestion. I don't see any option to have EXPLAIN display the query time though? -- View this message in context: http://www.nabble.com/Database-query-execution-times-in-Python--tp24870050p24969867.html Sent from the Python - python-list mailing list archive at Nabble.com. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to reset document string
Dear Carl, Your ideas are extremely good, and I liked idea 2 especially, based on that I am considering following approach. Eg: let us say I have module named myModule and exposing myModule.myAPI So I will now rename myModule as _myModule and write a python layer with myModule So my python layer will look like this file name myModule.py import _myModule def myAPI(arg1, arg2): @param arg1 help string @param arg2 help string _myModule.myAPI(arg1,arg2) # actual API So I will provide mechanism which reads the help files and generates this binding python file and reload the module, So now my python editor has the new python strings. Also another advantages of this approach is if customer choses his own IDE he will still get the documentation of our APIs, by just ensuring these python files are in PYTHON_PATH I think this is better approach, kindly please let me know your comments Regards, Anand On Aug 7, 2:54 am, Anand K Rayudu an...@esi-india.com wrote: Dear All, We have extended and embedded python into my our application. We exposed few APIs to python using Py_InitModule(myModuleName, myMethods); where my methods are static PyMethodDef VistaDbMethods[] = { { (char *)myAPI,_myAPICFunctionPtr ,METH_VARARGS,usage: MyHelp) } Now problem is ml_doc (Document string). Most of the time the strings given by development team is not descriptive enough, so support team want to enhance these docstring on need basis and supply to customer The idea is we will provide get latest help option from application, which will contact our webserver or allow user to pick new help document, which will re apply the help on fly. From then on our script editors will show the new enhanced help. How do I achieve this. Sounds very cool. I have a few ideas. 1. Since you say you are embedding Python in your application, the most direct way might be to modify the Python interpreter to allow the __doc__ attribute to be changed. You'd have to modify the PyCFunction type (defined in methodobject.h and methodobject.c) to allow overriding the compiled-in doc field. 2. Instead of replacing the __doc__ attribute of the function, just replace the whole function with a wrapper. So, for instance, if your application decides to update the docstring for myModuleName.myAPI(), instead of running code like this: myModuleName.myAPI.__doc__ = 'new docstring' run code like this: def create_wrapper(func,docstring): def wrapper(*args): return func(*args) wrapper.__doc__ = doc return wrapper myModuleName.myAPI = create_wrapper( myModuleName.myAPI,'new docstring') So now myApi is a Python function with the new docstring that calls the old function. (Note: if you are concerned with efficiency, it's possible to write a wrapper in C that has very little overhead.) This approach has minor disadvantages (such as if any code write from myModuleName import myAPI--it won't see the new version) but it may be the easiest approach. 3. Instead of customizing the __doc__ attribute, store any custom docstrings in a dictionary keyed by the function. custom_doc[myModuleName.myApi] = 'new docstring' Your script editor, when looking for documentation, will first search in this custom area to see if the docstring has been overridden; if so, use that; if not, use the docstring. Something like this: def documentation_to_use_in_script_editor(func): try: return custom_doc[func] except KeyError: return func.__doc__ That has the negative of the special docstring not being visible at an interactive prompt. I have given you some fairly vague answers, hopefully that'll give you some idea. It sounds like you have an ambitious project, suggesting that you are probably good enough to implement the suggestions. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list
python-ldap and encodings
Hi! I'm using python-ldap to create some entries on my openldap server. The problem is that some of those entries have accented characters and unicode text in general. I'm wondering if there is any example or documentation on how to add or modify ldap objects whose values contains non-ascii characters, such as accents, and so on. As far as I understand, those values should be encoded using base64, but if I do that, I don't know how to indicate in the modlist that this is the encoded value and not the value itself. Any help will be bery appreciated. Matias. -- http://mail.python.org/mailman/listinfo/python-list
Re: Format Code Repeat Counts?
Scott David Daniels wrote: MRAB wrote: The shortest I can come up with is: [ + ][.join(letters) + ] Maybe a golf shot: ][.join(letters).join([]) Even shorter: [+][.join(letters)+] :-) -- http://mail.python.org/mailman/listinfo/python-list
Re: python-ldap and encodings
Matias wrote: Hi! I'm using python-ldap to create some entries on my openldap server. The problem is that some of those entries have accented characters and unicode text in general. I'm wondering if there is any example or documentation on how to add or modify ldap objects whose values contains non-ascii characters, such as accents, and so on. As far as I understand, those values should be encoded using base64, but if I do that, I don't know how to indicate in the modlist that this is the encoded value and not the value itself. Any help will be bery appreciated. Matias. Nevermind I was doing something really stupid.Don't ask please :-) -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
Hendrik van Rooyen wrote: port = open(/dev/ttyS0,r+b,0) What I would really like is to have two threads - one that does blocking input waiting for a character, and one that examines an output queue and transmits the stuff it finds. You can't read and write with the same stdio file object at the same time. Odd things tend to happen if you try. You need to open *two* file objects, one for reading and one for writing: fr = open(/dev/ttyS0,rb,0) fw = open(/dev/ttyS0,wb,0) and give fr to the reading thread and fw to the writing thread. You could also try avoiding file objects altogether and use the raw system calls in the os module. Since you're not using any buffering, there's little reason to use the stdio layer. If you do that, you should be able to use the same file descriptor for reading and writing without any trouble. -- Greg -- http://mail.python.org/mailman/listinfo/python-list
anyone with genomewide microarray analysis experience ?
Hi, I am trying to analyse some biological data from microarray experiments. Different experiments have been stored in a SQL database. One of the things I would like to do is to fetch all data from a certain distance from gene ATGs say 100+/- bp and calculate the bp average over all genes over this region. The microarray data has been normalised over each bp Does anyone have some scripts I could use for this purpose. I work with S.cerevisiae Thank you -- View this message in context: http://www.nabble.com/anyone-with-genomewide-microarray-analysis-experience---tp24971224p24971224.html Sent from the Python - python-list mailing list archive at Nabble.com. -- http://mail.python.org/mailman/listinfo/python-list
Re: anyone with genomewide microarray analysis experience ?
trias: One of the things I would like to do is to fetch all data from a certain distance from gene ATGs say 100+/- bp and calculate the bp average over all genes over this region. I know absolutely nothing about your problem domain, but if your distance function is metric, you can use this: http://well-adjusted.de/mspace.py or that: http://code.activestate.com/recipes/572156/ The latter (by Baerophile) is fast, the former (by me) has more features. Baerophile has even faster implementations (non-Python) as well. J. -- I am worried that my dreams pale in comparison beside TV docu-soaps. [Agree] [Disagree] http://www.slowlydownward.com/NODATA/data_enter2.html signature.asc Description: Digital signature -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
Terry Reedy wrote: Dr. Phillip M. Feldman wrote: According to the Python documentation, 'reload' reloads a previously imported module (so that changes made via an external editor will be effective). But, when I try to use this command, I get the following error message: TypeError: reload() argument must be module Any suggestions will be appreciated. Besides the other answers, do not use reload. It is removed in Py3 because it cannot be made to work as people reasonably expect. tjr It's typically a user module that needs to be reloaded. It seems that del sys.modules['moduleName'] has no effect. Is there some other way of ensuring that any import goes to moduleName.py, instead of moduleName.pyc? Colin W. -- http://mail.python.org/mailman/listinfo/python-list
Re: csv.DictWriter.write_header()
On Aug 13, 1:15 pm, Alan G Isaac alan.is...@gmail.com wrote: I do not understand the reason for your silly, sarcastic response. On 8/13/2009 7:58 AM John Machin apparently wrote: Duck typing: ask a silly question, get a silly answer. Maybe if you learned to be a more generous reader, fewer questions would look silly to you. On 8/13/2009 7:58 AM John Machin apparently wrote: I can imagine that one might (without reading the source) make do with the published APIs: Now you get it. On Aug 13, 1:15 pm, Alan G Isaac alan.is...@gmail.com wrote: So my question was, would this improve the class from a usability perspective? On 8/13/2009 7:58 AM John Machin apparently wrote: Of course. Thank you, Alan -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
On Aug 14, 5:45 am, Jean-Michel Pichavant jeanmic...@sequans.com wrote: Emile van Sebille wrote: On 8/13/2009 3:17 PM dippim said... I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a = None,b = None) self.start = a self.end = b from datetime import datetime c = datetime(2009,8,13,6,15,0) d = datetime(2009,8,14,12,0,0) afoo = foo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start = datetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, why not... class foo(object): def __init__(self,a = None,b = None) self.start = min(a,b) self.end = max(a,b) Emile or class foo(object): def __init__(self, start, end) self.start = start self.end = end Problem solved by design :o) JM Emile and JM, Thanks for the response. However, these solution only work at instantiation. If I change the value of start or end after instantiation, then I can make start or end whatever I like without regard to order. -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On Friday 14 August 2009 12:54:32 Diez B. Roggisch wrote: How about using pyserial? With that, I never had any problems accessing the the serial ports, and AFAIK no duplex-problems as well. And I seriously doubt that these are a python-related problem - python only has a very thin, direct layer above the posix-calls, and doesn't do anything that would explain your observed behavior. The GIL is not the issue here either - it won't interfer with blocking IO. I will have a look at pyserial - have never used it before. I agree that it is probably not a Python issue, and that the GIL is irelevant - I was hoping that someone had already travelled the road and could give me a signpost. In the meantime I have had another idea which I have also not tried yet, namely to do independent opens for reading and writing, to give me two file instances instead of one, and to try with that. I have no idea if it would make any difference, or even work at all. My normal stuff works, but I do not like it as it is essentially busy looping with short sleeps in between. In the eBox, it uses most of the processor just to move a few bytes of I/O in and out between the serial port and the TCP/IP, and struggles to do that better than five times a second, while the message time on the 115200 baud port is only about 2 milliseconds. - Hendrik -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
dippim schrieb: On Aug 14, 5:45 am, Jean-Michel Pichavant jeanmic...@sequans.com wrote: Emile van Sebille wrote: On 8/13/2009 3:17 PM dippim said... I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a = None,b = None) self.start = a self.end = b from datetime import datetime c = datetime(2009,8,13,6,15,0) d = datetime(2009,8,14,12,0,0) afoo = foo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start = datetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, why not... class foo(object): def __init__(self,a = None,b = None) self.start = min(a,b) self.end = max(a,b) Emile or class foo(object): def __init__(self, start, end) self.start = start self.end = end Problem solved by design :o) JM Emile and JM, Thanks for the response. However, these solution only work at instantiation. If I change the value of start or end after instantiation, then I can make start or end whatever I like without regard to order. But for that, you don't need descriptors. All you need is a property: class Foo(object): def __init__(self, start, end): self._start = start self._end = end @property def start(self): return start @start.setter def start(self, value): if value = self._end: raise ValueError, Tried to set a value greater than end! self._start = value # repeat for end, switch relational op Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On Friday 14 August 2009 14:13:46 greg wrote: You can't read and write with the same stdio file object at the same time. Odd things tend to happen if you try. You need to open *two* file objects, one for reading and one for writing: fr = open(/dev/ttyS0,rb,0) fw = open(/dev/ttyS0,wb,0) and give fr to the reading thread and fw to the writing thread. Does this actually work without somehow falling foul of the fact that the /dev/ttyS0 is only one thing? - I know that there is no physical reason for not being able to go in and out at the same time - in my embedded stuff I do that routinely - but that is all assembler running on bare metal so it is under my own control. You could also try avoiding file objects altogether and use the raw system calls in the os module. Since you're not using any buffering, there's little reason to use the stdio layer. If you do that, you should be able to use the same file descriptor for reading and writing without any trouble. Thanks for this - I now have my weekend cut out for me... - Hendrik -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
On Aug 14, 2:34 am, Raymond Hettinger pyt...@rcn.com wrote: [David] I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a = None,b = None) self.start = a self.end = b from datetime import datetime c = datetime(2009,8,13,6,15,0) d = datetime(2009,8,14,12,0,0) afoo = foo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start = datetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, but I can't figure out how to determine which values is being set. You're on the right track, but it is easier to use property() than to write your own custom descriptor with __get__ and __set__. class foo(object): def __init__(self,a = None,b = None): self._start = a self._end = b def get_start(self): return self._start def set_start(self, value): if self._end is None or value self._end: self._start = value else: self._end = value start = property(get_start, set_start) def get_end(self): return self._end def set_end(self, value): if self._start is None or value self._start: self._end = value else: self._start = value end = property(get_end, set_end) Raymond Raymond, This functionality is exactly what I was looking for. Thanks! I'll be using this to solve my problem. Now that I'm on the right track, I'm still a bit confused about how __get__ and __set__ are useful. Admittedly, I don't need to understand them to solve this problem, but perhaps they may be useful in the future. If I wanted to solve this problem using __get__ and __set__ could it be done? Thanks Again! -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On 01:38 pm, hend...@microcorp.co.za wrote: On Friday 14 August 2009 12:54:32 Diez B. Roggisch wrote: How about using pyserial? With that, I never had any problems accessing the the serial ports, and AFAIK no duplex-problems as well. And I seriously doubt that these are a python-related problem - python only has a very thin, direct layer above the posix-calls, and doesn't do anything that would explain your observed behavior. The GIL is not the issue here either - it won't interfer with blocking IO. I will have a look at pyserial - have never used it before. I agree that it is probably not a Python issue, and that the GIL is irelevant - I was hoping that someone had already travelled the road and could give me a signpost. In the meantime I have had another idea which I have also not tried yet, namely to do independent opens for reading and writing, to give me two file instances instead of one, and to try with that. I have no idea if it would make any difference, or even work at all. My normal stuff works, but I do not like it as it is essentially busy looping with short sleeps in between. In the eBox, it uses most of the processor just to move a few bytes of I/O in and out between the serial port and the TCP/IP, and struggles to do that better than five times a second, while the message time on the 115200 baud port is only about 2 milliseconds. One strategy you might employ to get rid of the busy looping is to use Twisted and its serial port support. This also addresses the full- duplex issue you've raised. Jean-Paul -- http://mail.python.org/mailman/listinfo/python-list
Re: Python and behavior
MRAB wrote: Gary Herron wrote: goldtech wrote: Could you explain or link me to an explanation of this? Been using Python for a while but not sure I understand what's happening below. Thanks. ss=1 and f ss 'f' ss=0 and f ss 0 Python's Boolean operators don't turn arbitrary values into True and False values. If you use it in any conditional, you'll get the same result as if it did, but it is occasionally it's nice to get the actual values used in the and instead of having the value distilled down to a True/False. From the Python manual: These are the Boolean operations, ordered by ascending priority: Operation Result Notes |x or y| if x is false, then y, else x (1) |x and y| if x is false, then x, else y (1) |not x| if x is false, then |True|, else |False| (2) The Pythonic table would be: Operation Result |x or y| x if x else y |x and y| y if x else x |not x| False if x else False :-) That last should be |not x| False if x else True ~Ethan~ -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
Hendrik van Rooyen schrieb: On Friday 14 August 2009 14:13:46 greg wrote: You can't read and write with the same stdio file object at the same time. Odd things tend to happen if you try. You need to open *two* file objects, one for reading and one for writing: fr = open(/dev/ttyS0,rb,0) fw = open(/dev/ttyS0,wb,0) and give fr to the reading thread and fw to the writing thread. Does this actually work without somehow falling foul of the fact that the /dev/ttyS0 is only one thing? - I know that there is no physical reason for not being able to go in and out at the same time - in my embedded stuff I do that routinely - but that is all assembler running on bare metal so it is under my own control. You could also try avoiding file objects altogether and use the raw system calls in the os module. Since you're not using any buffering, there's little reason to use the stdio layer. If you do that, you should be able to use the same file descriptor for reading and writing without any trouble. Thanks for this - I now have my weekend cut out for me... You should *really* just use pyserial. No hassle, instant satisfaction. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: Unrecognized escape sequences in string literals
In article 6e13754c-1fa6-4d1b-8861-146bffec8...@h30g2000vbr.googlegroups.com, Douglas Alan darkwate...@gmail.com wrote: My friend begs to differ with the above. It would be much better for debugging if Python generated a parsing error for unrecognized escape sequences, rather than leaving them unchanged. g++ outputs a warning for such escape sequences, for instance. This is what I would consider to be the correct behavior. (Actually, I think it should just generate a fatal parsing error, but a warning is okay too.) Well, then, the usual response applies: create a patch, discuss it on python-ideas, and see what happens. (That is, nobody has previously complained so vociferously IIRC, and adding a warning is certainly within the bounds of what's theoretically acceptable.) -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ I saw `cout' being shifted Hello world times to the left and stopped right there. --Steve Gonedes -- http://mail.python.org/mailman/listinfo/python-list
Re: coding for multiple versions of python
On 2009-08-14, Martin v. L?wis mar...@v.loewis.de wrote: I'm guessing I need to configure cvs to copy files to both locations whenever I commit. Does that sound right? Is there a better way I'm not thinking of? Just use one set of source files. If the set of files doesn't change too often, you can use symlinks. That's how Debian currently installs Python packages for multiple versions on a single system. Specifically, put the source code into /net/source/python/foo/*.py. Then, on each system, put symlinks to all .py files into lib/site-packages/foo. Then Python will place the .pyc files next to the symlinks, not next to the actual .py files. Why would he need two sets of .py files? -- Grant Edwards grante Yow! I'm EMOTIONAL at now because I have visi.comMERCHANDISING CLOUT!! -- http://mail.python.org/mailman/listinfo/python-list
Re: socket.send : (11, 'Resource temporarily unavailable')
On 2009-08-14, Gabriel Rossetti gabriel.rosse...@arimaz.com wrote: I get a (11, 'Resource temporarily unavailable') error when I try to send a file using a socket. Is there s size limit? No, there's no size limit. However, there is a bandwidth limit. You can't shove bytes into the pipe faster than they come out the other end (at least not over the long term). I tried sending a smaller file and ii poses no problem. Am I doing something wrong? Yes. If you want to have the socket in non-blocking mode, then you have to catch EAGAIN and retry the operation. def sendMessage(host, port, msg): if isinstance(msg, unicode): msg = msg.encode(utf-8) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.setblocking(0) totalsent = 0 while totalsent len(msg): sent = sock.send(msg[totalsent:]) if sent == 0: raise RuntimeError, socket connection broken totalsent = totalsent + sent sock.close() -- Grant Edwards grante Yow! I didn't order any at WOO-WOO ... Maybe a YUBBA visi.com... But no WOO-WOO! -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On 2009-08-14, Hendrik van Rooyen hend...@microcorp.co.za wrote: In the past, on this group, I have made statements that said that on Linux, the serial port handling somehow does not allow transmitting and receiving at the same time, That's not true. Linux/Unix does and always has supported full-duplex communications on serial ports. and nobody contradicted me. Um, sorry, I guess. What I would really like is to have two threads - one that does blocking input waiting for a character, and one that examines an output queue and transmits the stuff it finds. That's the traditional way of doing full-duplex serial IO on Unix back in the day before the select/poll system calls were available. When I try to do this, it does not seem to work - as far as I can see, it is as if the underlying implementation is somehow single threaded - if it is waiting for a received character, it waits until something comes in before it will transmit anything. Nope. I'll try to dig up an example, but that approach has always worked for me. So if you are talking to a device that does not respond, the whole thing freezes up waiting for a character that never comes, and nothing is transmitted either, despite the call to port.write(somestring). The write blocks, and everything stops, waiting for the receipt to finish. I've never observed that behavior. Is there a way to get full duplex, so that the transmit and receive are independent of each other? That's the way serial ports work on Unix. Or are we stuck with a disk-like model that forces a sequence on reads and writes? No. -- Grant Edwards grante Yow! Like I always say at -- nothing can beat visi.comthe BRATWURST here in DUSSELDORF!! -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On 2009-08-14, Hendrik van Rooyen hend...@microcorp.co.za wrote: In the meantime I have had another idea which I have also not tried yet, namely to do independent opens for reading and writing, to give me two file instances instead of one, and to try with that. I have no idea if it would make any difference, or even work at all. That should work (and shouldn't make any difference) My normal stuff works, but I do not like it as it is essentially busy looping with short sleeps in between. In the eBox, it uses most of the processor just to move a few bytes of I/O in and out between the serial port and the TCP/IP, and struggles to do that better than five times a second, while the message time on the 115200 baud port is only about 2 milliseconds. What platform are you using? I suppose it's possible that there's something broken in the serial driver for that particular hardware. -- Grant Edwards grante Yow! I feel ... JUGULAR ... at visi.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On 2009-08-14, exar...@twistedmatrix.com exar...@twistedmatrix.com wrote: One strategy you might employ to get rid of the busy looping is to use Twisted and its serial port support. This also addresses the full- duplex issue you've raised. There are no such full-dulex issues. -- Grant Edwards grante Yow! The PINK SOCKS were at ORIGINALLY from 1952!! visi.comBut they went to MARS around 1953!! -- http://mail.python.org/mailman/listinfo/python-list
Re: A Exhibition Of Tech Geekers Incompetence: Emacs whitespace-mode
Martin P. Hellwig martin.hell...@dcuktec.org writes: Sounds like a bad case of STRIS http://blog.dcuktec.com/2009/08/stris.html I believe the correct technical term for it is potty mouth. -- http://mail.python.org/mailman/listinfo/python-list
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On 2009-08-14, greg g...@cosc.canterbury.ac.nz wrote: Hendrik van Rooyen wrote: port = open(/dev/ttyS0,r+b,0) What I would really like is to have two threads - one that does blocking input waiting for a character, and one that examines an output queue and transmits the stuff it finds. You can't read and write with the same stdio file object at the same time. Odd things tend to happen if you try. You need to open *two* file objects, one for reading and one for writing: fr = open(/dev/ttyS0,rb,0) fw = open(/dev/ttyS0,wb,0) Doh! It didn't even occur to me that somebody would use python file objects for serial ports, and I completely overlooked the fact that the OP was doing that. In short: don't do that -- it just messes things up. and give fr to the reading thread and fw to the writing thread. You could also try avoiding file objects altogether and use the raw system calls in the os module. That's definitely the way you should do serial port I/O. Since you're not using any buffering, there's little reason to use the stdio layer. If you do that, you should be able to use the same file descriptor for reading and writing without any trouble. Do not use Python file objects. Use the underlying file descriptors: os.open(), os.read(), os.write(). That will almost certainly solve your problems. If you want examples of os.x() usage, below is the PosixSerial.py module that I use for Linux-only applications. For cross-platform work, use pyserial (whose Posix support is based on the code below). -PosixSerial.py-- # Posix serial port class # Copyright 2001-2009 Grant B. Edwards gra...@visi.com # You may use this code in any way you like so long as you # leave this copyright notice. # Though you are not required to, it would be nice if you send # me a copy of bufixes or enhancements and allowed me to # incorporate and distribute them. import sys import fcntl import os import struct import termios import string import select if string.split(sys.version)[0] '2': TERMIOS = termios else: import TERMIOS # construct dictionaries for baud rate lookups baudEnumToInt = {} baudIntToEnum = {} for rate in (0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200,230400,460800,50,576000,921600,100,1152000,150,200,250,300,350,400): try: i = eval('TERMIOS.B'+str(rate)) baudEnumToInt[i]=rate baudIntToEnum[rate] = i except: pass # Do not know if these are right for anything except Linux if sys.platform[:5] == 'linux': TIOCMGET = 0x5415 TIOCMBIS = 0x5416 TIOCMBIC = 0x5417 TIOCMSET = 0x5418 TIOCM_LE = 0x001 TIOCM_DTR = 0x002 TIOCM_RTS = 0x004 TIOCM_ST = 0x008 TIOCM_SR = 0x010 TIOCM_CTS = 0x020 TIOCM_CAR = 0x040 TIOCM_RNG = 0x080 TIOCM_DSR = 0x100 TIOCM_CD = TIOCM_CAR TIOCM_RI = TIOCM_RNG TIOCM_OUT1 = 0x2000 TIOCM_OUT2 = 0x4000 TIOCM_zero_str = struct.pack('I',0) TIOCM_one_str = struct.pack('I',1) TIOCM_RTS_str = struct.pack('I',TIOCM_RTS) TIOCM_DTR_str = struct.pack('I',TIOCM_DTR) portNotOpenError = ValueError('port not open') class Port: An object wrapper for Posix serial ports def __init__(self,path=None,noinit=False): self.fd = None if path: self.open(path,noinit) def __tcsetattr(self): termios.tcsetattr(self.fd,TERMIOS.TCSANOW,[self.iflag,self.oflag,self.cflag,self.lflag,self.ispeed,self.ospeed,self.cc]) def __tcgetattr(self): self.iflag,self.oflag,self.cflag,self.lflag,self.ispeed,self.ospeed,self.cc = termios.tcgetattr(self.fd) def open(self,path,noinit): if self.fd: self.close() self.path = path self.fd = os.open(path,os.O_RDWR) self.__tcgetattr() if not noinit: self.iflag = 0 self.oflag = 0 self.lflag = 0 self.__tcsetattr() def close(self): if self.fd: os.close(self.fd) self.fd = None def fileno(self): return self.fd; def _write(self,data): if not self.fd: raise portNotOpenError return os.write(self.fd,data) def write(self,data): if not self.fd: raise portNotOpenError t = len(data) d = data while t0: n = os.write(self.fd,d) d = d[n:] t = t - n def read(self,size=1024,timeout=None): if not self.fd: raise portNotOpenError if timeout is None: return os.read(self.fd,size) else: r,w,e = select.select([self.fd],[],[self.fd],timeout) if r: return os.read(self.fd,size) else: raise timeout def baud(self,rate=None): if not
Re: Is it possible to use python to get True Full Duplex on a Serial port?
On 02:19 pm, inva...@invalid wrote: On 2009-08-14, exar...@twistedmatrix.com exar...@twistedmatrix.com wrote: One strategy you might employ to get rid of the busy looping is to use Twisted and its serial port support. This also addresses the full- duplex issue you've raised. There are no such full-dulex issues. There was a perceived issues. Obviously it's possible to do full-duplex with Linux's serial port support (and all the other major platforms too, as far as I know), as long as you know how. :) Twisted makes the how a lot simpler. Jean-Paul -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
dippim wrote: On Aug 14, 2:34 am, Raymond Hettinger pyt...@rcn.com wrote: [David] I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a =one,b = None) self.start = self.end = from datetime import datetime c =atetime(2009,8,13,6,15,0) d =atetime(2009,8,14,12,0,0) afoo =oo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start =atetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, but I can't figure out how to determine which values is being set. You're on the right track, but it is easier to use property() than to write your own custom descriptor with __get__ and __set__. class foo(object): def __init__(self,a =one,b = None): self._start = self._end = def get_start(self): return self._start def set_start(self, value): if self._end is None or value self._end: self._start =alue else: self._end =alue start =roperty(get_start, set_start) def get_end(self): return self._end def set_end(self, value): if self._start is None or value self._start: self._end =alue else: self._start =alue end =roperty(get_end, set_end) Raymond Raymond, This functionality is exactly what I was looking for. Thanks! I'll be using this to solve my problem. Now that I'm on the right track, I'm still a bit confused about how __get__ and __set__ are useful. Admittedly, I don't need to understand them to solve this problem, but perhaps they may be useful in the future. If I wanted to solve this problem using __get__ and __set__ could it be done? Thanks Again! DANGER- WILL ROBINSON! Don't use this code as-is. There is a nasty surprise waiting for the caller when he sets start and end, and discovers that one of them gets thrown out, and an old value still remains. obj= foo(3, 5) obj.start = 8 obj.end = 12 print obj.start, obj.end will print out 3, 12.Not what the caller expected. Four fixes, in order of preference: 0) Trust your user to read and obey your docstrings. This was what JM was implying, by changing the names of the formal parameters. 1) make a new method that sets both values, making these two properties readonly. That new method would make sure the two parameters are self-consistent. Making the actual values readonly can be done with a descriptor as well, or even a decorator. 2) Raise an exception in the getter methods if they're out of order 3) do the min/max logic on the getter methods, but I don't like that one at all. DaveA -- http://mail.python.org/mailman/listinfo/python-list
Re: coding for multiple versions of python
Grant Edwards wrote: On 2009-08-14, Martin v. L?wis mar...@v.loewis.de wrote: I'm guessing I need to configure cvs to copy files to both locations whenever I commit. Does that sound right? Is there a better way I'm not thinking of? Just use one set of source files. If the set of files doesn't change too often, you can use symlinks. That's how Debian currently installs Python packages for multiple versions on a single system. Specifically, put the source code into /net/source/python/foo/*.py. Then, on each system, put symlinks to all .py files into lib/site-packages/foo. Then Python will place the .pyc files next to the symlinks, not next to the actual .py files. Why would he need two sets of .py files? I can't speak for Martin, but his description doesn't have two sets of .py files, but two sets of symlinks pointing to the same .py files. It's the .pyc files that exist in two forms, since those are version dependent. He's assuming: 1) an OS that supports symlinks 2) two versions of Python on same system 3) one set of pure-python sources that want to stay in synch for both versions. -- http://mail.python.org/mailman/listinfo/python-list
Re: Format Code Repeat Counts?
MRAB wrote: Scott David Daniels wrote: MRAB wrote: The shortest I can come up with is: [ + ][.join(letters) + ] Maybe a golf shot: ][.join(letters).join([]) Even shorter: [+][.join(letters)+] :-) I was going by PEP8 rules. ;-) --Scott David Daniels Scott David dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
callable virtual method
Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() It works but it's tedious, I have to add these 2 lines to every virtual method, changing the content of the 2 lines. Maybe there is a nice/builtin way to do so (python 2.4) JM -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
On Fri, 14 Aug 2009 09:23:17 -0400, Colin J. Williams wrote: It's typically a user module that needs to be reloaded. What's a user module? It seems that del sys.modules['moduleName'] has no effect. sys.modules is just a dictionary, I find it hard to believe that deleting from it has no effect. It works for me: import sys import math 'math' in sys.modules True del sys.modules['math'] 'math' in sys.modules False What behaviour do you get? Of course deleting the math module from the cache doesn't do anything to the math module in your namespace: math module 'math' from '/usr/lib/python2.5/lib-dynload/mathmodule.so' del math math Traceback (most recent call last): File stdin, line 1, in module NameError: name 'math' is not defined Of course deleting the module (or reloading it) doesn't have any effect on any objects you already have: import math func = math.sin del sys.modules['math'] del math math.sin(1.2) Traceback (most recent call last): File stdin, line 1, in module NameError: name 'math' is not defined func(1.2) 0.93203908596722629 Is there some other way of ensuring that any import goes to moduleName.py, instead of moduleName.pyc? Delete moduleName.pyc. Make sure the .pyc file doesn't exist in the first place. Make sure the last modification date of the .py file is newer than the modification date of the .pyc file. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Programming by Contract
On Aug 14, 2009, at 12:09 AM, Scott David Daniels wrote: Charles Yeomans wrote: On Aug 11, 2009, at 3:30 PM, Ethan Furman wrote: Ethan Furman wrote: Greetings! I have seen posts about the assert statement and PbC (or maybe it was DbC), and I just took a very brief look at pycontract (http://www.wayforward.net/pycontract/ ) and now I have at least one question: Is this basically another way of thinking about unit testing, or is the idea of PbC more along the lines of *always* checking the input/output of functions to ensure they are correct? (*Contstant vigilance!* as Prof Moody would say ;) I know asserts can be turned off, so they obviously won't work for the latter case, and having seen the sample of pycontract it seems it only does its thing during debugging. So is Design (Programming) by Contract a fancy way of saying Document your inputs/outputs! or is there more to it? ~Ethan~ Hmmm... Well, from the (apparently) complete lack of interest, I shall take away the (better?) documentation ideas and unit testing ideas, and not worry about the rest. :) Design by contract is complementary to unit testing (I notice that the author of PEP 316 appears confused about this). DbC is, roughly speaking, about explicit allocation of responsibility. Consider this contrived example. def foo(s): require(s is not None) //code ensure(hasattr(returnValue, '__iter__')) yo might want two flags, REQUIRE_OFF, and ENSURE_ON that control testing, and change the code above to: require(REQUIRE_OFF or s is not None) //code ensure(ENSURE_OFF or hasattr(returnValue, '__iter__')) Python has no good way to turn off argument calculation by manipulating function definition (at least that I know of). For this purpose, it had occurred to me to do something like the following. def require(condition): if condition: return True else: raise PreconditionFailure def foo(s): assert require(s is not None) Then it occurred to me to actually read the assert documentation, where I learned that one can pass a second expression to assert. So instead one might write assert precondition, PreconditionFailure though I think I prefer the former. Charles Yeomans -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
On Aug 14, 10:48 am, Dave Angel da...@ieee.org wrote: dippim wrote: On Aug 14, 2:34 am, Raymond Hettinger pyt...@rcn.com wrote: [David] I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a =one,b = None) self.start = self.end = from datetime import datetime c =atetime(2009,8,13,6,15,0) d =atetime(2009,8,14,12,0,0) afoo =oo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start =atetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, but I can't figure out how to determine which values is being set. You're on the right track, but it is easier to use property() than to write your own custom descriptor with __get__ and __set__. class foo(object): def __init__(self,a =one,b = None): self._start = self._end = def get_start(self): return self._start def set_start(self, value): if self._end is None or value self._end: self._start =alue else: self._end =alue start =roperty(get_start, set_start) def get_end(self): return self._end def set_end(self, value): if self._start is None or value self._start: self._end =alue else: self._start =alue end =roperty(get_end, set_end) Raymond Raymond, This functionality is exactly what I was looking for. Thanks! I'll be using this to solve my problem. Now that I'm on the right track, I'm still a bit confused about how __get__ and __set__ are useful. Admittedly, I don't need to understand them to solve this problem, but perhaps they may be useful in the future. If I wanted to solve this problem using __get__ and __set__ could it be done? Thanks Again! DANGER- WILL ROBINSON! Don't use this code as-is. There is a nasty surprise waiting for the caller when he sets start and end, and discovers that one of them gets thrown out, and an old value still remains. obj= foo(3, 5) obj.start = 8 obj.end = 12 print obj.start, obj.end will print out 3, 12. Not what the caller expected. You're right about this and I appreciate the warning, but I think what Raymond was going for was directional accuracy without a great deal of his time wasted on details. The explanation served the purpose of moving me forward using property() and I'm thankful for it. Four fixes, in order of preference: 0) Trust your user to read and obey your docstrings. This was what JM was implying, by changing the names of the formal parameters. Considering I am not the sharpest knife in the drawer, I don't wish to start a philosophical discussion about the relative aptitude and capabilities of the people who might use a class I build. However, I will say that as this particular requirement is imposed on this class by the writer, shouldn't it be the writer's responsibility to enforce it, especially, when the cost of enforcement is so low? 1) make a new method that sets both values, making these two properties readonly. That new method would make sure the two parameters are self-consistent. Making the actual values readonly can be done with a descriptor as well, or even a decorator. 2) Raise an exception in the getter methods if they're out of order 3) do the min/max logic on the getter methods, but I don't like that one at all. DaveA -- http://mail.python.org/mailman/listinfo/python-list
Re: implementing descriptors
On Aug 14, 10:48 am, Dave Angel da...@ieee.org wrote: dippim wrote: On Aug 14, 2:34 am, Raymond Hettinger pyt...@rcn.com wrote: [David] I am new to Python and I have a question about descriptors. If I have a class as written below, is there a way to use descriptors to be certain that the datetime in start is always before the one in end? class foo(object): def __init__(self,a =one,b = None) self.start = self.end = from datetime import datetime c =atetime(2009,8,13,6,15,0) d =atetime(2009,8,14,12,0,0) afoo =oo(c,d) For instance, if the following code were run, I would like to instance of foo to switch the start and end times. afoo.start =atetime(2010,8,13,6,15,0) I was thinking of using the __set__ descriptor to catch the assignment and reverse the values if necessary, but I can't figure out how to determine which values is being set. You're on the right track, but it is easier to use property() than to write your own custom descriptor with __get__ and __set__. class foo(object): def __init__(self,a =one,b = None): self._start = self._end = def get_start(self): return self._start def set_start(self, value): if self._end is None or value self._end: self._start =alue else: self._end =alue start =roperty(get_start, set_start) def get_end(self): return self._end def set_end(self, value): if self._start is None or value self._start: self._end =alue else: self._start =alue end =roperty(get_end, set_end) Raymond Raymond, This functionality is exactly what I was looking for. Thanks! I'll be using this to solve my problem. Now that I'm on the right track, I'm still a bit confused about how __get__ and __set__ are useful. Admittedly, I don't need to understand them to solve this problem, but perhaps they may be useful in the future. If I wanted to solve this problem using __get__ and __set__ could it be done? Thanks Again! DANGER- WILL ROBINSON! Don't use this code as-is. There is a nasty surprise waiting for the caller when he sets start and end, and discovers that one of them gets thrown out, and an old value still remains. obj= foo(3, 5) obj.start = 8 obj.end = 12 print obj.start, obj.end will print out 3, 12. Not what the caller expected. You're right about this and I appreciate the warning, but I think what Raymond was going for was directional accuracy without a great deal of his time wasted on details. The explanation served the purpose of moving me forward using property() and I'm thankful for it. Four fixes, in order of preference: 0) Trust your user to read and obey your docstrings. This was what JM was implying, by changing the names of the formal parameters. Considering I am not the sharpest knife in the drawer, I don't wish to start a philosophical discussion about the relative aptitude and capabilities of the people who might use a class I build. However, I will say that as this particular requirement is imposed on this class by the writer, shouldn't it be the writer's responsibility to enforce it, especially, when the cost of enforcement is so low? 1) make a new method that sets both values, making these two properties readonly. That new method would make sure the two parameters are self-consistent. Making the actual values readonly can be done with a descriptor as well, or even a decorator. 2) Raise an exception in the getter methods if they're out of order 3) do the min/max logic on the getter methods, but I don't like that one at all. DaveA -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
Jean-Michel Pichavant wrote: Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() It works but it's tedious, I have to add these 2 lines to every virtual method, changing the content of the 2 lines. Maybe there is a nice/builtin way to do so (python 2.4) Why are you checking which class it's in? The method in the base class will be called only if it hasn't been overridden in the subclass. -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
Jean-Michel Pichavant schrieb: Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() It works but it's tedious, I have to add these 2 lines to every virtual method, changing the content of the 2 lines. Maybe there is a nice/builtin way to do so (python 2.4) Python has no concept of virtual methods. A simple class Stream(object): def resetStats(self): raise NotImplemented is all you need. Once a subclass overrides resetStats, that implementatino is used. Additionally, there are modules such as zope.interface out there, that let you define more formally what an interface is, and declare who's implementing it. I don't used this myself though, so I can't really comment to which extend it e.g. warns you if you subclass *without* implementing. Diez -- http://mail.python.org/mailman/listinfo/python-list
retrieve item from nested list given index tuple
`lst` is a nested list `tpl` is the indexes for an item in the list What is the nice way to retrieve the item? (Speedy access is nice.) I don't want to use NumPy, but I'd like somehow to avoid an explicit loop. I did consider using eval. E.g., eval('lst' + '[%d]'*len(tpl)%tpl). It works but seems rather ugly. I kind of like reduce(list.__getitem__, tpl, lst) but the reliance on reduce remains controversial enough to see i removed from the Python 3 built-ins ... Thanks, Alan Isaac -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
On Fri, 14 Aug 2009 16:49:47 +0200, Jean-Michel Pichavant wrote: Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. I'm not entirely sure of the terminology -- is this the same as an abstract base class? Googling has not enlightened me. Given your example, it seems to be. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() The usual idiom I've seen for abstract methods is to simplify the check, and to put it *before* any work is done: class Stream(object): Interface of all stream objects def resetStats(self): if self.__class__ is Stream: raise NotImplementedError() _log.info('Reset statistics of %s' % self) Even simpler is to just put the check in __init__, so to prevent the caller from creating an instance of the class: class AbstractStream(object): def __init__(self): if self.__class__ is Stream: raise NotImplementedError('abstract class') def resetStats(self): # This does not need to be over-ridden. _log.info('Reset statistics of %s' % self) def whatever(self): # This *must* be over-ridden, and *cannot* be called raise NotImplementedError('abstract method') If you have a lot of methods, you can probably reduce the boilerplate with decorators: # Untested from functools import wraps def abstract(func): # Abstract methods don't have to be over-ridden, so long as they # are called from a subclass of the abstract class. @functools.wraps(func) def inner(self, *args, **kwargs): if self.__class__ is Stream: raise NotImplementedError() return func(self, *args, **kwargs) return inner def virtual(func): # Virtual methods must be over-ridden, and must not be called by # inheritance. @functools.wraps(func) def inner(self, *args, **kwargs): raise NotImplementedError() return inner class Stream(object): @abstract def __init__(self): pass def resetStats(self): _log.info('Reset statistics of %s' % self) @virtual def whatever(self): pass -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Why does my ftp script quit after couple of hours?
Hi This way the first time I did something with ftp stuff. I think that generally it works but it stops working(quits or disappears) after couple of hours of running. This was a personal test-trial script for my own needs which was to get my dynamic ip and broadcast to a client(I have a client script on another computer). I sure could use something like DynDns for the same purpose with easier management but I just wanted to give it a try to see if i could even make it work . Basically this script parses my ip from DynDns ip check page and uploads it to the given ftp site. It works fine initially, it does upload, it updates the Ip every hour but the problem is that after couple of hours the Python console window disappears, I assume it crashes. I know it does upload at least couple times(works for couple hours). it might be something to do with ftp connection. I will investigate that but I just wanted to see if I have any logic or some kind of contextual problem in the script. Here is the link to Pastie page http://pastie.org/584152 Thanks -- http://mail.python.org/mailman/listinfo/python-list
OT Signature quote [was Re: Unrecognized escape sequences in string literals]
On Fri, 14 Aug 2009 07:07:31 -0700, Aahz wrote: I saw `cout' being shifted Hello world times to the left and stopped right there. --Steve Gonedes Assuming that's something real, and not invented for humour, I presume that's describing something possible in C++. Am I correct? What the hell would it actually do??? -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Why does my ftp script quit after couple of hours?
kk schrieb: Hi This way the first time I did something with ftp stuff. I think that generally it works but it stops working(quits or disappears) after couple of hours of running. This was a personal test-trial script for my own needs which was to get my dynamic ip and broadcast to a client(I have a client script on another computer). I sure could use something like DynDns for the same purpose with easier management but I just wanted to give it a try to see if i could even make it work . Basically this script parses my ip from DynDns ip check page and uploads it to the given ftp site. It works fine initially, it does upload, it updates the Ip every hour but the problem is that after couple of hours the Python console window disappears, I assume it crashes. I know it does upload at least couple times(works for couple hours). it might be something to do with ftp connection. I will investigate that but I just wanted to see if I have any logic or some kind of contextual problem in the script. Here is the link to Pastie page http://pastie.org/584152 The code isn't very robust if anything happens retrieving the IP-website - if for some reason the connection is broken, it won't catch any ensuing IO-exception. Also your way of extracing the IP is rather awkward, a simple re (often not the right tool, but here certainl yes) would help: m = re.search(r(([0-9]+\.){3}[0-9]+), body) m.group(1) '85.177.92.101' Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: Why does my ftp script quit after couple of hours?
Hi Diez Thanks for your insight. The reason I chose the awkward method to parse the ip digits is that I was not familiar with the regex module and the Dyndns Ip page is pretty simple page. I guess it is time to learn more about the Re module. As far as robustness, I agree with your assestment. I guess my main confusion with my result is that the console window just disappears. I wonder if I can make the window stay even if it crashesor if there are connection issues? I will createa seperate log file to see if I can catch any issues in a log file. -- http://mail.python.org/mailman/listinfo/python-list
Re: OT Signature quote [was Re: Unrecognized escape sequences in string literals]
On 2009-08-14, Steven D'Aprano st...@remove-this-cybersource.com.au wrote: On Fri, 14 Aug 2009 07:07:31 -0700, Aahz wrote: I saw `cout' being shifted Hello world times to the left and stopped right there. --Steve Gonedes Assuming that's something real, and not invented for humour, I presume that's describing something possible in C++. Am I correct? Yes. In C++, the operator is overloaded. Judging by the context in which I've seen it used, it does something like write strings to a stream. What the hell would it actually do??? IIRC in C++, cout Hello world; is equivalent to this in C: printf(Hellow world); or this in Python: print hellow world -- Grant Edwards grante Yow! Bo Derek ruined at my life! visi.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Why does my ftp script quit after couple of hours?
On 14 Ago, 18:03, kk maymunbe...@gmail.com wrote: Hi This way the first time I did something with ftp stuff. I think that generally it works but it stops working(quits or disappears) after couple of hours of running. This was a personal test-trial script for my own needs which was to get my dynamic ip and broadcast to a client(I have a client script on another computer). I sure could use something like DynDns for the same purpose with easier management but I just wanted to give it a try to see if i could even make it work . Basically this script parses my ip from DynDns ip check page and uploads it to the given ftp site. It works fine initially, it does upload, it updates the Ip every hour but the problem is that after couple of hours the Python console window disappears, I assume it crashes. I know it does upload at least couple times(works for couple hours). it might be something to do with ftp connection. I will investigate that but I just wanted to see if I have any logic or some kind of contextual problem in the script. Here is the link to Pastie pagehttp://pastie.org/584152 Thanks Try catching the exception inside the main loop, to prevent your program to exit in case of failure: if __name__=='__main__': while True: try: writeExtFile(FILE_PATH,FILE_NAME) uploadFile (FTP_NAME,FTP_USER_NAME,FTP_PASSWD,FTP_FOLDER,FILE_NAME) time.sleep(TIME_DELAY) except: err, det, tb = sys.exc_info() print ERROR =, err, det # gives you a description of the occurred failure traceback.print_tb(tb) # this might be needed only for debug Ciao FB -- http://mail.python.org/mailman/listinfo/python-list
Natural Language Processing in Python
Hi, Can somebody please provide me link to a good online resource or e- book for doing natural language processing programming in Python. Thanks, Prateek -- http://mail.python.org/mailman/listinfo/python-list
Re: Why does my ftp script quit after couple of hours?
kk schrieb: Hi Diez Thanks for your insight. The reason I chose the awkward method to parse the ip digits is that I was not familiar with the regex module and the Dyndns Ip page is pretty simple page. I guess it is time to learn more about the Re module. As far as robustness, I agree with your assestment. I guess my main confusion with my result is that the console window just disappears. I wonder if I can make the window stay even if it crashesor if there are connection issues? I will createa seperate log file to see if I can catch any issues in a log file. I'm not a Windows-user, but even there it should be possible to *first* open the console, and then start the script in it. That will keep it open you can see the stacktrace. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: OT Signature quote [was Re: Unrecognized escape sequences in string literals]
Grant Edwards wrote: On 2009-08-14, Steven D'Aprano st...@remove-this-cybersource.com.au wrote: On Fri, 14 Aug 2009 07:07:31 -0700, Aahz wrote: I saw `cout' being shifted Hello world times to the left and stopped right there. --Steve Gonedes Assuming that's something real, and not invented for humour, I presume that's describing something possible in C++. Am I correct? Yes. In C++, the operator is overloaded. Judging by the context in which I've seen it used, it does something like write strings to a stream. What the hell would it actually do??? IIRC in C++, cout Hello world; It also returns cout, so you can chain them: cout Hello, name '\n'; is equivalent to this in C: printf(Hellow world); or this in Python: print hellow world -- http://mail.python.org/mailman/listinfo/python-list
Re: OT Signature quote [was Re: Unrecognized escape sequences in string literals]
On Aug 14, 12:17 pm, Grant Edwards inva...@invalid wrote: On 2009-08-14, Steven D'Aprano st...@remove-this-cybersource.com.au wrote: On Fri, 14 Aug 2009 07:07:31 -0700, Aahz wrote: I saw `cout' being shifted Hello world times to the left and stopped right there. --Steve Gonedes Assuming that's something real, and not invented for humour, I presume that's describing something possible in C++. Am I correct? Yes. In C++, the operator is overloaded. Judging by the context in which I've seen it used, it does something like write strings to a stream. There's a persistent rumor that it is *this* very abuse of overloading that caused Java to avoid operator overloading all together. But then then Java went and used + as the string concatenation operator. Go figure! |ouglas P.S. Overloading left shift to mean output does indeed seem a bit sketchy, but in 15 years of C++ programming, I've never seen it cause any confusion or bugs. -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
MRAB wrote: Jean-Michel Pichavant wrote: Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() It works but it's tedious, I have to add these 2 lines to every virtual method, changing the content of the 2 lines. Maybe there is a nice/builtin way to do so (python 2.4) Why are you checking which class it's in? The method in the base class will be called only if it hasn't been overridden in the subclass. Sorry guys (means guys *and* gals :op ), I realized I've not been able to describe precisely what I want to do. I'd like the base class to be virtual (aka abstract). However it may be abstract but it does not mean it cannot do some usefull stuff. Here is the schema of my abstract methods : class Interface(object): def method(self): # - # some common stuff executed here # - print 'hello world' # - # here shall stand child specific stuff (empty in the interface method) # - if self.__class__.method == Interface.method: raise NotImplementedError('You should have read the f** manual ! You must override this method.') class GoodChild(Interface): def method(self): Interface.method(self) # I want to process the cool stuff done my the base Interface # # Specific GoodChild stuff here # print 'I am a good' return 'perfect' class BadChild(Interface): pass #I'm too lazy good = GoodChild() bad = BadChild() good.method() ...hello world ...I am a good bad.method() ...NotImplementedError: You should have read the f** manual ! You must override this method. The reason I'd like to do so: I'll be providing the Interface, but child classes will be overridden by others. Having a reliable error RTFM feedback is a time saver, for me and the users. I hope I clarified my issue. JM -- http://mail.python.org/mailman/listinfo/python-list
Re: Python Permutations Problem
Asanka Wasala wrote: Hi I am developing a spell checker for my language, and I came across solving an interesing problem. It would be great if you can suggest me an optimized solution for the problem described below: I have certain group of letters like these: Group #1: c,r,b Group #2: a,z,k Group #3: h,t . . Letters within the same group can be substituted/replaced with the rest of the letters in that group. (ie. Group #1 means letter 'c' can be replaced with either 'r' or 'b', and letter r can be replaced with either c or b, and letter b can be replaced with either r or c) A group can have upto 3 letters, and letters do not overlap between groups. There can be upto 25 such groups. Given a word containing above letters, (e.g. 'cat'.) I want to generate all possible words by subsituting letters in the groups. eg. expected output: cat rat bat czt rzt bzt ckt rkt bkt cah rah bah czh rzh bzh ckh rkh bkh My code is given below. But for complex words like 'cczzk' it thows the 'maximum recursion depth exceeded' error. Therefore, can you suggest me an optimized solution to achive the above task? Thanks in advance. -- [snip] This uses a generator in order: def get_permutations(word, group_dict): if word: for first in group_dict[word[0]]: for rest in get_permutations(word[1 : ], group_dict): yield first + rest else: yield def count_permutations(word, group_dict): if word: total = 1 for letter in word: total *= len(group_dict[letter]) return total else: return 0 group_def = ucrb azk ht group_dict = {} for group in group_def.split(): for letter in group: group_dict[letter] = group word = ucat print There are %d permutations. % count_permutations(word, group_dict) print for perm in get_permutations(word, group_dict): print perm -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
Jean-Michel Pichavant schrieb: MRAB wrote: Jean-Michel Pichavant wrote: Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() It works but it's tedious, I have to add these 2 lines to every virtual method, changing the content of the 2 lines. Maybe there is a nice/builtin way to do so (python 2.4) Why are you checking which class it's in? The method in the base class will be called only if it hasn't been overridden in the subclass. Sorry guys (means guys *and* gals :op ), I realized I've not been able to describe precisely what I want to do. I'd like the base class to be virtual (aka abstract). However it may be abstract but it does not mean it cannot do some usefull stuff. Here is the schema of my abstract methods : class Interface(object): def method(self): # - # some common stuff executed here # - print 'hello world' # - # here shall stand child specific stuff (empty in the interface method) # - if self.__class__.method == Interface.method: raise NotImplementedError('You should have read the f** manual ! You must override this method.') class GoodChild(Interface): def method(self): Interface.method(self) # I want to process the cool stuff done my the base Interface # # Specific GoodChild stuff here # print 'I am a good' return 'perfect' class BadChild(Interface): pass #I'm too lazy good = GoodChild() bad = BadChild() good.method() ...hello world ...I am a good bad.method() ...NotImplementedError: You should have read the f** manual ! You must override this method. The reason I'd like to do so: I'll be providing the Interface, but child classes will be overridden by others. Having a reliable error RTFM feedback is a time saver, for me and the users. I hope I clarified my issue. First of all, I doubt the above code really yields that output. You are missing a super-call there in GoodChild And the whole problem goes magically away if you start using OO a bit: class Base(object): def method(self): self._do_some_work_for_method() print some more work def _do_some_work_for_method(self): raise NotImplemented So your subclasses must implement something else instead of method - and voila, without any hassle things work as expected. Diez -- http://mail.python.org/mailman/listinfo/python-list
Python Permutations Problem
Hi I am developing a spell checker for my language, and I came across solving an interesing problem. It would be great if you can suggest me an optimized solution for the problem described below: I have certain group of letters like these: Group #1: c,r,b Group #2: a,z,k Group #3: h,t . . Letters within the same group can be substituted/replaced with the rest of the letters in that group. (ie. Group #1 means letter 'c' can be replaced with either 'r' or 'b', and letter r can be replaced with either c or b, and letter b can be replaced with either r or c) A group can have upto 3 letters, and letters do not overlap between groups. There can be upto 25 such groups. Given a word containing above letters, (e.g. 'cat'.) I want to generate all possible words by subsituting letters in the groups. eg. expected output: cat rat bat czt rzt bzt ckt rkt bkt cah rah bah czh rzh bzh ckh rkh bkh My code is given below. But for complex words like 'cczzk' it thows the 'maximum recursion depth exceeded' error. Therefore, can you suggest me an optimized solution to achive the above task? Thanks in advance. -- CODE--- #-*- coding: UTF-8 -*- import re def getPermutations(word): def getSimilarLetters(letter): pattern=u|c,r,b|a,z,k|h,t| list=[] ptrn=re.compile((?Pgrp\|(.?,)*?+letter+(,.)*?\|)) k=ptrn.search(pattern) if k: letterlist=k.group(grp)[1:-1] list=letterlist.split(,) list.remove(letter) return list else: return letter list=[] def perm(word): posi=0 wrd=word for w in word: posi=posi+1 lst=getSimilarLetters(w) if len(lst)0: for l in lst: newwrd=wrd[:posi-1]+l+wrd[posi:] if not (newwrd in list): list.append(newwrd) perm(newwrd) try: perm(word) except RuntimeError: list=[] list.append(error) return list list=getPermutations(ucat) for i in list: print i.encode('utf-8') END of CODE- -- http://mail.python.org/mailman/listinfo/python-list
Re: [Python-Dev] expy: an expressway to extend Python
--- On Sat, 8/8/09, Stefan Behnel stefan...@behnel.de wrote: From: Stefan Behnel stefan...@behnel.de Subject: Re: [Python-Dev] expy: an expressway to extend Python To: python-...@python.org Date: Saturday, August 8, 2009, 4:55 PM More details at http://expy.sourceforge.net/ I'm clearly biased, but my main concern here is that expy requires C code to be written inside of strings. There isn't any good editor support for that, so I doubt that expy is good for anything but very thin wrappers (as in the examples you presented). Thanks a lot for the input -- I sort of recaptured the advantages of expy and listed four points in the new introduction at http://expy.sf.net/ homepage. Lacking of editor highlight support is quite a problem, but it is possible to create a support. For example, you can use this to indicate the start of embedded code highlight: return and then the end mark is of course the enclosing That said, you might want to look at the argument unpacking code generated by Cython. It's highly optimised through specialisation and has been benchmarked quite a bit faster than the generic Python C-API functions for tuple/keyword extracting. Since argument conversion seems to be more or less all that expy really does, maybe you want to reuse that code. Stefan Oh sure, that's nice if that part can be adopted by expy-cxpy. Any help out on this would be very welcomed. Yingjie -- http://mail.python.org/mailman/listinfo/python-list
Re: A Exhibition Of Tech Geekers Incompetence: Emacs whitespace-mode
On Aug 14, 4:36 am, Xah Lee xah...@gmail.com wrote: • A Exhibition Of Tech Geekers Incompetence: Emacs whitespace-mode http://xahlee.org/UnixResource_dir/writ/emacs_whitespace-mode_problem... Instead of writing a completely useless article you could had asked for help in an emacs newsgroup, or wait until someone else does that for you too (creating and publishing such configuration you desire). Your article, except for the brief description of that mode, is completely useless. Why would you fill your website with junk? Perhaps because you like to write but you're too lazy to write something of value. -- http://mail.python.org/mailman/listinfo/python-list
Re: retrieve item from nested list given index tuple
On Fri, 14 Aug 2009 15:54:54 +, Alan G Isaac wrote: `lst` is a nested list `tpl` is the indexes for an item in the list What is the nice way to retrieve the item? (Speedy access is nice.) Assuming you want to do this frequently, write a helper function, then use it: # Untested def extract(nested, indexes): for index in indexes: nested = nested[index] return nested I don't want to use NumPy, but I'd like somehow to avoid an explicit loop. I did consider using eval. E.g., eval('lst' + '[%d]'*len(tpl)%tpl). It works but seems rather ugly. And slow. I kind of like reduce(list.__getitem__, tpl, lst) but the reliance on reduce remains controversial enough to see i removed from the Python 3 built-ins ... It's just moved into functools. lst = ['a', 'b', ['aa', ['aaa', 'bbb', 'ccc'], 'cc']] from functools import reduce lst = ['a', 'b', ['aa', ['aaa', 'bbb', 'ccc'], 'cc']] reduce(list.__getitem__, (2, 1, 0), lst) 'aaa' However, it doesn't work too well as soon as you mix sequence types: reduce(list.__getitem__, (2, 1, 0, 0), lst) Traceback (most recent call last): File stdin, line 1, in module TypeError: descriptor '__getitem__' requires a 'list' object but received a 'str' Try this instead: from operator import getitem reduce(getitem, (2, 1, 0), lst) 'aaa' reduce(getitem, (2, 1, 0, 0), lst) 'a' operator.getitem is less ugly too. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: csv.DictWriter.write_header()
Alan G Isaac wrote: On 8/13/2009 7:58 AM John Machin apparently wrote: Duck typing: ask a silly question, get a silly answer. Maybe if you learned to be a more generous reader, fewer questions would look silly to you. If you take a look at the crap that John very patiently wades through on the python-excel group, you might consider that a little light hearted sarcasm isn't much to put up with ;-) FWIW, if you're using csv because you think .xls is too hard to generate, try xlwt :-) cheers, Chris -- Simplistix - Content Management, Batch Processing Python Consulting - http://www.simplistix.co.uk -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
Steven D'Aprano wrote: On Fri, 14 Aug 2009 09:23:17 -0400, Colin J. Williams wrote: It's typically a user module that needs to be reloaded. What's a user module? A module written by a user, as distinguished from a libary It seems that del sys.modules['moduleName'] has no effect. sys.modules is just a dictionary, I find it hard to believe that deleting from it has no effect. It works for me: import sys import math 'math' in sys.modules True del sys.modules['math'] 'math' in sys.modules False What behaviour do you get? Of course deleting the math module from the cache doesn't do anything to the math module in your namespace: math module 'math' from '/usr/lib/python2.5/lib-dynload/mathmodule.so' del math math Traceback (most recent call last): File stdin, line 1, in module NameError: name 'math' is not defined Of course deleting the module (or reloading it) doesn't have any effect on any objects you already have: import math func = math.sin del sys.modules['math'] del math math.sin(1.2) Traceback (most recent call last): File stdin, line 1, in module NameError: name 'math' is not defined func(1.2) 0.93203908596722629 Is there some other way of ensuring that any import goes to moduleName.py, instead of moduleName.pyc? Delete moduleName.pyc. Make sure the .pyc file doesn't exist in the first place. Make sure the last modification date of the .py file is newer than the modification date of the .pyc file. That's easier said than done, when one is working with an IDE. The cached .pyc file might be different from that in the file. Colin W. -- http://mail.python.org/mailman/listinfo/python-list
Re: httplib incredibly slow :-(
Aahz wrote: Sorry, I mostly have been working on our Mac port, so I'm not sure what's needed to make this work on Windows. Did you try downloading the PyCurl binary? Maybe it statically links libcurl on Windows. Shame it's not available as a bdist_egg, that's what I'm really after... What do you need to know for a decent example? Simple download of a file from a url with some auth headers added would do me. Other than that, nice to haves would be how to build a http post with fields in a multi-part body, some of which might be files. cheers, Chris -- Simplistix - Content Management, Batch Processing Python Consulting - http://www.simplistix.co.uk -- http://mail.python.org/mailman/listinfo/python-list
Re: A Exhibition Of Tech Geekers Incompetence: Emacs whitespace-mode
On Aug 14, 8:25 pm, fortunatus daniel.elia...@excite.com wrote: On Aug 14, 1:01 pm, vippstar vipps...@gmail.com wrote: Why would you fill your website with junk? The OP made it clear: Just wanted to express some frustration with whitespace-mode. You took my question out of context and answered it. I read the article, it's not like I missed any of it. Plus, it's not a real answer. Because I wanted to. Why did you? Why would you? -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
Diez B. Roggisch wrote: Jean-Michel Pichavant schrieb: MRAB wrote: Jean-Michel Pichavant wrote: Hi fellows, Does anyone know a way to write virtual methods (in one virtual class) that will raise an exception only if called without being overridden ? Currently in the virtual method I'm checking that the class of the instance calling the method has defined that method as well. Example: class Stream(object): Interface of all stream objects def resetStats(self): Reset the stream statistics. All values a zeroed except the date. _log.info('Reset statistics of %s' % self) if self.__class__.resetStats == Stream.resetStats: raise NotImplementedError() It works but it's tedious, I have to add these 2 lines to every virtual method, changing the content of the 2 lines. Maybe there is a nice/builtin way to do so (python 2.4) Why are you checking which class it's in? The method in the base class will be called only if it hasn't been overridden in the subclass. Sorry guys (means guys *and* gals :op ), I realized I've not been able to describe precisely what I want to do. I'd like the base class to be virtual (aka abstract). However it may be abstract but it does not mean it cannot do some usefull stuff. Here is the schema of my abstract methods : class Interface(object): def method(self): # - # some common stuff executed here # - print 'hello world' # - # here shall stand child specific stuff (empty in the interface method) # - if self.__class__.method == Interface.method: raise NotImplementedError('You should have read the f** manual ! You must override this method.') class GoodChild(Interface): def method(self): Interface.method(self) # I want to process the cool stuff done my the base Interface # # Specific GoodChild stuff here # print 'I am a good' return 'perfect' class BadChild(Interface): pass #I'm too lazy good = GoodChild() bad = BadChild() good.method() ...hello world ...I am a good bad.method() ...NotImplementedError: You should have read the f** manual ! You must override this method. The reason I'd like to do so: I'll be providing the Interface, but child classes will be overridden by others. Having a reliable error RTFM feedback is a time saver, for me and the users. I hope I clarified my issue. First of all, I doubt the above code really yields that output. You are missing a super-call there in GoodChild And the whole problem goes magically away if you start using OO a bit: class Base(object): def method(self): self._do_some_work_for_method() print some more work def _do_some_work_for_method(self): raise NotImplemented So your subclasses must implement something else instead of method - and voila, without any hassle things work as expected. Diez It does yield that output, there's an unbound call to Interface.method. Your solution will work, for sure. The problem is that it will dumb down the Base class interface, multiplying the number of methods by 2. This would not be an issue in many cases, in mine there's already too much meaningful methods in my class for me to add artificial ones. Thanks for the tip anyway. JM -- http://mail.python.org/mailman/listinfo/python-list
Re: A Exhibition Of Tech Geekers Incompetence: Emacs whitespace-mode
vippstar wrote: On Aug 14, 8:25 pm, fortunatus daniel.elia...@excite.com wrote: On Aug 14, 1:01 pm, vippstar vipps...@gmail.com wrote: Why would you fill your website with junk? The OP made it clear: Just wanted to express some frustration with whitespace-mode. You took my question out of context and answered it. I read the article, it's not like I missed any of it. Plus, it's not a real answer. Because I wanted to. Why did you? Why would you? FYI, Xah Lee is a well known BTFL (Benevolent Troller For Life), you shouldn't argue about one of his post. -- http://mail.python.org/mailman/listinfo/python-list
Re: Unrecognized escape sequences in string literals
I think I've spent enough time on this discussion, so I won't be directly responding to any of your recent points -- it's clear that I'm not persuading you that there's any justification for any behaviour for escape sequences other than the way C++ deals with them. That's your prerogative, of course, but I've done enough tilting at windmills for this week, so I'll just make one final comment and then withdraw from an unproductive argument. (I will make an effort to read any final comments you wish to make, so feel free to reply. Just don't expect an answer to any questions.) Douglas, you and I clearly have a difference of opinion on this. Neither of us have provided even the tiniest amount of objective, replicable, reliable data on the error-proneness of the C++ approach versus that of Python. The supposed superiority of the C++ approach is entirely subjective and based on personal opinion instead of quantitative facts. I prefer languages that permit anything that isn't explicitly forbidden, so I'm happy that Python treats non-special escape sequences as valid, and your attempts to convince me that this goes against the Zen have entirely failed to convince me. As I've done before, I will admit that one consequence of this design is that it makes it hard to introduce new escape sequences to Python. Given that it's vanishingly rare to want to do so, and that wanting to add backslashes to strings is common, I think that's a reasonable tradeoff. Other languages may make different tradeoffs, and that's fine by me. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: retrieve item from nested list given index tuple
Steven D'Aprano wrote: On Fri, 14 Aug 2009 15:54:54 +, Alan G Isaac wrote: `lst` is a nested list `tpl` is the indexes for an item in the list What is the nice way to retrieve the item? (Speedy access is nice.) Assuming you want to do this frequently, write a helper function, then use it: # Untested def extract(nested, indexes): for index in indexes: nested = nested[index] return nested This looks OK for the first level of nesting. We are not told much about tpl but suppose that: lst= [a, [b, [c, d]], [e, f]] and that we wish to retrieve d and f from lst. tpl would need to be something like [[1, 1, 1], [2, 1]]. If that is the requirement, then Untested is only a step along the road, extract could be made recursive. Colin W. I don't want to use NumPy, but I'd like somehow to avoid an explicit loop. I did consider using eval. E.g., eval('lst' + '[%d]'*len(tpl)%tpl). It works but seems rather ugly. And slow. I kind of like reduce(list.__getitem__, tpl, lst) but the reliance on reduce remains controversial enough to see i removed from the Python 3 built-ins ... It's just moved into functools. lst = ['a', 'b', ['aa', ['aaa', 'bbb', 'ccc'], 'cc']] from functools import reduce lst = ['a', 'b', ['aa', ['aaa', 'bbb', 'ccc'], 'cc']] reduce(list.__getitem__, (2, 1, 0), lst) 'aaa' However, it doesn't work too well as soon as you mix sequence types: reduce(list.__getitem__, (2, 1, 0, 0), lst) Traceback (most recent call last): File stdin, line 1, in module TypeError: descriptor '__getitem__' requires a 'list' object but received a 'str' Try this instead: from operator import getitem reduce(getitem, (2, 1, 0), lst) 'aaa' reduce(getitem, (2, 1, 0, 0), lst) 'a' operator.getitem is less ugly too. Colin W. -- http://mail.python.org/mailman/listinfo/python-list
Re: retrieve item from nested list given index tuple
On 8/14/2009 1:09 PM Steven D'Aprano apparently wrote: Try this instead: from operator import getitem reduce(getitem, (2, 1, 0), lst) 'aaa' reduce(getitem, (2, 1, 0, 0), lst) 'a' operator.getitem is less ugly too. Yes, that's better. Thanks, Alan -- http://mail.python.org/mailman/listinfo/python-list
Re: trouble with reload
On Fri, 14 Aug 2009 13:14:16 -0400, Colin J. Williams wrote: Steven D'Aprano wrote: On Fri, 14 Aug 2009 09:23:17 -0400, Colin J. Williams wrote: It's typically a user module that needs to be reloaded. What's a user module? A module written by a user, as distinguished from a libary You mean an end-user of the application? Or you mean the application programmer? I'm not sure there is any difference between user modules and library modules apart from what they do. Perhaps it would help if you could explain the circumstances of when you would reload a module. During application development, for an incremental edit/reload/test cycle? Or while the completed application is being executed? Is there some other way of ensuring that any import goes to moduleName.py, instead of moduleName.pyc? Delete moduleName.pyc. Make sure the .pyc file doesn't exist in the first place. Make sure the last modification date of the .py file is newer than the modification date of the .pyc file. That's easier said than done, when one is working with an IDE. The cached .pyc file might be different from that in the file. If the IDE is getting in your way, then don't use it. Or if you tell us what IDE you're using, and precisely what it is doing, somebody can tell you how to defeat the IDE's cache. (That won't be me -- I don't use IDEs.) Or perhaps you're entire approach is wrong, and you shouldn't be using reload() at all. Don't know. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
Jean-Michel Pichavant wrote: Your solution will work, for sure. The problem is that it will dumb down the Base class interface, multiplying the number of methods by 2. This would not be an issue in many cases, in mine there's already too much meaningful methods in my class for me to add artificial ones. Thanks for the tip anyway. I suggest you reconsider. You asked a question and have been given a standard way of achieving the desired outcome. It's common in OO to use a Template pattern like this. If you're not interested in finding out how loads of people have already solved the problem then why ask? The methods that require overriding can be prefixed with an underscore so that people get a hint that they are an implementation detail rather than part of the public interface. I don't see your problem, other than a vague aesthetic unease. Regards, n -- http://mail.python.org/mailman/listinfo/python-list
Komodo(!)
Probably this isn't news to anyone but me, but just in case: Last I heard Komodo was a very highly regarded IDE that unfortunately cost money. Yesterday I discovered that they now have an editor available for free. Doesn't contain all the features of the IDE, but just having glanced at it it seems to contain more than I'll ever use. What I really like about it is that one can write Komodo scripts in Python (using an extensive API allowing various manipulations of the current document). -- http://mail.python.org/mailman/listinfo/python-list
Re: callable virtual method
On Fri, 14 Aug 2009 18:49:26 +0200, Jean-Michel Pichavant wrote: Sorry guys (means guys *and* gals :op ), I realized I've not been able to describe precisely what I want to do. I'd like the base class to be virtual (aka abstract). However it may be abstract but it does not mean it cannot do some usefull stuff. Here is the schema of my abstract methods : class Interface(object): def method(self): # - # some common stuff executed here # - print 'hello world' # - # here shall stand child specific stuff (empty in the interface method) # - if self.__class__.method == Interface.method: raise NotImplementedError('You should have read the f** manual ! You must override this method.') Okay, so I want to sub-class your Interface class. As you said, the methods in the abstract class are still useful, so in my class, I don't need any extra functionality for some methods -- I'm happy with just the common stuff. So I use normal OO techniques and over-ride just the methods I need to over-ride: class GoodChild(Interface): # no need to over-ride method, because it does everything I want # but over-ride other methods that don't def whatever(self): print Whatever... return Interface.whatever() But now my class fails, with an insulting error message *wink*, and you force me to write a whole lot of crappy stupid boilerplate code: class VerboseGoodChild(Interface): # forced to over-ride methods for no good reason def method(self): return Interface.method(self) def another_method(self): return Interface.another_method(self) def yet_another_method(self): return Interface.yet_another_method(self) def still_more_methods(self): return Interface.still_more_methods(self) # Whew! That was a waste of effort. Now at last over-ride the # methods I need to: def whatever(self): print Whatever... return Interface.whatever() After the fourth such class, I say Bugger this for a game of soldiers and dump your Interface class for something else. The reason I'd like to do so: I'll be providing the Interface, but child classes will be overridden by others. Having a reliable error RTFM feedback is a time saver, for me and the users. I hope I clarified my issue. The usual way of implementing abstract base classes is to simply prohibit instantiation of the class, but allow all other inheritance. Putting useful functionality in methods, but then prohibiting subclasses from using them without jumping through hoops first, seems rather perverse to me. -- Steven -- http://mail.python.org/mailman/listinfo/python-list