[ANN] IronPython in Action available
After two and a half years of work IronPython in Action is finally available! http://www.ironpythoninaction.com/ IronPython in Action is the first book (in English anyway...) on IronPython. It is written by myself and my colleague Christian Muirhead, with a foreword by Jim Hugunin (the original creator of IronPython). The technical editor is Dino Viehland, core IronPython developer. Two of the chapters are available for free download: * Chapter 1: A New Lanugage for .NET * Chapter 7: Agile Testing - Where Dynamic Typing Shines Links to the free chapters, and IronPython in Action on the Manning site, Amazon.com and the Safari bookshelf are on the book website. IronPython is the first of a new wave of dynamic languages for the .NET framework, built on the Dynamic Language Runtime. IronPython in Action is aimed at C# / VB.NET programmers interested in dynamic languages and the possibilities of the DLR, plus Python programmers wanting to take advantage of the .NET framework. Michael Foord -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations.html
Version 2.4 of mod_wsgi is now available.
Version 2.4 of mod_wsgi is now available. The software and documentation are both available from: http://www.modwsgi.org The mod_wsgi package consists of an Apache web server module designed and implemented specifically for hosting Python based web applications that support the WSGI interface specification. Examples of major Python web frameworks and applications which are known to work in conjunction with mod_wsgi include CherryPy, Django, MoinMoin, Pylons, Trac, TurboGears, Werkzeug and Zope. Version 2.4 of mod_wsgi is principally a bug fix update. It fixes memory leaks, configuration corruption, truncation of request/response data and other minor issues. A small number of other minor improvements have also been made. Because of the issue related to truncation of response data, it is highly recommended that if you are using any prior version of mod_wsgi 2.X with a web application that make use of the wsgi.file_wrapper extension, such as Trac, that you upgrade. A description of changes in version 2.4 can be found in the change notes at: http://code.google.com/p/modwsgi/wiki/ChangesInVersion0204 If you have any questions about mod_wsgi or wish to provide feedback, use the Google group for mod_wsgi found at: http://groups.google.com/group/modwsgi Enjoy Graham Dumpleton -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations.html
Re: How to create a virtual serial port?
Stuart Davenport wrote: ... I'm on a OS X, python 2.5. Basically I will have a remote application pushing data (GPS) over the network to a python application I have running on my Mac, I want this python application to again push the data on to a virtual serial port. Then the GPS program I have running on my MAC, RouteBuddy, can read the data from that serial port as standard. The only part I am concerned about here though, is if I can create a serial port virtually and push data out of it? OK, this is a Max OS/X question. Does RouteBuddy have any other way to get data except from the serial port? Does the mac have a serial port?or are you talking serial port over USB (which would be an entirely different kettle of fish). With that out of the wa, I'd try to ask some Mac guys if the ponying up is possible, and if so how to do it in _any_ language (likely they'll have an Objective C way). Then pop back over here (or even better a python-mac list, where they'll be familiar with how to do lots of stuff) and you can get help getting python to either do the same thing or talk to a bit of code that does the byte-transfers. --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
communication between objects - help
thanks a lot.. I think passing the main object only by reference.. so, this does not causes any overhead.. am i correct..? On Fri, Apr 10, 2009 at 4:02 PM, Dave Angel da...@ieee.org wrote: Murali kumar wrote: hi all.. I'm posted in a word doc becoz to add a image to explain my problem.. also I think gmail automatically scans for attachments.. anyway.. here's my problem...( see the image) http://www.2shared.com/file/5299759/45e4c614/load.html Using : Python 2.6 , wxPython 2.8.9 snip... * I don’t know how to return config file or data to mainApp object when pressing load button. * * Is it easy to return filename only and load the file’s data into mainApp object in menu handler itself? * Please suggest me right direction.. and tell me how to do it? Usually where I can get these informations.. (suggest links and books..) Thanks for any advice Most of the widget classes in your code should be derived classes, so they can hold extra instance data event handlers and such. So that means you can have extra parameters on the constructor, besides the ones the base class requires. Use one or more of those extra parameters to store your own information about the hierarchy. Simplest example is to add the app instance to each constructor. Then each widget object would know how to call back into the app to do some work, or to load data into a common place. DaveA -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Aaron Brady wrote: Would you be willing to examine a syntax tree to determine if there are any class accesses? Sure? How do I do that? I've never done that type of thing before so I can't really say if it would work or not. /Joel -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
On Apr 10, 7:54 pm, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Thu, 09 Apr 2009 13:13:50 -0400, Terry Reedy wrote: Joel Hedlund wrote: Hi all! I'm writing a program that presents a lot of numbers to the user, and I want to let the user apply moderately simple arithmentics to these numbers. One possibility that comes to mind is to use the eval function, but since that sends up all kinds of warning flags in my head, Where does the program execute? If on the user's own machine, no problem. Until the user naively executes a code sample he downloaded from the Internet, and discovers to his horror that his *calculator* is able to upload his banking details to an IRC server hosted in Bulgaria. Mine does that anyway! ..Often without telling anyone. How quickly we forget... for twenty or thirty years all malware infections was via programs executed on the user's own machine. Eval is no more dangerous than Python itself. But users know Python is a Turing-complete programming language that can do anything their computer can do. It would come to an unpleasant surprise to discover that (say) your icon editor was also a Turing- complete programming language capable of doing anything your C-compiler could do. The same holds for applications written in Python. Don't they know that his calculator is written in Python? Do many applications include a programming language? Why do I get the feeling that the authors of 'pyparsing' are out of breath? I wonder if you could do something like copy and paste a fork of the 'ast' module, and just remove non-arithmetic classes; then do a normal walk and transform of the foreign code... -- http://mail.python.org/mailman/listinfo/python-list
Re: weird try/finally behaviour
On Apr 10, 7:19 pm, Terry Reedy tjre...@udel.edu wrote: Sylvain Thénault wrote: Hi there, I've encountered the following behaviour which I found surprising: - If you say 'print test()', you shoud see None printed after 'end' (at least with 3.0) from the function falling off the end. The 'if True:' line make no difference. As you can see, the 'break' in the finally block makes the 'return 1' beeing ignored. Is this a known caveat or should it be considered as a bug? Neither, but it s a bit subtle. If you replace 'break' with 'return 2' Ha! Brilliant. -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Matt Nordhoff wrote: '\x5f' '_' getattr(42, '\x5f\x5fclass\x5f\x5f') # __class__ type 'int' Is that enough to show you the error of your ways? No, because print '_' in '\x5f\x5fclass\x5f\x5f' True :-D Cuz seriously, it's a bad idea. Yes probably, but that's not why. :-) (BTW: What if a user tries to do some ridiculously large calculation to DoS the app? Is that a problem?) Nope. If the user wants to hang her own app that's fine with me. /Joel -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Matt Nordhoff wrote: '\x5f' '_' getattr(42, '\x5f\x5fclass\x5f\x5f') # __class__ type 'int' Is that enough to show you the error of your ways? No, because print '_' in '\x5f\x5fclass\x5f\x5f' True :-D Cuz seriously, it's a bad idea. Yes probably, but that's not why. :-) (BTW: What if a user tries to do some ridiculously large calculation to DoS the app? Is that a problem?) Nope. If the user wants to hang her own app that's fine with me. /Joel -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Joel Hedlund wrote: Matt Nordhoff wrote: '\x5f' '_' getattr(42, '\x5f\x5fclass\x5f\x5f') # __class__ type 'int' Is that enough to show you the error of your ways? No, because print '_' in '\x5f\x5fclass\x5f\x5f' True But what you're planning to do seems more like def is_it_safe(source): ... return _ not in source ... source = getattr(42, '\\x5f\\x5fclass\\x5f\\x5f') if is_it_safe(source): ... print eval(source) ... type 'int' Peter -- http://mail.python.org/mailman/listinfo/python-list
Reading 3 objects at a time from list
Hi all, let's see if there is a more pythonic way of doing what I'm trying to do. I have a lot of strings with numbers like this one: string = -1 1.3 100.136 1 2.6 100.726 1 3.9 101.464 -1 5.2 102.105 I need to pass the numbers to a function, but three at a time, until the string ends. The strings are of variable length, but always a multiple of three. That's what I did: num = string.split() for triple in zip(num[::3], num[1::3], num[2::3]): func(*triple) it works and I like slices, but I was wondering if there was another way of doing the same thing, maybe reading the numbers in groups of arbitrary length n... any ideas? -- http://mail.python.org/mailman/listinfo/python-list
Re: Reading 3 objects at a time from list
On Sat, Apr 11, 2009 at 1:44 AM, Matteo tadweles...@gmail.com wrote: Hi all, let's see if there is a more pythonic way of doing what I'm trying to do. I have a lot of strings with numbers like this one: string = -1 1.3 100.136 1 2.6 100.726 1 3.9 101.464 -1 5.2 102.105 I need to pass the numbers to a function, but three at a time, until the string ends. The strings are of variable length, but always a multiple of three. That's what I did: num = string.split() for triple in zip(num[::3], num[1::3], num[2::3]): func(*triple) it works and I like slices, but I was wondering if there was another way of doing the same thing, maybe reading the numbers in groups of arbitrary length n... See the grouper() recipe in the `itertools` module -- http://docs.python.org/library/itertools.html Cheers, Chris -- I have a blog: http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
In message e454b840-2361-413f- a8f9-145fa2845...@q2g2000vbr.googlegroups.com, Stuart Davenport wrote: Then the GPS program I have running on my MAC, RouteBuddy, can read the data from that serial port as standard. Macs don't have serial ports. -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Peter Otten wrote: But what you're planning to do seems more like def is_it_safe(source): ... return _ not in source ... source = getattr(42, '\\x5f\\x5fclass\\x5f\\x5f') if is_it_safe(source): ... print eval(source) ... type 'int' Bah. You are completely right of course. Just as a thought experiment, would this do the trick? def is_it_safe(source): return _ not in source and r'\' not in source I'm not asking because I'm hellbent on having eval in my app, but because it's always useful to see what hazards you don't know about. /Joel -- http://mail.python.org/mailman/listinfo/python-list
Re: An object that creates (nested) attributes automatically on assignment
On Apr 11, 1:22 pm, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: Is pants slang for fragile, hard to understand and difficult to debug? pommy slang for sucks intensely, like the Deathstar's tractor beam ... I think we agree with him. -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Joel Hedlund wrote: Peter Otten wrote: But what you're planning to do seems more like def is_it_safe(source): ... return _ not in source ... source = getattr(42, '\\x5f\\x5fclass\\x5f\\x5f') if is_it_safe(source): ... print eval(source) ... type 'int' Bah. You are completely right of course. Just as a thought experiment, would this do the trick? def is_it_safe(source): return _ not in source and r'\' not in source .join(map(chr, [95, 95, 110, 111, 95, 95])) '__no__' By the way, a raw string may not end with a backslash: r'\' File stdin, line 1 r'\' ^ SyntaxError: EOL while scanning single-quoted string Peter -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.6/3.0 packages for Ubuntu?
s...@pobox.com ha scritto: Does Ubuntu really not have Python 2.6 or 3.0 packages or do I just have my package list misconfigured? I'm setting up a fresh machine and am not too Ubuntu-aware. Is there a list of package repositories around somewhere? Thx, In current 8.10, the default python is 2.5, but there is a set of packages python3-... which gives you the 3.0. The upcoming 09.04 will have 2.6 as standard, I think ... Ciao - FB -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Peter Otten wrote: def is_it_safe(source): return _ not in source and r'\' not in source .join(map(chr, [95, 95, 110, 111, 95, 95])) '__no__' But you don't have access to neither map or chr? /Joel -- http://mail.python.org/mailman/listinfo/python-list
Re: Adding a Badge to an Icon in Mac OS X
On 10Apr2009 19:56, Miles semantic...@gmail.com wrote: | On Fri, Apr 10, 2009 at 5:22 PM, bingo wrote: | PyObjc seems to offer the option to add badges to icons in the doc. I | need to add badges to any icon... kinda like SCPlugin and dropbox do. | I think that SCPlugin is doing it through carbon Icon Services. But I | am still trying to figure out how it is done! | | I believe those programs are able to do so because they are Finder | plugins--it's not something that a separate program could do. This | isn't really a Python question, though; you'd probably have better | luck finding answers on a OS X-related list. Like this one? http://mail.python.org/mailman/listinfo/pythonmac-sig Cheers, -- Cameron Simpson c...@zip.com.au DoD#743 http://www.cskk.ezoshosting.com/cs/ -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Joel Hedlund wrote: Peter Otten wrote: def is_it_safe(source): return _ not in source and r'\' not in source .join(map(chr, [95, 95, 110, 111, 95, 95])) '__no__' But you don't have access to neither map or chr? /Joel '5f5f7374696c6c5f6e6f745f736166655f5f'.decode(hex) '__still_not_safe__' -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
Peter Otten wrote: Joel Hedlund wrote: Peter Otten wrote: def is_it_safe(source): return _ not in source and r'\' not in source .join(map(chr, [95, 95, 110, 111, 95, 95])) '__no__' But you don't have access to neither map or chr? /Joel '5f5f7374696c6c5f6e6f745f736166655f5f'.decode(hex) '__still_not_safe__' Now *that's* a thing of beauty. A horrible, horrible kind of beauty. Thanks for blowing holes in my inflated sense of security! /Joel -- http://mail.python.org/mailman/listinfo/python-list
Re: Reading 3 objects at a time from list
Chris Rebert ha scritto: On Sat, Apr 11, 2009 at 1:44 AM, Matteo tadweles...@gmail.com wrote: Hi all, let's see if there is a more pythonic way of doing what I'm trying to do. I have a lot of strings with numbers like this one: string = -1 1.3 100.136 1 2.6 100.726 1 3.9 101.464 -1 5.2 102.105 I need to pass the numbers to a function, but three at a time, until the string ends. The strings are of variable length, but always a multiple of three. That's what I did: num = string.split() for triple in zip(num[::3], num[1::3], num[2::3]): func(*triple) it works and I like slices, but I was wondering if there was another way of doing the same thing, maybe reading the numbers in groups of arbitrary length n... See the grouper() recipe in the `itertools` module -- http://docs.python.org/library/itertools.html Cheers, Chris I would do that with a generator: def groups(l,n) : ... while l: yield l[:n]; l=l[n:] ... list(groups(range(14),4)) [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13]] list(groups(range(18),3)) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17]] Ciao - FB -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
On 11 Apr, 08:52, Scott David Daniels scott.dani...@acm.org wrote: Stuart Davenport wrote: ... I'm on a OS X, python 2.5. Basically I will have a remote application pushing data (GPS) over the network to a python application I have running on my Mac, I want this python application to again push the data on to a virtual serial port. Then the GPS program I have running on my MAC, RouteBuddy, can read the data from that serial port as standard. The only part I am concerned about here though, is if I can create a serial port virtually and push data out of it? OK, this is a Max OS/X question. Does RouteBuddy have any other way to get data except from the serial port? Does the mac have a serial port?or are you talking serial port over USB (which would be an entirely different kettle of fish). With that out of the wa, I'd try to ask some Mac guys if the ponying up is possible, and if so how to do it in _any_ language (likely they'll have an Objective C way). Then pop back over here (or even better a python-mac list, where they'll be familiar with how to do lots of stuff) and you can get help getting python to either do the same thing or talk to a bit of code that does the byte-transfers. --Scott David Daniels scott.dani...@acm.org Sadly RouteBuddy cannot retrieve data by other means... Scott, many thanks for the advice. Will try to find a more specific forum of conversation. Stu -- http://mail.python.org/mailman/listinfo/python-list
Re: An object that creates (nested) attributes automatically on assignment
Hi Steven, Thank you for your response! On Apr 11, 4:22 am, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Fri, 10 Apr 2009 19:04:38 -0700, Edd wrote: Hi folks, I'd like to use Python itself as the configuration language for my Python application. I'd like the user to be able to write something like this in their config file(s): cfg.laser.on = True cfg.laser.colour = 'blue' cfg.discombobulated.vegetables = ['carrots', 'broccoli'] # ... To this end, I've created a class that appears to allow instance variables to be created on the fly. Um, don't all classes allow that? class MyClass(): pass ... instance = MyClass() Or do you mean instance *attributes*? Again, apart from built-in types and classes that use __slots__, all classes allow that. instance.parrot = 'Norwegian Blue' Yes I probably mean instance attributes. Forgive me, I am not particularly sure of the terminology. But your MyClass example, won't quite do what I want, as I'd like to be able to define instance attributes on top of instance attributes by assignment: class MyClass(): pass ... instance = MyClass() instance.lasers.armed = True Traceback (most recent call last): File stdin, line 1, in module AttributeError: MyClass instance has no attribute 'laser' In other words, I can to the following to read a config file: cfg = Config() execfile(filename, {'cfg', cfg}, {}) That's okay so long as you trust the user not to put malicious, or buggy, code in your config file. Personally, I think config files should be more tolerant of errors than a programming language. That's certainly a valid remark, but this will be a tool for programmers. I am hoping that the user will make use of the power in moderation. Often, it really will be useful to allow functions to be defined in the config files, for example. However, I think my implementation of the Config class is a little crappy. I'd really appreciate the critical eye of a pro. Here's the sauce: For starters, where is your documentation? No doc strings, not even any comments! No, I tell a lie... *one* obscure comment that doesn't really explain much. Yes, you're quite right. I was about to add some doc strings, but I didn't think the implementation was good enough. That's somewhat backwards, though, right?! Especially considering I'm asking for improvements. Anyway, I had hoped that the example usage at the end would show what the purpose of the class is. class Config(object): def __init__(self, sealed=False): def seal(): for v in self._attribs.values(): if isinstance(v, self.__class__): v.seal() del self.__dict__['seal'] d = {'_attribs': {}, '_a2p': None} if not sealed: d['seal'] = seal self.__dict__.update(d) I'm going to try to guess what the above does. When you initialise an instance, you can tell the instance to be sealed or unsealed. I'm not sure what the difference is, or why you would choose one over the other. Sealed instances seem to be exactly the same as unsealed instances, except they have a seal() method (actually a closure). The seal method, when called, recursively seals any embedded Config instances inside the current instance, then deletes itself. Arghhh!!! Self-modifying code!!! Unclean, unclean!!! Quite! I'm not sure why seal() is necessary -- it seems to me that if present, all it does is delete itself. So why not just leave it out altogether? As I said in the original post, such Config objects will be made available to other kinds of user-written script and it's important that the Config not change between the execution of one script and the next. The seal() mechanism was an attempt to help the user from *accidentally* doing this and then having to try to diagnose the problem and understand how changing the config might have broken the invariants of the software. I guess a big DON'T CHANGE THE CONFIG IN YOUR SCRIPTS message in the manual, might be sufficient, though :) You also have a rather complicated way of adding instance attributes. Instead of d = {'_attribs': {}, '_a2p': None} self.__dict__.update(d) why not just do the more obvious: self._attribs = {} self._a2p = None Because that would go through __setattr__(), which does something else (which is the whole point of the class). At least, that was my understanding, which certainly could be at fault. This might be nicer I guess: self.__dict__['_attribs'] = {} self.__dict__['_a2p'] = None There used to be more instance attributes than just two so it was easier to put them in a dict and use update. I agree that it's rather obfuscated, though. [Edd's horrendous code snipped] It looks like you are just re-inventing the normal attribute mechanism of Python. I'm not sure why you feel this is necessary. And it contains MORE self-modifying code! Yuck! Frankly I
Re: Reading 3 objects at a time from list
Matteo wrote: Hi all, let's see if there is a more pythonic way of doing what I'm trying to do. I have a lot of strings with numbers like this one: string = -1 1.3 100.136 1 2.6 100.726 1 3.9 101.464 -1 5.2 102.105 I need to pass the numbers to a function, but three at a time, until the string ends. The strings are of variable length, but always a multiple of three. That's what I did: num = string.split() for triple in zip(num[::3], num[1::3], num[2::3]): func(*triple) it works and I like slices, but I was wondering if there was another way of doing the same thing, maybe reading the numbers in groups of arbitrary length n... any ideas? Ideas? Many. But do they make sense? from itertools import * items = range(10) for chunk in iter((tuple(islice(items, 3)) for items in repeat(iter(items))).next, ()): ... print chunk ... (0, 1, 2) (3, 4, 5) (6, 7, 8) (9,) for chunk in takewhile(bool, (tuple(islice(items, 3)) for items in repeat(iter(items: ... print chunk ... (0, 1, 2) (3, 4, 5) (6, 7, 8) (9,) def make_read(items): ... items = iter(items) ... def read(n): ... return tuple(islice(items, n)) ... return read ... from functools import partial for chunk in iter(partial(make_read(items), 3), ()): ... print chunk ... (0, 1, 2) (3, 4, 5) (6, 7, 8) (9,) read = make_read(items) for n in [3,4,2,1]: ... print read(n) ... (0, 1, 2) (3, 4, 5, 6) (7, 8) (9,) items = iter([3, a, b, c, 2, p, q, 4, x, y, z, t]) read = make_read(items) for n in items: ... print .join(read(n)) ... abc pq xyzt -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
On Apr 11, 3:18 am, Joel Hedlund yoh...@ifm.liu.se wrote: Aaron Brady wrote: Would you be willing to examine a syntax tree to determine if there are any class accesses? Sure? How do I do that? I've never done that type of thing before so I can't really say if it would work or not. /Joel NO PROMISES. No warranty is made, express or implied. Of course, something this devious, a white list, may just make it so your enemy finds out its weakness before you do. It's ostensibly for Python 3, but IIRC there's a way to do it in 2. 'ast.literal_eval' appears to evaluate a literal, but won't do expressions, which is what you are looking for. We should refer people to it more often. +1 ast.walk, btw. If you want subtraction and division, you'll have to add them yourself. You could probably compress the 'is_it_safe' function to one line, provided that it's sound to start with: if all( x in safe_node_classes for x in ast.walk( ast.parse( exp ) ) ), or better yet, if set( ast.walk( ast.parse( exp ) ) )= safe_node_classes. +1! /Source: import ast safe_exp= '( 2+ 4 )* 7' unsafe_exp= '( 2+ 4 ).__class__' unsafe_exp2= '__import__( os )' safe_node_classes= set( [ ast.Module, ast.Expr, ast.BinOp, ast.Mult, ast.Add, ast.Num ] ) def is_it_safe( exp ): print( 'trying %s'% exp ) top= ast.parse( exp ) for node in ast.walk( top ): print( node ) if node.__class__ not in safe_node_classes: return False print( 'ok!' ) return True print( safe_exp, is_it_safe( safe_exp ) ) print( ) print( unsafe_exp, is_it_safe( unsafe_exp ) ) print( ) print( unsafe_exp2, is_it_safe( unsafe_exp2 ) ) print( ) /Output: trying ( 2+ 4 )* 7 _ast.Module object at 0x00BB5DF0 _ast.Expr object at 0x00BB5E10 _ast.BinOp object at 0x00BB5E30 _ast.BinOp object at 0x00BB5E50 _ast.Mult object at 0x00BAF590 _ast.Num object at 0x00BB5EB0 _ast.Num object at 0x00BB5E70 _ast.Add object at 0x00BAF410 _ast.Num object at 0x00BB5E90 ok! ( 2+ 4 )* 7 True trying ( 2+ 4 ).__class__ _ast.Module object at 0x00BB5E90 _ast.Expr object at 0x00BB5DF0 _ast.Attribute object at 0x00BB5E10 ( 2+ 4 ).__class__ False trying __import__( os ) _ast.Module object at 0x00BB5E10 _ast.Expr object at 0x00BB5E30 _ast.Call object at 0x00BB5E50 __import__( os ) False -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
On Sat, 11 Apr 2009 11:03:16 +0200, Joel Hedlund wrote: Peter Otten wrote: But what you're planning to do seems more like def is_it_safe(source): ... return _ not in source ... source = getattr(42, '\\x5f\\x5fclass\\x5f\\x5f') if is_it_safe(source): ... print eval(source) ... type 'int' Bah. You are completely right of course. Just as a thought experiment, would this do the trick? def is_it_safe(source): return _ not in source and r'\' not in source I'm not asking because I'm hellbent on having eval in my app, but because it's always useful to see what hazards you don't know about. Can we pass your test and still write to a file? Too easy. file('spam.txt', 'r') # prove that the file doesn't exist Traceback (most recent call last): File stdin, line 1, in module IOError: [Errno 2] No such file or directory: 'spam.txt' source = 4+(file('spam.txt', 'w').write('spam spam spam') or 0)+5 if is_it_safe(source): ... print eval(source) ... 9 file('spam.txt', 'r').read() 'spam spam spam' Can we pass your test and import a module and grab its docstring? source = getattr(eval(chr(90+5)*2+'im'+'por'+'t'+chr(None or 95)*2+'('+chr(39)+'os'+chr(39)+')'), chr(95)*2+'doc'+chr(99-4)*2) if is_it_safe(source): ... eval(source) ... OS routines for Mac, NT, or Posix depending ... Restricting Python is hard. No, not hard. It's *REALLY HARD*. Experts have tried and failed. A good example is Tav's recent attempt to secure Python code from *one* threat: writing a file on the local disk. Should be simple, right? If only. http://tav.espians.com/a-challenge-to-break-python-security.html The first exploit came an hour after Tav went public. You can read the discussion on the Python-Dev list starting here: http://mail.python.org/pipermail/python-dev/2009-February/086401.html More here: http://tav.espians.com/paving-the-way-to-securing-the-python-interpreter.html http://tav.espians.com/update-on-securing-the-python-interpreter.html My recommendation is that you do one of these: (1) Give up on making your code safe. Recognise that the threat is relatively small, but real, and put a warning in your documentation about the risk to user's own system if they evaluate arbitrary code, and then just use eval and hope for the best. (2) Decide that you don't want your calculate to be a full-fledged programming language, and give up on making eval safe. Write your own mini-parser to do arithmetic expressions. It's really not that difficult: really easy with PyParsing, and not that hard without. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: I can't get RLock to work (warning, the following code is pretty long)
I think it would help if you would call your functions in get_both_parts with some arguments ... -- http://mail.python.org/mailman/listinfo/python-list
ANN: PyGUI 2.0
PyGUI 2.0 is available: http://www.cosc.canterbury.ac.nz/greg.ewing/python_gui/ Highlights of this release: * Native Windows implementation, based on pywin32 and ctypes. * Full set of Postscript-style path construction operators available on all platforms. * Mouse and keyboard events can be intercepted for all component classes. Plus numerous minor improvements, see CHANGES on the website for details. What is PyGUI? -- PyGUI is a cross-platform GUI toolkit designed to be lightweight and have a highly Pythonic API. Acknowledgements Thanks are due to Patrick Forget and Erez-Sh for getting me started on the Windows implementation. Even though I didn't use much of their code in the end, I appreciate their efforts and may draw more from it in the future. -- Gregory Ewing greg.ew...@canterbury.ac.nz http://www.cosc.canterbury.ac.nz/greg.ewing/ -- http://mail.python.org/mailman/listinfo/python-list
storing variable value
Hi! I'm writing a program to provide me with battery warnings when my battery hits certain levels. It just checks the current level and does something. I plan to call it from a a cron job. But If the cron runs every minute, warnings every minute would be rather annoying. so is there a way to make the script check if it has already ran before? eg. can I write to a variable on one run of the program, and on the next read that value that was written? Thx! Daniel. signature.asc Description: Digital signature -- http://mail.python.org/mailman/listinfo/python-list
Re: Unsupported operand types in if/else list comprehension
Mike H schrieb: Thanks to all of you. FYI, I'm doing this because I'm working on creating some insert statements in SQL, where string values need to be quoted, and integer values need to be unquoted. I wanted to be sure that I could pass these values to the list in a normal way e.g. ['test', 1, 'two'] and have a function correct the list for me, rather than calling the function with a strangely quoted list e.g. [''test'', 1, ''two'']. Don't do that yourself. This is error-prone. Instead, use the parametrized verison of the cursor.execute-method. It will perform the necessary escaping, and depending on the database and database adapter you use better performance. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: An object that creates (nested) attributes automatically on assignment
On Sat, 11 Apr 2009 03:01:48 -0700, Edd wrote: Yes I probably mean instance attributes. Forgive me, I am not particularly sure of the terminology. But your MyClass example, won't quite do what I want, as I'd like to be able to define instance attributes on top of instance attributes by assignment: class MyClass(): pass ... instance = MyClass() instance.lasers.armed = True Traceback (most recent call last): File stdin, line 1, in module AttributeError: MyClass instance has no attribute 'laser' Ah, now it is more clear. Okay, let's try this: class C(object): ... def __getattr__(self, name): ... # Only called if self.name doesn't exist. ... inst = self.__class__() ... setattr(self, name, inst) ... return inst ... c = C() c.x.y.z = 45 c.__dict__ {'x': __main__.C object at 0xb7c3b78c} c.x.__dict__ {'y': __main__.C object at 0xb7c3b7ec} c.x.y.z 45 -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: storing variable value
Daniel Dalton schrieb: Hi! I'm writing a program to provide me with battery warnings when my battery hits certain levels. It just checks the current level and does something. I plan to call it from a a cron job. But If the cron runs every minute, warnings every minute would be rather annoying. so is there a way to make the script check if it has already ran before? eg. can I write to a variable on one run of the program, and on the next read that value that was written? Use a file to store previous run's state. Use e.g. the pickle-module to store some arbitrary data-structures to the disk. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: storing variable value
On Sat, 11 Apr 2009 21:36:43 +1000, Daniel Dalton wrote: Hi! I'm writing a program to provide me with battery warnings when my battery hits certain levels. It just checks the current level and does something. I plan to call it from a a cron job. But If the cron runs every minute, warnings every minute would be rather annoying. so is there a way to make the script check if it has already ran before? eg. can I write to a variable on one run of the program, and on the next read that value that was written? No, every time cron calls your script, it calls it as new. If you want persistent storage, you need to write to persistent storage like a file. Another solution is to use a daemon which is running continuously in the background. Because that's a long-running process, the daemon can then decide how often it checks the battery, and how often it notifies you. However, writing correct daemons is not something for a beginner. I recommend you just stick to writing your persistent data to a file somewhere, and sticking to cron. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Multithreading / multiprocess
Is there anyway to begin a thread and execute a finite number of lines of code, or a finite amount of time within it? For example, say I create three child threads and I want to guarantee equal timeshare between them, can I specify a quanta (say 400 LOC although I know that is pretty small) to execute in each one in turn? -T -- http://mail.python.org/mailman/listinfo/python-list
Re: An object that creates (nested) attributes automatically on assignment
On Apr 11, 12:54 pm, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: Ah, now it is more clear. Okay, let's try this: class C(object): ... def __getattr__(self, name): ... # Only called if self.name doesn't exist. ... inst = self.__class__() ... setattr(self, name, inst) ... return inst Ha! Perfect! I knew it should be simpler. Thanks very much! Kind regards, Edd -- http://mail.python.org/mailman/listinfo/python-list
Re: Multithreading / multiprocess
tleeuwenb...@gmail.com schrieb: Is there anyway to begin a thread and execute a finite number of lines of code, or a finite amount of time within it? For example, say I create three child threads and I want to guarantee equal timeshare between them, can I specify a quanta (say 400 LOC although I know that is pretty small) to execute in each one in turn? Not as such, no. You can play tricks with the trace-module, but these ultimately fail when the code in question runs inside C - which puts a stop to any python interpreter scheduling anyway, thus native threads are used which can't be controlled on that level. Diez -- http://mail.python.org/mailman/listinfo/python-list
Using percent signs with SafeConfigParser
Hi, Does the SafeConfigParser class correctly detects lone percent signs? For example, shouldn't the string 100%% be accepted as a valid value? Executing the code below should only print one error, instead it prints 2. (I've tested this with version 2.6.1 on Windows XP.) It seems the _badpercent_re regular expression (an attribute of SafeConfigParser, with value %[^%]|%$) is flawed: - The first alternative %[^%] fails with the string %%_, because it matches %_. - The second alternative %$ fails with the string %%, because it matches %. The correct regular expression is (?!%)%(?!%), which passes the previous tests. Thanks, -- from ConfigParser import * import re config = SafeConfigParser() # Expected: try: config.set('DEFAULT', 'test', '100%') except ValueError as error: print 'Error:', error # Unexpected: try: config.set('DEFAULT', 'test', '100%%') except ValueError as error: print 'Error:', error try: config._badpercent_re = re.compile('(?!%)%(?!%)') config.set('DEFAULT', 'test', '100%%') except ValueError as error: print 'Error:', error -- http://mail.python.org/mailman/listinfo/python-list
Re: communication between objects - help
Murali kumar wrote: thanks a lot.. I think passing the main object only by reference.. so, this does not causes any overhead.. am i correct..? On Fri, Apr 10, 2009 at 4:02 PM, Dave Angel da...@ieee.org wrote: Murali kumar wrote: hi all.. I'm posted in a word doc becoz to add a image to explain my problem.. also I think gmail automatically scans for attachments.. anyway.. here's my problem...( see the image) http://www.2shared.com/file/5299759/45e4c614/load.html Using : Python 2.6 , wxPython 2.8.9 snip... * I don’t know how to return config file or data to mainApp object when pressing load button. * * Is it easy to return filename only and load the file’s data into mainApp object in menu handler itself? * Please suggest me right direction.. and tell me how to do it? Usually where I can get these informations.. (suggest links and books..) Thanks for any advice Most of the widget classes in your code should be derived classes, so they can hold extra instance data event handlers and such. So that means you can have extra parameters on the constructor, besides the ones the base class requires. Use one or more of those extra parameters to store your own information about the hierarchy. Simplest example is to add the app instance to each constructor. Then each widget object would know how to call back into the app to do some work, or to load data into a common place. DaveA -- http://mail.python.org/mailman/listinfo/python-list All objects are passed by reference in python. And storing it in each widget costs very little. Note that you can choose what object or objects should be used; I just mention the app as a choice that everyone will subclass, and that will generally have direct or indirect access to all widgets. -- http://mail.python.org/mailman/listinfo/python-list
multiprocessing and Locks
Hi All, I am trying to understand multiprocessing, but I am getting a Runtime error on the code below. What am I missing or doing wrong? Error is: RuntimeError: Lock objects should only be shared between processes through inheritance I am using: Python 2.6 (r26:66714, Nov 28 2008, 22:17:21) [GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2 Thanks in Advance, George import multiprocessing import time class Base(object): def __init__(self, id, lock): self.Id = id lock.acquire() self.Sleep() lock.release() def Run(self): pass def Sleep(self): time.sleep(5) class Derived(Base): def __init__(self, id, lock): Base.__init__(self, id, lock) def Run(self): print self.Id def RunFunc(id, lock): obj = Derived(id, lock) obj.Run() if __name__ == __main__: lock = multiprocessing.Lock() Pool = multiprocessing.Pool(processes=5) for i in xrange(100): Pool.apply_async(func=RunFunc, args=(i,lock)) -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
On Apr 11, 2:41 am, Aaron Brady castiro...@gmail.com wrote: Why do I get the feeling that the authors of 'pyparsing' are out of breath? What kind of breathlessness do you mean? I'm still breathing, last time I checked. The-rumors-of-my-demise-have-been-greatly-exaggerated'ly yours, -- Paul -- http://mail.python.org/mailman/listinfo/python-list
[ANN] Falcon - powering innovation
If anybody is interesed in new technologies, you'll love this new language called Falcon [1], which has been open sourced ago little time. Falcon is a scripting engine ready to empower mission-critical multithreaded applications. It provides six integrated programming paradigms: procedural, object oriented, prototype oriented, functional, tabular and message oriented. You use what you prefer. To know more about its design, read the interview to the Falcon author that has published ComputerWorld Australia [2]. [1] http://www.falconpl.org/ [2] http://www.computerworld.com.au/article/298655/-z_programming_languages_falcon?fp=2fpid= -- http://mail.python.org/mailman/listinfo/python-list
Re: storing variable value
Daniel Dalton wrote: Hi! I'm writing a program to provide me with battery warnings when my battery hits certain levels. It just checks the current level and does something. I plan to call it from a a cron job. But If the cron runs every minute, warnings every minute would be rather annoying. so is there a way to make the script check if it has already ran before? eg. can I write to a variable on one run of the program, and on the next read that value that was written? Thx! Daniel. To put it simply, you want to store a value from one run of the script, that persists till the next run of the same script. The most portable way to to that is to write a file. And since all you care about is the time of writing, the file can be zero length. So simply check for the file, determine it's creation time, and decide if it's too recent to want to run again. If the file doesn't exist, or is old, then write the file and notify the user. It's still messy to leave this bogus file around, so think carefully about where to put it. If the source directory is writable, it's reasonble to me to simply put it there. That way, if the program gets deleted, it'll probably get deleted at the same time. Failing that, you could put it in a TEMP directory. And perhaps the sneakiest place to put it, if you're on Windows, is in the run once on startup directory. Make it a do-nothing batch file, and Windows will remove it next time the user restarts the system. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
On 2009-04-10, Stuart Davenport stuart.davenp...@gmail.com wrote: I'm on a OS X, python 2.5. Basically I will have a remote application pushing data (GPS) over the network to a python application I have running on my Mac, I want this python application to again push the data on to a virtual serial port. Then the GPS program I have running on my MAC, RouteBuddy, can read the data from that serial port as standard. You might be able to use a pty. It depends on what ioctl calls RouteBuddy uses. Unless Apple has done major surgury on the pty driver, the Unix pty driver only supports a subset of the serial-port ioctl commands: for example pty's don't support the TIOCMGET and TIOCMSET commands. If RouteBuddy won't work with a pty, then you could buy two USB-serial converters (that are supported on Mac OS X) and connect them to each other with a null-modem adapter. Or you could fix up the pty driver to support the reset of the serial-port ioctl commands. I've been meaning to do that for Linux for several years now... -- Grant -- http://mail.python.org/mailman/listinfo/python-list
Merging byte arrays
Hello I'm using this function to read data in byte format from file def readBytes(file, offset, size): file.seek(offset) return file.read(size) file is opened with open function: file = open(path, rb) then i'm using array.array('B', bytes) to parse read-out data, for example in this function: def getIntValOfBytes(bytes): value = i = 0 for byte in array.array('B', bytes): value |= byte (8 * i) i += 1 return value when i read one portion of bytes everything works ok. but now i need read from more locations in file, then somehow merge these data together and then pass to getIntValOfBytes function.. i tried list list = [] for offset in offsets list.extend(readBytes(file, offset, size)) or string string = for offset in offsets string += readBytes(file, offset, size) but with list i get this error for byte in array.array('B', bytes): TypeError: an integer is required in getIntValOfBytes (i passed the part of the list to the method, list[x:y]) and with string it just freeze I will appreciate any help.. [I'm newbie so sorry if i'm missing something obvious] -- http://mail.python.org/mailman/listinfo/python-list
Definition of Pythonic?
Hi there, I'm starting an exploratory foray into Python, being generally dissatisfied with the Ruby ecosystem (while the language is wonderful, third party libraries and documentation are not). Having written a few trivial scripts in Python, I'm curious as to how you would sum up the Pythonic philosophy of development. Judging from Python, it seems to exclude (mostly) magical variables like '$.'. Is this right? What else would you include in this definition? Cheers, Emm -- http://mail.python.org/mailman/listinfo/python-list
Re: Why is it that *dbm modules don't provide an iterator? (Language design question)
Opened a ticket for this and attached a patch. (experimental) http://bugs.python.org/issue5736 On Fri, Apr 10, 2009 at 8:39 AM, Martin v. Löwis mar...@v.loewis.de wrote: I assumed there were some decisions behind this, rather than it's just not implemented yet. I believe this assumption is wrong - it's really that no code has been contributed to do that. But doesn't the issue at http://bugs.python.org/issue662923 imply that there *was* suitable code (for 2.4)? Yes, for bsddb. So is this a regression? No. bsddb still supports iteration in 2.6. And should that issue be re-opened? I don't think that would matter much. Actually contributing code might. Regards, Martin -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
completly unrelated to python but i had to post it
i know, i know , this group is about python, but this artilce i just read, well i was pretty much just surfing the web when i found this article made in 2001, it is just 2 funny. http://www.adequacy.org/stories/2001.12.2.42056.2147.html\ if u've never read it, it'll knock ur socks off, and the comments are riveting ps. personally i think a hacker wrote it cause no person can be that ignorant -- http://mail.python.org/mailman/listinfo/python-list
Re: numpy.where
In article 747te7f1209a...@mid.individual.net, Peter Pearson ppear...@nowhere.invalid wrote: On Thu, 09 Apr 2009 09:09:18 -0400, Lou Pecora wrote: Really, I've gotta RTFM. :-) Hey, if you find TFM, please tell me where it is. I haven't found anything Fine. I even bought Travis Oliphant's book, which helps a little, but . . . Travis' book is what I have and what I was thinking of when I made the statement. -- -- Lou Pecora -- http://mail.python.org/mailman/listinfo/python-list
llvm vs. parrot
Is Parrot out of favor these days? It appears that Google is going to use llvm. http://code.google.com/p/unladen-swallow/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
Having written a few trivial scripts in Python, I'm curious as to how you would sum up the Pythonic philosophy of development. Judging from Python, it seems to exclude (mostly) magical variables like '$.'. Is this right? What else would you include in this definition? At the python command-prompt, issue import this which will dump The Zen of Python. I'd debate flat vs. nested depending on context (nested IFs? nested call-graph? nested data-structures?), but otherwise this summarizes many of the reasons I esteem Python above all the other computer languages I've used (pascal and VB came close; ruby perl were so distant from these ideals, I cringe every time I have to touch them for anything). -tkc -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
Emm Having written a few trivial scripts in Python, I'm curious as to Emm how you would sum up the Pythonic philosophy of development. Try import this at your friendly, neighborhood Python prompt. -- Skip Montanaro - s...@pobox.com - http://www.smontanaro.net/ XML sucks, dictionaries rock - Dave Beazley -- http://mail.python.org/mailman/listinfo/python-list
Re: llvm vs. parrot
On Fri, Apr 10, 2009 at 20:16, Paul Watson paul.hermeneu...@gmail.comwrote: Is Parrot out of favor these days? It appears that Google is going to use llvm. As far as I can recall, Parrot was supposed to be an April Fools Day joke (literally) that was taken way too seriously. Parrot may had made a lot of sense years ago, but given today's compiler + language support + virtual machine technology, it seems that it has fallen behind. But that's just my $0.02 worth. -- Carlos Ribeiro Consultoria em Projetos blog: http://rascunhosrotos.blogspot.com blog: http://pythonnotes.blogspot.com mail: carribe...@gmail.com mail: carribe...@yahoo.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Merging byte arrays
Gabriel wrote: Hello I'm using this function to read data in byte format from file def readBytes(file, offset, size): file.seek(offset) return file.read(size) file is opened with open function: file = open(path, rb) then i'm using array.array('B', bytes) to parse read-out data, for example in this function: def getIntValOfBytes(bytes): value = i = 0 for byte in array.array('B', bytes): value |= byte (8 * i) i += 1 return value when i read one portion of bytes everything works ok. but now i need read from more locations in file, then somehow merge these data together and then pass to getIntValOfBytes function.. i tried list list = [] for offset in offsets list.extend(readBytes(file, offset, size)) or string string = for offset in offsets string += readBytes(file, offset, size) but with list i get this error for byte in array.array('B', bytes): TypeError: an integer is required in getIntValOfBytes (i passed the part of the list to the method, list[x:y]) That's because you're passing a list of strings. It should for a list of integers or a string. and with string it just freeze 'Freezes'? I've tried it with a string of 256 characters and it was fast. I will appreciate any help.. [I'm newbie so sorry if i'm missing something obvious] -- http://mail.python.org/mailman/listinfo/python-list
Startup with Python
Hello, I am a beginner in Python , i am not able to set the environment variable in windows so that i can execute python script through command prompt , and also i am not able to male *.py as executable i.e. whenever i double click the file it should run it. Please help and reply me at findra...@gmail.com . Its urgent brother , i will wait for your reply. -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
On Thu, 09 Apr 2009 02:56:00 -0700, David Liang wrote: Hi all, I'm having a weird problem with a regular expression (tested in 2.6 and 3.0): Basically, any of these: _re_comments = re.compile(r'^(([^\\]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^#]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^]+|\\.|([^\\]+|\\.)*)*)#.*$') followed by for example, line = r'~/.[m]ozilla/firefox/*.default/chrome' print(_re_comments.sub(r'\1', line)) ...hangs the interpreter. I can confirm the first one hangs the interpreter in Python 2.5 as well. I haven't tested the other two. To my mind, this is a bug in the RE engine. Is there any reason to not treat it as a bug? -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
Stuart Davenport wrote: On 11 Apr, 08:52, Scott David Daniels scott.dani...@acm.org wrote: Stuart Davenport wrote: ... I'm on a OS X, python 2.5 Then the GPS program I have running on my MAC, RouteBuddy, can read the data from that serial port as standard. I'ms confused by this statement. What physical connector does your serial port use to get the serial data to the Mac? I only have one 3-year old Mac laptop to look at, and I just don't see anything that I would call a serial port. Scott, many thanks for the advice No problem. I was short earlier because I wanted to spend time helping someone out, not pulling clues out. If I have an hour to answer some questions, I'd rather read something that let's me hep out. I figured you might get a good answer if you asked something with full context, and there were _way_ too many variables to get you an answer from what you started with. --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Writing a Raw Image to a File (Win, PIL)
I have an image of described as: Img Info: {} size: (640, 480) format: None mode: P palette: ImagePalette.ImagePalette instance at 0x02393378 bands: ('P',) type: type 'instance' I'd like to write it to a file. Apparently, I need to convert it to a string first. How do I do that? Pickle? -- W. eWatson (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time) Obz Site: 39° 15' 7 N, 121° 2' 32 W, 2700 feet -- http://mail.python.org/mailman/listinfo/python-list
Re: Unsupported operand types in if/else list comprehension
Ok, thanks again to everyone for their suggestions, even if it appears I was going down the wrong path at the start. I'm a grad student creating this database to hold some of my own research on an isolated server, so security, etc. isn't my biggest concern -- but I would like to do this right. Here's the code that I've come up with now. Although it's gotten away from the original question, those that have commented on this seem to have some SQL knowledge, so I'd like to run it by them to see if this is better in theory. (I've tried it and it works in practice!) FYI, I'm using MySQLdb to connect with the Database. Also, I realize I should probably add in some try/catch statements and other error handling... but this is what I have at the moment. def insert_cmd(myTable, myFields, myValues, myReturnKey): Imports given fields and values into a given table, returns an SQL variable holding the Autoincrement key #tests to see if myParentKey is valid in mySQL. if not myReturnKey.startswith(@): print Error, myReturnKey must start with '@'; sys.exit() SQLcmd=INSERT INTO + myTable + (%s) % , .join(myFields) SQLcmd=SQLcmd + VALUES (%s,%s,%s); cursor.execute(SQLcmd, (myValues)) #sets and returns SQL variable. SQLcmd=select + myReturnKey + :=last_insert_id(); cursor.execute(SQLcmd) return myReturnKey On Sat, Apr 11, 2009 at 7:38 AM, Diez B. Roggisch de...@nospam.web.de wrote: Mike H schrieb: Thanks to all of you. FYI, I'm doing this because I'm working on creating some insert statements in SQL, where string values need to be quoted, and integer values need to be unquoted. I wanted to be sure that I could pass these values to the list in a normal way e.g. ['test', 1, 'two'] and have a function correct the list for me, rather than calling the function with a strangely quoted list e.g. [''test'', 1, ''two'']. Don't do that yourself. This is error-prone. Instead, use the parametrized verison of the cursor.execute-method. It will perform the necessary escaping, and depending on the database and database adapter you use better performance. Diez -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
Steven D'Aprano wrote: On Thu, 09 Apr 2009 02:56:00 -0700, David Liang wrote: Hi all, I'm having a weird problem with a regular expression (tested in 2.6 and 3.0): Basically, any of these: _re_comments = re.compile(r'^(([^\\]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^#]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^]+|\\.|([^\\]+|\\.)*)*)#.*$') followed by for example, line = r'~/.[m]ozilla/firefox/*.default/chrome' print(_re_comments.sub(r'\1', line)) ...hangs the interpreter. I can confirm the first one hangs the interpreter in Python 2.5 as well. I haven't tested the other two. To my mind, this is a bug in the RE engine. Is there any reason to not treat it as a bug? It's not a bug but one of those pathological cases where there are a LOT of possibilities to try (we're talking about exponential growth here). Hmm, maybe the re module needs to let the user set a timeout control that raises an exception if it takes longer than n seconds (it can already be interrupted by ^C)... -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
On Apr 12, 1:07 am, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Thu, 09 Apr 2009 02:56:00 -0700, David Liang wrote: Hi all, I'm having a weird problem with a regular expression (tested in 2.6 and 3.0): Basically, any of these: _re_comments = re.compile(r'^(([^\\]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^#]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^]+|\\.|([^\\]+|\\.)*)*)#.*$') followed by for example, line = r'~/.[m]ozilla/firefox/*.default/chrome' print(_re_comments.sub(r'\1', line)) ...hangs the interpreter. I can confirm the first one hangs the interpreter in Python 2.5 as well. I haven't tested the other two. To my mind, this is a bug in the RE engine. Is there any reason to not treat it as a bug? IMHO it's not a bug -- s/hang/takes a long time to compute/ Just look at it: 2 + operators and 3 * operators ... It's one of those come back after lunch REs. -- http://mail.python.org/mailman/listinfo/python-list
Re: Writing a Raw Image to a File (Win, PIL)
W. eWatson schrieb: I have an image of described as: Img Info: {} size: (640, 480) format: None mode: P palette: ImagePalette.ImagePalette instance at 0x02393378 bands: ('P',) type: type 'instance' I'd like to write it to a file. Apparently, I need to convert it to a string first. How do I do that? Pickle? Did you bother reading the PIL documentation just for about 30seconds? http://www.pythonware.com/library/pil/handbook/image.htm Hint: look for save. Diez -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
IMHO it's not a bug -- s/hang/takes a long time to compute/ That is quite what a hang is, and why the timeout was invented. The real bug is that there is no timeout mechanism. Just look at it: 2 + operators and 3 * operators ... It's one of those come back after lunch REs. Some users would not be able to tell that from the beginning. While a timeout override would be necessary in these cases, a timeout should be set. -- Dotan Cohen http://what-is-what.com http://gibberish.co.il -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
In article mailman.3700.1239458914.11746.python-l...@python.org, Emmanuel Surleau emmanuel.surl...@gmail.com wrote: Having written a few trivial scripts in Python, I'm curious as to how you would sum up the Pythonic philosophy of development. Judging from Python, it seems to exclude (mostly) magical variables like '$.'. Is this right? What else would you include in this definition? python -m this -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Why is this newsgroup different from all other newsgroups? -- http://mail.python.org/mailman/listinfo/python-list
Re: Unsupported operand types in if/else list comprehension
Well, I'm an idiot. Obviously, the line VALUES (%s, %s, %s); needs to be modified to adapt for the number of arguments in the list. But otherwise On Sat, Apr 11, 2009 at 11:28 AM, Mike H cmh.pyt...@gmail.com wrote: Ok, thanks again to everyone for their suggestions, even if it appears I was going down the wrong path at the start. I'm a grad student creating this database to hold some of my own research on an isolated server, so security, etc. isn't my biggest concern -- but I would like to do this right. Here's the code that I've come up with now. Although it's gotten away from the original question, those that have commented on this seem to have some SQL knowledge, so I'd like to run it by them to see if this is better in theory. (I've tried it and it works in practice!) FYI, I'm using MySQLdb to connect with the Database. Also, I realize I should probably add in some try/catch statements and other error handling... but this is what I have at the moment. def insert_cmd(myTable, myFields, myValues, myReturnKey): Imports given fields and values into a given table, returns an SQL variable holding the Autoincrement key #tests to see if myParentKey is valid in mySQL. if not myReturnKey.startswith(@): print Error, myReturnKey must start with '@'; sys.exit() SQLcmd=INSERT INTO + myTable + (%s) % , .join(myFields) SQLcmd=SQLcmd + VALUES (%s,%s,%s); cursor.execute(SQLcmd, (myValues)) #sets and returns SQL variable. SQLcmd=select + myReturnKey + :=last_insert_id(); cursor.execute(SQLcmd) return myReturnKey On Sat, Apr 11, 2009 at 7:38 AM, Diez B. Roggisch de...@nospam.web.de wrote: Mike H schrieb: Thanks to all of you. FYI, I'm doing this because I'm working on creating some insert statements in SQL, where string values need to be quoted, and integer values need to be unquoted. I wanted to be sure that I could pass these values to the list in a normal way e.g. ['test', 1, 'two'] and have a function correct the list for me, rather than calling the function with a strangely quoted list e.g. [''test'', 1, ''two'']. Don't do that yourself. This is error-prone. Instead, use the parametrized verison of the cursor.execute-method. It will perform the necessary escaping, and depending on the database and database adapter you use better performance. Diez -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
On Apr 11, 10:08 am, Emmanuel Surleau emmanuel.surl...@gmail.com wrote: Having written a few trivial scripts in Python, I'm curious as to how you would sum up the Pythonic philosophy of development. A couple of others have already mentioned the Zen of Python, available at the Python command prompt. I would agree with that, but also add the caveat that none of the principles expressed there are hard-and- fast rules. Hopefully that is clear from the quasi-contradictory nature of the principles, but inevitably there will be some people who complain that Python breaks this or that rule from the Zen. The fact is, it's impossible to satisfy every principle in every situation. To me, Python distinguishes itself for how well it balances all of them. Compromise is a word that comes up a lot when talking about the design of Python. To some, that has a negative connotation; to me, it's an inevitable consequence of being practical. John -- http://mail.python.org/mailman/listinfo/python-list
Re: Startup with Python
Strato wrote: Hello, I am a beginner in Python , i am not able to set the environment variable in windows so that i can execute python script through command prompt , and also i am not able to male *.py as executable i.e. whenever i double click the file it should run it. Please help and reply me at findra...@gmail.com . Its urgent brother , i will wait for your reply. -- http://mail.python.org/mailman/listinfo/python-list Take a look at http://docs.python.org/using/index.html especially section 3 talks about how to setup Python on the Windows platform. Have you tried specifying the whole path in the command window? For instance I have version 2.6 installed, so I can type c:\Python26\python.exe script.py to get this to work. Good luck, Esmail ps: try renaming the .py extension to .pyw and then double click it (should have worked before too - as far as I know this only prevents a command window from opening, but it can't hurt trying). -- http://mail.python.org/mailman/listinfo/python-list
Re: Startup with Python
Strato wrote: Hello, I am a beginner in Python , i am not able to set the environment variable in windows so that i can execute python script through command prompt , and also i am not able to male *.py as executable i.e. whenever i double click the file it should run it. Download and install the activestate distribution -- here's the link http://downloads.activestate.com/ActivePython/windows/2.6/ActivePython-2.6.1.1-win32-x86.msi HTH, Emile Please help and reply me at findra...@gmail.com . Its urgent brother , i will wait for your reply. -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
John Yeung wrote: On Apr 11, 10:08 am, Emmanuel Surleau emmanuel.surl...@gmail.com wrote: Having written a few trivial scripts in Python, I'm curious as to how you would sum up the Pythonic philosophy of development. A couple of others have already mentioned the Zen of Python, available at the Python command prompt. I would agree with that, but also add the caveat that none of the principles expressed there are hard-and- fast rules. Special cases aren't special enough to break the rules. Although practicality beats purity. This also applies to the Zen itself. Hopefully that is clear from the quasi-contradictory nature of the principles, but inevitably there will be some people who complain that Python breaks this or that rule from the Zen. The fact is, it's impossible to satisfy every principle in every situation. To me, Python distinguishes itself for how well it balances all of them. Compromise is a word that comes up a lot when talking about the design of Python. To some, that has a negative connotation; to me, it's an inevitable consequence of being practical. -- http://mail.python.org/mailman/listinfo/python-list
Re: Writing a Raw Image to a File (Win, PIL)
Diez B. Roggisch wrote: W. eWatson schrieb: I have an image of described as: Img Info: {} size: (640, 480) format: None mode: P palette: ImagePalette.ImagePalette instance at 0x02393378 bands: ('P',) type: type 'instance' I'd like to write it to a file. Apparently, I need to convert it to a string first. How do I do that? Pickle? Did you bother reading the PIL documentation just for about 30seconds? http://www.pythonware.com/library/pil/handbook/image.htm Hint: look for save. Diez So, you are telling me what? To save it as a jpg file, or maybe a bmp file? All of them have headers, right? -- W. eWatson (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time) Obz Site: 39° 15' 7 N, 121° 2' 32 W, 2700 feet Web Page: www.speckledwithstars.net/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
Dotan Cohen wrote: IMHO it's not a bug -- s/hang/takes a long time to compute/ That is quite what a hang is, and why the timeout was invented. The real bug is that there is no timeout mechanism. I wouldn't call it a hang because it is actually doing work. If it was 'stuck' on a certain part of the text and not progressing then it would be a hang. Just look at it: 2 + operators and 3 * operators ... It's one of those come back after lunch REs. Some users would not be able to tell that from the beginning. While a timeout override would be necessary in these cases, a timeout should be set. -- http://mail.python.org/mailman/listinfo/python-list
Re: safe eval of moderately simple math expressions
On Apr 11, 8:09 am, Paul McGuire pt...@austin.rr.com wrote: On Apr 11, 2:41 am, Aaron Brady castiro...@gmail.com wrote: Why do I get the feeling that the authors of 'pyparsing' are out of breath? What kind of breathlessness do you mean? I'm still breathing, last time I checked. The-rumors-of-my-demise-have-been-greatly-exaggerated'ly yours, -- Paul Gasping, not panting. -- http://mail.python.org/mailman/listinfo/python-list
Re: Can't create list of dictionaries
On Apr 10, 12:36 pm, sophie_newbie paulgeele...@gmail.com wrote: I've got a function that returns a dictionary, I need to loop and return 1000 dictionaries and append them to a list, but the thing is that when I do the list.append(funtThatReturnsDict()) the resulting only ever has 1 dictionary attached to it, even after running the append function 1000 times! I've tried using dict.copy() on the dictionary that was returned from the function but this didn't work either. En Fri, 10 Apr 2009 08:49:12 -0300, sophie_newbie paulgeele...@gmail.com escribió: Scratch everything I said, copy() does work. Made a wee mistake somewhere else. If the function is supposed to return a *different* dictionary each time, ensure that, don't fix the result value after it has returned. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: ANN: PyGUI 2.0
Line 25 of setup.py should be: packages.append(GUI.Gtk) -- http://mail.python.org/mailman/listinfo/python-list
Re: Writing a Raw Image to a File (Win, PIL)
W. eWatson wrote: I have an image of described as: Img Info: {} size: (640, 480) format: None mode: P palette: ImagePalette.ImagePalette instance at 0x02393378 bands: ('P',) type: type 'instance' I'd like to write it to a file. Apparently, I need to convert it to a string first. How do I do that? Pickle? Have you tried the .tostring() method? -- http://mail.python.org/mailman/listinfo/python-list
Re: Async serial communication/threads sharing data
On Wed, 25 Mar 2009 22:23:25 -0700, John Nagle na...@animats.com wrote: Jean-Paul Calderone wrote: On Tue, 24 Mar 2009 22:20:49 -0700, John Nagle na...@animats.com wrote: Jean-Paul Calderone wrote: On Mon, 23 Mar 2009 05:30:04 -0500, Nick Craig-Wood n...@craig-wood.com wrote: Jean-Paul Calderone exar...@divmod.com wrote: [snip] After bringing in all the heavy machinery of Twisted, you're still polling at 10Hz. That's disappointing. Hmm, no? There's no polling in the latest version of the code I saw. Jean-Paul if too_full: reactor.callLater(0.1, self.throttle) Hi John, You're looking at a different version of the code than what I was talking about. After discussing things with Nick, we came up with a version which includes no polling. See Nick's message of March 23, at around 1:30 PM for the code I was referring to - a version of the app which does no polling. Jean-Paul -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
On Apr 11, 10:07 am, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Thu, 09 Apr 2009 02:56:00 -0700, David Liang wrote: Hi all, I'm having a weird problem with a regular expression (tested in 2.6 and 3.0): Basically, any of these: _re_comments = re.compile(r'^(([^\\]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^#]+|\\.|([^\\]+|\\.)*)*)#.*$') _re_comments = re.compile(r'^(([^]+|\\.|([^\\]+|\\.)*)*)#.*$') followed by for example, line = r'~/.[m]ozilla/firefox/*.default/chrome' print(_re_comments.sub(r'\1', line)) ...hangs the interpreter. I can confirm the first one hangs the interpreter in Python 2.5 as well. I haven't tested the other two. To my mind, this is a bug in the RE engine. Is there any reason to not treat it as a bug? -- Steven How long does it take on a short example? -- http://mail.python.org/mailman/listinfo/python-list
Re: Writing a Raw Image to a File (Win, PIL)
MRAB wrote: W. eWatson wrote: I have an image of described as: Img Info: {} size: (640, 480) format: None mode: P palette: ImagePalette.ImagePalette instance at 0x02393378 bands: ('P',) type: type 'instance' I'd like to write it to a file. Apparently, I need to convert it to a string first. How do I do that? Pickle? Have you tried the .tostring() method? Perfect. Works exactly like I had hoped, 640x480 bytes--nothing more. Thanks. I had noticed it, but didn't get the connection. Then I wandered around nearby in the PIL description, and noticed something about decoding and write. Unknown territory to me. However, if I had followed up there was a connection between tostring and raw decoding. -- W. eWatson (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time) Obz Site: 39° 15' 7 N, 121° 2' 32 W, 2700 feet Web Page: www.speckledwithstars.net/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Multithreading / multiprocess
In article 57065c62-2024-47b5-a07e-1d60ff85b...@y10g2000prc.googlegroups.com, tleeuwenb...@gmail.com tleeuwenb...@gmail.com wrote: Is there anyway to begin a thread and execute a finite number of lines of code, or a finite amount of time within it? For example, say I create three child threads and I want to guarantee equal timeshare between them, can I specify a quanta (say 400 LOC although I know that is pretty small) to execute in each one in turn? You have extremely coarse-grained control with sys.setcheckinterval(). However, there is no guarantee which thread will pick up control after each context switch, so one thread might get more than its share. -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Why is this newsgroup different from all other newsgroups? -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
On 2009-04-11, Scott David Daniels scott.dani...@acm.org wrote: ... I'm on a OS X, python 2.5 Then the GPS program I have running on my MAC, RouteBuddy, can read the data from that serial port as standard. I'ms confused by this statement. What physical connector does your serial port use to get the serial data to the Mac? The data comes in on the TCP/IP network. The OP wants to send that data to a program called RouteBuddy. RouteBuddy will only read data from a serial port. The phrase that serial port in the text which you quote refers to the virtual serial port that the elided text says the OP wants to create. The OP wants what is called a serial port redirector in Windows-speak. It's a program that routes data between a network connection (often a TCP/IP connection that implements RFC2217) and what appears to other programs to be a normal serial port device API. You can write a port redirector in user-space in MS-Windows, but you can't in Linux/Unix. On Unix systems you have to write a kernel module that sits below the tty layer. The tty layer is what user applications talk to with open/close/read/write/ioctl calls. -- Grant -- http://mail.python.org/mailman/listinfo/python-list
Re: sharing/swapping items between lists
In article 4fd78ac3-ba83-456b-b768-3a0043548...@f19g2000vbf.googlegroups.com, Ross ross.j...@gmail.com wrote: I'm trying to design an iterator that produces two lists. The first list will be a list of unique pairings and the second will be a list of items that weren't used in the first list. After each round, the items that weren't used in the round before will get put back in and the second list will be populated with unique items. How do you specify what goes into the first list? Based on your description, I would have expected that the output from the first iteration would be ( [(1,2),(3,4),(5,6)], [7,8] ) Regardless of the actual algorithm, if you are returning items one at a time and maintaining state in a computation, you probably want to use a generator. -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Why is this newsgroup different from all other newsgroups? -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
On Sat, 11 Apr 2009 08:40:03 -0700, John Machin wrote: To my mind, this is a bug in the RE engine. Is there any reason to not treat it as a bug? IMHO it's not a bug -- s/hang/takes a long time to compute/ Just look at it: 2 + operators and 3 * operators ... It's one of those come back after lunch REs. Well, it's been running now for about two and a half hours, that's a rather long lunch. And despite MRAB's assertion, it *cannot* be interrupted by ctrl-C. That means that to all intents and purposes, the interpreter has locked up for the duration of the calculation, which may be days or weeks for all I know. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Reading 3 objects at a time from list
In article 49e06774$0$700$5fc3...@news.tiscali.it, Francesco Bochicchio bock...@virgilio.it wrote: On Sat, Apr 11, 2009 at 1:44 AM, Matteo tadweles...@gmail.com wrote: I need to pass the numbers to a function, but three at a time, until the string ends. The strings are of variable length, but always a multiple of three. I would do that with a generator: def groups(l,n) : ... while l: yield l[:n]; l=l[n:] ... Unfortunately, that's O(N**2) albeit with an extremely small constant factor, because popping off the head of the list requires a full list copy. You're probably okay with this algorithm unless the string could be megabytes. -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Why is this newsgroup different from all other newsgroups? -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
Well, it's been running now for about two and a half hours, that's a rather long lunch. I'd also like a pony! -- Dotan Cohen http://what-is-what.com http://gibberish.co.il -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
On 2009-04-11, Grant Edwards gra...@visi.com wrote: You can write a port redirector in user-space in MS-Windows, but you can't in Linux/Unix. On Unix systems you have to write a kernel module that sits below the tty layer. Perhaps I should elucidate further. That's what the pty driver on Unix is: a kernel module that sits underneath the tty layer where the normal serial-port UART drivers sit. However, Unix pty drivers only handles a subset of the normal serial-port API. [I'm not sure why pty drivers have never been finished so that they fully emulate a serial port, but it's been that way for 20+ years]. If RouteBuddy doesn't try to do things like get/set modem control/status lines, then the OP might be able to use a pty. Each pty consists of two devices: a master end and a slave end. RouteBuddy would be told to use the slave end, and the OP would write a program that would transfer data between a network connection and the master end. A pty devices is what is used by programs like xterm to run programs like bash. Xterm transfers data between a network connection and the master end of a pty. Bash is connected to the slave end of that pty and thinks it's connected to a serial port. Bash uses little of the serial port API, so it's happy with the limited API provided by a pty slave-end. -- Grant -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
On Saturday 11 April 2009 18:00:58 John Yeung wrote: On Apr 11, 10:08 am, Emmanuel Surleau emmanuel.surl...@gmail.com wrote: Having written a few trivial scripts in Python, I'm curious as to how you would sum up the Pythonic philosophy of development. A couple of others have already mentioned the Zen of Python, available at the Python command prompt. I would agree with that, but also add the caveat that none of the principles expressed there are hard-and- fast rules. Hopefully that is clear from the quasi-contradictory nature of the principles, but inevitably there will be some people who complain that Python breaks this or that rule from the Zen. Thank you all for the nice and prompt replies to what is a typical newbie question, which is bound to come back regularly. And no, you can't make everybody happy, per definition. The fact is, it's impossible to satisfy every principle in every situation. To me, Python distinguishes itself for how well it balances all of them. Compromise is a word that comes up a lot when talking about the design of Python. To some, that has a negative connotation; to me, it's an inevitable consequence of being practical. That's fine with me: after all, you can't do software engineering without trade-offs. Cheers, Emm -- http://mail.python.org/mailman/listinfo/python-list
design question, metaclasses?
I am working on a project that provides a high level interface to hdf5 files by implementing a thin wrapper around h5py. I would like to generalize the project so the same API can be used with other formats, like netcdf or ascii files. The format specific code exists in File, Group and Dataset classes, which I could reimplement for each format. But there are other classes deriving from Group and Dataset which do not contain any format-specific code, and I would like to find a way to implement the functionality once and apply uniformly across supported formats. This is really abstract, but I was thinking of something along the lines of: format1.Group # implementation of group in format1 format2.Group # ... Base.DerivedGroup # base implementation of DerivedGroup, not directly useful format1.DerivedGroup = Base.DerivedGroup(format1.Group) # useful format2.DerivedGroup = Base.DerivedGroup(format2.Group) # useful Could anyone please offer a comment, is this an appropriate use of metaclassing, or is there maybe an easier/better alternative? -- http://mail.python.org/mailman/listinfo/python-list
Re: Pathological regular expression
On Apr 11, 12:40 pm, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Sat, 11 Apr 2009 08:40:03 -0700, John Machin wrote: To my mind, this is a bug in the RE engine. Is there any reason to not treat it as a bug? IMHO it's not a bug -- s/hang/takes a long time to compute/ Just look at it: 2 + operators and 3 * operators ... It's one of those come back after lunch REs. Well, it's been running now for about two and a half hours, that's a rather long lunch. And despite MRAB's assertion, it *cannot* be interrupted by ctrl-C. That means that to all intents and purposes, the interpreter has locked up for the duration of the calculation, which may be days or weeks for all I know. While beyond the limits of a long lunch, that would make a nice vacation? -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
Grant Edwards wrote: On 2009-04-11, Grant Edwards gra...@visi.com wrote: You can write a port redirector in user-space in MS-Windows, but you can't in Linux/Unix. On Unix systems you have to write a kernel module that sits below the tty layer. Perhaps I should elucidate further. This part I actually understand. The OP has a program named RouteBuddy that talks to a device over a serial port, and he want to repalce the data stream coming from that device. My question is, where does the device that he wants to replace plug in? I don't see anywhere on my laptop I could plug in anything but a USB connector, an ethernet connector, a firewire connector, headphones, speakers, a display connector, or a power cord. --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Regex similar to ^(?u)\w$, but without digits?
Hello, I'd like to create a regex that captures any unicode character, but not the underscore and the digits 0-9. ^(?u)\w$ captures them also. Is there a possibility to restrict an expression like \w to \w without [0-9_]? I'm using python 2.5.4 Thanks in advance, Andreas -- http://mail.python.org/mailman/listinfo/python-list
Re: Unsupported operand types in if/else list comprehension
Sigh. One more. And again, thank you for all of the help. I realized that the last version that I posted took care of an SQL injection problem for the values, but not for the fields. So, I went ahead and modified the code: def new_insert_cmd(myTable, myFields, myValues): Imports given fields and values into a given table, returns the Autoincrement value. SQLcmd=INSERT INTO + myTable + ( + create_input_string(myFields) + ) VALUES ( \ + create_input_string(myValues) + ); allArguments=myFields+myValues cursor.execute(SQLcmd, (allArguments)) create_input_strings() is just a function that creates the necessary number of %s's for a given list (and which I'm sure there's a faster way to code): def create_input_string(myList): sOut= for var in myList: sOut=sOut+%s, return sOut[:-2] However, now the cursor.execute statement won't work. I've looked at the content of SQLcmd and the values of allArguments and they seem fine. I've even tried running this at the IDLE command line: cursor.execute(INSERT INTO plan (%s, %s, %s) VALUES (%s, %s, %s);, ([name, fileno, size, Test, AAA-000, 7])) and I get this error: File C:\Python25\lib\site-packages\MySQLdb\cursors.py, line 166, in execute self.errorhandler(self, exc, value) File C:\Python25\lib\site-packages\MySQLdb\connections.py, line 35, in defaulterrorhandler raise errorclass, errorvalue ProgrammingError: (1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name', 'fileno', 'size') VALUES ('Test', 'AAA-000', 7)' at line 1) Can I not use the cursor.execute command to pass variables that aren't immediately next to each other? If so, is there a better way to go about solving this problem? Again, thanks for your patience and help with a newbie. Michael On Sat, Apr 11, 2009 at 11:53 AM, Mike H cmh.pyt...@gmail.com wrote: Well, I'm an idiot. Obviously, the line VALUES (%s, %s, %s); needs to be modified to adapt for the number of arguments in the list. But otherwise On Sat, Apr 11, 2009 at 11:28 AM, Mike H cmh.pyt...@gmail.com wrote: Ok, thanks again to everyone for their suggestions, even if it appears I was going down the wrong path at the start. I'm a grad student creating this database to hold some of my own research on an isolated server, so security, etc. isn't my biggest concern -- but I would like to do this right. Here's the code that I've come up with now. Although it's gotten away from the original question, those that have commented on this seem to have some SQL knowledge, so I'd like to run it by them to see if this is better in theory. (I've tried it and it works in practice!) FYI, I'm using MySQLdb to connect with the Database. Also, I realize I should probably add in some try/catch statements and other error handling... but this is what I have at the moment. def insert_cmd(myTable, myFields, myValues, myReturnKey): Imports given fields and values into a given table, returns an SQL variable holding the Autoincrement key #tests to see if myParentKey is valid in mySQL. if not myReturnKey.startswith(@): print Error, myReturnKey must start with '@'; sys.exit() SQLcmd=INSERT INTO + myTable + (%s) % , .join(myFields) SQLcmd=SQLcmd + VALUES (%s,%s,%s); cursor.execute(SQLcmd, (myValues)) #sets and returns SQL variable. SQLcmd=select + myReturnKey + :=last_insert_id(); cursor.execute(SQLcmd) return myReturnKey On Sat, Apr 11, 2009 at 7:38 AM, Diez B. Roggisch de...@nospam.web.de wrote: Mike H schrieb: Thanks to all of you. FYI, I'm doing this because I'm working on creating some insert statements in SQL, where string values need to be quoted, and integer values need to be unquoted. I wanted to be sure that I could pass these values to the list in a normal way e.g. ['test', 1, 'two'] and have a function correct the list for me, rather than calling the function with a strangely quoted list e.g. [''test'', 1, ''two'']. Don't do that yourself. This is error-prone. Instead, use the parametrized verison of the cursor.execute-method. It will perform the necessary escaping, and depending on the database and database adapter you use better performance. Diez -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Definition of Pythonic?
John Yeung gallium.arsen...@gmail.com writes: A couple of others have already mentioned the Zen of Python, available at the Python command prompt. I would agree with that, but also add the caveat that none of the principles expressed there are hard-and- fast rules. Indeed, I'd suggest that the very lack of hard-and-fast rules is typical of the Python approach. The fact is, it's impossible to satisfy every principle in every situation. To me, Python distinguishes itself for how well it balances all of them. Compromise is a word that comes up a lot when talking about the design of Python. To some, that has a negative connotation; to me, it's an inevitable consequence of being practical. Agreed. Then again, all language design is a compromise, between factors like runtime efficiency, simplicity of implementation, tractability of semantics (for various classes of users), supportability by tools, and expressive power. Python inhabits what seems to me to be a particularly sweet spot on this rather complex landscape. -- [mdw] -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
In article 6lgdnsbypsl1fx3unz2dnuvz_uqdn...@pdx.net, Scott David Daniels scott.dani...@acm.org wrote: This part I actually understand. The OP has a program named RouteBuddy that talks to a device over a serial port, and he want to repalce the data stream coming from that device. My question is, where does the device that he wants to replace plug in? I don't see anywhere on my laptop I could plug in anything but a USB connector, an ethernet connector, a firewire connector, headphones, speakers, a display connector, or a power cord. A number of vendors (Keyspan, Belkin) make USB serial ports. FWIW, I use one here on this iMac and OS X with screen(1) and a null modem cable to act as a serial console for a headless Linux box. -- Ned Deily, n...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Re: Using percent signs with SafeConfigParser
Márcio Faustino wrote: Does the SafeConfigParser class correctly detects lone percent signs? For example, shouldn't the string 100%% be accepted as a valid value? Executing the code below should only print one error, instead it prints 2. (I've tested this with version 2.6.1 on Windows XP.) It seems the _badpercent_re regular expression (an attribute of SafeConfigParser, with value %[^%]|%$) is flawed: - The first alternative %[^%] fails with the string %%_, because it matches %_. - The second alternative %$ fails with the string %%, because it matches %. I think you are right. Please file a bug report . The correct regular expression is (?!%)%(?!%), which passes the previous tests. IMO this doesn't fix the problem because (1) it allows %%% which is also incorrect (2) _interpvar_re has already butchered values like %%(alpha)s to % Peter -- http://mail.python.org/mailman/listinfo/python-list
Re: Reading 3 objects at a time from list
Matteo wrote: it works and I like slices, but I was wondering if there was another way of doing the same thing, maybe reading the numbers in groups of arbitrary length n... from http://docs.python.org/library/itertools.html#recipes def grouper(n, iterable, fillvalue=None): grouper(3, 'ABCDEFG', 'x') -- ABC DEF Gxx args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) and it's *damned* fast! -- By ZeD -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
On 2009-04-11, Scott David Daniels scott.dani...@acm.org wrote: Grant Edwards wrote: On 2009-04-11, Grant Edwards gra...@visi.com wrote: You can write a port redirector in user-space in MS-Windows, but you can't in Linux/Unix. On Unix systems you have to write a kernel module that sits below the tty layer. Perhaps I should elucidate further. This part I actually understand. The OP has a program named RouteBuddy that talks to a device over a serial port, and he want to repalce the data stream coming from that device. My question is, where does the device that he wants to replace plug in? To some other machine/device on the network that does have a serial port. You can buy dedicated devices that do serial-ethernet, or you can use any old computer that does happen to have a serial port. If he was going to plug the device into a real serial port on the machine inquestion, then he wouldn't need a virtual serial port. I don't see anywhere on my laptop I could plug in anything but a USB connector, an ethernet connector, a firewire connector, headphones, speakers, a display connector, or a power cord. He's not trying to plug the device into your laptop. -- Grant -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
On 2009-04-11, Ned Deily n...@acm.org wrote: In article 6lgdnsbypsl1fx3unz2dnuvz_uqdn...@pdx.net, Scott David Daniels scott.dani...@acm.org wrote: This part I actually understand. The OP has a program named RouteBuddy that talks to a device over a serial port, and he want to repalce the data stream coming from that device. My question is, where does the device that he wants to replace plug in? I don't see anywhere on my laptop I could plug in anything but a USB connector, an ethernet connector, a firewire connector, headphones, speakers, a display connector, or a power cord. A number of vendors (Keyspan, Belkin) make USB serial ports. FWIW, I use one here on this iMac and OS X with screen(1) and a null modem cable to act as a serial console for a headless Linux box. True, but that doesn't help the OP, where the data is coming into the OS-X machine via a network connection. -- Grant -- http://mail.python.org/mailman/listinfo/python-list
Re: How to create a virtual serial port?
A number of vendors (Keyspan, Belkin) make USB serial ports. FWIW, I use one here on this iMac and OS X with screen(1) and a null modem cable to act as a serial console for a headless Linux box. +1 -Alex Goretoy http://www.goretoy.com Norman Mailerhttp://www.brainyquote.com/quotes/authors/n/norman_mailer.html - Writing books is the closest men ever come to childbearing. -- http://mail.python.org/mailman/listinfo/python-list
Q:Pythonic way to create list of lists
I am just learning Python. I am trying to create a list of empty lists: [[], [], [], ...] (10 items total). What is the most Pythonic way to do this? If I use a list comprehension (as in myList = [[] for item in xrange (0, 10)]), Netbeans warns me that 'item' is never used. If I use a for-loop (as in for item in myList = []; for item in xrange (0, 10): myList.append([])), Netbeans still warns me of the same thing. If I use '*' (as myList = [[]] * 10), all of the empty lists refer to the same object; changing one changes them all. Do I have to live with the warning, or is there a better way? Thanks. -- http://mail.python.org/mailman/listinfo/python-list
absolute newbie: divide a list into sublists (nested lists?) of fixed length
Hi, I have a list looking like [ 0.84971586, 0.05786009, 0.9645675, 0.84971586, 0.05786009, 0.9645675, 0.84971586, 0.05786009, 0.9645675, 0.84971586, 0.05786009, 0.9645675] and I would like to break this list into subsets of fixed length (say, three elements), i.e. to convert the list into a form such as the one generated by the following example code which I have found: import numpy s = numpy.random.random((3,3)) s array([[ 0.11916176, 0.96409475, 0.72602155], [ 0.84971586, 0.05786009, 0.96456754], [ 0.81617437, 0.845342 , 0.09109779]]) How can I create such a 2d array (i.e., something like a symmetric matrix) from my data? Thanks in advance, Bernard PS: Note that the numpy import is not important here, it is just the structure of the data that matters.. -- http://mail.python.org/mailman/listinfo/python-list