Re: PID lockfile
Aahz wrote: Okay. But is that something that needs to be accommodated with, specifically, PID file handling? Why would a PID file ever need to be on NFS storage instead of local? That's the question. You'll probably get some complaints from people running diskless machines, eventually, some years down the line. I think on diskless machines using a tmpfs (or similar) for PID files would be more sane anyway, but of course not everybody will (or can?) use that... -- JanC -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
mark.sea...@gmail.com wrote: On Mar 29, 9:52 pm, Chris Rebert c...@rebertia.com wrote: On Sun, Mar 29, 2009 at 9:18 PM, mark.sea...@gmail.com wrote: ... ... Also, you shouldn't use `class_ ` as the name of the first argument to __new__(). Use `cls` instead since that's the conventional name for it. Actually, according to PEP 8, class_ is the preferred name. My best guess as to what you're trying to do is (completely untested): class myclass(long): def __new__(cls, init_val, reg_info): print reg_info.message instance = long.__new__(cls, init_val) instance.reg_info = reg_info return instance Normally, these changes are done in the __init__ phase (post-instance creation), so you might go for something like: class myclass(long): def __new__(class_, init_val, reg_info): return long.__new__(class_, init_val) def __init__(self, init_val, reg_info): self.reg_info = reg_info --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
2009/3/29 Scott David Daniels scott.dani...@acm.org: mark.sea...@gmail.com wrote: On Mar 29, 9:52 pm, Chris Rebert c...@rebertia.com wrote: On Sun, Mar 29, 2009 at 9:18 PM, mark.sea...@gmail.com wrote: ... ... Also, you shouldn't use `class_ ` as the name of the first argument to __new__(). Use `cls` instead since that's the conventional name for it. Actually, according to PEP 8, class_ is the preferred name. In other contexts where you have a class as a variable, yes, but not in the case of classmethods such as this. See the docs for __new__ itself for example (http://docs.python.org/reference/datamodel.html#object.__new__). My best guess as to what you're trying to do is (completely untested): class myclass(long): def __new__(cls, init_val, reg_info): print reg_info.message instance = long.__new__(cls, init_val) instance.reg_info = reg_info return instance Normally, these changes are done in the __init__ phase (post-instance creation), so you might go for something like: I think the whole reason he's using __new__ instead of __init__ is because of this tidbit from the aforementioned __new__() docs: __new__() is intended mainly to allow subclasses of immutable types (like int, str, or tuple) to customize instance creation. It is also commonly overridden in custom metaclasses in order to customize class creation. Cheers, Chris -- I have a blog: http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list
suid/sudo in python
Im trying to write a program that has su permissions for some file system tasks and is non-su elsewhere. This is typically done in C with suid root owned code. What is the python paradigm for this kind of thing? (if at all) -- http://mail.python.org/mailman/listinfo/python-list
Re: suid/sudo in python
rustom rustompm...@gmail.com writes: Im trying to write a program that has su permissions for some file system tasks and is non-su elsewhere. On Unix, ‘su’ is a program for switching to a different user; it's not the name of a particular user. I presume you mean “ … that has root permissions for tome file system tasks and is non-root elsewhere”. This is typically done in C with suid root owned code. “suid root” refers to setting the program file with a specific mode flag on the filesystem so the kernel will cause the process to have the permissions of the owner of the file (rather than the user who ran the program), and setting the owner of the program file to ‘root’. It's not specific to C code (it works no matter what language the program is written in), and is only one of many ways a program can run as ‘root’. Perhaps the simplest way to run a program as ‘root’ is to *be* ‘root’ before running the program. What is the python paradigm for this kind of thing? (if at all) The key thing to realise is that, having relinquished privilege, the same process can't get it back again as easily. So if you need to do some tasks as a privileged user, do those *very* early and then drop the privileges for the rest of the life of the process. Taking this further, you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. -- \ “We tend to scoff at the beliefs of the ancients. But we can't | `\scoff at them personally, to their faces, and this is what | _o__) annoys me.” —Jack Handey | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
SQL Query shows error in program while it function correctly in psql interface
Hi, Following SQL assaignment is not working in Program. intable_bookname=SELECT book_name FROM table_book WHERE book_name='name'; where as this works perfectly fine with psql interface Pls help me on this Thanks a lot in advance Bijoy -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
On Mar 29, 11:16 pm, Chris Rebert c...@rebertia.com wrote: 2009/3/29 Scott David Daniels scott.dani...@acm.org: mark.sea...@gmail.com wrote: On Mar 29, 9:52 pm, Chris Rebert c...@rebertia.com wrote: On Sun, Mar 29, 2009 at 9:18 PM, mark.sea...@gmail.com wrote: ... ... Also, you shouldn't use `class_ ` as the name of the first argument to __new__(). Use `cls` instead since that's the conventional name for it. Actually, according to PEP 8, class_ is the preferred name. In other contexts where you have a class as a variable, yes, but not in the case of classmethods such as this. See the docs for __new__ itself for example (http://docs.python.org/reference/datamodel.html#object.__new__). My best guess as to what you're trying to do is (completely untested): class myclass(long): def __new__(cls, init_val, reg_info): print reg_info.message instance = long.__new__(cls, init_val) instance.reg_info = reg_info return instance Normally, these changes are done in the __init__ phase (post-instance creation), so you might go for something like: I think the whole reason he's using __new__ instead of __init__ is because of this tidbit from the aforementioned __new__() docs: __new__() is intended mainly to allow subclasses of immutable types (like int, str, or tuple) to customize instance creation. It is also commonly overridden in custom metaclasses in order to customize class creation. Cheers, Chris -- I have a blog:http://blog.rebertia.com It seems like there's no way to do what I'm trying. I am confined to Python 2.5.3 for business reasons. So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from object. Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. -- http://mail.python.org/mailman/listinfo/python-list
Re: tkinter questions: behavior of StringVar, etc
Alan G Isaac wrote: [snip] PS If you were also offering an answer to the second question, I missed it altogether, but although it is perhaps slightly less obvious than with a StringVar, I would ask the same basic question of an IntVar: why does it not behave more like an int? E.g., why is ``int(IntVar(value=5))`` an error, or at least, why is ``str(IntVar(value=5))`` the name of the IntVar instead of '5'? The string representation of Tkinter objects seems to be a design principle in this module: it'll always evaluate to the representation this object has at tcl level. Since a XxxVar is represented by an actual variable at tcl level, its string representation is the name of this variable. I guess it's quite easier to build the commands that'll be passed to the tcl interpreter this way: you don't have to check the type of the objects you handle, but pass them through str and insert the result directly in the command. HTH - Eric - -- http://mail.python.org/mailman/listinfo/python-list
Re: i have to change default tab length in pydev
Most such problems are caused by mixing tabs and spaces in the same file. Pick one style and be consistent, and you'll be in good shape. My approach is to always expand tabs. My tab key simply gets me to a convenient column, there never are any tabs in my source files. (I don't use either notepad++ or pydev, but most editors I have used or written can be configured to use spaces) Coonay wrote: during last few days, i code python using notepad++ or pydev, the compiler always complain there is a problem with Indentation,in my eyes ,there is no Indentation problem at all,because i format the code to make it comply with python style guide strictly,but after i change the default tab length ,it works. why is that? -- http://mail.python.org/mailman/listinfo/python-list
Re: c.l.py dead, news at 11 (was Re: Mangle function name with decorator?)
Steven D'Aprano st...@rource.com.au wrote: Oh noes!!! Python will be just like nearly every other language!!! Including Python. There are already at least thirteen implementations (forks) of Python (although some of these are defunct or unmaintained): CPython Jython IronPython Python for .NET CLPython PyPy Unladen Swallow Python for S60 PyVM Vyper RPython Stackless Python CapPython Its kind of sad to see unladen swallow, which is just a promise, on the list, while Shedskin, which isn't, is ignored. Does this say something about big corporations vs the small man? - Hendrik -- http://mail.python.org/mailman/listinfo/python-list
Can't get a simple TCP program to work
The following *extremely* simple script complains that Socket is not connected when I try to call recv. Could anyone provide some quick guidance? http://pastebin.com/m64317b32 -- http://mail.python.org/mailman/listinfo/python-list
Improve module performance by reducing disk reads
Hi all, I'm writing in Python for about 2 weeks (moved from Perl) I've ported one of my modules which is a parser for a binary format (see link bellow for the format specs) http://etidweb.tamu.edu/cdrom0/image/stdf/spec.pdf In the first version of the parser I was reading exactly the amount of data I need to parse For example 4 bytes per each header The STDF files tend to be about 40+ MB size with 100K+ records, so I had at least 1 disk read per record, sometimes 2. Obviously it's not an efficient way to do it. I've created a buffer which reads 4K chunks per read and then the module parses the data. If the buffer becomes less then 512B I read another chunk and so on. Reducing 100K+ reads to around 15K reads should improve the performance. For some reason it did not happen. I've played with the chunk size, but nothing came out of it. Is there a Python specific way to optimise reading from disk? I'm using Python 2.5.2 with Ubuntu 8.10 32bit Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Re: tkinter questions: behavior of StringVar, etc
Alan G Isaac wrote: I'm a complete newbie to GUI. I have a couple questions about tkinter. 1. Where is the list of changes in Python 3's tkinter? I'll let someone else answer this as I don't use Python 3 myself. I guess there are not many. 2. What exactly is the role of the root object, traditionally created as ``root=tk.Tk()``? What is an example where one should create this before creating a Frame instance (which will otherwise implicitly create one as its master)? The object traditionally called root is in fact an instance of the tcl interpreter that will get the commands generated by the Tkinter module. Due to tk architecture, creating this interpreter will also create a window, which is inteneded to be your application's main window. This window is called '.' in tcl/tk. The root object in Tkinter then represents this '.' window. So the instance of Tk is actually 2 things: - The interpreter itself; - The main window for your application. As for when you should create explicitely an instance of Tk, well, I'd say always ;-) Creating an instance of Frame without creating a Tk instance first will actually create one, but you'll have no direct access to it. And you might want an access to it for quite a number of reasons: hiding it, make it an icon, add menus to it, and so on... All these operations can be done on actual windows, not on a Frame which is just a container widget. 2. Suppose I ``import tkinter as tk`` and then try ``s1=tk.StringVar()``. This fails because no master is set. Why does a Variable need a master? Because it needs a tcl interpreter to be created. All Tkinter widget actually reference their interpreter in their tk attribute. The StringVar will probably just use that. 3. Now suppose I set ``root = tk.TK()`` and then try ``s1=tk.StringVar()``. This works fine but now seems a bit magical: how has the value of the master been set? The Tk instance is registered in a hidden variable in the Tkinter module. When you don't specify a master, it'll use the latest created Tk instance one by default. BTW, the latest should be the only one: it is quite unsafe to create several Tk instances in the same application. 4. Another bit of magic: Suppose I ``import tkinter as tk`` and then try ``f1=tk.Frame()``. This works fine: apparently calling Frame also leads to implicit creation of a master. Why is what is good for the gander (i.e., implicit master creation for a Frame) not good for the goose (i.e., a Variable)? (Here I assume that there has been an answer to 2. above.) Well, I personnally don't see any point on doing any master creation implicitely, so I never use this master auto-creation for anything. I guess that having a window automatically created when you just try to instantiate a variable has been considered weird. But it's just a guess... 5. Reading around a bit, it seems common to recommend setting the values of Variables rather than initializing them. Why? I cannot see the reason to avoid ``s1=tk.StringVar(value=this works fine)`` and it looks like ``tk.StringVar(()`` is in any case initialized (to an empty string). I've never seen such a recommendation anywhere. I do tend to rely on the variable's default values. 6. Why is str(s1) not its value? More generally, why does a StringVar not behave more like a string? Well, that's a question for the guys who made the Tkinter module. My guess would be that StringVar's are supposed to be used only to communicate between the Python layer and the tcl one. They are not intended to be used as actual strings in your application. Don't forget anything you do on a StringVar is actually done by tcl, not Python. So I guess there is also a performance penalty to use StringVar's instead of Python strings. Thanks for any insights, Alan Isaac HTH - Eric - -- http://mail.python.org/mailman/listinfo/python-list
Re: dict view to list
Hi Aaron I personally don't understand how somedict.values().to_list() is actually preferable to list(somedict.keys()) In the standard python idiom I am constructing a new object (which I can control the type of) using a standard language mechanism (and I can substitute list with set or for that matter any other class that accepts an iterable as initial argument) where as what you advocate is calling some special method of an instance which in fact is a factory for instantiating some other class, this seems to be less flat than the standard idiom and significantly less flexible. and more typing ;-) How do you see the to_list() to be better or contributing the the user experience ? Rgds Tim Hoffman On Mar 27, 1:44 pm, Aaron Brady castiro...@gmail.com wrote: Hi. Is there a possibility of the dict_values, dict_items, and dict_keys objects growing a 'tolist' method? It's one of those little things that contributes to one's user experience. P.S. Yes, yes, I know, -1. -- http://mail.python.org/mailman/listinfo/python-list
database connection error - postgresql
Hi, *code:* (only the class definiton and Database connection part) import pg __metaclass__=type class addbook: conn=pg.connect('secondbooks.db') curs=conn.cursor() *error:* conn=pg.connect(secondbooks.db) pg.InternalError: FATAL: database secondbooks.db does not exist In fact i have a database called secondbooks in postgresql. Pls help on this as i am new to python. Thanks in advance Bijoy -- http://mail.python.org/mailman/listinfo/python-list
Re: c.l.py dead, news at 11 (was Re: Mangle function name with decorator?)
Hendrik van Rooyen m...@microcorp.co.za writes: Its kind of sad to see unladen swallow, which is just a promise, on the list, while Shedskin, which isn't, is ignored. Does this say something about big corporations vs the small man? I think the programs on the list were supposed to actually implement Python and extensions of Python, but not incompatible dialects. Otherwise Pyrex (for example) would also be on the list. -- http://mail.python.org/mailman/listinfo/python-list
Re: SQL Query shows error in program while it function correctly in psql interface
Hi, I have figured this out. Pls excuse me. thanks a lot Bijoy On Mon, Mar 30, 2009 at 12:41 PM, bijoy bijoy.fra...@gmail.com wrote: Hi, Following SQL assaignment is not working in Program. intable_bookname=SELECT book_name FROM table_book WHERE book_name='name'; where as this works perfectly fine with psql interface Pls help me on this Thanks a lot in advance Bijoy -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
Aahz a...@pythoncraft.com wrote: I find the trick of using a Python list to store the doubly-linked list difficult to understand (as opposed to the usual mechanism of a node class). I understand why it was done (time and space efficiency), but I also still feel emotionally that it's somewhat sick and perverted. I probably would feel more comfortable if the doubly-linked list were abstracted out and commented. Heck, the whole thing needs unit tests. Hmmm... Lets compare the two. Here is the length three list $ python Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26) [GCC 4.3.2] on linux2 Type help, copyright, credits or license for more information. L = [] for i in xrange(100): ... L.append([1,2,3]) ... import os os.getpid() 28134 (from top) 28134 ncw 20 0 58860 53m 1900 S0 2.6 0:02.62 python vs a Node class with __slots__ (for efficiency) $ python Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26) [GCC 4.3.2] on linux2 Type help, copyright, credits or license for more information. class Node(object): ... __slots__ = [prev, next, this] ... def __init__(self, prev, next, this): ... self.prev = prev ... self.next = next ... self.this = this ... Node(1,2,3) __main__.Node object at 0xb7e897cc Node(1,2,3).prev 1 L = [] for i in xrange(100): ... L.append(Node(1,2,3)) ... import os os.getpid() 28203 (from top) 28203 ncw 20 0 43364 38m 1900 S0 1.9 0:04.41 python So the Node class actually takes less memory 38 Mbytes vs 53 Mbytes for the list. -- Nick Craig-Wood n...@craig-wood.com -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
mark.sea...@gmail.com writes: So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from object. Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. I think I understand your problem. The short story is: if you derive from int or long, you won't be able to change the value because the underlying value is immutable. To get mutable values, you'll need to subclass object and implement the int-like functionality you need. Fortunately, this is quite easy. I assume that by print in hex format you're referring to the % operator, such as '%x' % your_instance. For it to work, you need to define an __int__ method (not to be confused with __init__!), which will get called when coercion to integer is required. For example: class Foo(object): def __init__(self, initval=0): self._value = initval # a bunch of methods for getting/setting bits def __int__(self): return self._value x = Foo(100) '0x%x' % x '0x64' x._value = 1000# in real code you'd do this by setting the # bits or whatever '0x%x' % x '0x3e8' -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
mark.sea...@gmail.com wrote: Python 2.5.3 for business reasons. So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from object. Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. In the past, someone referred you to the intbv class in MyHDL. You mentioned that it does more than you want. However, it seems to me that what intbv really does, is to solve the kind of issues that you are struggling with. Perhaps you want to look at it again. Jan -- Jan Decaluwe - Resources bvba - http://www.jandecaluwe.com Python as an HDL: http://www.myhdl.org VHDL development, the modern way: http://www.sigasi.com Analog design automation: http://www.mephisto-da.com World-class digital design: http://www.easics.com -- http://mail.python.org/mailman/listinfo/python-list
Re. suid/sudo in python
Ben Finney wrote The key thing to realise is that, having relinquished privilege, the same process can't get it back again as easily. So if you need to do some tasks as a privileged user, do those *very* early and then drop the privileges for the rest of the life of the process. Taking this further, you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. I dont think this would be easy or convenient (if at all possible) in my case. I am trying to write a tiny web based application that will give an overall picture of LVM, Volume groups, Raid, SCSI and the underlying disk partitions. The administrative tools dealing with low level storage stack (e.g. fdisk, pvcreate, vgcreate, lvcreate, mdadm etc.) need to be run as root. However since this runs behind apache. Apache creates a separate user for the webserver. Hence the CGI scripts or any other tools that they call run as that user. The solution currently is - Write the CGI program in C, put setuid(0), setgid(0) statements in that file and then perform any other actions (including calling other scripts) - Set the S bit of the executable of the CGI binary compiled from the C file (chmod +S xxx.cgi) Yeah yeah Security! HOLE!! etc but please note that this is running on linux on vmware on an otherwise secure system. So whats the best way of doing this in python? -- http://mail.python.org/mailman/listinfo/python-list
Re: smtplib problem with newly rebuilt Debian/lenny system
try s=smtplib.SMTP('127.0.0.1') instead. I'm guessing that it's trying to bind to the IPv6 or some other non IPv4 localhost instance. On Wed, Mar 18, 2009 at 11:25 AM, cassiope f...@u.washington.edu wrote: A hard drive failure forced me to rebuild my main system. Just a few things haven't been restored; one of them is a python script which is used to email users of important events. In attempting to diagnose the cause, I tried directly executing the lines inside the python2.5 interpreter: import smtplib s= smtplib.SMTP('localhost') but the second line causes a traceback: File stdin, line 1, in module File /usr/lib/python2.5/smtplib.py, line 244, in __init__ (code, msg) = self.connect(host, port) File /usr/lib/python2.5/smtplib.py, line 310, in connect raise socket.error, msg socket.error: (97, 'Address family not supported by protocol') This is with exim4 and python2.5 on a newly installed lenny system. No error messages appear in /var/log or /var/log/exim4 directories. Helpful clues or pointers to relevant documentation would be appreciated! -f -- http://mail.python.org/mailman/listinfo/python-list -- We are all slave to our own paradigm. -- Joshua Williams If the letters PhD appear after a person's name, that person will remain outdoors even after it's started raining. -- Jeff Kay Fascism is a term used to describe authoritarian nationalist political ideologies or mass movements that are concerned with notions of cultural decline or decadence and seek to achieve a millenarian national rebirth by exalting the nation or race, and promoting cults of unity, strength and purity. - Wikipedia The story of postwar American conservatism is best understood as a continual replay of a single long-standing debate. On one side are those who have upheld the Burkean ideal of replenishing civil society by adjusting to changing conditions. On the other are those committed to a revanchist counterrevolution, the restoration of America's pre-welfare state ancien regime. And, time and again, the counterrevolutionaries have won. The result is that modern American conservatism has dedicated itself not to fortifying and replenishing civil society but rather to weakening it through a politics of civil warfare. -- Sam Tanenhaus -- http://mail.python.org/mailman/listinfo/python-list
Caught out by daylight saving :-(
Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
On Mar 30, 1:47 pm, CinnamonDonkey cinnamondon...@googlemail.com wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) Take a look at the datetime docs http://docs.python.org/library/datetime.html#datetime.tzinfo.dst -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
these are utilities i use that might help: def parse_utc_date(day, formats=None): ''' Return the epoch for a given UTC date. ''' if day is None: return time() if formats is None: formats = ('%Y-%m-%d %H:%M:%S %Z', '%Y-%m-%d %Z', '%Y-%B-%d %Z') day = day.strip() if not day.endswith('UTC'): day += ' UTC' exception = None for format in formats: try: return timegm(strptime(day, format)) except Exception, e: #LOG.debug(format_exc()) exception = e if exception: raise ValueError(_('Could not parse %s: %s') % (day, exception)) else: raise ValueError(_('Could not parse %s') % (day)) def format_utc_date(epoch, format='%Y-%m-%d %H:%M:%S UTC'): date_ = datetime.utcfromtimestamp(epoch) return date_.strftime(format) andrew CinnamonDonkey wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Re. suid/sudo in python
On Mon, Mar 30, 2009 at 5:17 PM, andrew cooke and...@acooke.org wrote: Rustom Mody wrote: Ben Finney wrote The key thing to realise is that, having relinquished privilege, the same process can't get it back again as easily. So if you need to do some tasks as a privileged user, do those *very* early and then drop the privileges for the rest of the life of the process. Taking this further, you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. I dont think this would be easy or convenient (if at all possible) in my case. I am trying to write a tiny web based application that will give an overall picture of LVM, Volume groups, Raid, SCSI and the underlying disk partitions. The administrative tools dealing with low level storage stack (e.g. fdisk, pvcreate, vgcreate, lvcreate, mdadm etc.) need to be run as root. i think you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. Yes I guess this is the proper way. But what I am looking for is not so much a proper way as a simple way Roughly something in python that is like sudo in shell(??) [Dont know if this is a good analogy] You see security is not really at issue here. Rather grappling with stuff that has been armored for much more stringent security(like apache). in this case, for example, that would have absolutely nothing to do with interfacing to the web - it would focus only on the particular tasks you need to do with the administrative tools (it would also take care, for example, to allow only read-like commands to be executed, by exposing explicit methods for those rather than the unix commands as a whole) (are you sure the information you need is not available via reading /proc?) andrew -- http://mail.python.org/mailman/listinfo/python-list
Accessing shell output from HTTP
Hi there, I would like users of my web application to be able to download a backup file of a database (using* *MySQL's *mysqldump* command). My strategy is to use *zipfile* to create a zip file object (with the * mysqldump* output as the contents of the zipped file) and then use * sys.stdout* to send the zip file object to the user as a file for them download. The zipping bit and file delivery is all sorted. Getting the output from * mysqldump* is my problem and I'm not even sure (given that, as I understand it, it's an asynchronous call to shell via an HTTP thread) it is even possible. This is as far as I've got: import subprocess as sp p1 = sp.Popen('mysqldump --opt --user=[username]--password=[password] [databasename]',stdout=sp.PIPE,shell=True) backupfile=p1.communicate()[0] If I type the above into a Python prompt and print *backupfile* I will get the expected result, but when I'm going through CGI (the script, called from a web browser, is supposed to capture the output into the variable) nothing is being returned by communicate(). Is this possible? Or am I barking up the wrong tree? Cheers, Brendon -- http://mail.python.org/mailman/listinfo/python-list
Re: PyFits for Windows?
W. eWatson wrote: It looks like PyFits downloads are for Linux. Isn't there anything available for Win (xp)? I'm now on the scipy mail list. Things look hopeful, according to the first respondent, to meet my criteria mentioned in another sub-thread to this one: I'm hoping the use of this library will be relative simple for my purposes, which are basically to write an image to a fits file with a somewhat simple header, which might include lat/long, date, image size, date-time, and a comment. Apparently, the first chapter or several pages or so of a manual distributed with PyFits is enough. -- 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: Re. suid/sudo in python
Rustom Mody wrote: Ben Finney wrote The key thing to realise is that, having relinquished privilege, the same process can't get it back again as easily. So if you need to do some tasks as a privileged user, do those *very* early and then drop the privileges for the rest of the life of the process. Taking this further, you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. I dont think this would be easy or convenient (if at all possible) in my case. I am trying to write a tiny web based application that will give an overall picture of LVM, Volume groups, Raid, SCSI and the underlying disk partitions. The administrative tools dealing with low level storage stack (e.g. fdisk, pvcreate, vgcreate, lvcreate, mdadm etc.) need to be run as root. i think you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. in this case, for example, that would have absolutely nothing to do with interfacing to the web - it would focus only on the particular tasks you need to do with the administrative tools (it would also take care, for example, to allow only read-like commands to be executed, by exposing explicit methods for those rather than the unix commands as a whole) (are you sure the information you need is not available via reading /proc?) andrew -- http://mail.python.org/mailman/listinfo/python-list
CPython and C++ object GC
Hello Everybody, I would like to use a C++ gui library with the following (simplified) interface in Python. #include stdio.h class Gui; class GuiObject { public: GuiObject(Gui *Gui) {printf(creating GuiObject(gui: %X)\n, Gui);} ~GuiObject() {printf(deleting GuiObject\n);} void Move(int x, int y) {printf(GuiObject move(%d, %d)\n, x, y);}; }; class Gui { public: Gui() {printf(creating Gui\n);} ~Gui() {printf(deleting Gui\n);} GuiObject* AddImage() { GuiObject* ob = new GuiObject(this); return ob; } void Print() {printf(Gui: %X\n, this);} }; int main() { Gui *gui = new Gui(); gui-Print(); GuiObject *obj = gui-AddImage(); obj-Move(50, 50); /*GuiObject *obj2 = new GuiObject(gui); // not allowed delete obj2;*/ delete obj; delete gui; return 0; } I created the Python Gui and GuiObject classes (PyTypeObject), and added it to main module (PyModule_AddObject). It works, but there is a problem at the Gui::AddImage(), with constructs a new GuiObject, which is available in Python layer but finally it is not collected and freed by GC: ... obj = _PyObject_New(GuiObjectType); PyObject_Init(obj, GuiObjectType); ... I cannot invoke the GuiObject object constructor directly from Python, because of the implementation of the C++ gui library (in this case it would be collected). I use the embedded CPython as an interpreter, so I cannot add additional external .py file for it. So the following Python code would be the target: gui = GUI(); background = gui.AddImage(); #background = GuiObject(gui); -- Collected but not allowed background.ImageFile(bg.jpg); background.Move(0, 0); ... How could I implement the AddImage function in order to be freed the constructed object at the end? Thanks in advance! All-the-best, Csaba -- http://mail.python.org/mailman/listinfo/python-list
Re: tkinter questions: behavior of StringVar, etc
On 3/30/2009 3:37 AM Eric Brunel apparently wrote: The object traditionally called root is in fact an instance of the tcl interpreter that will get the commands generated by the Tkinter module. Due to tk architecture, creating this interpreter will also create a window, which is inteneded to be your application's main window. This window is called '.' in tcl/tk. The root object in Tkinter then represents this '.' window. So the instance of Tk is actually 2 things: - The interpreter itself; - The main window for your application. OK. As for when you should create explicitely an instance of Tk, well, I'd say always ;-) Creating an instance of Frame without creating a Tk instance first will actually create one, but you'll have no direct access to it. If I start by creating a frame `f`, then ``f.master`` is the root. Still, I take your point. And you might want an access to it for quite a number of reasons: hiding it, make it an icon, add menus to it, and so on... All these operations can be done on actual windows, not on a Frame which is just a container widget. Useful. Thanks. All Tkinter widget actually reference their interpreter in their tk attribute. The StringVar will probably just use that. Yes, I see how this works now. The Tk instance is registered in a hidden variable in the Tkinter module. When you don't specify a master, it'll use the latest created Tk instance one by default. BTW, the latest should be the only one: it is quite unsafe to create several Tk instances in the same application. I have no desire to do this, but might you pin down unsafe? I guess that having a window automatically created when you just try to instantiate a variable has been considered weird. But it's just a guess. Yes, I am making that same guess. Thanks! Alan Isaac -- http://mail.python.org/mailman/listinfo/python-list
Re: how to optimize zipimport
On Mar 26, 1:38 pm, John Machin sjmac...@lexicon.net wrote: On Mar 26, 2:06 pm, Coonay fla...@gmail.com wrote: see,the zipimort takes nearly 0.5 second D 03-25 07:53PM 21.374 Loading __main__ I 03-25 07:53PM 21.455 zipimporter('/base/data/home/apps/coonay/1.332322118600950324/ django.zip', '') ?? zipimport.Zipimporter() has one arg, not two. W 03-25 07:53PM 22.046 appengine_django module On Mar 26, 10:41 am, Coonay fla...@gmail.com wrote: in my mudule ,i import another mudule from a zip , when i call my mudle method,the module in the zip will be import from the zip every time,that slow down the operation, i try to search the some workarodnd or solution but i don't get one, i don't use zipimport directly,just like u said i put the zip in the sys.path Why are you explicitly using the zipimport module? In other words, why don't you put the full path of the zip file in sys.path and then just use the normal import module_in_the_zip mechanism? Note that this i found the the module in the zip reloaded everytime the code is called,i mean, say ,first time it take me 1 second to call a method in the zip,but it take another 1 second to call the mothod for another time ,and so on can/should be done once at the top of your calling module. In other words, the import code is executed when the calling module is imported by your main script, not every time you call a method in your calling module. In my developing environment ,there is a limitation of file number that i can deploy,such as i 'm only allowed to deploy 100 python files,so i have to zip some module Alternatively, if you feel you *must* use zipimport, what's to stop you doing that once at the top of the calling module? Note: it may help when you reply to show a stripped-down version of your calling module, sufficient to back up your description of what is happening. HTH, John -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
Hi Chris, Thanx for the link... I had already found that. My problem is not finding information but more understanding it. I've only been Pythoning for a short while and I don't fully understand what the documentation is getting at sometimes. Is it saying that I should define a new class inheriting from tzinfo and refine the behaviour of the dst() function? If so, then what do I do with the class? On 30 Mar, 13:08, Chris cwi...@gmail.com wrote: On Mar 30, 1:47 pm, CinnamonDonkey cinnamondon...@googlemail.com wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) Take a look at the datetime docshttp://docs.python.org/library/datetime.html#datetime.tzinfo.dst -- http://mail.python.org/mailman/listinfo/python-list
Re: Programming Python 4th Edition?
Nick Craig-Wood wrote: I read Programming Python as an experienced programmer and like you I enjoyed the encyclopedic nature of it. So if it appeals to you I'd say go for it! The fact that it doesn't use the latest version of python isn't a problem - python doesn't change very quickly and emphasises backwards compatibility, even for the jump to 3.x. Cool .. glad to hear that .. esp since all my other Python books are even a bit more outdated :-) .. the only thing that I notice missing is coverage of the subprocess module which I will be using a fair bit I think. I had a 40% off coupon for our local Borders, so I couldn't pass that up to get myself a copy of this book. No regrets. Cheers, Esmail -- http://mail.python.org/mailman/listinfo/python-list
Re: Re. suid/sudo in python
The outline of what I do (in C) is: 1. Write the CGI program in C, put setuid(0), setgid(0) statements in that file and then perform any other actions (including calling other scripts) 2. Set the S bit of the executable of the CGI binary compiled from the C file (chmod +S xxx.cgi) The C code runs thats compiled to xxx.cgi is roughly this: main(argc, argv) { setuid(0); setgid(0); /* IO plumbing for get/post */ execv(/usr/lib/cgi-bin/main.sh,argv); } where main.sh does all the root-ish things in shell. Now I'll be honest here. This is a friend's code. He's written it in C + shell. I said an all-python solution may be easier. He said Show me! Now I gather ( http://mail.python.org/pipermail/python-list/2000-July/044690.html ) this is doable in perl and straightforward in C but not possible in python -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
There isn't any right answer. There are two very different ways you can interpret daylight savings time on a time conversion. I suspect you're on Windows, trying to look at an old file's datestamp, and expect it to look like Windows displays it. But Windows isn't even consistent with itself, doing something different on a FAT system than on NTFS. For most of my own purposes, I've decided to only store the UTC times for things. Local time is useful only for interactive display. And that interactive display is calculated according to some context. To illustrate the problem, suppose you were in Chicago last month, and modified a file at 2:00 pm, CST. And now you are located in PDT time zone, and want to know when the file was last modified. Should you convert the time zone and daylight savings, or should you convert only time zone, or should you display the time as it was known to you at the original change? And to make it more complex, suppose the disk drive involved was located in France. Just what time is correct? Anything other than UTC is subject to confusion. CinnamonDonkey wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
Ah, I think I needed to use fromtimestamp() and not utcfromtimestamp (). :-) On 30 Mar, 13:42, CinnamonDonkey cinnamondon...@googlemail.com wrote: Hi Chris, Thanx for the link... I had already found that. My problem is not finding information but more understanding it. I've only been Pythoning for a short while and I don't fully understand what the documentation is getting at sometimes. Is it saying that I should define a new class inheriting from tzinfo and refine the behaviour of the dst() function? If so, then what do I do with the class? On 30 Mar, 13:08, Chris cwi...@gmail.com wrote: On Mar 30, 1:47 pm, CinnamonDonkey cinnamondon...@googlemail.com wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) Take a look at the datetime docshttp://docs.python.org/library/datetime.html#datetime.tzinfo.dst -- http://mail.python.org/mailman/listinfo/python-list
Re: tkinter questions: behavior of StringVar, etc
On 3/30/2009 3:37 AM Eric Brunel apparently wrote: The string representation of Tkinter objects seems to be a design principle in this module: it'll always evaluate to the representation this object has at tcl level. Since a XxxVar is represented by an actual variable at tcl level, its string representation is the name of this variable. I guess it's quite easier to build the commands that'll be passed to the tcl interpreter this way: you don't have to check the type of the objects you handle, but pass them through str and insert the result directly in the command. This is a helpful answer: it feels right and can be explored further. Thanks, Alan -- http://mail.python.org/mailman/listinfo/python-list
running pyhton IDLE on windows vista
Hi guys , I am facing problems running python25 on vista . i was able to successfully install it but when i try to run it then, its throws errors saying Firewall issues .. I tried disabling the firewall but no go.. Thanks in advance!! -- http://mail.python.org/mailman/listinfo/python-list
Re: database connection error - postgresql
hi, I figured out these too. Pls excuse me Thanks Bijoy On Mon, Mar 30, 2009 at 1:30 PM, bijoy bijoy.fra...@gmail.com wrote: Hi, *code:* (only the class definiton and Database connection part) import pg __metaclass__=type class addbook: conn=pg.connect('secondbooks.db') curs=conn.cursor() *error:* conn=pg.connect(secondbooks.db) pg.InternalError: FATAL: database secondbooks.db does not exist In fact i have a database called secondbooks in postgresql. Pls help on this as i am new to python. Thanks in advance Bijoy -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
It's not that fancy, but yes I am on windows. It's a script being called by Cruise Control .NET. They pass in a time stamp on the command line, MMDD HH:MM:SS and I need to advance it by 5 minutes before writing it back out to STDOUT to fake a source control modification. The process stopped working because it was always returning a time stamp -1 hr due to daylight saving. Changing utcfromtimestamp() to fromtimestamp() seems to have fixed it. On 30 Mar, 13:56, Dave Angel da...@dejaviewphoto.com wrote: There isn't any right answer. There are two very different ways you can interpret daylight savings time on a time conversion. I suspect you're on Windows, trying to look at an old file's datestamp, and expect it to look like Windows displays it. But Windows isn't even consistent with itself, doing something different on a FAT system than on NTFS. For most of my own purposes, I've decided to only store the UTC times for things. Local time is useful only for interactive display. And that interactive display is calculated according to some context. To illustrate the problem, suppose you were in Chicago last month, and modified a file at 2:00 pm, CST. And now you are located in PDT time zone, and want to know when the file was last modified. Should you convert the time zone and daylight savings, or should you convert only time zone, or should you display the time as it was known to you at the original change? And to make it more complex, suppose the disk drive involved was located in France. Just what time is correct? Anything other than UTC is subject to confusion. CinnamonDonkey wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString = 20090330 15:45:23 timeFormat = '%Y-%m-%d %H:%M:%S' modificationTime = datetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance = datetime.timedelta( minutes=5 ) modificationTime = modificationTime + minutesToAdvance datetimeString = str ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString = 20090330T15:50:23 But instead I get: datetimeString = 20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list
Re: Read Garmin XML (TCX) files in Python...
Elementtree solved the problem! I am very impressed with the speed you get from the cElementTree library. Thanks! -- http://mail.python.org/mailman/listinfo/python-list
Re: Wing IDE Backup configuration settings?
Find the .wingide folder in your home and tar it, at least in linux... On Sat, Mar 28, 2009 at 12:26 PM, John Doe j...@usenetlove.invalid wrote: Anyone know how to back up the configuration settings like font sizes and colors in the Wing IDE? Thanks. -- http://mail.python.org/mailman/listinfo/python-list -- Nacho Linux Counter #156439 -- http://mail.python.org/mailman/listinfo/python-list
Re: Improve module performance by reducing disk reads
Since the email contains no code, I can only assume you're using the bult-in open() call, and file.read(). If you didn't specify a bufsize, a system default is used. I seriously doubt if 0 is the default. Since it's already buffered, additional buffering by you might have little effect, or even negative effect. I'd suggest explicitly specifying a buffer size in the open() call, starting with 4096, as a good starting place. Then I'd do benchmarks with larger and smaller values, to see what differences it might make. The only time additional buffering tends to be useful is if you know the file usage pattern, and it's predictable and not sequential. Even then, it's good to know the underlying buffer's behavior, so that your optimizations are not at cross purposes. I'd expect your performance problems are elsewhere. kian tern wrote: Hi all, I'm writing in Python for about 2 weeks (moved from Perl) I've ported one of my modules which is a parser for a binary format (see link bellow for the format specs) http://etidweb.tamu.edu/cdrom0/image/stdf/spec.pdf In the first version of the parser I was reading exactly the amount of data I need to parse For example 4 bytes per each header The STDF files tend to be about 40+ MB size with 100K+ records, so I had at least 1 disk read per record, sometimes 2. Obviously it's not an efficient way to do it. I've created a buffer which reads 4K chunks per read and then the module parses the data. If the buffer becomes less then 512B I read another chunk and so on. Reducing 100K+ reads to around 15K reads should improve the performance. For some reason it did not happen. I've played with the chunk size, but nothing came out of it. Is there a Python specific way to optimise reading from disk? I'm using Python 2.5.2 with Ubuntu 8.10 32bit Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Re: c.l.py dead, news at 11 (was Re: Mangle function name with decorator?)
Its kind of sad to see unladen swallow, which is just a promise, on the list, whileShedskin, which isn't, is ignored. Does this say something about big corporations vs the small man? I think the programs on the list were supposed to actually implement Python and extensions of Python, but not incompatible dialects. Otherwise Pyrex (for example) would also be on the list. for the record, the input for Shedskin is pure Python, so there is no added syntax or optional type declaration system. that said, I can understand it not being on some list for not being production-ready. thanks, mark dufour. -- http://mail.python.org/mailman/listinfo/python-list
Thoughts on language-level configuration support?
I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available at http://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. The included example implements the first bit and hints at the third, defining a function that looks up what variable its output will be assigned to and tries to find a corresponding value from a configuration source. It's very preliminary, but I hope it gives a flavor of the general idea. Any thoughts or feedback would be greatly appreciated. -- http://mail.python.org/mailman/listinfo/python-list
Re: Re. suid/sudo in python
On Mar 30, 1:16 pm, Rustom Mody rustompm...@gmail.com wrote: Ben Finney wrote The key thing to realise is that, having relinquished privilege, the same process can't get it back again as easily. So if you need to do some tasks as a privileged user, do those *very* early and then drop the privileges for the rest of the life of the process. Taking this further, you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. I dont think this would be easy or convenient (if at all possible) in my case. I am trying to write a tiny web based application that will give an overall picture of LVM, Volume groups, Raid, SCSI and the underlying disk partitions. The administrative tools dealing with low level storage stack (e.g. fdisk, pvcreate, vgcreate, lvcreate, mdadm etc.) need to be run as root. However since this runs behind apache. Apache creates a separate user for the webserver. Hence the CGI scripts or any other tools that they call run as that user. The solution currently is - Write the CGI program in C, put setuid(0), setgid(0) statements in that file and then perform any other actions (including calling other scripts) - Set the S bit of the executable of the CGI binary compiled from the C file (chmod +S xxx.cgi) Yeah yeah Security! HOLE!! etc but please note that this is running on linux on vmware on an otherwise secure system. So whats the best way of doing this in python? Have a 'server process' running with root privilege ( a script started by a privileged account) and implement a protocol to ask for system info from your cgi scripts under apache. In python this is a lot easier than it sounds. The simplest case would be that to send a 'system command' to the server through a unix socket, the server executes the command as received and returns the command output. Not more than a day work, I believe. Not much more secure that a setuid python script, also, maybe less :-) A better implementation would be such that the protocol only allows for a set of pre-defined safe requests ... Ciao -- FB Ciao -- FB -- http://mail.python.org/mailman/listinfo/python-list
Re: database connection error - postgresql
On Mon, 30 Mar 2009 13:30:18 +0530 bijoy bijoy.fra...@gmail.com wrote: conn=pg.connect(secondbooks.db) pg.InternalError: FATAL: database secondbooks.db does not exist In fact i have a database called secondbooks in postgresql. If it is called secondbooks then why are you connecting to secondbooks.db in the code? -- D'Arcy J.M. Cain da...@druid.net | Democracy is three wolves http://www.druid.net/darcy/| and a sheep voting on +1 416 425 1212 (DoD#0082)(eNTP) | what's for dinner. -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
On Mar 30, 2:30 am, Jan Decaluwe j...@jandecaluwe.com wrote: mark.sea...@gmail.com wrote: Python 2.5.3 for business reasons. So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from object. Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. In the past, someone referred you to the intbv class in MyHDL. You mentioned that it does more than you want. However, it seems to me that what intbv really does, is to solve the kind of issues that you are struggling with. Perhaps you want to look at it again. Jan -- Jan Decaluwe - Resources bvba -http://www.jandecaluwe.com Python as an HDL:http://www.myhdl.org VHDL development, the modern way:http://www.sigasi.com Analog design automation:http://www.mephisto-da.com World-class digital design:http://www.easics.com- Hide quoted text - - Show quoted text - Hi Hrvoje, Jan; This is about what I actually originally had, it was derived from object, like the intbv class from MyHDL. And so my ShadowRegister class was modeled similar to that. It worked grea. Then ChipRegister was made to be a subclass of ShadowRegister. It needs to read HW reg and adjust ChipRegister value, write HW reg and adjust ShadowRegister value. As mentioned, that's when printing in hex gave an error said it needed an int. My story from that point continues from my last past. :) -- http://mail.python.org/mailman/listinfo/python-list
Re: Caught out by daylight saving :-(
That should work except for the few minutes before or after the daylight-savings-time change. In other words between 1:55 and 2:01am on that particular date, twice a year. During that time you still have to decide what you want to have happen, and then test your program to make sure it matches your expectations. Remember there's an hour in the fall whose corrected time is ambiguous, and there's a representation in the spring that is invalid (there are no valid times between 2 and 3 on that day). Or you can just punt, and decide nobody's going to care during those times. CinnamonDonkey wrote: It's not that fancy, but yes I am on windows. It's a script being called by Cruise Control .NET. They pass in a time stamp on the command line, MMDD HH:MM:SS and I need to advance it by 5 minutes before writing it back out to STDOUT to fake a source control modification. The process stopped working because it was always returning a time stamp -1 hr due to daylight saving. Changing utcfromtimestamp() to fromtimestamp() seems to have fixed it. On 30 Mar, 13:56, Dave Angel da...@dejaviewphoto.com wrote: There isn't any right answer. There are two very different ways you can interpret daylight savings time on a time conversion. I suspect you're on Windows, trying to look at an old file's datestamp, and expect it to look like Windows displays it. But Windows isn't even consistent with itself, doing something different on a FAT system than on NTFS. For most of my own purposes, I've decided to only store the UTC times for things. Local time is useful only for interactive display. And that interactive display is calculated according to some context. To illustrate the problem, suppose you were in Chicago last month, and modified a file at 2:00 pm, CST. And now you are located in PDT time zone, and want to know when the file was last modified. Should you convert the time zone and daylight savings, or should you convert only time zone, or should you display the time as it was known to you at the original change? And to make it more complex, suppose the disk drive involved was located in France. Just what time is correct? Anything other than UTC is subject to confusion. CinnamonDonkey wrote: Hi All, I had the following bit of code which was working fine until we went into Daylight saving this weekend, now the result is an hour out. timeString =20090330 15:45:23 timeFormat =%Y-%m-%d %H:%M:%S' modificationTime =atetime.datetime.utcfromtimestamp( time.mktime ( time.strptime( timeString, timeFormat ) ) ) minutesToAdvance =atetime.timedelta( minutes=5 ) modificationTime =odificationTime + minutesToAdvance datetimeString =tr ( modificationTime ).replace( ' ', 'T' ) The expected result should be: datetimeString =20090330T15:50:23 But instead I get: datetimeString =20090330T14:50:23 I believe it is going wrong at either the mktime() or utcfromtimestamp () stage. What is the correct way to fix this compensating for daylight saving automatically? Regards, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
It needs to read HW reg and adjust ChipRegister value, or ShadowRegister and change the HW value (order was reversed). I will look at MyHDL again though to see if there is some reason it can print class subclassed from intbv, or if it even has a class subclassed from intbv, without casting as a long in the main program. -- http://mail.python.org/mailman/listinfo/python-list
Re: c.l.py dead, news at 11 (was Re: Mangle function name with decorator?)
On Mar 30, 3:31 pm, srepmub mark.duf...@gmail.com wrote: for the record, the input for Shedskin is pure Python, so there is no added syntax or optional type declaration system. that said, I can understand it not being on some list for not being production-ready. thanks, mark dufour. But does ShedSkin accepts all valid Python constructs? I thought there were restrictions. -- http://mail.python.org/mailman/listinfo/python-list
Re: tkinter questions: behavior of StringVar, etc
Alan G Isaac wrote: [snip] On 3/30/2009 3:37 AM Eric Brunel apparently wrote: The Tk instance is registered in a hidden variable in the Tkinter module. When you don't specify a master, it'll use the latest created Tk instance one by default. BTW, the latest should be the only one: it is quite unsafe to create several Tk instances in the same application. I have no desire to do this, but might you pin down unsafe? It is not supposed to be unsafe at tcl level, as it supports several interpreters side by side in the same application. It is unsafe at user level, precisely because creating a StringVar might put it in the interpreter you don't want, leading to weird errors and unexpected results. So you *can* use several Tk instances in the same application, but then you really should specify a master for absolutely everything, or you'll get bitten at some point. Thanks! Alan Isaac YW. HTH. - Eric - -- http://mail.python.org/mailman/listinfo/python-list
Deleteing empty directories
Hi All, I've been scratching my head all afternoon trying to work out the best/ quickest way is to delete empty directories within a tree (Windows). I've looked at os.walk() but it seems to traverse the directory tree in the wrong order (is it possible to reverse the order?) It seems the only way is to manually walk the tree myself recursively and then back up deleteing a directory if it is found to be empty. Any ideas? Cheers, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list
Re: c.l.py dead, news at 11 (was Re: Mangle function name with decorator?)
On Mon, 30 Mar 2009 09:46:40 +0200, Hendrik van Rooyen wrote: Its kind of sad to see unladen swallow, which is just a promise, on the list, while Shedskin, which isn't, is ignored. Does this say something about big corporations vs the small man? No, what it says is that I had just read a post about Unladen Swallow two minutes before, and I forgot completely about Shedskin. Although I took a few minutes to google, I knew I'd probably missed something, which is why I said there are *at least* thirteen implementations of Python. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: complaints about no replies last week
On Mar 28, 11:07 am, Aaron Brady castiro...@gmail.com wrote: Hi, A week ago, I posted a question and an idea about Python's garbage collector. I got a few replies. Some days later, I posted a mock-up implementation of it, and got *NO* replies. Does this mean: a) It works b) It doesn't work c) It's not particularly applicable to Python at that point (particularly) d) It's not news Thanks and sincerely. P.S. Non-plugging links:http://groups.google.com/group/comp.lang.python/browse_thread/thread/...http://groups.google.com/group/comp.lang.python/browse_thread/thread/... e) It is a hard or complex problem that requires significant investment of time on a problem or approach that few people are interested in at the moment. f) The description is confusing or incomplete or the source code is long and difficult to read. I myself asked about how to write a library to efficiently do union and intersection of sets containing time intervals some time ago on this list and got little to no answers. It is a tricky problem. Since I was getting paid I got an O(n*n) solution working. People on this list on the other hand do not get paid and answer whatever strikes their fancy. Sometimes the question is hard or confusing and nobody is motivated enough to answer. -- http://mail.python.org/mailman/listinfo/python-list
Re: Deleteing empty directories
CinnamonDonkey wrote: Hi All, I've been scratching my head all afternoon trying to work out the best/ quickest way is to delete empty directories within a tree (Windows). I've looked at os.walk() but it seems to traverse the directory tree in the wrong order (is it possible to reverse the order?) It seems the only way is to manually walk the tree myself recursively and then back up deleteing a directory if it is found to be empty. In general, the place to look for these things in the stdlib is usually shutil. (Slightly awkward that shell in Windows means everything that happens on the desktop, while shell in Unix means everything *except* what happens on the desktop! This is the Unix meaning.) And sure enough... rmtree( path[, ignore_errors[, onerror]]) Delete an entire directory tree (path must point to a directory). If ignore_errors is true, errors resulting from failed removals will be ignored; if false or omitted, such errors are handled by calling a handler specified by onerror or, if that is omitted, they raise an exception. If onerror is provided, it must be a callable that accepts three parameters: function, path, and excinfo. The first parameter, function, is the function which raised the exception; it will be os.listdir(), os.remove() or os.rmdir(). The second parameter, path, will be the path name passed to function. The third parameter, excinfo, will be the exception information return by sys.exc_info(). Exceptions raised by onerror will not be caught. TJG -- http://mail.python.org/mailman/listinfo/python-list
Re: c.l.py dead, news at 11 (was Re: Mangle function name with decorator?)
Steven D'Aprano wrote: On Mon, 30 Mar 2009 09:46:40 +0200, Hendrik van Rooyen wrote: Its kind of sad to see unladen swallow, which is just a promise, on the list, while Shedskin, which isn't, is ignored. Does this say something about big corporations vs the small man? No, what it says is that I had just read a post about Unladen Swallow two minutes before, and I forgot completely about Shedskin. Although I took a few minutes to google, I knew I'd probably missed something, which is why I said there are *at least* thirteen implementations of Python. I was going to post in your defence (before realising that you were more than capable of doing that for yourself). It was obviously just a casual list, not the official definitive everything-not-here-is-not-valid Python-lookalikes competition entrants list. :) But I was impressed you managed to get so many: I was aware of everything on that list, but I'm quite sure I couldn't have named them all together. TJG -- http://mail.python.org/mailman/listinfo/python-list
urllib2, proxies, and pac files on OS X
Hi all, urllib2 correctly detects proxies as configured in my preferences pane on OS X 10.5: Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type help, copyright, credits or license for more information. import urllib2 urllib2.ProxyHandler().proxies {'http': 'http://openproxy.in.tungle.com:8080'} However, when configuring a proxy via PAC file, this does not seem to be the case: Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type help, copyright, credits or license for more information. import urllib2 urllib2.ProxyHandler().proxies {} Is there any way to obtain (and parse using something like pacparser) the PAC file via urllib2 (or some other standard python library), or is this something I need to tackle using Cocoa (in my case PyObjC)? Thanks a lot! Mani -- http://mail.python.org/mailman/listinfo/python-list
create a log level for python logging module
I am trying to create a log level called userinfo for the python logging. I read the source code and tried to register the level to the logging namespace with the following source: from logging import Logger # create the custom log level class userinfo(Logger): def userinfo(self, msg, *args, **kwargs): if self.isEnabledFor(WARNING): self._log(WARNING, msg, args, **kwargs) # Register log level in the logging.Logger namespace Logger.userinfo = userinfo Has I am sure you guessed, it did not work. If you know how this is done or know what I am doing work or can provide a link to example code (because I have not been able to locate any), I would greatly appreciate it. My sincere and heartfelt thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Re: Deleteing empty directories
CinnamonDonkey wrote: Hi All, I've been scratching my head all afternoon trying to work out the best/ quickest way is to delete empty directories within a tree (Windows). I've looked at os.walk() but it seems to traverse the directory tree in the wrong order (is it possible to reverse the order?) the documentation for os.walk() explains how to reverse the order. http://docs.python.org/3.0/library/os.html#os.walk andrew It seems the only way is to manually walk the tree myself recursively and then back up deleteing a directory if it is found to be empty. Any ideas? Cheers, SHaun 8) -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Unit testing frameworks
Hi, I'm work on a testing framework for Python. Until now I have implemented the main features of PyUnit and JUnit 4.x. I like the annotation syntax of JUnit 4.x and it's theory concept is great therefore you can imagine how my framework will be. I plan a lot of additionally features which are neither part of Junit 4.5 nor PyUnit. Finding testcases automatically is a good idea. Alex -- http://mail.python.org/mailman/listinfo/python-list
Re: Deleteing empty directories
My understanding was that rmtree removes a whole tree not just the empty directories? eg. root - file1 - file2 - dir1 - dir2 - file3 - dir3 I would expect; dir1 and dir3 to be deleted and nothing else touched. My attempt came up with: import os import shutil def isDirEmpty( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: return True return False def RecurseTree( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: print Deleting Empty Dir '%s' % (path,) #shutil.rmtree(path) else: for item in contents: investigate = %s\\%s % (path, item) if os.path.isdir(investigate): RecurseTree( investigate ) if __name__ == '__main__': RecurseTree( rc:\temp ) But I'm not sure what the max recursion depth is in python? Plus I think this could be more efficient. On 30 Mar, 15:59, Tim Golden m...@timgolden.me.uk wrote: CinnamonDonkey wrote: Hi All, I've been scratching my head all afternoon trying to work out the best/ quickest way is to delete empty directories within a tree (Windows). I've looked at os.walk() but it seems to traverse the directory tree in the wrong order (is it possible to reverse the order?) It seems the only way is to manually walk the tree myself recursively and then back up deleteing a directory if it is found to be empty. In general, the place to look for these things in the stdlib is usually shutil. (Slightly awkward that shell in Windows means everything that happens on the desktop, while shell in Unix means everything *except* what happens on the desktop! This is the Unix meaning.) And sure enough... rmtree( path[, ignore_errors[, onerror]]) Delete an entire directory tree (path must point to a directory). If ignore_errors is true, errors resulting from failed removals will be ignored; if false or omitted, such errors are handled by calling a handler specified by onerror or, if that is omitted, they raise an exception. If onerror is provided, it must be a callable that accepts three parameters: function, path, and excinfo. The first parameter, function, is the function which raised the exception; it will be os.listdir(), os.remove() or os.rmdir(). The second parameter, path, will be the path name passed to function. The third parameter, excinfo, will be the exception information return by sys.exc_info(). Exceptions raised by onerror will not be caught. TJG -- http://mail.python.org/mailman/listinfo/python-list
Re: Deleteing empty directories
Revised: root + Dir1 + Dir2 + Dir3 + NotEmptyDir File1 File2 Result: Root + NotEmptyDir File1 File2 --- import os import shutil def isDirEmpty( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: return True return False def RecurseTree( path ): print RecurseTree( %s ) % (path,) if not os.path.isdir( path ): print RecurseTree( %s ) - NOT A DIRECTORY % (path,) return 0 contents = os.listdir( path ) for item in contents: investigate = %s\\%s % (path, item) if os.path.isdir(investigate): RecurseTree( investigate ) contents = os.listdir( path ) if len(contents) == 0: print Deleting Empty Dir '%s' % (path,) shutil.rmtree(path) if __name__ == '__main__': RecurseTree( rc:\temp ) On 30 Mar, 16:14, CinnamonDonkey cinnamondon...@googlemail.com wrote: My understanding was that rmtree removes a whole tree not just the empty directories? eg. root - file1 - file2 - dir1 - dir2 - file3 - dir3 I would expect; dir1 and dir3 to be deleted and nothing else touched. My attempt came up with: import os import shutil def isDirEmpty( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: return True return False def RecurseTree( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: print Deleting Empty Dir '%s' % (path,) #shutil.rmtree(path) else: for item in contents: investigate = %s\\%s % (path, item) if os.path.isdir(investigate): RecurseTree( investigate ) if __name__ == '__main__': RecurseTree( rc:\temp ) But I'm not sure what the max recursion depth is in python? Plus I think this could be more efficient. On 30 Mar, 15:59, Tim Golden m...@timgolden.me.uk wrote: CinnamonDonkey wrote: Hi All, I've been scratching my head all afternoon trying to work out the best/ quickest way is to delete empty directories within a tree (Windows). I've looked at os.walk() but it seems to traverse the directory tree in the wrong order (is it possible to reverse the order?) It seems the only way is to manually walk the tree myself recursively and then back up deleteing a directory if it is found to be empty. In general, the place to look for these things in the stdlib is usually shutil. (Slightly awkward that shell in Windows means everything that happens on the desktop, while shell in Unix means everything *except* what happens on the desktop! This is the Unix meaning.) And sure enough... rmtree( path[, ignore_errors[, onerror]]) Delete an entire directory tree (path must point to a directory). If ignore_errors is true, errors resulting from failed removals will be ignored; if false or omitted, such errors are handled by calling a handler specified by onerror or, if that is omitted, they raise an exception. If onerror is provided, it must be a callable that accepts three parameters: function, path, and excinfo. The first parameter, function, is the function which raised the exception; it will be os.listdir(), os.remove() or os.rmdir(). The second parameter, path, will be the path name passed to function. The third parameter, excinfo, will be the exception information return by sys.exc_info(). Exceptions raised by onerror will not be caught. TJG -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mon, 30 Mar 2009 06:40:00 -0700, jfager wrote: I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available at http://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. What's a configuration point? Where do I find them in my programs? The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. Why is an end user changing variables in my program? The included example implements the first bit and hints at the third, defining a function that looks up what variable its output will be assigned to and tries to find a corresponding value from a configuration source. It's very preliminary, but I hope it gives a flavor of the general idea. Not really. It would help if you explained what problem you are trying to solve, what people do now, and how what you suggest would make that easier. Having read your blog post, I'm going to take a wild stab at guessing what you mean: * Programs often have variables which relate to user-configurable options. For example, a basic list files command might include something like this: if sys.argv[1] == '-l': show_long_listing = True else: show_long_listing = False # ... # much later... for filename in directory(): if show_long_listing: print %s %s %s % (permissions(), filename, date()) else: print filename * The current solution is for the program author to define the interface and the implementation separately. For example, in the above code snippet, the command line option '-l' is the interface available to the end user, while the variable show_long_listing is the implementation used to implement configuration options in the program. * You propose to expose the variable show_long_listing and it's ilk directly to the user, presumable via some service which can interrogate the program, discover what configuration variables are available, and allow the user to stuff random values into them in the hope of getting new and exciting bugs^W behaviour. * This is better than current solutions to the question of getting configuration options from the user, like getopt and similar, because... ? * This would be better with syntactic support rather than a library or module because... ? Am I close? -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: smtplib problem with newly rebuilt Debian/lenny system
On Mar 27, 11:29 am, a...@pythoncraft.com (Aahz) wrote: [posted e-mailed, please respond to newsgroup] In article d37a66e9-55c2-437c-b613-009a62f71...@d2g2000pra.googlegroups.com, cassiope f...@u.washington.edu wrote: In attempting to diagnose the cause, I tried directly executing the lines inside the python2.5 interpreter: import smtplib s= smtplib.SMTP('localhost') but the second line causes a traceback: File stdin, line 1, in module File /usr/lib/python2.5/smtplib.py, line 244, in __init__ (code, msg) = self.connect(host, port) File /usr/lib/python2.5/smtplib.py, line 310, in connect raise socket.error, msg socket.error: (97, 'Address family not supported by protocol') This is with exim4 and python2.5 on a newly installed lenny system. No error messages appear in /var/log or /var/log/exim4 directories. What happens if you telnet localhost 25 This looks like a network setup issue. -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ At Resolver we've found it useful to short-circuit any doubt and just refer to comments in code as 'lies'. :-) --Michael Foord paraphrases Christian Muirhead on python-dev, 2009-3-22 Yes, that's what it was. Exim4 setup was bungled, so wasn't accepting localhost connections. Fixing that resolved the python error. -- http://mail.python.org/mailman/listinfo/python-list
recursive outline numbering for object trees
Hi, Here my problem description: Given the following class: class Node(object): def __init__(self, name, children=[], parent=None): self.name = name self.level = '' self.children = children self.parent = parent def __repr__(self): name = self.__class__.__name__ return %s %s % (self.name, self.level) def __iter__(self): yield self for child in self.children: child.parent = self for subchild in iter(child): yield subchild and the following example: tree1 = Node('root[1] ', [ Node('branch [1.1]', [ Node('leaf [1.1.1]', []), Node('leaf [1.1.2]', []), ]), Node('branch [1.2]', [ Node('leaf [1.2.1]', []), Node('leaf [1.2.2]', []), ]) ]) I would like to create a walk function which when given the root node (tree1) automatically sets the correct outline numbering for all its subnodes. such that for i in walk(tree): print i.level should give the following output: 1 1.1 1.1.1 1.1.2 1.2 1.2.1 1.2.2 Now, I have scoured the web and found this (http:// www.opensubscriber.com/message/python-list@python.org/9056939.html) solution from castironpi, which seems to work nicely: class up( Exception ): pass class down( Exception ): pass def outline(): stack = [1] while True: try: # print 'next' yield '.'.join(str(s) for s in stack) stack[-1]+= 1 except down: # print 'down' stack.append(1) except up: # print 'up' stack.pop(-1) stack[-1] += 1 def test_outline(): print o = outline() print o.next() print o.throw(down) print o.throw(down) print o.next() print o.throw(up) print o.throw(down) print o.next() running test_outline() generates the required output so, so I tried to incorporate the above into my walk function with mixed results (warning: it's ugly): from itertools import count def walk(node, level=outline(), last=None, i=count(1), root=True): '''tree walker assigns parent attribute, creates numbered outline ''' if root: node.level = level.next() yield node if last: node.level = last last = None if node.children: next = level.throw(down) elif i.next() == 5: # length of nodes (hardcoded here for tsting) raise StopIteration else: next = level.throw(up) for child in node.children: child.parent = node child.level = next or level.next() if child == node.children[-1]: last = child.level for subchild in walk(child, level, last, i, root=False): yield subchild works for tree = Node('root[1] ', [ Node('branch [1.1]', [ Node('leaf [1.1.1]', []), ]), Node('branch [1.2]', [ Node('leaf [1.2.1]', []), ]) ]) but barfs for the required tree1 (above). I've kinda hit a wall here, so any help would be appreciated. As an aside, if a solution is possible as an external walk function would it be possible to work in __iter__? Best, AliaK -- http://mail.python.org/mailman/listinfo/python-list
Pyowa Meeting this week
Hi, This is just a reminder that we have a Pyowa meeting this week. It will be held at Durham Center in Ames, IA on the ISU campus from 7-9 p.m. Directions are on the website (www.pyowa.org). Topics include the following: 1) What PyCon attendees thought of PyCon (likes, dislikes, etc) 2) Code snippets that they'd like to show that they learned about or created at PyCon 3) I attended a meeting about Python user groups and will share ideas with how we might improve ours 4) The last 10-20 minutes will probably be devoted to figuring out who will do what next time. If you're in the area, come on out! Bring your friends, even if they think Perl is the coolest thing since sliced bread. We'll set them straight! Mike Driscoll www.pyowa.org -- http://mail.python.org/mailman/listinfo/python-list
Re: Deleteing empty directories
On Mon, 30 Mar 2009 08:14:55 -0700, CinnamonDonkey wrote: My understanding was that rmtree removes a whole tree not just the empty directories? So it seems: os.mkdir('die-die-die') os.mkdir('die-die-die/stuff') shutil.rmtree('die-die-die') I think what you want is os.removedirs(). os.makedirs('root/die-die-die/empty/empty/empty') os.listdir('root') ['keep', 'die-die-die'] os.removedirs('root/die-die-die/empty/empty/empty') os.listdir('root') ['keep'] def isDirEmpty( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: return True return False That can be simplified to: # untested def isDirEmpty(path): return os.path.isdir(path) and not len(os.listdir(path)) def RecurseTree( path ): if not os.path.isdir( path ): return False What if it is a symbolic link to a directory? contents = os.listdir( path ) if len(contents) == 0: print Deleting Empty Dir '%s' % (path,) #shutil.rmtree(path) Why do you go to the trouble of defining isDirEmpty() and then not use it? else: for item in contents: investigate = %s\\%s % (path, item) if os.path.isdir(investigate): RecurseTree( investigate ) As soon as you start recursively walking over directories, you should use os.walk. It will almost certainly do what you want. if __name__ == '__main__': RecurseTree( rc:\temp ) But I'm not sure what the max recursion depth is in python? By default in my version: sys.getrecursionlimit() 1000 but it can be changed. Plus I think this could be more efficient. Probably, but why do you care? The file I/O probably will take 99% of the time, and I doubt you can improve that. Of course I could be wrong, so profile, profile, profile, and find out where the time really is being spent. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Pyowa Meeting this week
On Mar 30, 10:33 am, Mike Driscoll kyoso...@gmail.com wrote: Hi, This is just a reminder that we have a Pyowa meeting this week. It will be held at Durham Center in Ames, IA on the ISU campus from 7-9 p.m. Directions are on the website (www.pyowa.org). Topics include the following: 1) What PyCon attendees thought of PyCon (likes, dislikes, etc) 2) Code snippets that they'd like to show that they learned about or created at PyCon 3) I attended a meeting about Python user groups and will share ideas with how we might improve ours 4) The last 10-20 minutes will probably be devoted to figuring out who will do what next time. If you're in the area, come on out! Bring your friends, even if they think Perl is the coolest thing since sliced bread. We'll set them straight! Mike Driscollwww.pyowa.org Oops...I seem to be tired today. The meeting will take place on Thursday, April 2nd. Sorry about that! Mike -- http://mail.python.org/mailman/listinfo/python-list
distutils, No module named numpy.distutils.fcompiler.conv_template
I'm trying to compile the wrappers for ANN (Approximate Nearest Neighbor) from http://scipy.org/scipy/scikits/wiki/AnnWrapper, either the main one (scikits) or the attachment in the main page. However, the command python setup.py build produces the exception: ImportError: No module named numpy.distutils.fcompiler.conv_template There is no conv_template in numpy.distutils.fcompiler, but there is one at numpy.distutils. Grepping for conv_template at /usr/lib/python2.5/distutils/ produces no results, and grepping for it at /usr/lib/python2.5/site-packages/numpy/ returns only == /[...]/numpy/distutils/command/build_src.py:from numpy.distutils.conv_template import process_file as process_c_file /[...]/numpy/distutils/command/build_src.py: log.info(conv_template: %s % (target_file)) == i.e, it is being imported from distutils and not from fcompiler. What's going on here? It is an ubuntu bug? (intrepid) Am I missing some packages? This happens regardless of if the ANN library exists or not. If I try to softlink the distutils/conv_template.py module to the fcompiler directory, I start getting the same symptoms with other modules: numpy_distribution, extension, interactive. K. P.S: Traceback follows. ky...@home:~/downloads/ann$ python setup.py build running build running scons customize UnixCCompiler Found executable /usr/bin/gcc Traceback (most recent call last): File setup.py, line 41, in module classifiers = filter(None, classifiers.split(\n)), File /usr/lib/python2.5/site-packages/numpy/distutils/core.py, line 184, in setup return old_setup(**new_attr) File /usr/lib/python2.5/distutils/core.py, line 151, in setup dist.run_commands() File /usr/lib/python2.5/distutils/dist.py, line 974, in run_commands self.run_command(cmd) File /usr/lib/python2.5/distutils/dist.py, line 994, in run_command cmd_obj.run() File /usr/lib/python2.5/site-packages/numpy/distutils/command/build.py, line 38, in run self.run_command('scons') File /usr/lib/python2.5/distutils/cmd.py, line 333, in run_command self.distribution.run_command(command) File /usr/lib/python2.5/distutils/dist.py, line 993, in run_command cmd_obj.ensure_finalized() File /usr/lib/python2.5/distutils/cmd.py, line 117, in ensure_finalized self.finalize_options() File /usr/lib/python2.5/site-packages/numpy/distutils/command/scons.py, line 310, in finalize_options force = self.force) File /usr/lib/python2.5/site-packages/numpy/distutils/fcompiler/__init__.py, line 804, in new_fcompiler load_all_fcompiler_classes() File /usr/lib/python2.5/site-packages/numpy/distutils/fcompiler/__init__.py, line 715, in load_all_fcompiler_classes __import__ (module_name) File /usr/lib/python2.5/ihooks.py, line 405, in import_module m = self.load_tail(q, tail) File /usr/lib/python2.5/ihooks.py, line 458, in load_tail raise ImportError, No module named + mname ImportError: No module named numpy.distutils.fcompiler.conv_template -- Luis Zarrabeitia Facultad de Matemática y Computación, UH http://profesores.matcom.uh.cu/~kyrie -- Participe en Universidad 2010, del 8 al 12 de febrero de 2010 La Habana, Cuba http://www.universidad2010.cu -- http://mail.python.org/mailman/listinfo/python-list
Re: complaints about no replies last week
On Mon, 30 Mar 2009 07:50:49 -0700, pruebauno wrote: I myself asked about how to write a library to efficiently do union and intersection of sets containing time intervals some time ago on this list and got little to no answers. It is a tricky problem. With all the confidence of somebody who doesn't need to solve it, I can say, no, it's an easy problem, provided you use the correct data structure. What you want is an interval tree: http://en.wikipedia.org/wiki/Interval_tree Since I was getting paid I got an O(n*n) solution working. Just off the top of my head, I *think* you should be able to get that down to O(m * log n) where m is the size of one set and n the size of the other. Don't quote me on that though. People on this list on the other hand do not get paid We don't??? Damn! I was expecting a HUGE cheque at the end of the month! BTW Aaron, I haven't replied to your post about the garbage collector because that's one part of Python programing where I cherish my ignorance. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 30, 11:17 am, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Mon, 30 Mar 2009 06:40:00 -0700, jfager wrote: I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available at http://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. What's a configuration point? Where do I find them in my programs? A configuration point is what you create when you use this proposed feature. You find them in your programs wherever you (or whoever wrote them) defined them. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. Why is an end user changing variables in my program? Because you used this construct to tell them they could. It's not a hook for every variable, just the ones you want to expose. The included example implements the first bit and hints at the third, defining a function that looks up what variable its output will be assigned to and tries to find a corresponding value from a configuration source. It's very preliminary, but I hope it gives a flavor of the general idea. Not really. It would help if you explained what problem you are trying to solve, what people do now, and how what you suggest would make that easier. It's the configuration problem. Right now you would use something like ConfigParser or optparse to populate some configuration object, which you would then pass around and extract values from. This would provide two advantages over these approaches: it would separate what can be configured from the mechanism by which it is configured - i.e., I, programmer, don't have to make a decision about what the end user has to do to give me those values. And it would allow the configurable surface of the program to be discoverable; I wouldn't have to poke through code or documentation that was maintained separate from the source code. Having read your blog post, I'm going to take a wild stab at guessing what you mean: * Programs often have variables which relate to user-configurable options. For example, a basic list files command might include something like this: if sys.argv[1] == '-l': show_long_listing = True else: show_long_listing = False # ... # much later... for filename in directory(): if show_long_listing: print %s %s %s % (permissions(), filename, date()) else: print filename * The current solution is for the program author to define the interface and the implementation separately. For example, in the above code snippet, the command line option '-l' is the interface available to the end user, while the variable show_long_listing is the implementation used to implement configuration options in the program. * You propose to expose the variable show_long_listing and it's ilk directly to the user, presumable via some service which can interrogate the program, discover what configuration variables are available, and allow the user to stuff random values into them in the hope of getting new and exciting bugs^W behaviour. What, exactly, is preventing them from stuffing random values into them now? The boilerplate of manually reading the param from the command line and assigning it to a variable makes things magically safe? If you'll notice in the example code, there's an optional parameter to process whatever argument is passed in; that's where any safety checks can be performed. * This is better than current solutions to the question of getting configuration options from the user, like getopt and similar, because... ? Because it means the developer doesn't have to know or care how the end-user ultimately inserts configured values. Because it provides a unified mechanism for all configuration instead of a hodge-podge of different techniques for what is ultimately the same basic task. Because it lets you quickly make a parameter of a program configurable (or not) without having to rearchitect the application. * This would be better with syntactic support rather than a library or module because... ? Because a big part of this is the discovery of these endpoints, which seems like it would best be handled at a lower level than a library can currently provide. Because finding what variable you're assigning to currently requires querying the bytecode. Because libraries inevitably introduce boilerplate that can simply be avoided if its a language feature. Because the requirement is broad enough and similar enough across concerns to be provided as a basic service. - Jason -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
Here again is example: from ctypes import * class REG_INFO(Structure): _fields_ = [ ('address', c_ubyte), ('message', c_char * 256), ('size', c_ubyte) ] class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, size, reg_info): # self = object.__new__(class_) self.reg_info = reg_info print self.reg_info.message self.val = self self.size = reg_info.size print 'address = 0x%02X' % self.reg_info.address # return self # def __getitem__(self, index): # gets a single bit if index = self.size: return self.val return (self.val index) 1 # def __get__(self): # gets a single bit return self.val # def __setitem__(self,index,value): # sets a single bit if index = self.size: self.val = value return value = (value1L)index mask = (1L)index self.val = (self.val ~mask) | value return # def __int__(self): return self.val # def __long__(self): return long(self.val) # # # setup my_reg = REG_INFO() my_reg.address = 0xab my_reg.message = 'hello world' print 'TEST 1' dog = 0x123456789ABCDEF0 print 'type(dog) = %s' % type(dog) print 'dog val = 0x%016X' % dog print 'TEST 2' cat = myclass(0x55, 32, my_reg) print 'type(cat) = %s' % type(cat) print 'cat val = 0x%016X' % cat print 'TEST 3' bird = myclass(dog, 32, my_reg) print 'type(bird) = %s' % type(bird) print 'bird val = 0x%016X' % bird print 'TEST 4' print bird print 'bird[0] val = 0x%01X' % bird[0] bird[0] = ~bird[0] print 'bird val = 0x%016X' % bird print 'bird[0] val = 0x%01X' % bird[0] bird[0] Here is how it currently runs: C:\path... TEST 1 type(dog) = type 'long' dog val = 0x123456789ABCDEF0 TEST 2 hello world address = 0xAB type(cat) = class '__main__.myclass' Traceback (most recent call last): File C:\path... \bignum5.py, line 62, in module print 'cat val = 0x%016X' % cat TypeError: int argument required Thanks, Mark -- http://mail.python.org/mailman/listinfo/python-list
Problems with code
Hi, I am trying to call an unbound method (Map.Background) but getting the following error: TypeError: unbound method background() must be called with Map instance as first argument (got nothing instead) Here is some of the code(not completed) Thanks in Advance - Zach Code: class Knight(games.Sprite): A moving knight. SWORD_DELAY = 50 sword_wait = 0 def update(self): moving knight based on keys pressed. if games.keyboard.is_pressed(games.K_w): self.y -= 3 self.angle = 0 if games.keyboard.is_pressed(games.K_s): self.y += 3 self.angle = 180 if games.keyboard.is_pressed(games.K_a): self.x -= 3 self.angle = 270 if games.keyboard.is_pressed(games.K_d): self.x += 3 self.angle = 90 if self.top games.screen.height: self.bottom = 0 if self.bottom 0: self.top = games.screen.height Map.background() if self.left games.screen.width: self.right = 0 if self.right 0: self.left = games.screen.width class Map(games.Sprite): def background(self): new_back = games.load_image(map3.jpg, transparent = False) games.screen.background = new_back -- http://mail.python.org/mailman/listinfo/python-list
Re: Upgrade Python on a Mac
On Mar 3, 4:01 am, Graham Dumpleton graham.dumple...@gmail.com wrote: On Mar 3, 8:53 am, Rey Bango reyba...@gmail.com wrote: Hi, I'd like to upgrade the installed version of Python that came standard on OS X (Leopard) with either 2.6.1 or 3.0.1. Before I stick my foot in it, I just wanted to get a better understanding of the process. If I download the disk image installer from here:http://www.python.org/download/ will it allow me to upgrade my existing version or is it more involved (eg: making a new build). I've looked through the python.org page for upgrade instructions for a Macand haven't found it. Any help would be appreciated. Beware of the official Python binary installers for MacOS X if wanting to do Python web development. Based on feedback these installers have only been compiled for 32 bit architectures. This makes them useless if you want to run mod_python or mod_wsgi with Apache that comes with MacOS X as it runs as 64 bit and relies on the Python framework having 64 bit, which these installers do not provide. If this is going to affect you, build from source code. Configure options required would be, as an example: ./configure --prefix=/usr/local/python-3.0 \ --enable-framework=/usr/local/python-3.0/frameworks \ --enable-universalsdk=/ MACOSX_DEPLOYMENT_TARGET=10.5 \ --with-universal-archs=all Which of the following is the official Python binary installer for MacOS X? - Python-2.6.1.tar.bz2 python-2.6.1-macosx2008-12-06.dmg - and is the problem with 3.0 specifically or all versions? Note that not all MacPorts installers have been both 32/64 bit either. Not sure if they have fixed this issue. -- http://mail.python.org/mailman/listinfo/python-list
Re: recursive outline numbering for object trees
Alia Khouri alia_khouri at yahoo.com writes: Given the following class: class Node(object): def __init__(self, name, children=[], parent=None): self.name = name self.level = '' self.children = children self.parent = parent def __repr__(self): name = self.__class__.__name__ return %s %s % (self.name, self.level) def __iter__(self): yield self for child in self.children: child.parent = self for subchild in iter(child): yield subchild and the following example: tree1 = Node('root[1] ', [ Node('branch [1.1]', [ Node('leaf [1.1.1]', []), Node('leaf [1.1.2]', []), ]), Node('branch [1.2]', [ Node('leaf [1.2.1]', []), Node('leaf [1.2.2]', []), ]) ]) I would like to create a walk function which when given the root node (tree1) automatically sets the correct outline numbering for all its subnodes. such that for i in walk(tree): print i.level should give the following output: 1 1.1 1.1.1 1.1.2 1.2 1.2.1 1.2.2 Now, I have scoured the web and found this (http:// www.opensubscriber.com/message/python-list at python.org/9056939.html) solution from castironpi, which seems to work nicely: With a slight modification (don't automatically advance in up/down) castironpi's code is easier to use in this case: class up( Exception ): pass class down( Exception ): pass def outline(): stack = [1] while True: try: # print 'next' yield '.'.join(str(s) for s in stack) stack[-1]+= 1 except down: # print 'down' stack.append(0) except up: # print 'up' stack.pop(-1) def walk(node, o=None): if o is None: o = outline() node.level = o.next() yield node if node.children: o.throw(down) for child in node.children: for subnode in walk(child, o): yield subnode o.throw(up) (BTW, there is a proposal for a yield from statement, so the last part would become: o.throw(down) for child in node.children: yield from walk(child, o) o.throw(up) and I think it's a lot clearer) As an aside, if a solution is possible as an external walk function would it be possible to work in __iter__? return walk(self) -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: Problems with code
2009/3/30 Zach Goscha zta...@gmail.com: Hi, I am trying to call an unbound method (Map.Background) but getting the following error: TypeError: unbound method background() must be called with Map instance as first argument (got nothing instead) Here is some of the code(not completed) Thanks in Advance - Zach Code: class Knight(games.Sprite): A moving knight. SWORD_DELAY = 50 sword_wait = 0 def update(self): moving knight based on keys pressed. snip if self.bottom 0: self.top = games.screen.height Map.background() snip class Map(games.Sprite): def background(self): new_back = games.load_image(map3.jpg, transparent = False) In the above code, you do `Map.background()`; this is invalid. background() is an /instance/ method of Map objects, *not* a classmethod of Map, so you can't call it on the class itself, only instances of it. In Java-ish terms, you're trying to call a non-static method like it's a static method. You either need to make background() a classmethod, or create an instance of Map to call the method on instead (perhaps you have a self.map variable and this is just a typo?). Cheers, Chris -- I have a blog: http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list
Re: modifying a list element from a function
Adrian Dziubek wrote: Could you explain your high level goal for this? It looks like a very wicked way of doing things. Have You tried to read the list methods' documentation? Maybe there you find something you need (like list.index)? Hello, I have a disambiguation function that modifies a text contained somewhere in each element of a list. The way this text is accessed by the function should depend on an external accessor, or setter, so that any list could be processed, in a generic way. Julien -- python -c print ''.join([chr(154 - ord(c)) for c in '*9(9(18%.\ 91+,\'Z4(55l4(']) When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong. (first law of AC Clarke) -- http://mail.python.org/mailman/listinfo/python-list
RE: tkinter questions: behavior of StringVar, etc
Eric Brunel said: The Tk instance is registered in a hidden variable in the Tkinter module. When you don't specify a master, it'll use the latest created Tk instance one by default. BTW, the latest should be the only one: it is quite unsafe to create several Tk instances in the same application. Again, latest is incorrect for IDLE 2.6.1: from Tkinter import * root1 = Tk() root2 = Tk() root3 = Tk() frm = Frame() # no master specified frm.master is root3 False frm.master is root1 True Well, I personnally don't see any point on doing any master creation implicitely, so I never use this master auto-creation for anything. +1. Explicit is better than implicit. -John E-mail message checked by Spyware Doctor (6.0.0.386) Database version: 5.12070 http://www.pctools.com/en/spyware-doctor-antivirus/ -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
mark.sea...@gmail.com wrote: Here again is example: from ctypes import * class REG_INFO(Structure): _fields_ = [ ('address', c_ubyte), ('message', c_char * 256), ('size', c_ubyte) ] class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, size, reg_info): # self = object.__new__(class_) self.reg_info = reg_info print self.reg_info.message self.val = self Don't you really mean: self.val = init_val self.size = reg_info.size print 'address = 0x%02X' % self.reg_info.address # return self [snip] -- http://mail.python.org/mailman/listinfo/python-list
Re: Problems with code
On Mon, 2009-03-30 at 11:05 -0500, Zach Goscha wrote: Hi, I am trying to call an unbound method (Map.Background) but getting the following error: TypeError: unbound method background() must be called with Map instance as first argument (got nothing instead) Here is some of the code(not completed) Thanks in Advance - Zach Code: class Knight(games.Sprite): A moving knight. SWORD_DELAY = 50 sword_wait = 0 def update(self): moving knight based on keys pressed. if games.keyboard.is_pressed(games.K_w): self.y -= 3 self.angle = 0 if games.keyboard.is_pressed(games.K_s): self.y += 3 self.angle = 180 if games.keyboard.is_pressed(games.K_a): self.x -= 3 self.angle = 270 if games.keyboard.is_pressed(games.K_d): self.x += 3 self.angle = 90 if self.top games.screen.height: self.bottom = 0 if self.bottom 0: self.top = games.screen.height Map.background() if self.left games.screen.width: self.right = 0 if self.right 0: self.left = games.screen.width class Map(games.Sprite): def background(self): new_back = games.load_image(map3.jpg, transparent = False) games.screen.background = new_back 'self' implies that this is an instance method. If this is not an instance method then don't use self. If what you want is a static method (or class method) then use the staticmethod (or classmethod) function or decorator. I.e. @staticmethod def background(): ... -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
On Mon, 30 Mar 2009 03:30:04 -0500 Nick Craig-Wood n...@craig-wood.com wrote: class Node(object): ... __slots__ = [prev, next, this] ... def __init__(self, prev, next, this): ... self.prev = prev ... self.next = next ... self.this = this [...] So the Node class actually takes less memory 38 Mbytes vs 53 Mbytes for the list. Well OK, but if we're going to start optimizing, it seems we don't need to store the key itself in the Node or the list. Here's a version of my script that stores only prev and next. Another twist is that it is now possible to arbitrarily set the starting point for the iteration. (Just in case someone needed a cue for further ranting) P. import collections class OrderedSet(collections.MutableSet): 'Set that remembers the order elements were added' # Big-O running times for all methods are the same as for regular sets. def __init__(self, iterable=None): self.links = {} # key -- [prev,next] if iterable is not None: self |= iterable def __len__(self): return len(self.links) def __contains__(self, key): return key in self.links def add(self, key): if not self: self.start = key self.links = {key: [key,key]} elif key not in self.links: links = self.links start = self.start prev, next = links[start] links[prev][1] = key links[start][0] = key links[key] = [prev,start] def discard(self, key): links = self.links if key in links: prev,next = links.pop(key) if self.links: links[prev][1] = next links[next][0] = prev if key == self.start: self.start = next else: del self.start def __iter__(self): links = self.links start = self.start if links: yield start prev,next = links[start] while next != start: yield next prev,next = links[next] def __reversed__(self): links = self.links start = self.start if links: prev,next = links[start] while prev != start: yield prev prev,next = self.links[prev] yield start def pop(self, last=True): if not self: raise KeyError('set is empty') key = next(reversed(self)) if last else next(iter(self)) self.discard(key) return key def __repr__(self): if not self: return '%s()' % (self.__class__.__name__,) return '%s(%r)' % (self.__class__.__name__, list(self)) def __eq__(self, other): if isinstance(other, OrderedSet): return len(self) == len(other) and list(self) == list(other) return not self.isdisjoint(other) def test(): D = OrderedSet('abcd') R = OrderedSet() for x in list(D): print(D,R) R.add(D.pop(last = False)) print(D,R) print() R.start = 'c' print(list(reversed(R))) if __name__ == '__main__': test() -- http://mail.python.org/mailman/listinfo/python-list
Re: Re. suid/sudo in python
On Mar 30, 6:47 pm, bieff...@gmail.com wrote: On Mar 30, 1:16 pm, Rustom Mody rustompm...@gmail.com wrote: Ben Finney wrote The key thing to realise is that, having relinquished privilege, the same process can't get it back again as easily. So if you need to do some tasks as a privileged user, do those *very* early and then drop the privileges for the rest of the life of the process. Taking this further, you should isolate exactly what tasks need root privilege into a separate process altogether, and make that process as well-tested and simple as possible: it should do nothing *but* those tasks for which it needs root privilege. I dont think this would be easy or convenient (if at all possible) in my case. I am trying to write a tiny web based application that will give an overall picture of LVM, Volume groups, Raid, SCSI and the underlying disk partitions. The administrative tools dealing with low level storage stack (e.g. fdisk, pvcreate, vgcreate, lvcreate, mdadm etc.) need to be run as root. However since this runs behind apache. Apache creates a separate user for the webserver. Hence the CGI scripts or any other tools that they call run as that user. The solution currently is - Write the CGI program in C, put setuid(0), setgid(0) statements in that file and then perform any other actions (including calling other scripts) - Set the S bit of the executable of the CGI binary compiled from the C file (chmod +S xxx.cgi) Yeah yeah Security! HOLE!! etc but please note that this is running on linux on vmware on an otherwise secure system. So whats the best way of doing this in python? Have a 'server process' running with root privilege ( a script started by a privileged account) and implement a protocol to ask for system info from your cgi scripts under apache. In python this is a lot easier than it sounds. The simplest case would be that to send a 'system command' to the server through a unix socket, the server executes the command as received and returns the command output. Not more than a day work, I believe. Not much more secure that a setuid python script, also, maybe less :-) Well the current C root owned setuid-ing and calling out to shell is simple enough I guess. The shell could be replaced by python of course. A better implementation would be such that the protocol only allows for a set of pre-defined safe requests ... -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
mark.sea...@gmail.com wrote: ... It seems like there's no way to do what I'm trying. I am confined to Python 2.5.3 for business reasons. So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from object. Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. OK, you have asked questions at narrow points about how you can get whatever is your local problem at the moment, and have received answers addressing your question. In effect, you've asked 'Which way to the apothecary?' and 'How do I get around this building' without mentioning that you're looking for how to get to the top of Everest. Perhaps you even mentioned your whole goal on your first post, but people see the questions they see. You cannot subclass immutable values to get mutable values; a number of the properties of immutables are what allows them to participate in such things as sets and dictionaries. Such things aren't reasonable for mutable Registers, unless the identity of the register is the thing that distinguishes it. A set of three Registers, all of which currently have the value 5 stored in them had better be a 3-element set, or when you change one of them without changing the other two the size of your set will have to magically change. On a recent job, I was dealing with registers in a device and bit accesses for reads and writes. I made a pair of classes: One to correspond to the device itself (with only one instance per chunk of hardware attached), and another class representing possible values of the register at given moments. The RegisterValue class was a subclass of int, and had a from_name class method, mask () and set (|) operations and a repr that show the non-zero bits connected by '|'. The Register class had read, read_masked, write, and write_masked operations. It worked quite well. Actually, there were more than a hundred RegisterValue classes, most of which were subclasses of the base RegisterValue class with different bit name lists. Remember that just because a Register might have a name, doesn't mean its string representations don't necessarily reflect the contents of the register (lists show their contents, for example). I think you'll do better to separate the idea of a register and its contents. --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Re: Re. suid/sudo in python
Rustom Mody wrote: cut I don't think this is necessary a python problem but a generic, SUID scripts considered dangerous, problem. The essence of your program is that you only want information, that is great! Since that makes it all a bit simpler. How about writing a cronjob that outputs the require information into a file and then write a separate program that reads the output and displays it on the web site when requested? If you are particular adventurous, your cronjob could check if a certain file exists first and then execute the (CPU intensive) script, this is especially handy when you expect changes every second or so. I wouldn't write that check for file existence in Python though, you don't want to fire up an interpreter every second. But a simple sh script will do only calling python if it really needs too (perhaps also putting it on an appropriate nice level). hth -- mph -- http://mail.python.org/mailman/listinfo/python-list
Re: running pyhton IDLE on windows vista
ryan wrote: I am facing problems running python25 on vista . i was able to successfully install it but when i try to run it then, its throws errors saying Firewall issues .. I tried disabling the firewall but no go.. Yes, we believe you. Read smart questions http://www.catb.org/~esr/faqs/smart-questions.html We need more information. You can oen a command window (run cmd.exe) and type C: python -m idlelib.idle This may give details about exactly what is happening in output in that command window. --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Re: email from windows
prakash jp prakash.stack at gmail.com writes: Hi all, In windows environment, how to send email from one gmail address to another gmail (or another mail) addrress Gmail requires SSL smtp support which is missing in Python stdlib. However, you can look at this example (http://www.example-code.com/python/gmail_smtp_465.asp) which uses a module called chilkat to do the work. Regards, Suraj -- http://mail.python.org/mailman/listinfo/python-list
Syntax disagreement between IDLE and pydev?
IDLE (3.1a1) accepts a,*b = re.split(str,pattern) and does the right thing ('a' gets the first result and 'b' gets the rest). pydev configured to use the exact same Python 3.1a1 runtime doesn't like this syntax (in my source, column 23 is the asterisk): Encountered * at line 32, column 23. Was expecting one of: NEWLINE ... ; ... = ... += ... -= ... *= ... /= ... //= ... %= ... = ... |= ... ^= ... = ... = ... **= ... lambda ... not ... + ... - ... ~ ... ( ... [ ... { ... False ... True ... None ... NAME ... HEXNUMBER ... OCTNUMBER ... DECNUMBER ... FLOAT ... COMPLEX ... \' ... \ ... \'\'\' ... \\\ ... \' ... \ ... \'\'\' ... \\\ ... Can I assume pydev is wrong or am I missing something? -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
mark.sea...@gmail.com writes: class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, size, reg_info): # self = object.__new__(class_) self.reg_info = reg_info print self.reg_info.message self.val = self Note that here you assign self.val to be the object itself. Are you sure you didn't mean self.val = init_val? (...) def __int__(self): return self.val Instead of an integer, you return the current class instance as set up in __init__. The __int__ method ought to return an integer. def __long__(self): return long(self.val) And this will be infinite recursion, since long(obj) will try to call the __long__ method on obj so you're just recursing on the __long__ method. You can see this more clearly with: cat = myclass(0x55, 32, my_reg) int(cat) Traceback (most recent call last): File stdin, line 1, in module TypeError: __int__ returned non-int (type myclass) I won't post the traceback for long(cat), as it's, well, long ... -- David -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
On Mar 30, 9:40 am, Scott David Daniels scott.dani...@acm.org wrote: mark.sea...@gmail.com wrote: ... It seems like there's no way to do what I'm trying. I am confined to Python 2.5.3 for business reasons. So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from object. Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. OK, you have asked questions at narrow points about how you can get whatever is your local problem at the moment, and have received answers addressing your question. In effect, you've asked 'Which way to the apothecary?' and 'How do I get around this building' without mentioning that you're looking for how to get to the top of Everest. Perhaps you even mentioned your whole goal on your first post, but people see the questions they see. You cannot subclass immutable values to get mutable values; a number of the properties of immutables are what allows them to participate in such things as sets and dictionaries. Such things aren't reasonable for mutable Registers, unless the identity of the register is the thing that distinguishes it. A set of three Registers, all of which currently have the value 5 stored in them had better be a 3-element set, or when you change one of them without changing the other two the size of your set will have to magically change. On a recent job, I was dealing with registers in a device and bit accesses for reads and writes. I made a pair of classes: One to correspond to the device itself (with only one instance per chunk of hardware attached), and another class representing possible values of the register at given moments. The RegisterValue class was a subclass of int, and had a from_name class method, mask () and set (|) operations and a repr that show the non-zero bits connected by '|'. The Register class had read, read_masked, write, and write_masked operations. It worked quite well. Actually, there were more than a hundred RegisterValue classes, most of which were subclasses of the base RegisterValue class with different bit name lists. Remember that just because a Register might have a name, doesn't mean its string representations don't necessarily reflect the contents of the register (lists show their contents, for example). I think you'll do better to separate the idea of a register and its contents. --Scott David Daniels scott.dani...@acm.org- Hide quoted text - - Show quoted text - Thanks Scott. I think you are saying don't try to subclass from type long, because it is immutable (cannot be changed). If I subclass from type object, then the value can be changed, but I still can't print without explicitely casting back to long in the main routine. Is this a catch 22 scenario, or am I just overlooking some method of long to override to change it's return value? Here is what I currently have morphed to: Works to change self.val but not self from ctypes import * class REG_INFO(Structure): _fields_ = [ ('address', c_ubyte), ('message', c_char * 256), ('size', c_ubyte), ('init', c_ulong) ] class BigNumber(long): def __new__(class_, init_val, size): print 'printing size: %d' % size self = long.__new__(class_, init_val) self.size = size self.val = self return self # def __repr__(self): print 'from __repr__: %s' % self return '%s(%s)' % (type(self).__name__, self) # def __getitem__(self, index): # gets a single bit if index = self.size: return self.val return (self.val index) 1 # def __get__(self): # gets a single bit return self.val # def __setitem__(self,index,value): # sets a single bit if index = self.size: self.val = value return value = (value1L)index mask = (1L)index self.val = (self.val ~mask) | value return # def __int__(self): return self.val # def __long__(self): return long(self.val) class HugeNumber(BigNumber): def __new__(class_, reg): return BigNumber.__new__(class_, reg.init, reg.size) # my_reg = REG_INFO() my_reg.address = 0xab my_reg.message = 'hello world' my_reg.size = 32 print
Re: global name 'self' is not defined - noob trying to learn
On Mar 30, 10:53 am, David Bolen db3l@gmail.com wrote: mark.sea...@gmail.com writes: class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, size, reg_info): # self = object.__new__(class_) self.reg_info = reg_info print self.reg_info.message self.val = self Note that here you assign self.val to be the object itself. Are you sure you didn't mean self.val = init_val? (...) def __int__(self): return self.val Instead of an integer, you return the current class instance as set up in __init__. The __int__ method ought to return an integer. def __long__(self): return long(self.val) And this will be infinite recursion, since long(obj) will try to call the __long__ method on obj so you're just recursing on the __long__ method. You can see this more clearly with: cat = myclass(0x55, 32, my_reg) int(cat) Traceback (most recent call last): File stdin, line 1, in module TypeError: __int__ returned non-int (type myclass) I won't post the traceback for long(cat), as it's, well, long ... -- David Hi David; Yep I had fixed up that version actually. Here is the latest. from ctypes import * class REG_INFO(Structure): _fields_ = [ ('address', c_ubyte), ('message', c_char * 256), ('size', c_ubyte) ] class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, reg_info): # self = object.__new__(class_) self.reg_info = reg_info print reg_info.message self.val = init_val self.size = reg_info.size self.addr = reg_info.address print 'address = 0x%02X' % self.addr # return self # def __getitem__(self, index): # gets a single bit if index = self.size: return self.val return (self.val index) 1 # def __get__(self): # gets a single bit return self.val # def __setitem__(self,index,value): # sets a single bit if index = self.size: self.val = value return value = (value1L)index mask = (1L)index self.val = (self.val ~mask) | value return # def __int__(self): return self.val # def __long__(self): return long(self.val) # # # setup my_reg = REG_INFO() my_reg.address = 0xab my_reg.message = 'hello world' my_reg.size = 32 print 'TEST 1' dog = 0x123456789ABCDEF0 print 'type(dog) = %s' % type(dog) print 'dog val = 0x%016X' % dog print 'TEST 2' cat = myclass(0x55, my_reg) print 'type(cat) = %s' % type(cat) print 'cat val = 0x%016X' % cat print 'TEST 3' bird = myclass(dog, my_reg) print 'type(bird) = %s' % type(bird) print 'bird val = 0x%016X' % bird print 'TEST 4' print bird print 'bird[0] val = 0x%01X' % bird[0] bird[0] = ~bird[0] print 'bird val = 0x%016X' % bird print 'bird[0] val = 0x%01X' % bird[0] When Run: TEST 1 type(dog) = type 'long' dog val = 0x123456789ABCDEF0 TEST 2 hello world address = 0xAB type(cat) = class '__main__.myclass' cat val = 0x0055 TEST 3 hello world address = 0xAB type(bird) = class '__main__.myclass' Traceback (most recent call last): File C:\(big path)\bignum5.py, line 69, in module print 'bird val = 0x%016X' % bird TypeError: int argument required -- http://mail.python.org/mailman/listinfo/python-list
Re: please include python26_d.lib in the installer
On Sat, Mar 28, 2009 at 1:17 AM, Mark Hammond skippy.hamm...@gmail.com wrote: Please note: I want to build my own code in Debug mode for debugging. I don't want to build or use the debug version of Python. I also can't Python does this on purpose so you don't accidentally mix different versions of the C runtime library. This would happen ff you defined DEBUG in your code but use Python built without DEBUG - Python using a different name for its lib prevents this. Note that just shipping the _d.lib wouldn't help - you would need the _d.dll itself, plus *all* extension modules you use - *all* .pyd/.dll etc files have the trailing _d, and a debug version of Python refuses to load the release versions without the _d. I'd recommend leaving DEBUG etc disbled, but enable debug information and disable optimizations while debugging. If Python doesn't include the _d.lib file, then why does the header file reference it? I would prefer manual control over which lib file to use. (And I don't want to disable _DEBUG for other reasons). Could the header file be changed so it alwas uses the release lib? In most cases it's actually ok to mix different versions of the CRT in one application. See the following blog post about this issue: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html The goal is to use one runtime library throughout your entire application. That is nearly impossible since you typically don't have control of which runtime library other libraries use. It turns out is is OK to mix runtime libraries *except* in certain cases. A well written library should avoid these cases and then it doesn't matter if the runtime libraries match. Libraries that cannot avoid these cases should ship with 4 versions of their libraries that match the 4 versions of the runtime libraries. P.S. If pyconfig.h really wanted to use the correct CRT, then it would need to reference different lib files for both VS2005 and 2008. Johan. -- http://mail.python.org/mailman/listinfo/python-list
Re: Syntax disagreement between IDLE and pydev?
On Mar 30, 12:40 pm, Jim Garrison j...@acm.org wrote: IDLE (3.1a1) accepts a,*b = re.split(str,pattern) and does the right thing ('a' gets the first result and 'b' gets the rest). pydev configured to use the exact same Python 3.1a1 runtime doesn't like this syntax (in my source, column 23 is the asterisk): Encountered * at line 32, column 23. Was expecting one of: NEWLINE ... ; ... = ... += ... -= ... *= ... /= ... //= ... %= ... = ... |= ... ^= ... = ... = ... **= ... lambda ... not ... + ... - ... ~ ... ( ... [ ... { ... False ... True ... None ... NAME ... HEXNUMBER ... OCTNUMBER ... DECNUMBER ... FLOAT ... COMPLEX ... \' ... \ ... \'\'\' ... \\\ ... \' ... \ ... \'\'\' ... \\\ ... Can I assume pydev is wrong or am I missing something? If it works that way in IDLE and from the command line python, then it's almost proof positive that pydev goofed up. Mike -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
If I cast it long then it prints fine, but I was hoping there would be a slicker way (to accomplish this in the class itself). print 'bird val = 0x%016X' % long(bird) -- http://mail.python.org/mailman/listinfo/python-list
Re: Syntax disagreement between IDLE and pydev?
Jim Garrison wrote: IDLE (3.1a1) accepts a,*b = re.split(str,pattern) and does the right thing ('a' gets the first result and 'b' gets the rest). pydev configured to use the exact same Python 3.1a1 runtime doesn't like this syntax (in my source, column 23 is the asterisk): Encountered * at line 32, column 23. Was expecting one of: NEWLINE ... ; ... = ... += ... -= ... *= ... /= ... //= ... %= ... = ... |= ... ^= ... = ... = ... **= ... lambda ... not ... + ... - ... ~ ... ( ... [ ... { ... False ... True ... None ... NAME ... HEXNUMBER ... OCTNUMBER ... DECNUMBER ... FLOAT ... COMPLEX ... \' ... \ ... \'\'\' ... \\\ ... \' ... \ ... \'\'\' ... \\\ ... Can I assume pydev is wrong or am I missing something? I should add that this seems to affect only the occurrence of the syntax error marker (red X and red underline). The code runs correctly. -- http://mail.python.org/mailman/listinfo/python-list
Re: Re: global name 'self' is not defined - noob trying to learn
After taking out the class myclass stuff, the code worked for me in Python 2.6.1, through the cat line. Could you please tell us what version of Python you're running this on? import sys print Python version: , sys.version yielded (on my machine) Python version: 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] (There are two typos in Test 3, and in Test 4 you seem to be treating this object like a list.) mark.sea...@gmail.com wrote: On Mar 30, 10:53 am, David Bolen db3l@gmail.com wrote: mark.sea...@gmail.com writes: class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, size, reg_info): # self =bject.__new__(class_) self.reg_info =eg_info print self.reg_info.message self.val =elf Note that here you assign self.val to be the object itself. Are you sure you didn't mean self.val =nit_val? (...) def __int__(self): return self.val Instead of an integer, you return the current class instance as set up in __init__. The __int__ method ought to return an integer. def __long__(self): return long(self.val) And this will be infinite recursion, since long(obj) will try to call the __long__ method on obj so you're just recursing on the __long__ method. You can see this more clearly with: cat =yclass(0x55, 32, my_reg) int(cat) Traceback (most recent call last): File stdin, line 1, in module TypeError: __int__ returned non-int (type myclass) I won't post the traceback for long(cat), as it's, well, long ... -- David Hi David; Yep I had fixed up that version actually. Here is the latest. from ctypes import * class REG_INFO(Structure): _fields_ = ('address', c_ubyte), ('message', c_char * 256), ('size', c_ubyte) ] class myclass(object): # # def __new__(class_, init_val, size, reg_info): def __init__(self, init_val, reg_info): # self =bject.__new__(class_) self.reg_info =eg_info print reg_info.message self.val =nit_val self.size =eg_info.size self.addr =eg_info.address print 'address =x%02X' % self.addr # return self # def __getitem__(self, index): # gets a single bit if index =elf.size: return self.val return (self.val index) 1 # def __get__(self): # gets a single bit return self.val # def __setitem__(self,index,value): # sets a single bit if index =elf.size: self.val =alue return value =value1L)index mask =1L)index self.val =self.val ~mask) | value return # def __int__(self): return self.val # def __long__(self): return long(self.val) # # # setup my_reg =EG_INFO() my_reg.address =xab my_reg.message =hello world' my_reg.size =2 print 'TEST 1' dog =x123456789ABCDEF0 print 'type(dog) =s' % type(dog) print 'dog val =x%016X' % dog print 'TEST 2' cat =yclass(0x55, my_reg) print 'type(cat) =s' % type(cat) print 'cat val =x%016X' % cat print 'TEST 3' bird =yclass(dog, my_reg) print 'type(bird) =s' % type(bird) print 'bird val =x%016X' % bird print 'TEST 4' print bird print 'bird[0] val =x%01X' % bird[0] bird[0] =bird[0] print 'bird val =x%016X' % bird print 'bird[0] val =x%01X' % bird[0] When Run: TEST 1 type(dog) =type 'long' dog val =x123456789ABCDEF0 TEST 2 hello world address =xAB type(cat) =class '__main__.myclass' cat val =x0055 TEST 3 hello world address =xAB type(bird) =class '__main__.myclass' Traceback (most recent call last): File C:\(big path)\bignum5.py, line 69, in module print 'bird val =x%016X' % bird TypeError: int argument required -- http://mail.python.org/mailman/listinfo/python-list
Re: please include python26_d.lib in the installer
Johan Compen wrote: If Python doesn't include the _d.lib file, then why does the header file reference it? I would prefer manual control over which lib file to use. (And I don't want to disable _DEBUG for other reasons). Could the header file be changed so it alwas uses the release lib? In most cases it's actually ok to mix different versions of the CRT in one application. See the following blog post about this issue: No, the header files can't be changed. Python debug builds have a different ABI than release builds of Python. The _DEBUG flags enables the debugging ABI with additional checks. If you *really* want to use a debug build of Python then you can easily build your own. Christian -- http://mail.python.org/mailman/listinfo/python-list
Re: global name 'self' is not defined - noob trying to learn
On Mar 30, 11:53 am, Dave Angel da...@ieee.org wrote: After taking out the class myclass stuff, the code worked for me in Python 2.6.1, through the cat line. Could you please tell us what version of Python you're running this on? import sys print Python version: , sys.version yielded (on my machine) Python version: 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] (There are two typos in Test 3, and in Test 4 you seem to be treating this object like a list.) Python version: 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) (Thought it was 2.5.3, sorry). -- http://mail.python.org/mailman/listinfo/python-list
Re: Syntax disagreement between IDLE and pydev?
On Mon, Mar 30, 2009 at 2:23 PM, Jim Garrison j...@acm.org wrote: Jim Garrison wrote: IDLE (3.1a1) accepts a,*b = re.split(str,pattern) and does the right thing ('a' gets the first result and 'b' gets the rest). pydev configured to use the exact same Python 3.1a1 runtime doesn't like this syntax (in my source, column 23 is the asterisk): Encountered * at line 32, column 23. Was expecting one of: NEWLINE ... ; ... = ... += ... -= ... *= ... /= ... //= ... %= ... = ... |= ... ^= ... = ... = ... **= ... lambda ... not ... + ... - ... ~ ... ( ... [ ... { ... False ... True ... None ... NAME ... HEXNUMBER ... OCTNUMBER ... DECNUMBER ... FLOAT ... COMPLEX ... \' ... \ ... \'\'\' ... \\\ ... \' ... \ ... \'\'\' ... \\\ ... Can I assume pydev is wrong or am I missing something? I should add that this seems to affect only the occurrence of the syntax error marker (red X and red underline). The code runs correctly. Pydev does its own syntax checking. You probably have the grammar version set to 2.5 or 2.6, so the syntax checker doesn't like it, but then run it through the Python 3 interpreter. Go to the project's properties and under Pydev- Project Type, change the grammar version to 3.0. -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list