Re: What language to manipulate text files

2005-06-12 Thread Roose
Why do people keep asking what language to use for certain things in the 
Python newsgroup?  Obviously the answer is going to biased.

Not that it's a bad thing because I love Python, but it doesn't make sense 
if you honestly want an objective opinion.

R

ross wrote:
> I want to do some tricky text file manipulation on many files, but
> have only a little programming knowledge.
>
> What are the ideal languages for the following examples?
>
> 1. Starting from a certain folder, look in the subfolders for all
> filenames matching *FOOD*.txt Any files matching in each folder should
> be copied to a new subfolder within the current folder called EATING
> with a new name of *FOOD*COPY.txt
>
> 2. Process each file as follows:
> Here is a simplified example of what I want as input and output.
>
> - input
> . 'several unknown lines of text file
> Get apples from apples shop
> Get oranges from oranges shop
> Get plums from plums shop
> Get pears from pears shop
> Eat from apples, oranges,
>  plums, pears'whitespace at start of line is unimportant
> . 'more unknown lines of text file
> Chapter 1
>  Several lines of text about apples in here
> Chapter 2
>  Several lines of text about oranges in here
> Chapter 3
>  Several lines of text about plums in here
> Chapter 4
>  Several lines of text about pears in here
>
> - output
> . 'several unknown lines of text file
> Get apples from apples shop
> Get oranges from oranges shop
> Get plums from plums shop
> Get pears from pears shop
> Get bagels from bagels shop  'the Get lines...
> Get donuts from donuts shop  'can be in any order
> Eat from apples, bagels, oranges,
>  plums, donuts, pears'whitespace at start of line is unimportant
> . 'more unknown lines of text file
> Chapter 1
>  Several lines of text about apples in here
> Chapter 2
>  Several lines of text about bagels in here
> Chapter 3
>  Several lines of text about oranges in here
> Chapter 4
>  Several lines of text about plums in here
> Chapter 5
>  Several lines of text about donuts in here
> Chapter 6
>  Several lines of text about pears in here
>
> Summary:
> I have added two new items to Get;
> I have put them into the comma-delimited list after searching for a
> particular fruit to put each one after;
> The Chapters are renumbered to match their position in the
> comma-delimited list.
> The "several lines of text" about each new item can be pulled from a
> new_foods.txt file (or a bagels.txt and a donuts.txt file).
>
> My first objective is to process the files as described.
> My second objective is to learn the best language for this sort of
> text manipulation. The language should run on Windows 98, XP and
> Linux.
>
> Would Python be best, or would a macro-scripting thing like AutoHotKey
> work?
> I thought about Perl, but think I would learn bad habits and have hard
> to read code.
>
> Thanks, Ross 


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


Re: Dealing with marketing types...

2005-06-12 Thread Kay Schluehr
Drazen Gemic wrote:

> With Java I depend very little on customers IT staff, sysadmins, etc. If
> I need additional functionality in form library, extension, whatever, all
> I need is to drop another JAR in, and that does it.

Maybe this is for you?

http://peak.telecommunity.com/DevCenter/PythonEggs

Kay

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


Re: What language to manipulate text files

2005-06-12 Thread Michael Hoffman
ross wrote:
> I want to do some tricky text file manipulation on many files, but have
> only a little programming knowledge.
> 
> What are the ideal languages for the following examples?
> 
> 1. Starting from a certain folder, look in the subfolders for all
> filenames matching *FOOD*.txt Any files matching in each folder should
> be copied to a new subfolder within the current folder called EATING
> with a new name of *FOOD*COPY.txt

This should get you started:

import errno
from path import path # http://www.jorendorff.com/articles/python/path/

dst_dirpath = path("EATING")

# create dst_dirpath
try:
 dst_dirpath.makedirs() # make destination directory and its parents
except OSError, err:   # error!
 if err.errno = errno.EEXIST: # might just be that it already exists
 if not dst_dirpath.isdir(): # and it's a directory
 raise  # if not, raise an exception

for filepath in path(".").walkfiles("*FOOD*.txt"):
 infile = file(filepath)
 outfile = file(dst_dirpath.joinpath(filepath.namebase+"_COPY.txt"))

 ...do processing here...

> My first objective is to process the files as described.
> My second objective is to learn the best language for this sort of text
> manipulation. The language should run on Windows 98, XP and Linux.
> 
> Would Python be best, or would a macro-scripting thing like AutoHotKey
> work?

Personally, I'd use Python, but what do you expect when you ask here?
-- 
Michael Hoffman
-- 
http://mail.python.org/mailman/listinfo/python-list


Streaming Data Error in .read() (HTTP/ICY) Possible Bug?

2005-06-12 Thread MyHaz
I playing around with streaming shoutcast mp3s.

Here is some sample code:

---
import httplib


# Put together the headers
headers = {"Icy-MetaData":"1"}

con = httplib.HTTPConnection('64.142.8.154', 8000)
con.request("GET", "/")
stream = con.getresponse()
print stream.status,stream.reason
print stream.read()
---

For which i get error:

bash-2.05b$ ./woxy_saver.py
200
Traceback (most recent call last):
  File "./woxy_saver.py", line 21, in ?
print stream.read()
  File "C:\python24\lib\httplib.py", line 463, in read
s = self._safe_read(self.length)
  File "C:\python24\lib\httplib.py", line 545, in _safe_read
chunk = self.fp.read(amt)
  File "C:\python24\lib\httplib.py", line 1273, in read
return s + self._file.read(amt - len(s))
TypeError: unsupported operand type(s) for -: 'str' and 'int'
bash-2.05b$

It seems somehow amt is turning into a str.

Is this a bug in httplib.py or there something wrong with my code?


Cheers
- Haz

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


Re: What is different with Python ?

2005-06-12 Thread Mike Meyer
John Machin <[EMAIL PROTECTED]> writes:
> Roy Smith wrote:
>> "Philippe C. Martin" <[EMAIL PROTECTED]> wrote:
>>>Yet, many issues that a future software engineer should know are
>>>mostly hidden by Python (ex: memory management) and that could be
>>>detrimental.
>> I know I'm going out on a limb by asking this, but why do you think
>> future software engineers should know about memory management?
> Perhaps we have a terminology problem here i.e. different meanings of
> "software engineer". Philippe started talking about "CS" courses,
> whereas you may be referring to people who have done an "IT" course or
> achieved a certification in the use of app development tool X.

While I agree with John - software engineers should know something
about memory managment - I sort of agree with Roy as well, in that,
like Peter, I think memory management is something that doesn't need
to be taught immediately. A modern programming environment should take
care of the details, but a software engineer will be cognizant of the
details, and know enough to know when they have to worry about it and
when they can safely ignore it.

>> I used to worry about register allocation.  Today, I don't even know
>> how many registers any machine I work on has.  I used to worry about
>> word size, and byte order.  I used to worry about whether stacks
>> grew up or down and addressing modes and floating point formats.
>> Sure, somebody's got to worry about those things, but most people
>> who write software can be blissfully ignorant (or, at best, dimly
>> aware) of these issues because somebody else (compiler writer,
>> hardware designer, operating system writer, etc) has already done
>> the worrying.
> You would hope they'd done more than worry about it. However sometimes
> one's fondest hopes are dashed. You must have noticed the anguish in
> the timbot's posts that mention Windows 95 memory management.

I think most of those things are indeed things that your average
software engineer can ignore 90+% of the time. What makes someone a
software engineer is that they know about those details, and know how
they will affect the code they are writing - and hence when they have
to worry about those details.

Oddly enough, I find similar comments apply to a lot of the data
structures I learned in school. I recently applied for a job that had
a series of essay questions in the application. They had a series of
problems with requests for solutions, and my immediate reaction to
each was to reach for off-the-shelf software to solve the
problem. While they wanted - and I provided - a discussion of data
structures and big-O running time for various operations, all the
things they wanted to do were essentially solved problems, and there
was debugged and tuned code available to deal with things - and it's
much faster to not write software if you can to solve the problem.

For instance, one problem was "You have two files that have lists of 1
billion names in them. Print out a list of the names that only occur
in one of the files."

That's a one-line shell script: "comm -12 <(sort file_one) <(sort file_two)"

I gave them that answer. I also gave them a pseudo-code solution, but
frankly, in real life, I'd install the shell script and get on with
things. If I were hiring someone, I'd hire the person who gave me the
shell script. Rather than spending hours/days debugging a program to
solve the problem, I get a solution in minutes. If it runs into
problems, *then* it's time to start hand coding the solution.

>> There used to be a time when you had to worry about how many tracks
>> to allocate when you created a disk file.  When's the last time you
>> worried about that?
> Seeing you asked: early 1970s, on an IBM 1800. But much more recently
> it certainly helped if one were slightly more than dimly aware of the
> difference between a FAT filesystem and an NTFS filesystem :-)

For me it was the late 1970s, on an IBM 3081. But I was worried about
disk sector sizes well into the 1990s. Since then I've worked on
systems that didn't have a file system as such; it had a database of
databases, and you queried the former to find the latter.

  http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Developers Handbook - Mistake done and corrected.

2005-06-12 Thread wooks
I am not mistaken at all and the use of hyperbole (2 billion)
doesn't make your point .

A post that piques the interest of even 50  people in an NG is a valid
one. No doubt some people would be annoyed about a job posting of a
Python vacancy... others would be interested in it...

The original complainer expanded his complaint to say that I had not
included sufficient information. I addressed that and apologised. For
many that would have been the end of the matter.

Since you want to talk about Usenet at large

1. I have made similar posts regarding books in my library to other
NG's.
2. This is the only NG where anybody has complained (apart from your
postage/starting price is too high).
3. This book has achieved the highest number of hits (179)  than any
other book I have promoted in this way. More  even than a football book
on the history of the Arsenal v Spurs fixture that I posted to both the
Arsenal and Spurs NG (only managed 160).

So the only NG that complained is the one that showed the most
interest.

What is far more off-topic for this NG are the posts pontificating
about netiquette and usenet when really they are just whinges.

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


Re: Streaming Data Error in .read() (HTTP/ICY) Possible Bug?

2005-06-12 Thread gideondominick
I should purhaps mention that i am basically trying to translate this.

nc ~= telnet

#!/bin/sh

nc sc1.liquidviewer.com 9012 

Re: Dealing with marketing types...

2005-06-12 Thread Mike Meyer
Andrew Dalke <[EMAIL PROTECTED]> writes:
> Paul Rubin replied to me:
>> As for "big", hmm, I'd say as production web sites go, 100k users is
>> medium sized, Slashdot is "largish", Ebay is "big", Google is huge.
> I'ld say that few sites have >100k users, much less
> daily users with personalized information. As a totally made-up
> number, only few dozens of sites (maybe a couple hundred?) would
> need to worry about those issues.

I'd say quite a *lot* of sites have >100k users. A small client of
mine was a (now defunct .com) that was focused on "community
building". They had a user base of a couple of million people, and
you've probably never heard of The Park. They ran six servers,
thousands of simultaneous users, and it was all built on LAMP.

If you go looking for sites that offer the same kinds of things they
did - free web hosting, free web-based email, web-based chat,
calendering services, etc., you'll find a lot of such sites, and they
all probably have more than 100K users.

Of course, when you're talking about millions of web sites, a "few
sites" could be a a fairly large number of them.

An article I read recently made the point that I think you're trying
to make. The author argued that for most sites, scalability just
wasn't that big an issue. Web sites are cheap enough that they are
affordable to relatively small communities, and in many cases a
service that would bomb if they tried to go global with it would be a
big success in a small community. As such, he expects the web to be
dominated by sites that are really only of interest to a small
community. For those sites, LAMP will work just fine.

 http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: case/switch statement?

2005-06-12 Thread Steven D'Aprano
On Sat, 11 Jun 2005 19:47:58 -0500, Skip Montanaro wrote:

> If the case values are constants known to the compiler, it can generate O(1)
> code to take the correct branch.  (In fact, that could be done by the
> compiler for if statements such as in your example today.  It just isn't.)
> It is precisely this behavior that is desired in many situations.  See PEP
> 275 for details:

Agreed. I certainly don't object to sensible optimizations! But the number
of if...elif statements which can be optimised are a vanishingly small
subset of the number of possible if...elif statements.

And you can bet your last dollar that many people will use case statements
even when doing so gives no advantage, in a mistaken opinion that it will
be somehow magically faster.

In fact, some languages even encourage this: I recall the old 4GL (back in
the early 1990s when developers actually used the term Fourth Generation
Language unselfconsciously) used to develop the spreadsheet "Wingz". It
included two different forms for case. By memory:

case EXPR of:
VALUE:
SUITE
VALUE:
SUITE
otherwise:
SUITE

(which could potentially be optimised) and a second form:

case:
EXPR of:
SUITE
EXPR of:
SUITE
otherwise:
SUITE

which was almost certainly nothing more than syntactic sugar for:

if EXPR then:
SUITE
else if EXPR then:
SUITE
else:
SUITE

In any case, even when case statements can be optimized (and we all know
the lesson about premature optimization), the original poster's complaint
appeared to be purely a stylistic issue: he didn't relish using long
if..elif statements. Who does? Not I. My comment, I hope, will remind
folks that long pieces of branching code are ugly regardless of which
syntax you use.


-- 
Steven.



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


subprocess module and blocking

2005-06-12 Thread Robin Becker
I'm using a polling loop in a thread that looks approximately like this

while 1:
 p = find_a_process()
 rc = p.poll()
 if rc is not None:
 out, err = p.communicate()
 #deal with output etc
 sleep(1)

the process p is opened using

p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=cwd)

stdin is actually never written to.

I notice that under both win32 and freebsd that things are fine provided 
that the subprocess doesn't write too much to stdout/stderr. However, 
the subprocess seems to lock often if too much is written (under freebsd 
I see a process state of POLL). I assume that the subprocess is filling 
up the pipe and then failing to wake up again. I had expected that 
subprocess would take care of this for me, but possibly I'm being 
utterly clueless and stupid. What should I do to avoid blocking in the 
subprocess?
-- 
Robin Becker
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: case/switch statement?

2005-06-12 Thread invalidemail
Philippe C. Martin wrote:
> Leif K-Brooks wrote:
>
> > Joe Stevenson wrote:
> >> I skimmed through the docs for Python, and I did not find anything like
> >> a case or switch statement.  I assume there is one and that I just
> >> missed it.  Can someone please point me to the appropriate document, or
> >> post an example?  I don't relish the idea especially long if-else
> >> statements.
> >
> > If you really want one, you could use
> > .
>
> I _love_ Python!


Well, if you loved that, here's something even more evil.  This was
Bengt Richter's original idea that Cliff Wells and I improved upon.
First define some functions and classes:

. _cache = {}
.
. class _BaseCaseException(Exception):
. pass
.
. def switch(v):
. if v not in _cache:
. class _CaseException(_BaseCaseException):
. pass
. _cache[v] = _CaseException
. raise _cache[v]
.
. def case(v):
. if v not in _cache:
. class _CaseException(_BaseCaseException):
. pass
. _cache[v] = _CaseException
. return _cache[v]
.
. default = _BaseCaseException


Then you can define a switch statement like this:

. x = 2
.
. try: switch(x)
.
. except case(1):
. print "Case 1"
.
. except case(2):
. print "Case 2"
.
. except case(3):
. print "Case 3"
.
. except default:
. print "Default"
.
. except NameError:
. print "You can still catch regular exceptions like NameError"



I-love-Python-too-but-this-isn't-why-ly yr's,

-- 
CARL BANKS

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


Re: Best Web dev language

2005-06-12 Thread Mike Meyer
"John Roth" <[EMAIL PROTECTED]> writes:
> "Mike Meyer" <[EMAIL PROTECTED]> wrote in message 
> news:[EMAIL PROTECTED]
>> "Jon Slaughter" <[EMAIL PROTECTED]> writes:
>>
>> Someone mentioned that you might "require JavaScript on the client
>> side". I recommend against that - people and organizations disable
>> JavaScript for security reasons, and browsers on portable devices may
>> not have JavaScript at all. Why limit your audience? If you understand
>> HTML, it's possible to write a web page that uses JavaScript (or any
>> other such technology) for flashy effects, but still functions
>> properly if the user has disabled JavaScript, or doesn't have it
>> available. But that's a long discussion - see > http://www.mired.org/home/mwm/papers.green.html > for more
>> information.
>
> I would have said that at one time, but then the world changed
> with AJAX, expecially with Google using very script heavy applications
> for all of their new work. It leads to very responsive web applications.

Actually, AJAX just makes the case for wanting JavaScript turned on
stronger - it doesn't change the fundamental facts of what's going
on. People/organization will still turn off JavaScript because it
represents a security risk. Low-end network devices will still have
browsers that can't do JavaScript. You can still either code your
pages to alienate such users, or you can provide them with the same
basic functionality as they'd get if they had JavaScript, except it
won't be as responsive/flashy as it would be if they did.

Try Googles new work with JavaScript turned off. You'll find that a
lot of the new stuff works fine without it, thought it may not be as
spiffy. For those that don't, they warn the user that it won't work,
which means they are doing better than 90% of the sites that require
JavaScript on the web.

  http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: What language to manipulate text files

2005-06-12 Thread ross
Roose wrote:
> Why do people keep asking what language to use for certain things in the
> Python newsgroup?  Obviously the answer is going to biased.
>
> Not that it's a bad thing because I love Python, but it doesn't make sense
> if you honestly want an objective opinion.
>
> R

What usenet group is it best to ask in then?
Is there one where people have good knowledge of many scripting
languages?

Ross

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


How to get/set class attributes in Python

2005-06-12 Thread Kalle Anke
I'm coming to Python from other programming languages. I like to
hide all attributes of a class and to only provide access to them
via methods. Some of these languages allows me to write something
similar to this

int age( )
{
  return theAge
}

void age( x : int )
{
  theAge = x
}

(I usually do more than this in the methods). I would like to do
something similar in Python, and I've come up with two ways to do
it: The first one uses the ability to use a variable number of
arguments ... not very nice. The other is better and uses 
__setattr__ and __getattr__ in this way:

class SuperClass:
def __setattr__( self, attrname, value ):
if attrname == 'somevalue':
self.__dict__['something'] = value
else:
raise AttributeError, attrname

def __str__( self ):
return str(self.something)

class Child( SuperClass ):
def __setattr__( self, attrname, value ):
if attrname == 'funky':
self.__dict__['fun'] = value
else:
SuperClass.__setattr__( self, attrname, value )

def __str__( self ):
return SuperClass.__str__( self ) + ', ' + str(self.fun)

Is this the "Pythonic" way of doing it or should I do it in a different
way or do I have to use setX/getX (shudder)




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


Re: How to get/set class attributes in Python

2005-06-12 Thread Steve Jorgensen
On Sun, 12 Jun 2005 11:54:52 +0200, Kalle Anke <[EMAIL PROTECTED]> wrote:

>I'm coming to Python from other programming languages. I like to
>hide all attributes of a class and to only provide access to them
>via methods. Some of these languages allows me to write something
>similar to this
>
>int age( )
>{
>  return theAge
>}
>
>void age( x : int )
>{
>  theAge = x
>}
>
>(I usually do more than this in the methods). I would like to do
>something similar in Python, and I've come up with two ways to do
>it: The first one uses the ability to use a variable number of
>arguments ... not very nice. The other is better and uses 
>__setattr__ and __getattr__ in this way:
>
>class SuperClass:
>   def __setattr__( self, attrname, value ):
>   if attrname == 'somevalue':
>   self.__dict__['something'] = value
>   else:
>   raise AttributeError, attrname
>
>   def __str__( self ):
>   return str(self.something)
>
>class Child( SuperClass ):
>   def __setattr__( self, attrname, value ):
>   if attrname == 'funky':
>   self.__dict__['fun'] = value
>   else:
>   SuperClass.__setattr__( self, attrname, value )
>
>   def __str__( self ):
>   return SuperClass.__str__( self ) + ', ' + str(self.fun)
>
>Is this the "Pythonic" way of doing it or should I do it in a different
>way or do I have to use setX/getX (shudder)

I'm totally new to Python myself, but my understanding is that
-- 
http://mail.python.org/mailman/listinfo/python-list


unittest: collecting tests from many modules?

2005-06-12 Thread Jorgen Grahn
I have a set of tests in different modules: test_foo.py, test_bar.py and so
on. All of these use the simplest possible internal layout: a number of
classes containing test*() methods, and the good old lines at the end:

  if __name__ == "__main__":
  unittest.main()

This is great, because each of the modules are runnable, and I can select
classes or tests to run on the commandline if I want to.  However, running
all the tests from e.g. a Makefile is not that fun; I don't get a single
pass/fail summary across the modules.

What's the best way of creating a test.py which
- aggregates the tests from all the test_*.py modules?
- doesn't require me to enumerate all the test classes in test.py
  (forcing each module to define test_foo.theSuite or someting would
  be OK though)
- retains the ability to select tests and verbosity (-q, -v) from the
  command line?

Something like:

  import unittest
  import test_foo
  import test_bar

  if __name__ == "__main__":
  unittest.main(modules = ['test_foo',
   'test_bar'])

Seems to me this should be possible, since all the logic for doing it /is/
there for the local module; I'd assume there would be a way to make unittest
search additional modules for test classes.  But my head starts spinning
when I read the source code ...

/Jorgen

-- 
  // Jorgen GrahnR'lyeh wgah'nagl fhtagn!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get/set class attributes in Python

2005-06-12 Thread tiissa
Kalle Anke wrote:
> I'm coming to Python from other programming languages. I like to
> hide all attributes of a class and to only provide access to them
> via methods. Some of these languages allows me to write something
> similar to this
> 
> int age( )
> {
>   return theAge
> }
> 
> void age( x : int )
> {
>   theAge = x
> }
> 
> (I usually do more than this in the methods).

You can 'hide' you getsetters using a property attribute[1]:

  >>> class person(object):
  ... def __init__(self):
  ... self.age = 0
  ... def set_age(self, age):
  ... print 'set %d' % age
  ... self.__age = age
  ... def get_age(self):
  ... print 'get'
  ... return self.__age
  ... age = property(get_age, set_age)
  ...
  >>> joe = person()
  set 0
  >>> joe.age = 20
  set 20
  >>> print joe.age
  get
  20
  >>>

[1]http://docs.python.org/lib/built-in-funcs.html
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Dealing with marketing types...

2005-06-12 Thread Steve Jorgensen
On Sat, 11 Jun 2005 11:51:02 -0500, tom <[EMAIL PROTECTED]> wrote:

...
>Let me add an Item #3 -
>If you have some entrepeneurial savvy and can keep your emotions out of
>it tou can simply tell them you have decided strike out on your own and
>tell them that you will be available. They will be happy to hear you are
>leaving and happier still to hear you can be available for backup. 
>Their goals and fears are addressed at the same time.  AND there is a very
>high possibility that they will *need* you at a later date for which you
>can charge them dearly.
>
>That last item #3 has actually worked for me with (2) prior employers. 
>I did have to eat my indignation and keep it friendly but it did pay off
>in the end.
>Thomas Bartkus

I have to say that, although I have yet to write a line of Python code for
money, I've found that this concept basically works.  When you realize that
your employer is cutting you out to save the cost of paying you, funny enough,
they'll be willing to -really- pay you as a consultant later when they get
stuck, and one or more paying customers are impacted.  They also win't mind
figuring out how to have you come in after hours so it won't conflict with
your new day job if you have one.  In my case, the work was in VB/VBA, but the
same principle should apply to any technology.

Do make sure that your contract with any new employer allows you to do at
least small amounts of moonlighting - they probably won't object.  They will
insist that any moonlighting shall not compete with their line of business,
and you should agree to that stipulation.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get/set class attributes in Python

2005-06-12 Thread Steve Jorgensen
On Sun, 12 Jun 2005 03:15:27 -0700, Steve Jorgensen <[EMAIL PROTECTED]>
wrote:

...
>>Is this the "Pythonic" way of doing it or should I do it in a different
>>way or do I have to use setX/getX (shudder)
>
>I'm totally new to Python myself, but my understanding is that
...

Oops - I thought I cancelled that post when I relized I was saying nothing,
but somehow, it got posted.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: What is different with Python ?

2005-06-12 Thread Philippe C. Martin
I guess because I have mostly worked with embedded systems and that,
although I have always tried to put abstraction layers between my
applications and the hardware, some constraints still remain at the
application level: (memory, determinism, re-entrance,...). You will notice
that 99% of the embedded systems with realtime constaints use assembly,
C/C++, or ADA.

I agree with you and Peter though that these issues need not be treated on a
first course. Yet, and depending on the ultimate goal (John spoke of IT
versus CS) some of the newly trained folks should know about it. We could
not enjoy Python if no one were here to implement its VM, I have not looked
at the code, but I gather it is fairly complex and does require an amount
of "low level" skills.

Regards,

Philippe



Roy Smith wrote:

> "Philippe C. Martin" <[EMAIL PROTECTED]> wrote:
>> Yet, many issues that a future software engineer should know are
>> mostly hidden by Python (ex: memory management) and that could be
>> detrimental.
> 
> I know I'm going out on a limb by asking this, but why do you think future
> software engineers should know about memory management?
> 
> I used to worry about register allocation.  Today, I don't even know how
> many registers any machine I work on has.  I used to worry about word
> size,
> and byte order.  I used to worry about whether stacks grew up or down and
> addressing modes and floating point formats.  Sure, somebody's got to
> worry about those things, but most people who write software can be
> blissfully ignorant (or, at best, dimly aware) of these issues because
> somebody else (compiler writer, hardware designer, operating system
> writer, etc) has already done the worrying.
> 
> There used to be a time when you had to worry about how many tracks to
> allocate when you created a disk file.  When's the last time you worried
> about that?

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


Re: How to get/set class attributes in Python

2005-06-12 Thread alex23
Kalle Anke wrote:
> I'm coming to Python from other programming languages. I like to
> hide all attributes of a class and to only provide access to them
> via methods.

I'm pretty fond of this format for setting up class properties:

class Klass(object):
def propname():
def fget: pass
def fset: pass
def fdel: pass
def doc: """pass"""
return locals()
propname = property(**propname())

(Replacing 'pass' in the getters & setters et.al with the actual
functionality you want, of course...)

This method minimises the leftover bindings, effectively leaving the
getter/setter methods bound only to the property, ensuring they're only
called when the property is acted upon.

Incidentally, kudos & thanks to whomever I originally stole it from :)

-alex23

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


Re: Sending mail from 'current user' in Python

2005-06-12 Thread Marcus Alanen
Mike Meyer wrote:
> BTW, an alternative for the username is the USER environment
> variable. I don't know whether or not it exists on Windows.

Or LOGNAME. Don't about windows, though.

>>I've also tried opening a pipe to sendmail, and feeding the
>>message to that instead. This too works great (and does give an
>>appropriate default 'From'), but that also turns my problem into
>>the problem of finding the location of the sendmail program,
>>which doesn't seem like much of an improvement, portability-wise.
> Well, you could provide a list of places to look for it. But you're
> right, this doesn't help much with portability.

No, but at least it can be expected to do the right thing w.r.t. sending 
the mail.

>>Finally, if at all possible I'd also like to get this working on
>>Windows, so I'd rather stick with the standard smtplib if I can.
> smtplib needs an SMTP server to connect to. For unix systems, this is
> typically localhost. What do you use for Windows systems? Or are you
> connecting to your machine to deliver the mail?

I'd be very surprised if the typical SMTP server is localhost on 
unix-like computers. Rather, sendmail is configured to transport the 
message to company/university mailserver(s). If that happens to fail, 
the mail is put on the queue at localhost, and transported later (e.g. 
via a cronjob) to the server. At no point is there a server on localhost 
involved. Of course, not everybody's computer is on such a network and a 
sendmail server may indeed be running on localhost, but that's not a 
very informed guess. Let the sendmail program take care of those details.

The Unix Programming Frequently Asked Questions "Q5.2 What's the best 
way to send mail from a program?" is worth reading.

I'd try some simple autodetection (Mike's suggestion sounded great) and 
prompt the user to correct the information, although sendmail itself 
ought to give good defaults, so this might not be necessary. Then try 
/usr/sbin/sendmail, /usr/libexec/sendmail and /usr/lib/sendmail. You 
could try using exitcode 127 to detect "program could not be found or 
executed" but I don't know how portable that is.

I can't comment on the Windows side of things.

Regards,
Marcus
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: What language to manipulate text files

2005-06-12 Thread beliavsky
ross wrote:
> Roose wrote:
> > Why do people keep asking what language to use for certain things in the
> > Python newsgroup?  Obviously the answer is going to biased.
> >
> > Not that it's a bad thing because I love Python, but it doesn't make sense
> > if you honestly want an objective opinion.
> >
> > R
>
> What usenet group is it best to ask in then?
> Is there one where people have good knowledge of many scripting
> languages?

"What programming language is best for x" questions can be asked in
comp.programming and/or comp.lang.misc , and possibly in a
domain-specific newsgroup if it exists, for example
sci.math.num-analysis if x = scientific computing. The resulting
debates contain both heat and light :).

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


Re: How to get/set class attributes in Python

2005-06-12 Thread deelan
Kalle Anke wrote:
> I'm coming to Python from other programming languages. I like to
> hide all attributes of a class and to only provide access to them
> via methods. 
(...)
> Is this the "Pythonic" way of doing it or should I do it in a different
> way or do I have to use setX/getX (shudder)

the pythonic way is to use "property" (as others have already explained)
only when is *stricly necessary*. this may clarify things up:

"Python Is Not Java"


HTH.

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


Re: What is different with Python ?

2005-06-12 Thread Roy Smith
John Machin <[EMAIL PROTECTED]> wrote:

> > I know I'm going out on a limb by asking this, but why do you think future 
> > software engineers should know about memory management?
> 
> Perhaps we have a terminology problem here i.e. different meanings of 
> "software engineer". Philippe started talking about "CS" courses, 
> whereas you may be referring to people who have done an "IT" course or 
> achieved a certification in the use of app development tool X.

No, you've missed the point entirely.

No, the problem is that I'm out on the limb, and you're still comfortably 
standing on the ground leaning up against the trunk.  Climb up and come out 
on the limb with me.  Now, stop hugging the trunk and take a few steps out 
here with me.  Don't worry about how it's swaying, and whatever you do, 
don't look down.

The point I was trying to make was that as computer science progresses, 
stuff that was really important to know a lot about becomes more and more 
taken for granted.  This is how we make progress.

I used to worry about memory busses at the milivolt and microsecond level.  
I knew about termination impedances and wired-OR logic, and power budgets 
and all that good stuff.  Today all I know about memory is you go to 
www.crucial.com, type in your Visa card number, and the nice UPS guy shows 
up with some SIMMs in a few days.

I expect that's all most current CS students know as well.  Is that bad?  
Is their education somehow lacking because they don't understand why 
"memory bus" and "transmission line" belong in the same sentence?  Not at 
all.  All that's happened is that very important stuff has become so 
standardized that they don't have to worry about it any more and can spend 
their time and energy thinking about other problems that need to be solved 
today.

There are lots of really important, hard, theoretical problems that today's 
CS majors need to be solving.  User interfaces for the most part still 
suck.  Self-configuring and self-healing high speed networks on a global 
scale.  AI hasn't really progressed in 30 years.  Computer vision and 
speech.  Robotics.  Cryptography and security.  And what about flying cars?

Just like you can't even begin to think about building today's GUI-driven 
desktop applications if you're still worrying about individual logic gates, 
you can't begin to think about solving some of these really hard problems 
(and others we haven't even imagined) if you're still worrying about memory 
buffer reference counting and garbage collection.  Yesterday's research 
projects are today's utilities and tomorrow's historical footnotes.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Controlling a generator the pythonic way

2005-06-12 Thread Thomas Lotze
Thomas Lotze wrote:

> Does anybody here have a third way of dealing with this?

Sleeping a night sometimes is an insightful exercise *g*

I realized that there is a reason why fiddling with the pointer from
outside the generator defeats much of the purpose of using one. The
implementation using a simple method call instead of a generator needs
to store some internal state variables on an object to save them for the
next call, among them the pointer and a tokenization mode.

I could make the thing a generator by turning the single return
statement into a yield statement and adding a loop, leaving all the
importing and exporting of the pointer intact - after all, someone might
reset the pointer between next() calls.

This is, however, hardly using all the possibilities a generator allows.
I'd rather like to get rid of the mode switches by doing special things
where I detect the need for them, yielding the result, and proceeding as
before. But as soon as I move information from explicit (state variables
that can be reset along with the pointer) to implicit (the point where
the generator is suspended after yielding a token), resetting the
pointer will lead to inconsistencies.

So, it seems to me that if I do want to use generators for any practical
reason instead of just because generators are way cool, they need to be
instantiated anew each time the pointer is reset, for simple consistency
reasons.

Now a very simple idea struck me: If one is worried about throwing away
a generator as a side-effect of resetting the tokenization pointer, why
not define the whole tokenizer as not being resettable? Then the thing
needs to be re-instantiated very explicitly every time it is pointed
somewhere. While still feeling slightly awkward, it has lost the threat
of doing unexpected things.

Does this sound reasonable?

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


Re: Controlling a generator the pythonic way

2005-06-12 Thread Thomas Lotze
Thomas Lotze wrote:

> A related problem is skipping whitespace. Sometimes you don't care about
> whitespace tokens, sometimes you do. Using generators, you can either set
> a state variable, say on the object the generator is an attribute of,
> before each call that requires a deviation from the default, or you can
> have a second generator for filtering the output of the first.

Last night's sleep was really productive - I've also found another way
to tackle this problem, and it's really simple IMO. One could pass the
parameter at generator instantiation time and simply create two
generators behaving differently. They work on the same data and use the
same source code, only with a different parametrization.

All one has to care about is that they never get out of sync. If the
data pointer is an object attribute, it's clear how to do it. Otherwise,
both could acquire their data from a common generator that yields the
PDF content (or a buffer representing part of it) character by
character. This is even faster than keeping a pointer and using it as an
index on the data.

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


Re: What is different with Python ?

2005-06-12 Thread Tom Anderson
On Sun, 12 Jun 2005, Mike Meyer wrote:

> For instance, one problem was "You have two files that have lists of 1
> billion names in them. Print out a list of the names that only occur
> in one of the files."
>
> That's a one-line shell script: "comm -12 <(sort file_one) <(sort file_two)"

Incidentally, how long does sorting two billion lines of text take?

The complementary question, of course, is "how long does it take to come 
up with an algorithm for solving this problem that doesn't involve sorting 
the files?"!

the best thing i can come up with off the top of my head is making a pass 
over one file to build a Bloom filter [1] describing its contents, then 
going over the second file, checking if each name is in the filter, and if 
it is, putting it in a hashtable, then making a second pass over the first 
file, checking if each name is in the hashtable. this would work without 
the filter, but would require storing a billion names in the hashtable; 
the idea is that using the filter allows you to cut this down to a 
tractable level. that said, i'm not sure if it would work in practice - if 
you have a billion names, even if you have a filter a gigabyte in size, 
you still have a 2% false positive rate [2], which is 20 million names.

tom

[1] http://en.wikipedia.org/wiki/Bloom_filter
[2] http://www.cc.gatech.edu/fac/Pete.Manolios/bloom-filters/calculator.html

-- 
Think logical, act incremental
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Controlling a generator the pythonic way

2005-06-12 Thread Kent Johnson
Thomas Lotze wrote:
> Mike Meyer wrote:
> What worries me about the approach of changing state before making a
> next() call instead of doing it at the same time by passing a parameter is
> that the state change is meant to affect only a single call. The picture
> might fit better (IMO) if it didn't look so much like working around the
> fact that the next() call can't take parameters for some technical reason.

I suggest you make the tokenizer class itself into an iterator. Then you can 
define additional next() methods with additional parameters. You could wrap an 
actual generator for the convenience of having multiple yield statements. For 
example (borrowing Peter's PdfTokenizer):

class PdfTokenizer:
def __init__(self, ...):
# set up initial state
self._tokenizer = _getTokens()

def __iter__(self):
return self

def next(self, options=None):
# set self state according to options, if any
n = self._tokenizer.next()
# restore default state
return n

def nextIgnoringSpace(self):
# alterate way of specifying variations
# ...

def _getTokens(self):
while whatever:
yield token

def seek(self, newPosition):
# change state here

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


Re: case/switch statement?

2005-06-12 Thread Dan Sommers
On Sun, 12 Jun 2005 10:35:42 +1000,
Steven D'Aprano <[EMAIL PROTECTED]> wrote:

> I don't relish the idea of especially long case statements.

> I've never understood why something like:

> if x = 5:
> do_this
> elif x = 6:
> do_that
> else:
> do_something_else

> is supposed to be "bad", but

> case of:
> x = 5:
> do_this
> x = 6:
> do_that
> otherwise:
> do_something_else

> is supposed to be "good".

In the truly general case, I agree.

But twist your second example slightly into this:

case x of:
5: do_this
6: do_that
otherwise: do_something_else

and the goodness is obvious:  we're choosing functionality based on the
value of x, so it's nice to see x in only one place.

> Arguably, a case statement *might* allow the compiler to optimize the
> code, maybe, sometimes. But in general, no such optimization is
> possible, so a case statement is merely equivalent to a series of
> if...elif...  statements.

I agree that in general, optimizing a series of if/elif statements is
tricky, but your first example is very command and exactly the kind of
code that a good optimizer *can* optimize (as long as "x" isn't
pathological in the sense that evaluating it also changes its value or
has other side effects).

> There is no case statement in Python. If you don't care about
> readability, one alternative is to use a dictionary:

> case = {5: do_this, 6: do_that}
> case.get(x, do_something_else)()

I find this very readable.  YMMV.

I also find this easier to extend in the "case" (pardon the pun) that my
program expands and x might now be 7 or 8 (or "foo" or 3j).

The biggest drawback here, as others have noted in previous discussions,
is that the do_* functions execute in a separate scope.

Regards,
Dan

-- 
Dan Sommers

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


Re: unittest: collecting tests from many modules?

2005-06-12 Thread John Roth
"Jorgen Grahn" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
>I have a set of tests in different modules: test_foo.py, test_bar.py and so
> on. All of these use the simplest possible internal layout: a number of
> classes containing test*() methods, and the good old lines at the end:
>
>  if __name__ == "__main__":
>  unittest.main()
>
> This is great, because each of the modules are runnable, and I can select
> classes or tests to run on the commandline if I want to.  However, running
> all the tests from e.g. a Makefile is not that fun; I don't get a single
> pass/fail summary across the modules.
>
> What's the best way of creating a test.py which
> - aggregates the tests from all the test_*.py modules?
> - doesn't require me to enumerate all the test classes in test.py
>  (forcing each module to define test_foo.theSuite or someting would
>  be OK though)
> - retains the ability to select tests and verbosity (-q, -v) from the
>  command line?

I use your second point: I build a TestAll module. However,
I'm going to look at building the test suite using the TestLoader
class in the next version of PyFit. It sholdn't be all that difficult
to find all the Test*.py modules in a directory, import them and
use the TestLoader class to add them to the test suite.

Or, for that matter, to use reflection to find all the classes that
derive from TestCase and add them to the suite manually. That
has the advantage that one could then select classes according
to some parameter.

John Roth


>
> Something like:
>
>  import unittest
>  import test_foo
>  import test_bar
>
>  if __name__ == "__main__":
>  unittest.main(modules = ['test_foo',
>   'test_bar'])
>
> Seems to me this should be possible, since all the logic for doing it /is/
> there for the local module; I'd assume there would be a way to make 
> unittest
> search additional modules for test classes.  But my head starts spinning
> when I read the source code ...
>
> /Jorgen
>
> -- 
>  // Jorgen Grahn  \X/algonet.se>   R'lyeh wgah'nagl fhtagn! 

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Kalle Anke
On Sun, 12 Jun 2005 12:20:29 +0200, tiissa wrote
(in article <[EMAIL PROTECTED]>):


> You can 'hide' you getsetters using a property attribute[1]:
> 
> [1]http://docs.python.org/lib/built-in-funcs.html

Thanks, this is exactly what I was looking for


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


checking for when a file or folder exists, typing problems?

2005-06-12 Thread Bryan Rasmussen
Hi 
I have a little program that is importing from os.path import exists, join,
isdir, normpath, isfile
at one point in my program I check if a file exists using
if exists("c:\projects"):

and that works fine.

If I change it to be
if exists(thepath):
where thepath is a commandline argument it does not work fine.

Note that the commandline is c:\projects and when I print thepath to check what
is going on it prints
c:\projects

The only thing I can assume is that there is some sort of typing problem going
on here, but then it should go ahead and give an error then if it's getting
something unexpected obviously. 

Any help on what this error is?

Thanks


-- 
Bryan Rasmussen





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


Re: TKinter -- '' event executing more than once?

2005-06-12 Thread Jeff Epler
For me, an 'is' test works to find out what widget the event is taking
place on.

#
import Tkinter

def display_event(e):
print "event received", e.widget, e.widget is t

t = Tkinter.Tk()
t.bind("", display_event)
w = Tkinter.Entry(t)
t.destroy()
#

This program prints:
event received .-1209415348 False
event received . True

if that fails, you could compare str(e.widget) and t._w, though this can
give a false positive if you have multiple Tk() instances---each Tk()
instance is called ".".

Jeff


pgpXtThASJKeK.pgp
Description: PGP signature
-- 
http://mail.python.org/mailman/listinfo/python-list

Scaling down (was Re: Dealing with marketing types...)

2005-06-12 Thread Aahz
In article <[EMAIL PROTECTED]>,
Paul Rubin   wrote:
>
>What example?  Slashdot?  It uses way more hardware than it needs to,
>at least ten servers and I think a lot more.  If LJ is using 6x as
>many servers and taking 20x (?) as much traffic as Slashdot, then LJ
>is doing something more efficiently than Slashdot.  

So what?  I think you're missing the real point of the article: using
LAMP scales *DOWN* in a way that enterprise systems don't.  Getting your
first prototype up and running is far more important than sheer
scalability, and LAMP does have many mechanisms to obtain scalability
when it's needed.
-- 
Aahz ([EMAIL PROTECTED])   <*> http://www.pythoncraft.com/

f u cn rd ths, u cn gt a gd jb n nx prgrmmng.
-- 
http://mail.python.org/mailman/listinfo/python-list


Slicing an IXMLDOMNodeList

2005-06-12 Thread marcel . vandendungen
Hi,

I'm using MSXML to select elements from a XML document and want
to slice off the last part of an IXMLDOMNodeList.

>>> import win32com.client
>>> xmldoc = win32com.client.Dispatch('msxml.DOMDocument')
>>> xmldoc.load('file.xml')
True
>>> rgelem = xmldoc.selectNodes('/root/elem')
>>> if rgelem.length > 10:
... rgelem = rgelem[-10:]
...
Traceback (most recent call last):
  File "", line 2, in ?
  File "C:\Python24\Lib\site-packages\win32com\client\__init__.py",
line 454, in __getattr__
raise AttributeError, "'%s' object has no attribute '%s'" %
(repr(self), attr)
AttributeError: '' object has no attribute '__len__'
>>>

The IXMLDOMNodeList obviously doesn't have a '__len__' member
function (why not?).
Is there a way to make the IXMLDOMNodeList support slicing?
I've tried to give the rgelem object a __len__ member, but got
an exception from __setattr__:

  File "C:\Python24\Lib\site-packages\win32com\client\__init__.py",
line 462, in __setattr__
raise AttributeError, "'%s' object has no attribute '%s'" %
(repr(self), attr)
AttributeError: '' object has no attribute '__len__'

Anybody know how to make this work?

TIA,
-- Marcel

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Kalle Anke
On Sun, 12 Jun 2005 13:59:27 +0200, deelan wrote
(in article <[EMAIL PROTECTED]>):

> the pythonic way is to use "property" (as others have already explained)
> only when is *stricly necessary*. this may clarify things up:

Thanks for the link (although Java was only one of the languages I was 
thinking of). 

Anyway, I got another "problem" (read: being used to do it like this in other 
languages). I'm used to use statically typed languages and for me one of the 
advantages is that I can be sure that a parameter is of a certain type. So in 
Java I could write

void doSomething( data : SomeClass ){ ... }

and I would be sure at compile time that I would only get SomeClass objects 
as parameters into the method.

In learning Python I've understood that I should write code in such a way 
that it can handle different data and this is fine with me. But what if I 
have a class where different attributes should only have values of a certain 
type and everything else is an error.

For example, if I have an class that defines three attributes: first and last 
name plus email address. The only valid data types for the first two are 
strings and for the last an EmailAddress class.

How should I handle this in Python? 

Should I use just don't care (but I'm going to send the data to a database so 
I need to ensure that the data is OK)? Should I use 'isinstance' and check 
manually? Or should I do something else?

(I've been trying to figure out this and other things but I haven't found 
much in books or web sites)

   jem


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


Re: How to get/set class attributes in Python

2005-06-12 Thread John Machin
Kalle Anke wrote:
> On Sun, 12 Jun 2005 12:20:29 +0200, tiissa wrote
> (in article <[EMAIL PROTECTED]>):
> 
> 
> 
>>You can 'hide' you getsetters using a property attribute[1]:
>>
>>[1]http://docs.python.org/lib/built-in-funcs.html
> 
> 
> Thanks, this is exactly what I was looking for
> 
> 

OTOH, I beseech you to consider an attitude transplant :-)

I.e. put your effort into writing code that allows people to do useful 
things, rather than opaque guff full of __blahblah__ that stops them 
from doing dopey or evil things they're usually smart enough or 
righteous enough not to do anyway.

BTW, what do you think of this:

sys.maxint = -12345

Cheers & HTH,
John

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Kalle Anke
On Sun, 12 Jun 2005 15:35:15 +0200, John Machin wrote
(in article <[EMAIL PROTECTED]>):

> OTOH, I beseech you to consider an attitude transplant :-)

;-)

> I.e. put your effort into writing code that allows people to do useful 
> things, rather than opaque guff full of __blahblah__ that stops them 
> from doing dopey or evil things they're usually smart enough or 
> righteous enough not to do anyway.

I'm just trying to protect myself from myself :-) No, I'm playing around with 
different ways of doing things, trying to learn Python and how do things in a 
proper "pythonic" way. 

In this case I'm going to have a class with some properties that are going to 
be stored in a database, I don't want to read all the properties everytime I 
recreate the object from the database but I still want to give the impression 
that the attributes exists and is available. So my idea was to "hide" the 
actual database stuff ...

> BTW, what do you think of this:
> 
> sys.maxint = -12345

I don't really understand what you're meaning.

   jem


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


ElementTree Namespace Prefixes

2005-06-12 Thread Chris Spencer
Does anyone know how to make ElementTree preserve namespace prefixes in 
parsed xml files? The default behavior is to strip a document of all 
prefixes and then replace them autogenerated prefixes like ns0, ns1, 
etc. The correct behavior should be to write the file in the form that 
it was read, which it seems to do correctly for everything except 
namespace prefixes. The docs mention "proper" output can be achieved by 
using the Qname object, but they don't go into any detail. Any help is 
appreciated.

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Dan Sommers
On Sun, 12 Jun 2005 15:35:46 +0200,
Kalle Anke <[EMAIL PROTECTED]> wrote:

> In learning Python I've understood that I should write code in such a
> way that it can handle different data and this is fine with me. But
> what if I have a class where different attributes should only have
> values of a certain type and everything else is an error.

> For example, if I have an class that defines three attributes: first
> and last name plus email address. The only valid data types for the
> first two are strings and for the last an EmailAddress class.

> How should I handle this in Python?

> Should I use just don't care (but I'm going to send the data to a
> database so I need to ensure that the data is OK)? Should I use
> 'isinstance' and check manually? Or should I do something else?

One key phrase here is "duck typing":  if it walks like a duck, and
swims like a duck, and quacks like a duck, then it's a duck, or at least
you can assume it's a duck.  For example:

def put_something( file_open_for_writing, something ):
file_open_for_writing.write( str( something ) )

I don't care if file_open_for_writing is "really a file," as long it has
a "write" method that writes a string somewhere.

The other key phrase is "we're all adults here":  if I import sin from
the math module and pass it a unicode string, I get what I deserve.

In lower-level methods/functions, I usually just assume that parameters
are correct, and let the higher-level code catch any exceptions that
occur becuase it (the higher-level code) messed up and passed the wrong
kind of parameter.  For example, UI code *has* to check things that
users type, but once that happens, there's no need for my program to
recheck every parameter on every function call all the way down.  Either
everything works, or that same UI code catches and logs a TypeError or
ValueError or KeyError exception and asks the user what to do next.

Regards,
Dan

-- 
Dan Sommers

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


Re: How to get/set class attributes in Python

2005-06-12 Thread George Sakkis
"alex23" wrote:

> Kalle Anke wrote:
> > I'm coming to Python from other programming languages. I like to
> > hide all attributes of a class and to only provide access to them
> > via methods.
>
> I'm pretty fond of this format for setting up class properties:
>
> class Klass(object):
> def propname():
> def fget: pass
> def fset: pass
> def fdel: pass
> def doc: """pass"""
> return locals()
> propname = property(**propname())
>
> (Replacing 'pass' in the getters & setters et.al with the actual
> functionality you want, of course...)
>
> This method minimises the leftover bindings, effectively leaving the
> getter/setter methods bound only to the property, ensuring they're only
> called when the property is acted upon.
>
> Incidentally, kudos & thanks to whomever I originally stole it from :)
>
> -alex23

And a slight improvement in readability IMHO (for python 2.4+) is the
following recipe:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/410698.
Using the Property decorator, the property declaration above becomes:

class Klass(object):
@Property # <--- the capitalized 'P' is not a typo
def propname():
'''Documentation'''
def fget: pass
def fset: pass
def fdel: pass

The Property decorator peeks automagically the fget, fset, fdel and
__doc__ from the property's locals(), instead of having the property
return locals() explicitly. Also, it doesn't break when the property
defines local variables other than [fget, fset, fdel, doc]. 

George

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Chris Spencer
Kalle Anke wrote:
> On Sun, 12 Jun 2005 13:59:27 +0200, deelan wrote
> (in article <[EMAIL PROTECTED]>):
> 
> void doSomething( data : SomeClass ){ ... }
> 
> and I would be sure at compile time that I would only get SomeClass objects 
> as parameters into the method.

Being an untyped language, Python does not require you to enforce types. 
However, for those that require such functionality, you can get away 
with using the "assert" statement. For example, if I wanted to make sure 
my function foo was only given instances of class Bar, I'd write 
something like:

 >>> class Bar: pass
 >>> def foo(bar):
... assert isinstance(bar, Bar), "argument is not of type Bar"
... print "argument must be of type Bar"
...
 >>> bar = Bar()
 >>> foo(bar)
argument must be of type Bar
 >>> foo(123)
Traceback (most recent call last):
   File "", line 1, in ?
   File "", line 2, in foo
AssertionError: argument is not of type Bar
 >>>

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


Code documentation tool similar to what Ruby (on Rails?) uses

2005-06-12 Thread Ksenia Marasanova
Hi,

I wonder if there is a tool for generation Python API documentation
that can include source code into HTML output. Example:
http://api.rubyonrails.com/ I really like the possibility to click on
"show source" link and read the source of the method!

AFAIK it is not possible with Epydoc and Pydoc.. but maybe other tools?

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


Re: unittest: collecting tests from many modules?

2005-06-12 Thread George Sakkis
"Jorgen Grahn" wrote:

> I have a set of tests in different modules: test_foo.py, test_bar.py and so
> on. All of these use the simplest possible internal layout: a number of
> classes containing test*() methods, and the good old lines at the end:
>
>   if __name__ == "__main__":
>   unittest.main()
>
> This is great, because each of the modules are runnable, and I can select
> classes or tests to run on the commandline if I want to.  However, running
> all the tests from e.g. a Makefile is not that fun; I don't get a single
> pass/fail summary across the modules.
>
> What's the best way of creating a test.py which
> - aggregates the tests from all the test_*.py modules?
> - doesn't require me to enumerate all the test classes in test.py
>   (forcing each module to define test_foo.theSuite or someting would
>   be OK though)
> - retains the ability to select tests and verbosity (-q, -v) from the
>   command line?
>
> Something like:
>
>   import unittest
>   import test_foo
>   import test_bar
>
>   if __name__ == "__main__":
>   unittest.main(modules = ['test_foo',
>'test_bar'])
>
> Seems to me this should be possible, since all the logic for doing it /is/
> there for the local module; I'd assume there would be a way to make unittest
> search additional modules for test classes.  But my head starts spinning
> when I read the source code ...

I had written a script to do something close to this; currently it
doesn't do any kind of aggregation, but it should be easy to extend it
as you like. What I don't like is the way it currently works: it
replaces sys.modules['__main__'] for each unit test and then it
execfile()s it, which seems like a hack. I didn't look into unittest's
internals in case there is a more elegant way around this; if there
isn't, a future version of unittest should address the automatic
aggregation of tests, as py.test does already.

The link to the script is http://rafb.net/paste/results/V0y16g97.html.

Hope this helps,
George

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


Re: Code documentation tool similar to what Ruby (on Rails?) uses

2005-06-12 Thread Michele Simionato
What about doing it yourself?

>>> import inspect, os
>>> print "%s" % inspect.getsource(os.makedirs)
def makedirs(name, mode=0777):
"""makedirs(path [, mode=0777])

Super-mkdir; create a leaf directory and all intermediate ones.
Works like mkdir, except that any intermediate path segment (not
just the rightmost) will be created if it does not exist.  This is
recursive.

"""
head, tail = path.split(name)
if not tail:
head, tail = path.split(head)
if head and tail and not path.exists(head):
makedirs(head, mode)
if tail == curdir:   # xxx/newdir/. exists if
xxx/newdir exists
return
mkdir(name, mode)


 Michele Simionato

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


Re: case/switch statement?

2005-06-12 Thread Steven D'Aprano
On Sun, 12 Jun 2005 08:33:32 -0400, Dan Sommers wrote:

>> I've never understood why something like:
> 
>> if x = 5:
>> do_this
>> elif x = 6:
>> do_that
>> else:
>> do_something_else
> 
>> is supposed to be "bad", but
> 
>> case of:
>> x = 5:
>> do_this
>> x = 6:
>> do_that
>> otherwise:
>> do_something_else
> 
>> is supposed to be "good".
> 
> In the truly general case, I agree.
> 
> But twist your second example slightly into this:
> 
> case x of:
> 5: do_this
> 6: do_that
> otherwise: do_something_else
> 
> and the goodness is obvious:  we're choosing functionality based on the
> value of x, so it's nice to see x in only one place.

Yes. But now change the references to do_this and do_that to ten lines
of in-line code each, and add another dozen similar tests for 7, 8, etc,
and by the time you get to the third page you've forgotten what the
variable being tested is.

Now, you or I will obviously never write such hard-to-maintain code
, but some people will, and we'll have to maintain it.

It isn't at all obvious that case statements are more readable than
if...elif, nor are they necessarily faster at runtime, although they can
be. Against that occasional optimization and sometimes increase in
readability, you have disadvantages: more keywords, implicit tests instead
of explicit, new syntax to learn.



>> Arguably, a case statement *might* allow the compiler to optimize the
>> code, maybe, sometimes. But in general, no such optimization is
>> possible, so a case statement is merely equivalent to a series of
>> if...elif...  statements.
> 
> I agree that in general, optimizing a series of if/elif statements is
> tricky, but your first example is very command and exactly the kind of
> code that a good optimizer *can* optimize (as long as "x" isn't
> pathological in the sense that evaluating it also changes its value or
> has other side effects).

Yes. But that's also the sort of optimization that could be done for
if...elif as well, without introducing new syntax and new reserved words.

Case statements seem to be one of those things that Python newbies from
other languages automatically ask for, but the case for introducing case
(pun intended) doesn't appear to be strong enough to justify the amount of
verbiage spent on it.

And on that note, I will say no more on the subject.


-- 
Steven.

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Steven D'Aprano
On Sun, 12 Jun 2005 14:40:26 +, Chris Spencer wrote:

> Being an untyped language, Python does not require you to enforce types. 
> However, for those that require such functionality, you can get away 
> with using the "assert" statement.

Assuming that Python isn't executed with the optimize switch, which
disables assert.

$ python -O
Python 2.3.3 (#1, May  7 2004, 10:31:40)
[GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
py>
py>
py> def tester(x):
... assert type(x) == type(0)
... print "%s is an integer." % x
...
py> tester(3)
'3 is an integer'
py> tester("hello")
'hello is an integer'


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


how to startup the default web browser to open a url?

2005-06-12 Thread flyaflya
I want to startup the default web browser(ie...) to open a url, "execl" 
can open a process, but when the process exit, the other process will 
exit too, has any why to deal this problem?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: What language to manipulate text files

2005-06-12 Thread Brian
Hi Roose,

Actually, it is a good thing because it allows those who know the Python 
language to be able to show the benefits and weaknesses of the language. 
  Sure, the attitude here will be "Yes, it's a great language."  Yet, at 
the same time, it also enables the poster to be able to see potential 
benefits to Python that he or she may not of been aware of.

If we don't let others know about the benefits of Python, who will?

Brian
---


Roose wrote:
> Why do people keep asking what language to use for certain things in the 
> Python newsgroup?  Obviously the answer is going to biased.
> 
> Not that it's a bad thing because I love Python, but it doesn't make sense 
> if you honestly want an objective opinion.
> 
> R
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: checking for when a file or folder exists, typing problems?

2005-06-12 Thread Brian
Hi Bryan,

Here's a potential idea.  Try converting the variable to a string by 
using the following syntax:


   thePath = str(thePathArg)


This will convert the current variable type to a string, which follows 
the data type syntax that you have specified at the beginning of your 
message.

Hope this helps,

Brian :-)
---


Bryan Rasmussen wrote:
> Hi 
> I have a little program that is importing from os.path import exists, join,
> isdir, normpath, isfile
> at one point in my program I check if a file exists using
> if exists("c:\projects"):
> 
> and that works fine.
> 
> If I change it to be
> if exists(thepath):
> where thepath is a commandline argument it does not work fine.
> 
> Note that the commandline is c:\projects and when I print thepath to check 
> what
> is going on it prints
> c:\projects
> 
> The only thing I can assume is that there is some sort of typing problem going
> on here, but then it should go ahead and give an error then if it's getting
> something unexpected obviously. 
> 
> Any help on what this error is?
> 
> Thanks
> 
> 
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: how to startup the default web browser to open a url?

2005-06-12 Thread Will McGugan
flyaflya wrote:
> I want to startup the default web browser(ie...) to open a url, "execl" 
> can open a process, but when the process exit, the other process will 
> exit too, has any why to deal this problem?

You want the 'webbrowser' module.

http://docs.python.org/lib/module-webbrowser.html

Will McGugan
-- 
http://www.willmcgugan.com
"".join({'*':'@','^':'.'}.get(c,0) or chr(97+(ord(c)-84)%26) for c in 
"jvyy*jvyyzpthtna^pbz")
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python bytecode grammar

2005-06-12 Thread Peter Dembinski
"Terry Reedy" <[EMAIL PROTECTED]> writes:

> "M1st0" <[EMAIL PROTECTED]> wrote in message 
> news:[EMAIL PROTECTED]
>> where I can find the grammar of python bytecode ? ( better if is in
>> BCF
>
> I believe the top-level production is something like
> BYTECODE := (OPCODE ARGS)*

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


Capture close window button in Tkinter

2005-06-12 Thread William Gill
I am trying to make a simple data editor in Tkinter where each data 
element has a corresponding Entry widget.   I have tried to use the 
FocusIn/FocusOut events to set a 'hasChanged' flag  (if a record has not 
changed, the db doesn’t need updating).  This seems to work fine except 
that when the user finishes and clicks a ‘done’ button or the close 
window button (in the root widget) no FocusOut event is triggered.  I 
can trigger a FocusOut event if the ‘done’ button opens another window 
(i.e. a messagebox) that takes focus.  Enter and Leave follow the mouse, 
but don’t trigger when the user tabs between fields.

Is there a better way to monitor 'hasChanged'?   Also, how do I capture 
the root window close button?

Thanks,

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



Re: How to get/set class attributes in Python

2005-06-12 Thread Peter Dembinski
Kalle Anke <[EMAIL PROTECTED]> writes:

[snap]

>> sys.maxint = -12345
>
> I don't really understand what you're meaning.

He meant None = 1 :>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: ElementTree Namespace Prefixes

2005-06-12 Thread Andrew Dalke
On Sun, 12 Jun 2005 15:06:18 +, Chris Spencer wrote:

> Does anyone know how to make ElementTree preserve namespace prefixes in 
> parsed xml files?

See the recent c.l.python thread titled "ElemenTree and namespaces"
and started "May 16 2:03pm".  One archive is at

http://groups-beta.google.com/group/comp.lang.python/browse_thread/thread/31b2e9f4a8f7338c/363f46513fb8de04?&rnum=3&hl=en

Andrew
[EMAIL PROTECTED]

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


Re: unittest: collecting tests from many modules?

2005-06-12 Thread Scott David Daniels
Jorgen Grahn wrote:
> I have a set of tests in different modules: test_foo.py, test_bar.py and so
> on. All of these use the simplest possible internal layout: a number of
> classes containing test*() methods, and the good old lines at the end:
>   if __name__ == "__main__":
>   unittest.main()
> 
> 
> What's the best way of creating a test.py which
> - aggregates the tests from all the test_*.py modules?
> - doesn't require me to enumerate all the test classes in test.py
>   (forcing each module to define test_foo.theSuite or someting would
>   be OK though)
> - retains the ability to select tests and verbosity (-q, -v) from the
>   command line?

> Something like:
> 
>   import unittest
>   import test_foo
>   import test_bar
> 
>   if __name__ == "__main__":
>   unittest.main(modules = ['test_foo',
>'test_bar'])
> 
> Seems to me this should be possible, since all the logic for doing it /is/
> there for the local module; I'd assume there would be a way to make unittest
> search additional modules for test classes.  But my head starts spinning
> when I read the source code ...
> 
> /Jorgen
> 
How about some variant of:

 import unittest
 import test_foo, test_bar, ...

 def set_globals(modules):
 glbl = globals()
 for module in modules:
 modprefix = module.__name__[5:] + '__'
 for element in dir(module):
 data = getattr(module, element)
 if isinstance(data, type) and issubclass(data,
  unittest.TestCase):
 glbl[modprefix + element] = data

 if __name__ == "__main__":
 module = type(unittest)
 set_globals([mod for name, mod in globals().items()
  if name.lower().beginswith('test')
 and isinstance(mod, module)])
 unittest.main()


--Scott David Daniels
[EMAIL PROTECTED]
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get/set class attributes in Python

2005-06-12 Thread vincent wehren

"Peter Dembinski" <[EMAIL PROTECTED]> schrieb im Newsbeitrag 
news:[EMAIL PROTECTED]
| Kalle Anke <[EMAIL PROTECTED]> writes:
|
| [snap]
|
| >> sys.maxint = -12345
| >
| > I don't really understand what you're meaning.
|
| He meant None = 1 :>

I'm sure you know that has become a no-no in Python 2.4+ ;)

>>> None = 1
SyntaxError: assignment to None
>>>


--
Vincent Wehren







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


Re: checking for when a file or folder exists, typing problems?

2005-06-12 Thread Scott David Daniels
Bryan Rasmussen wrote:
> ... at one point in my program I check if a file exists using
> if exists("c:\projects"):

You should not be using a backslash in non-raw-string source to
mean anything but "escape the next character."  The above should
either be written as:
 if exists(r"c:\projects"):
or:
 if exists("c:\\projects"):

I suspect you problem has to do with this difference, but perhaps not.
Give exact short code that actually demonstrates the problem.

--Scott David Daniels
[EMAIL PROTECTED]
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: TKinter -- '' event executing more than once?

2005-06-12 Thread Christopher Subich
Jeff Epler wrote:
> For me, an 'is' test works to find out what widget the event is taking
> place on.

... yes, I am apparently as stupid as I look.  In my test code, I was 
trying "if event is widget," and I just now saw that.  Thanks! :)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get/set class attributes in Python

2005-06-12 Thread Steven D'Aprano
On Sun, 12 Jun 2005 15:35:46 +0200, Kalle Anke wrote:

> Anyway, I got another "problem" (read: being used to do it like this in other 
> languages). I'm used to use statically typed languages and for me one of the 
> advantages is that I can be sure that a parameter is of a certain type. So in 
> Java I could write
> 
> void doSomething( data : SomeClass ){ ... }
> 
> and I would be sure at compile time that I would only get SomeClass objects 
> as parameters into the method.
> 
> In learning Python I've understood that I should write code in such a way 
> that it can handle different data and this is fine with me. But what if I 
> have a class where different attributes should only have values of a certain 
> type and everything else is an error.
> 
> For example, if I have an class that defines three attributes: first and last 
> name plus email address. The only valid data types for the first two are 
> strings and for the last an EmailAddress class.
> 
> How should I handle this in Python? 
> 
> Should I use just don't care (but I'm going to send the data to a database so 
> I need to ensure that the data is OK)? Should I use 'isinstance' and check 
> manually? Or should I do something else?

As you have worked out, Python doesn't do automatic type-checking for you.
But if you really do need type-checking, you can do it yourself with
isinstance() and/or type(). It isn't forbidden :-)

Or, you can try just coercing the data you have to the type you want. eg
instead of testing to see if obj is an integer, you might do:

try:
obj = int(obj)
except:
raise TypeError("can't convert to integer")
insert_in_database(obj)

This may be appropriate for your application.

Another method that is sometimes useful: you are expecting an instance of
Waterfowl class, but actually you are happy to use duck-typing: if it
looks like a duck, swims like a duck, and quacks like a duck, it is
close-enough to a duck:

def process_waterfowl(duck):
"""do things to an instance of Waterfowl, or equivalent"""
try:
look, swim, quack = duck.look, duck.swim, duck.quack
except AttributeError:
raise TypeError("object is not a waterfowl")
# process any object that has look, swim and quack attributes
# as if it were a waterfowl
duck.look()
duck.swim()
duck.quack()


-- 
Steven.

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Peter Dembinski
"vincent wehren" <[EMAIL PROTECTED]> writes:

> "Peter Dembinski" <[EMAIL PROTECTED]> schrieb im Newsbeitrag 
> news:[EMAIL PROTECTED]
> | Kalle Anke <[EMAIL PROTECTED]> writes:
> |
> | [snap]
> |
> | >> sys.maxint = -12345
> | >
> | > I don't really understand what you're meaning.
> |
> | He meant None = 1 :>
>
> I'm sure you know that has become a no-no in Python 2.4+ ;)

Yep.  Still waiting for delegalisation of others :>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Capture close window button in Tkinter

2005-06-12 Thread Jonathan Ellis
William Gill wrote:
> I am trying to make a simple data editor in Tkinter where each data
> element has a corresponding Entry widget.   I have tried to use the
> FocusIn/FocusOut events to set a 'hasChanged' flag  (if a record has not
> changed, the db doesn't need updating).  This seems to work fine except
> that when the user finishes and clicks a 'done' button or the close
> window button (in the root widget) no FocusOut event is triggered.  I
> can trigger a FocusOut event if the 'done' button opens another window
> (i.e. a messagebox) that takes focus.  Enter and Leave follow the mouse,
> but don't trigger when the user tabs between fields.
>
> Is there a better way to monitor 'hasChanged'?

I'd go with monitoring keypresses in the Entry widget.

> Also, how do I capture
> the root window close button?

root = Tk()
root.protocol("WM_DELETE_WINDOW", onexit)

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


How to receve user events from IE on objects within frames

2005-06-12 Thread cal_2pac


Resurrecting a month old thread.. (listed at
http://groups-beta.google.com/group/comp.lang.python/browse_thread/thread/2f4e50e1e316eef4/5924203f822f7f4b?q=cal_2pac&rnum=3#5924203f822f7f4b)
Somehow - responses to that thread are not being brought up in
chronological order. Thus the creation of another thread.

The thread listed above proposed a solution to receive events from user
events on the document in a webpage.
However, it seems that this solution does not return events on objects
within
frames in webpages eg . if you go to www.andersondirect.com - the page
is composed of three frames called as topFrame main and address. Now
when I click on say 'Select a Vehicle' which is within main - I do not
get any Onclick event. I also do not get an OnMousemove event if I move
the mouse. However, I do get on Mousemove event on a tag called as
frameset (which is part of the top page).
How does one get events from the frames then?

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


Re: Dealing with marketing types...

2005-06-12 Thread Terry Reedy

"Paul Rubin" <"http://phr.cx"@NOSPAM.invalid> wrote in message 
news:[EMAIL PROTECTED]
> Andrew Dalke <[EMAIL PROTECTED]> writes:
>> If that's indeed the case then I'll also argue that each of
>> them is going to have app-specific choke points which are best
>> hand-optimized and not framework optimized.  Is there enough
>> real-world experience to design a EnterpriseWeb-o-Rama (your
>> "printing press") which can handle those examples you gave
>> any better than starting off with a LAMP system and hand-caching
>> the parts that need it?
>
> Yes, of course there is.  Look at the mainframe transaction systems of
> the 60's-70's-80's, for example.  Look at Google.

Based on what I've read, if we could look at Google, we would see 150,000 
to 200,000 servers (about half bought with IPO money).  We would see a 
highly customized dynamic cluster computing infrastructure that can be 
utilized with high-level (Python-like) commands.  The need to throw 
hundreds of machines at each web request strikes me as rather specialized, 
though definitely not limited to search.  So while not LAMP, I don't see it 
as generic EWeboRama either.

Terry J. Reedy



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


Re: Code documentation tool similar to what Ruby (on Rails?) uses

2005-06-12 Thread Ksenia Marasanova
12 Jun 2005 08:12:14 -0700, Michele Simionato <[EMAIL PROTECTED]>:
> What about doing it yourself?
> 
> >>> import inspect, os
> >>> print "%s" % inspect.getsource(os.makedirs)

That's easy, thanks! I guess I'll submit a patch for Epydoc with the
functionality I've mentioned :)


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


Re: How to get/set class attributes in Python

2005-06-12 Thread Bruno Desthuilliers
Chris Spencer a écrit :
> Kalle Anke wrote:
> 
>> On Sun, 12 Jun 2005 13:59:27 +0200, deelan wrote
>> (in article <[EMAIL PROTECTED]>):
>>
>> void doSomething( data : SomeClass ){ ... }
>>
>> and I would be sure at compile time that I would only get SomeClass 
>> objects as parameters into the method.
> 
> 
> Being an untyped language,  Python does not require you to enforce types.

Nope. Python *is* typed. But it doesnt confuse implementation with semantic.

> However, for those that require such functionality, you can get away 
> with using the "assert" statement. For example, if I wanted to make sure 
> my function foo was only given instances of class Bar, I'd write 
> something like:
> 
>  >>> class Bar: pass
>  >>> def foo(bar):
> ... assert isinstance(bar, Bar), "argument is not of type Bar"
> ... print "argument must be of type Bar"
  ...
>  >>> bar = Bar()
>  >>> foo(bar)
> argument must be of type Bar
>  >>> foo(123)
> Traceback (most recent call last):
>   File "", line 1, in ?
>   File "", line 2, in foo
> AssertionError: argument is not of type Bar
>  >>>

And *this* is highly unpythonic. And un-OO too, since it makes foo() 
dependant on *class* Bar, when it should most probably be enough that it 
only depends on (probably part of) the *interface* of class Bar.

Suppose I want to adapt my own class Baaz so it's compatible with Bar. 
Now I *must* make the adapter a subclass of Bar (and then depends on 
Bar's *implementation*) when it only needs to expose the same (probably 
subset of) interface.

Except for exceptions (please pardon the pun), one most usually don't 
have to worry about the real class of an object. In 5 years programming 
Python, I only had to check for the type of an object a couple of times, 
and each time only for more genericity (I mostly needed to dispatch on 
some 'generic types' like string-like, sequence-like, map-like, 
numeric-like, callable, and others), and this was never used as a way to 
restrict the possible types (exceptions are good enough for this).

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


Re: Custom type: PyObject_IS_GC access violation

2005-06-12 Thread =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=
Bue Krogh Vedel-Larsen wrote:

> But if I call
> 
> SA_PyVector_Type.tp_new = PyType_GenericNew;
> PyType_Ready( &SA_PyVector_Type );
> 
> then, when Py_Finalize is called, PyObject_IS_GC(op) in visit_decref() in 
> gcmodule.c causes an access violation. If I don't call PyType_Ready, then 
> the access violation doesn't occure, but then the type can't be used...
> 
> So, the question is, does anyone have any idea about what could be 
> causing this?

Most likely some code that you haven't shown. Here is the expansion
of PyObject_IS_GC(op)

#define PyObject_IS_GC(o) (PyType_IS_GC((o)->ob_type) && \
((o)->ob_type->tp_is_gc == NULL || (o)->ob_type->tp_is_gc(o)))

so it becomes

PyType_IS_GC(op->type) && (op->ob_type->tp_is_gc==NULL ||
op->ob_type->tp_is_gc(op))

Then, PyType_IS_GC(op->type) becomes

PyType_HasFeature((op->type), Py_TPFLAGS_HAVE_GC)

which in turn becomes

(op->tp_flags & Py_TPFLAGS_HAVE_GC) != 0

So typically, PyObject_IS_GC goes to the type of the object,
which should never crash, and then looks into the flags of
the type, which cannot crash - unless somebody messed with
ob_type of the object, and unless this isn't a Python
object in the first place.

You did not say what kind of object op was in the crash - this
is something you should investigate further. Does it point to
a Python object? If so, what is the type of the Python object?

Regards,
Martin
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: What is different with Python ?

2005-06-12 Thread Steven D'Aprano
On Sun, 12 Jun 2005 08:11:47 -0400, Roy Smith wrote:

> The point I was trying to make was that as computer science progresses, 
> stuff that was really important to know a lot about becomes more and more 
> taken for granted.  This is how we make progress.
> 
> I used to worry about memory busses at the milivolt and microsecond level.  
> I knew about termination impedances and wired-OR logic, and power budgets 
> and all that good stuff.  Today all I know about memory is you go to 
> www.crucial.com, type in your Visa card number, and the nice UPS guy shows 
> up with some SIMMs in a few days.

Yes. But (to a first approximation) memory either works or it doesn't. And
we never need to worry about it scaling, because you don't get to assemble
your own SIMMs -- you buy them pre-made. Software is nothing like that.

[snip]
> Just like you can't even begin to think about building today's
> GUI-driven desktop applications if you're still worrying about
> individual logic gates, you can't begin to think about solving some of
> these really hard problems (and others we haven't even imagined) if
> you're still worrying about memory buffer reference counting and garbage
> collection. Yesterday's research projects are today's utilities and
> tomorrow's historical footnotes.

Nice in theory, but frequently breaks down in practice. Let's take a nice,
real, Python example:

I write an text-handling application in Python. I've taken your advice,
and don't worry about messy details about the language implementation,
and concentrated on the application logic. Consequently, I've used the
idiom:

new_text = ""
for word in text:
new_text = new_text + process(word)

I test it against text containing a few thousand words, and performance is
good. Then my customers use my application in the real world, using texts
of a few hundreds of millions of words, and performance slows to a painful
crawl.

Python does a good job of insulating the developer from the implementation
details, but even in Python those details can sometimes turn around and
bite you on the behind. And your users will discover those bum-biting
situations long before your testing will.

Joel of "Joel On Software" discusses this issue here:

http://www.joelonsoftware.com/articles/fog000319.html

Of course, we should not prematurely optimise. But we should also be aware
of the characteristics of the libraries we call, so we can choose the
right library. 

Fortunately, a high-level language like Python makes it comparatively easy
to refactor a bunch of slow string concatenations into the list-append
plus string-join idiom.


-- 
Steven.



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


Re: ElementTree Namespace Prefixes

2005-06-12 Thread Chris Spencer
Andrew Dalke wrote:
> On Sun, 12 Jun 2005 15:06:18 +, Chris Spencer wrote:
> 
> 
>>Does anyone know how to make ElementTree preserve namespace prefixes in 
>>parsed xml files?
> 
> 
> See the recent c.l.python thread titled "ElemenTree and namespaces"
> and started "May 16 2:03pm".  One archive is at
> 
> http://groups-beta.google.com/group/comp.lang.python/browse_thread/thread/31b2e9f4a8f7338c/363f46513fb8de04?&rnum=3&hl=en

Thanks, although that thread didn't seem to resolve the issue. All the 
first few links talk about is how to hack your own parser to make sense 
of the Clark notation.

The problem at hand is with how Elementtree outputs namespaces and 
represents the tag name in memory.

Given xml with no namespaces, Elementtree works perfectly. However, if 
you give the root tag an xmlns attribute, Elementtree relabels all child 
nodes with it's own prefix, completely defeating the purpose of the 
default namespace. In my opinion, this is unacceptable behavior.

If an XML parser reads in and then writes out a document without having 
altered it, then the new document should be the same as the original. 
With Elementtree this isn't so. Lundh apparently believes he knows 
better than you and I on how our namespaces should be represented.

It's a shame the default ns behavior in Elementtree is in such a poort 
staten. I'm surprised no one's forked Elementtree solely to fix this issue.

Anyways, Python's native minidom works as expected, so I'll probably use 
that instead, even if the api is slightly less intuitive.

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


RE: Dealing with marketing types...

2005-06-12 Thread bruce
just out of curiosity.. where'd you read the 150,000-200,000 servers...

i've never seen guesses that high.. i've seen somewhere as high as possible
100K... but the author stated that he was purely guessing...

-bruce


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf
Of Terry Reedy
Sent: Sunday, June 12, 2005 9:48 AM
To: python-list@python.org
Subject: Re: Dealing with marketing types...



"Paul Rubin" <"http://phr.cx"@NOSPAM.invalid> wrote in message
news:[EMAIL PROTECTED]
> Andrew Dalke <[EMAIL PROTECTED]> writes:
>> If that's indeed the case then I'll also argue that each of
>> them is going to have app-specific choke points which are best
>> hand-optimized and not framework optimized.  Is there enough
>> real-world experience to design a EnterpriseWeb-o-Rama (your
>> "printing press") which can handle those examples you gave
>> any better than starting off with a LAMP system and hand-caching
>> the parts that need it?
>
> Yes, of course there is.  Look at the mainframe transaction systems of
> the 60's-70's-80's, for example.  Look at Google.

Based on what I've read, if we could look at Google, we would see 150,000
to 200,000 servers (about half bought with IPO money).  We would see a
highly customized dynamic cluster computing infrastructure that can be
utilized with high-level (Python-like) commands.  The need to throw
hundreds of machines at each web request strikes me as rather specialized,
though definitely not limited to search.  So while not LAMP, I don't see it
as generic EWeboRama either.

Terry J. Reedy



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

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


Re: Controlling a generator the pythonic way

2005-06-12 Thread Terry Reedy

"news:[EMAIL PROTECTED]
> Thomas Lotze <[EMAIL PROTECTED]> writes:
>> A related problem is skipping whitespace. Sometimes you don't care about
>> whitespace tokens, sometimes you do. Using generators, you can either 
>> set
>> a state variable, say on the object the generator is an attribute of,
>> before each call that requires a deviation from the default, or you can
>> have a second generator for filtering the output of the first. Again, 
>> both
>> solutions are ugly (the second more so than the first).

Given an application that *only* wanted non-white tokens, or tokens meeting 
any other condition, filtering is, to me, exactly the right thing to do and 
not ugly at all.  See itertools or roll your own.

Given an application that intermittently wanted to skip over non-white 
tokens, I would use a *function*, not a second generator, that filtered the 
first when, and only when, that was wanted.  Given next_tok, the next 
method of a token generator, this is simply

def next_nonwhite():
   ret = next_tok()
   while not iswhte(ret):
  ret = next_tok()
   return ret

A generic method of sending data to a generator on the fly, without making 
it an attribute of a class, is to give the generator function a mutable 
parameter, a list, dict, or instance, which you mutate from outside as 
desired to change the operation of the generator.

The pair of statements
  
  val = gen.next()
can, of course, be wrapped in various possible gennext(args) functions at 
the cost of an additional function call.

Terry J. Reedy







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


Re: How to get/set class attributes in Python

2005-06-12 Thread Chris Spencer
Bruno Desthuilliers wrote:

> And *this* is highly unpythonic. And un-OO too, since it makes foo() 
> dependant on *class* Bar, when it should most probably be enough that it 
> only depends on (probably part of) the *interface* of class Bar.

I was providing the original poster with a simple way to ensure 
appropriate type. You can assert whatever aspect you wish. If you want 
to ensure compatibility with some other property simply use "assert 
blah" subsituting blah for whatever test you wish to perform (e.g. 
assert MyInterface.implementedBy(bar) to test for interface implementation).
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Scaling down (was Re: Dealing with marketing types...)

2005-06-12 Thread Paul Rubin
[EMAIL PROTECTED] (Aahz) writes:
> So what?  I think you're missing the real point of the article: using
> LAMP scales *DOWN* in a way that enterprise systems don't.  Getting your
> first prototype up and running is far more important than sheer
> scalability,

There comes a day when your first prototype can no longer handle the
traffic.  The question then is how do you deal with that.

> and LAMP does have many mechanisms to obtain scalability when it's
> needed.

LAMP seems to have no solution other than scaling (i.e. blowing more
money on hardware and colo space).  One really gets the impression
that a more thoughtful design could handle the traffic without needing
to scale the hardware.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Capture close window button in Tkinter

2005-06-12 Thread William Gill
Jonathan Ellis wrote:
> William Gill wrote:
> 
>>I am trying to make a simple data editor in Tkinter where each data
>>element has a corresponding Entry widget.   I have tried to use the
>>FocusIn/FocusOut events to set a 'hasChanged' flag  (if a record has not
>>changed, the db doesn't need updating).  This seems to work fine except
>>that when the user finishes and clicks a 'done' button or the close
>>window button (in the root widget) no FocusOut event is triggered.  I
>>can trigger a FocusOut event if the 'done' button opens another window
>>(i.e. a messagebox) that takes focus.  Enter and Leave follow the mouse,
>>but don't trigger when the user tabs between fields.
>>
>>Is there a better way to monitor 'hasChanged'?
> 
> 
> I'd go with monitoring keypresses in the Entry widget.

Well, It doesn't seem logical to do a before and after test of the Entry 
values after each keypress, but I suppose I could monitor keypresses, 
test event.key for Tab (in case the user tabbed out of the widget w/o 
making any changes.

Is that along the lines of what you are suggesting?

> 
> 
>>Also, how do I capture
>>the root window close button?
> 
> 
> root = Tk()
> root.protocol("WM_DELETE_WINDOW", onexit)
I had seen something like this somewhere, but couldn't remember where. 
Thanks to your reminder I found an example of "Capturing destroy 
events."  Since that will allow me to route the exit process through a 
tkMessageBox, it may be just as good to continue using FocusIn/FocusOut 
events.






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


slicing a bsddb table, eg. for rec in bsddb["AArdvark":"zebra"]: print rec

2005-06-12 Thread Neville C. Dempsey
#!/bin/env python
import bsddb

test=bsddb.btopen("test.tbl")
for m in "JFMATQPHSOND": 
  test[m]="Profit for month "+m+" $1B"

def subyear_report(record_selection):
  for data in record_selection.iteritems(): print data

# I was expecting a slice of an index file to yield a
# generator so not all the records need to be read from disk
subyear_report(test["Apr":"Sep"])

"""
I have tried a few ideas but is there a simple way to convert this
["Apr":"Sep"] slice of a file into a generator of the requested records?

(I tried UserDict and got a bit further...)

Any hints?

ThanX
NevilleDNZ
"""

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


Re: checking for when a file or folder exists, typing

2005-06-12 Thread Bryan Rasmussen
>Hi Bryan,

>Here's a potential idea.  Try converting the variable to a string by
>using the following syntax:


>   thePath = str(thePathArg)


Actually it was a stupid thing, what happened was I was looping through the
commandline to build a file path in cases where there was more than one
commandline argument, such as when one passes c:/Documents and Settings/ 

only I was adding the space in the wrong place so I never had a proper
location.

Thanks though, it got me back to the problem and solved it.  

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


Re: Python Developers Handbook - Mistake done and corrected.

2005-06-12 Thread wooks
Arsenal v Spurs in baseball that translates to Red Sox v Yankees.

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


Re: ElementTree Namespace Prefixes

2005-06-12 Thread Jarek Zgoda
Chris Spencer napisał(a):

> Given xml with no namespaces, Elementtree works perfectly. However, if 
> you give the root tag an xmlns attribute, Elementtree relabels all child 
> nodes with it's own prefix, completely defeating the purpose of the 
> default namespace. In my opinion, this is unacceptable behavior.

There is no functional difference between default namespace and "normal" 
namespace. Replacing "default" with "normal" has no effect for document 
processing (namespace doesn't change, only prefix), although it looks 
differently for humans. Anyway, XML is for machines, not for humans.

> If an XML parser reads in and then writes out a document without having 
> altered it, then the new document should be the same as the original. 
> With Elementtree this isn't so. Lundh apparently believes he knows 
> better than you and I on how our namespaces should be represented.

No, this is perfectly valid behaviour. Go, see spec.

> It's a shame the default ns behavior in Elementtree is in such a poort 
> staten. I'm surprised no one's forked Elementtree solely to fix this issue.

There is at least one ElementTree API implementation that retains 
prefixes, lxml.ETree. Go google for it.

-- 
Jarek Zgoda
http://jpa.berlios.de/ | http://www.zgodowie.org/
-- 
http://mail.python.org/mailman/listinfo/python-list


searching for IDE

2005-06-12 Thread alexrait1
I need an IDE for python that has the ability to show the filds of a
class when I write "."
Just the way it works in eclipse/JBuilder with java or visual studio
with c++
For now I treid eric3 and IDLE they don't do this...

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


Re: What is different with Python ?

2005-06-12 Thread Philippe C. Martin
Taking stuff for granted in unrelated to progress.

I agree that the "trade" of software engineering evolves and that, thanks to
hardware advances, we _usually_ can now "object orient" our software, add
billions of abstraction layers, and consume memory without a second
thought. But the trade evolves in the sense "sub"-trades are created, one
person becomes a database experts while another will html all of his/her
life (I personally find that sad). I'm being redundant here: The reason we
can use Python and take many issues for granted is because some very
skilled people handle the issues we find cumbersome.



Roy Smith wrote:

> The point I was trying to make was that as computer science progresses,
> stuff that was really important to know a lot about becomes more and more
> taken for granted.  This is how we make progress.

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Peter Dembinski
Bruno Desthuilliers <[EMAIL PROTECTED]> writes:

[snap]

>> Being an untyped language, Python does not require you to enforce
>> types.
>
> Nope. Python *is* typed. But it doesnt confuse implementation 
> with semantic.

Python is typed.  And its type system may look strange for anyone who
did only Java or C++ programming before :>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: searching for IDE

2005-06-12 Thread jean-marc
if you are familiar with eclipse, you could use the PyDev python
plugin.

jm

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


Re: searching for IDE

2005-06-12 Thread Rob
Try ActiveState Komodo.  It costs $30 for a personal license, and is well 
worth it.  If you like visual studio you will like it.

Like many other people, I have looked far and wide for a Python IDE and this 
is what I've found.  The free solutions don't cut it, at least without 
spending many many hours of work, more than $30 worth.


R


"alexrait1" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
>I need an IDE for python that has the ability to show the filds of a
> class when I write "."
> Just the way it works in eclipse/JBuilder with java or visual studio
> with c++
> For now I treid eric3 and IDLE they don't do this...
> 


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


How to test if an object IS another object?

2005-06-12 Thread dan . eloff
If two objects are of equal value you can compare them with ==. What I
want to do is find out if two objects are actually just references to
the same object, how can I do this in Python?

Thanks

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


Re: How to test if an object IS another object?

2005-06-12 Thread Bruno Desthuilliers
[EMAIL PROTECTED] a écrit :
> If two objects are of equal value you can compare them with ==. What I
> want to do is find out if two objects are actually just references to
> the same object, how can I do this in Python?

The most obvious way (as usual ?):

if obj1 is obj2:
   // your code here


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


Re: What language to manipulate text files

2005-06-12 Thread Dan Christensen
ross <[EMAIL PROTECTED]> writes:

> What are the ideal languages for the following examples?
>
> 1. Starting from a certain folder, look in the subfolders for all
> filenames matching *FOOD*.txt Any files matching in each folder should
> be copied to a new subfolder within the current folder called EATING
> with a new name of *FOOD*COPY.txt

Bash?  

  for f in *FOOD*.txt; do cp ${f} EATING/${f}COPY.txt; done

Or "mmv", a linux utility:

  mmv '*FOOD*.txt' 'EATING/#1FOOD#2COPY.txt'

For the rest, I personally for choose python.

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


Re: What is different with Python ?

2005-06-12 Thread Peter Dembinski
Steven D'Aprano <[EMAIL PROTECTED]> writes:

[snap]

> new_text = ""
> for word in text:
> new_text = new_text + process(word)

new_text = "".join(map(process, text))

(I couldn't resist)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get/set class attributes in Python

2005-06-12 Thread Bruno Desthuilliers
Chris Spencer a écrit :
> Bruno Desthuilliers wrote:
> 
>> And *this* is highly unpythonic. And un-OO too, since it makes foo() 
>> dependant on *class* Bar, when it should most probably be enough that 
>> it only depends on (probably part of) the *interface* of class Bar. 
> 
> I was providing the original poster with a simple way to ensure 
> appropriate type.

s/appropriate type/specific implementation/

Hint : the appropriate type for print >> XXX is "whatever has a 
'write(anything_that_can_be_coerced_to_a_string)' method".
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python bytecode grammar

2005-06-12 Thread Terry Reedy

"Peter Dembinski" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
> "Terry Reedy" <[EMAIL PROTECTED]> writes:
>> I believe the top-level production is something like
>> BYTECODE := (OPCODE ARGS)*
>
> ROTFL :)

Glad to make your day ;-)

I am aware that since ARGS depends on OPCODE, the above would lead to 
context-dependent productions for ARGS.  Upon thoroughly perusing
http://docs.python.org/lib/bytecodes.html
18.10.1 Python Byte Code Instructions

I discovered that there is at most one (non-stack) argument in the byte 
stream (contrary to the possibly plural implication of "All of the 
following opcodes expect arguments").  So the above could be written 
context-freely as
BYTECODE := (NO_ARG_CODE | ARG_CODE TWO_BYTE_ARG)*

where the symbolic expansions of NO_ARG_CODE  and ARG_CODE, with semantic 
explanations, constitute the contents of the doc above.

Terry J. Reedy



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


Re: How to test if an object IS another object?

2005-06-12 Thread eloff777
Sorry about removing my message, I posted with the wrong google
account, I don't really want my email where those irritating spam bots
can find it.

>The most obvious way (as usual ?):
>
>if obj1 is obj2:
>  // your code here

I immediately thought of is, and tested it in the console, but it
didn't work quite like I expected:

>foo = 3
>bar = 3
>zoo = foo
>foo is zoo
True
>foo is bar
True
>zoo is bar
True

clearly foo and bar have the same value but they are different objects
aren't they? Yet applying the is operator yields True.

Thanks,
-Dan

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


Re: How to test if an object IS another object?

2005-06-12 Thread Paul Rubin
[EMAIL PROTECTED] writes:
> >foo = 3
> >bar = 3

> clearly foo and bar have the same value but they are different objects
> aren't they? 

No, they're the same object.  Now try it with 300 instead of 3 ;-).
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to test if an object IS another object?

2005-06-12 Thread [EMAIL PROTECTED]
You can use the id() function to test equality of objects:

[EMAIL PROTECTED]:~$ python
Python 2.4.1 (#2, Mar 30 2005, 21:51:10)
[GCC 3.3.5 (Debian 1:3.3.5-8ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 3
>>> b = 3
>>> id(a)
135585176
>>> id(b)
135585176
>>>

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


Re: How to test if an object IS another object?

2005-06-12 Thread Bruno Desthuilliers
[EMAIL PROTECTED] a écrit :
> Sorry about removing my message, I posted with the wrong google
> account, I don't really want my email where those irritating spam bots
> can find it.
> 
> 
>>The most obvious way (as usual ?):
>>
>>if obj1 is obj2:
>> // your code here
> 
> 
> I immediately thought of is, and tested it in the console, but it
> didn't work quite like I expected:
> 
> 
>>foo = 3
>>bar = 3
>>zoo = foo
>>foo is zoo
> 
> True
> 
>>foo is bar
> 
> True
> 
>>zoo is bar
> 
> True
> 
> clearly foo and bar have the same value but they are different objects
> aren't they? 

Nope. They are two different names bound to the same integer object. You 
may have similar situation with strings:

 >>> s1 = "toto"
 >>> s2 = "toto"
 >>> s1 is s2
True

This is an application of the lightweight pattern. The Python 
interpreter reuse the same "value object" to avoid memory clutter. Since 
ints and strings are immutable, this is perfectly safe (but yet 
confusing when you're not aware of this).


> Yet applying the is operator yields True.

Yes. But now you know why !-)

And don't worry, this is quite unlikely that it will cause you any 
trouble in real code.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to overcome automatic cyrillic-to-/hex convert

2005-06-12 Thread Florian Diesch
<[EMAIL PROTECTED]> <[EMAIL PROTECTED]> wrote:
> But when I enter some Bulgarian (actually cyrillic) text as a string,
> it
> seems that Python automatically converts it to '\x00..\x00 ' and once
> converted that way I can't get it back into its original look. The only
> way to get it right is using print :
>
 a = 'ÌÀÌÀ' # 'Mam' in Bulgarian
 print a
> 'ÌÀÌÀ'
>
> but
>
 a
> '\xcc\xe0\xec\xe0'


Did you try the locale module?


   Florian
-- 
begin  signature_virus
 Hi! I'm a signature virus. Please copy me to your signature to help me spread.
end
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to test if an object IS another object?

2005-06-12 Thread eloff777
Fascinating. With small strings, it uses the same object, and with
small numbers like 3. With 300 they were different objects (why,
shouldn't they both be ints still?)

Mutable objects functioned differently as you suggested:

>>>foo = []
>>>bar = []
>>>foo == bar
True
>>>foo is bar
False

Tuples (which are immutable) also appear to be reused

>>>foo = ()
>>>bar = ()
>>>foo is bar
True

Thanks for your help, I know how to solve the problem now.
-Dan

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Chris Spencer
Bruno Desthuilliers wrote:
> Chris Spencer a écrit :
> 
>> I was providing the original poster with a simple way to ensure 
>> appropriate type.
> 
> 
> s/appropriate type/specific implementation/
> 
> Hint : the appropriate type for print >> XXX is "whatever has a 
> 'write(anything_that_can_be_coerced_to_a_string)' method".

Certainly, although now I think you're splitting hairs over my 
terminology. Let's synchronize our wording with a point made in the 
Python docs. Section 2.1 of the Library Reference recommends that the 
builtin function isinstance() be used for testing the object type. Does 
this then mean that "type" refers to the class of an object? In which 
case, wouldn't "interface" refer to a collection of methods, that when 
present in a class create an implementation?

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


Re: How to get/set class attributes in Python

2005-06-12 Thread Chris Spencer
Peter Dembinski wrote:
> Bruno Desthuilliers <[EMAIL PROTECTED]> writes:
> 
>>Nope. Python *is* typed. But it doesnt confuse implementation 
>>with semantic.
> 
> 
> Python is typed.  And its type system may look strange for anyone who
> did only Java or C++ programming before :>

Of course, in that Python is dynamically typed as opposed to the static 
typing of Java or C++. Please excuse my previous mis-wording :)

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


Learning more about "The Python Way"

2005-06-12 Thread Kalle Anke
Those who have read my posts today have probably understood that I'm 
not a "true" Python programmer ... but I want to learn more (I think 
that Python is rather fun).

I've read "Learning Python" pretty thoroughly, I've looked at some of 
the tutorials, some of online documentation, etc. But I still miss a 
lot of pieces for writing good python code, idioms, advanced 
usage/features, etc.

I've also seen a lot of references to v3, but I haven't found any 
real documentation of what's planned for that version.

So, I'm looking for advice/information on:

+ How to write "proper" python code instead of 
  Java/Perl/C/C++/Pascal/Modula-2/etc inspired code

+ The more advanced parts/uses of Python

+ Discussions about the ideas behind different Python
  constructs

+ What's going to happen with v3

I would really appriciate some pointers to where I can find info 
about this. Web sites (I've looked at python.org but haven't manage 
to find the stuff of what I'm looking for ... but perhaps I've missed 
all the interesting parts) ? Books (I've got 'Learning Python' and 
'Programming Python')? Other things?

 jem


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


Re: Code documentation tool similar to what Ruby (on Rails?) uses

2005-06-12 Thread Andrew Dalke
Ksenia Marasanova responsded to Michele Simionato
>> >>> print "%s" % inspect.getsource(os.makedirs)
> 
> That's easy, thanks! I guess I'll submit a patch for Epydoc with the
> functionality I've mentioned :)

Before doing that, add a "cgi.escape()" to the text.  Otherwise
embedded [<>&] characters will be interpreted as HTML.

Andrew
[EMAIL PROTECTED]

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


  1   2   >