Re: Legacy data parsing

2005-07-11 Thread Terry Hancock
On Friday 08 July 2005 01:31 pm, gov wrote:
> Where I work, we receive large quantities of data which is currently
> all printed on large, obsolete, dot matrix printers.  This is a problem
> because the replacement parts will not be available for much longer.
> 
> So I'm trying to create a program which will capture the fixed width
> text file data and convert as well as sort the data (there are several
> different report types) into a different format which would allow it to
> be printed normally, or viewed on a computer.

If this is really your reason for wanting to do this, it seems like your
solutions is overkill.  If you really just want the data to get
reformatted for printing on a modern printer, it would be trivial to
do this with a text-formatter like "enscript" (see, e.g.: 
http://people.ssh.com/mtr/genscript/ ) which produces Postscript
output from ASCII text. 

On a typical Linux system, this sort of tool is usually part of your
printer installation, after which it runs more or less invisibly.

OTOH, if the *real* reason is that you don't like the look of the
dot matrix output and you want it *rearranged* and reformatted
for aesthetic reasons, then you might reasonably want to use
Python to do that as you suggest.


--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks  http://www.anansispaceworks.com

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


Re: ZipFile and file rigths

2005-07-11 Thread Sybren Stuvel
Robert Kern enlightened us with:
> Yes, the .zip file format does store file permissions appropriate to
> the platform that generates the file.

I never knew that! Thanks for correcting me ;-)

Sybren
-- 
The problem with the world is stupidity. Not saying there should be a
capital punishment for stupidity, but why don't we just take the
safety labels off of everything and let the problem solve itself? 
 Frank Zappa
-- 
http://mail.python.org/mailman/listinfo/python-list


Earthquake Forecasting Program July 11, 2005

2005-07-11 Thread edgrsprj
PROPOSED EARTHQUAKE FORECASTING
COMPUTER PROGRAM DEVELOPMENT EFFORT

Posted July 11, 2005
My main earthquake forecasting Web page is:
http://www.freewebz.com/eq-forecasting/Data.html

Newsgroup Readers:  If you circulate copies of this report to groups of
computer programmers at different universities etc. around the world then
they might find the subject matter to be interesting.

The information in this report represents expressions of personal opinion.

THE GOAL OF THIS REPORT

   This is part of an effort to get some idea regarding how many
computer programmers and other researchers around the world might be
interested in participating in a project aimed at developing life saving
earthquake forecasting computer programs.

   That effort is not presently underway.  And I don't know when or if
it will get started.  I am simply attempting to determine if other people
believe that large numbers of volunteers would be interested in working on
such a project or if there would instead be little interest in it.  That
information would be helpful for developing a plan for establishing a Web
site where the project would be centered.  Personnel running the following
Web site have volunteered to make their site available for such an effort.
But nothing has gotten underway so far.

http://www.ictwhoiswho.net/comprend/index.cfm

   If quite a few people were interested in such a Web site based
computer program development effort then after it got started work would
undoubtedly progress quite rapidly.  If only a few were interested then it
might never get started.  If you would like to express an opinion on the
likelihood of people being interested in the idea then you can try posting a
note in response to this one.  The sci.geo.earthquakes or comp.lang.misc
newsgroups might be appropriate if you wish to post to just one newsgroup.
Of you can try contacting me by e-mail.

THE CORE OF THE PRESENT EARTHQUAKE FORECASTING PROGRAM

   In connection with an earthquake forecasting effort which has been
underway for the past 15 years I believe I have been able to crack the
"Earthquake Code."  That means making crucially important discoveries
regarding how earthquakes are being triggered.  Two of them which are
discussed on the following Web page are called the "Gravity Point" and
"Earthquake Triggering Symmetry."

http://www.freewebz.com/eq-forecasting/90-05.html

   The earthquake triggering and forecasting theories and data on that
Web page were discussed on my behalf by one of my research colleagues in the
People's Republic of China at a disaster mitigation conference in that
country in December of 2003.  Governments and disaster mitigation groups
around the world were told about the Web site earlier this year.  And my Web
site visitor counter indicates that some 100 to 200 people around the world
are presently downloading information from the site each day.

   My earthquake forecasting computer programs use those Gravity Point
and Earthquake Triggering Symmetry discoveries and others to compare
electromagnetic energy field fluctuation type signals (EM signals) with more
than 30,000 earthquakes which occurred since the beginning of 1990.  Some
100 to 200 signals detected during a 3 month period of time are involved.
For some as yet unknown reason they are often highly selective for
earthquakes which are likely to occur near populated areas, making them
unusually valuable.  The earthquake which is the best match with all of
those signals is rated # 1.  The worst match would have a rating number
greater than 30,000.  A listing of more than 100 of the best matches is then
posted perhaps once a week to the following Web page:

http://www.freewebz.com/eq-forecasting/Data.html

   For a recent example of how well that approach to forecasting
earthquakes can work, data displayed on that Web page on June 27, 2005 gave
the following earthquake a # 3 rating (possible rating range: 1 to 30,000+):

2005/01/11  19:19:48 11.40N 86.51W 40.7 5.0 Near the Coast of Nicaragua
(U.S. National Earthquake Information Service data)

   And less than a week later on July 2, 2005 the following powerful and
strongly felt earthquake occurred:

2005/07/02  02:16:46 11.18N 86.40W 45.5 6.7  Near the Coast of Nicaragua

11.40N and 86.51W  versus
11.18N and 86.40W

Pretty good accuracy for a forecasting program!

   That earthquake was reportedly strongly felt in Managua.  Had it
occurred directly beneath the city and near the surface then I expect that
it would have been devastating.

WHAT NEEDS TO BE DONE

   Basically, more sophisticated data processing and data display
computer program subroutines need to be developed.  They could be built on
my already existing computer programs and data.  People would develop new
subroutines, give them a try, and see if they did a better job of
determining or displaying where an earthquake might be about to occur.  The
subroutines could be stored at the proposed Web site

Re: ZipFile and file rigths

2005-07-11 Thread perchef
> OTOH, I don't know if this has any relevance to the problem that you are 
> seeing.

not really, i have used the 'os.chmod' trick, but it's still
interesting.
thanks.

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


Re: Python Forum

2005-07-11 Thread bruno modulix
Throne Software wrote:
> Throne Software has opened up a Python Forum at:
> 
> http://www.thronesoftware.com/forum/
> 
> Join us!
> 
Why should we ?

-- 
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in '[EMAIL PROTECTED]'.split('@')])"
-- 
http://mail.python.org/mailman/listinfo/python-list


gettext and "disambiguating comments"

2005-07-11 Thread Terry Hancock
I'm looking at the gettext module for the first time and
learning how to write internationalized code in Python.

Naturally, I also looked at the original Gnu gettext
manual, which mentions that comments can be captured
into the .po (.pot?) file for translators' benefit:

/* Comment right before the gettext call, obviously in C */
printf(_("Apparently ambiguous string to translate"));

This will get captured into the .po file, according to the
gettext manual and appear as a comment right before
the msgid (i.e. next to the line number reference).

Is there an equivalent Python gettext idiom?  I've tried the
obvious 

# Comment right before the gettext call, now in Python
print _("Apparently ambiguous string to translate")

But this is ignored by both pygettext and xgettext.

I also saw some discussion (from the Gnome project)
about gettext variations which capture comments from
within the text:

_("comment for translators| Spam")

But, Python's gettext happily renders the entire comment
into the program, so this isn't doing anything either.

Clearly, I could edit the .pot file after creation to 
include comments, but that's probably undesireable
since the file is meant to be machine-generated.

I have no pressing immediate need for this functionality
(that I know of), but I'd like to understand how to access
this capability if it exists.

--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks  http://www.anansispaceworks.com

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


__eq__ on a dict

2005-07-11 Thread Neil Benn
Hello,

I can't find the docs for __eq__ on a dict and I can't find 
a description on what the eq does (strangely it does implement > and < 
but I have no idea what that does).  Does anyone know (definitively) 
what the __eq__, __gt__, __lt__ methods do.

BTW, google is not my friend - I invited it out for a drink last 
week and it stood me up :-).

Cheers,

Neil

-- 

Neil Benn
Senior Automation Engineer
Cenix BioScience
BioInnovations Zentrum
Tatzberg 46
D-01307
Dresden
Germany

Tel : +49 (0)351 4173 154
e-mail : [EMAIL PROTECTED]
Cenix Website : http://www.cenix-bioscience.com

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


Re: Cat and Mouse (wes Re: Efficiency of using long integers to hold bitmaps)

2005-07-11 Thread Steven D'Aprano
On Mon, 11 Jul 2005 02:58:29 +, Bengt Richter wrote:

> I think you are right about some game happening, but I'm not sure it's cat 
> and mouse.
> To me, an incomplete question feels like an invitation to play "20 questions" 
> regarding
> what the real problem is. So I get a little annoyed, and often just bypass 
> the post.
> If I answer, the residual annoyance sometimes leads me to withhold my best 
> guess, and
> complain instead. Hence probably the cat and mouse impression. Not very big 
> of me, but
> OTOH a think a bit of a nudge towards better questions is not a bad thing. 
> OTO3H, maybe
> I should just silently pass up 20-questions invitations and not pollute this 
> pleasant space
> with perfumes of annoyance (since however diffuse, they are apparently 
> pungent enough
> for some to notice ;-)

If it helps, I find the entertainment value of the gentle nudging is the
only thing that makes the smell of stupid questions bearable.

It isn't true that there is no such thing as a stupid question. There are
intelligent questions that are asked in a rude and stupid way.

Expecting people to read your mind and understand what your question is
about is rude. Expecting people to decipher poorly written, badly spelt,
incomprehensible ramblings is rude. (Allowance should be made for those
whose native language is not English, and those with good excuses for bad
spelling, eg broken keyboard, actual dyslexia.) 

Some allowance for the occasional brain-fart or typo should be made, but
communication requires two parties. You wouldn't expect a mail server to
accept any random malformed packets and try to make sense of it, and you
shouldn't expect others to put in more work understanding your post than
you put in writing it.

As they say, be strict when sending and tolerant when receiving. I'm all
for that. But when people insist on sending broken packets, I see nothing
rude about bouncing those packets back with a error message or a creative
misunderstanding.



-- 
Steven

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


Re: __eq__ on a dict

2005-07-11 Thread [EMAIL PROTECTED]
These methods are documanted here:
http://docs.python.org/ref/customization.html

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


Re: __eq__ on a dict

2005-07-11 Thread Steven D'Aprano
On Mon, 11 Jul 2005 12:42:55 +0200, Neil Benn wrote:

> Hello,
> 
> I can't find the docs for __eq__ on a dict and I can't find 
> a description on what the eq does (strangely it does implement > and < 
> but I have no idea what that does).  Does anyone know (definitively) 
> what the __eq__, __gt__, __lt__ methods do.
> 
> BTW, google is not my friend - I invited it out for a drink last 
> week and it stood me up :-).

It works for me. Google on "__eq__ Python" and the 5th and 6th sites are:

http://python.active-venture.com/ref/customization.html
http://www.network-theory.co.uk/docs/pylang/ref_32.html

Normally, asking Python for help is a good way to read the docs, but in
this particular case, it is a big let-down:

py> help({}.__eq__)
Help on method-wrapper:
 
__eq__ = 


For any two objects x and y, when you call 

x == y

Python calls x.__eq__(y). That includes dicts:

py> dictA = {0: "spam"}
py> dictB = {0: "sp" + "am"}
py> dictC = {1: "ham"}
py> 
py> dictA == dictB
True
py> dictA.__eq__(dictB)   # same as dictA == dictB
True
py> dictB == dictC   # calls dictB.__eq__(dictC)
False

Two dicts are equal if they have the same keys and the same values.

In general, you should not call __eq__ directly, but use the == operator
instead.

Likewise:

x > y becomes x.__gt__(y)
x < y becomes x.__lt__(y)
x >= y becomes x.__ge__(y)
x <= y becomes x.__le__(y)
x != y becomes x.__ne__(y)
x <> y also becomes x.__ne__(y)


-- 
Steven

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


Re: __eq__ on a dict

2005-07-11 Thread Neil Benn
[EMAIL PROTECTED] wrote:

>These methods are documanted here:
>http://docs.python.org/ref/customization.html
>
>  
>
Hmm, can't see anything about implementation of python dict methods 
__eq__, __lt__ or __gt__ there - general docs but not specific to the 
dict here - at least not as far as I can see from these docs.

Neil

-- 

Neil Benn
Senior Automation Engineer
Cenix BioScience
BioInnovations Zentrum
Tatzberg 46
D-01307
Dresden
Germany

Tel : +49 (0)351 4173 154
e-mail : [EMAIL PROTECTED]
Cenix Website : http://www.cenix-bioscience.com

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


Re: __eq__ on a dict

2005-07-11 Thread Aaron Bingham
"Steven D'Aprano" <[EMAIL PROTECTED]> writes:

> On Mon, 11 Jul 2005 12:42:55 +0200, Neil Benn wrote:
>
>> Hello,
>> 
>> I can't find the docs for __eq__ on a dict and I can't find 
>> a description on what the eq does (strangely it does implement > and < 
>> but I have no idea what that does).  Does anyone know (definitively) 
>> what the __eq__, __gt__, __lt__ methods do.

[snip]

> For any two objects x and y, when you call 
>
> x == y
>
> Python calls x.__eq__(y). That includes dicts:
>
> py> dictA = {0: "spam"}
> py> dictB = {0: "sp" + "am"}
> py> dictC = {1: "ham"}
> py> 
> py> dictA == dictB
> True
> py> dictA.__eq__(dictB)   # same as dictA == dictB
> True
> py> dictB == dictC   # calls dictB.__eq__(dictC)
> False
>
> Two dicts are equal if they have the same keys and the same values.

That is what I would expect, but where is that documented?  Also,
where is the behavior of the much less obvious dictionary methods
__ge__, __gt__, __le__, __lt__, and __cmp__ methods documented?

> In general, you should not call __eq__ directly, but use the == operator
> instead.

That is clear enough, the OP was seeking information about the
behavior of these operators when used with dictionaries.

Thanks,

-- 

Aaron Bingham
Senior Software Engineer
Cenix BioScience GmbH


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


Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code)

2005-07-11 Thread Kay Schluehr
Reinhold Birkenfeld schrieb:
> Kay Schluehr wrote:
> > Dan Sommers schrieb:
> >
> >> How about this:
> >>
> >> def __init__(self, self.x, y, self.z):
> >> # self.x, self.z from first and third explicit parameters
> >> do_something_with_y()
> >
> > Can you tell me in which way it is anyhow better than the original
> > proposal
> >
> >  def __init__(self, .x, y, .z):
> >   # self.x, self.z from first and third explicit parameters
> >   do_something_with_y()
> >
> > besides that it is more verbose?
>
> It is more explicit. Explicit is better than implicit.

The punctuation syntax makes it explicit too. But maybe a point is a
more tiny and less explicit symbol than an @ that makes a decorator
explicit ;)

> But as with many proposals, this raises consequential questions, for
> example, how "self.x" parameters are handled in other methods, or even
> functions, as __init__ is not special-cased by the parser.
>
> Reinhold

Yes. My argument against the syntax is more that of a language lawyer:
how a class uses the argument parameters of a constructor is an
implementation detail of a class and should not be published in the
constructor interface.

One may assign special attributes to the classes ( e.g. tagging it with
a metaclass ) or a qualifier. I had recently a look on Scala an
object-functional language running on top of the JVM. Scala introduces
the concept of a "case class" to represent object trees. All arguments
passed into a case class constructor become automagically object
attributes. This is for convenience and let the tree grow if the passed
arguments are case class instances again. Here it is the class type
that determines how it's construction is handled. I think this is a
reasonable approach. 

Kay

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


Re: math.nroot [was Re: A brief question.]

2005-07-11 Thread Michael Hudson
Tim Peters <[EMAIL PROTECTED]> writes:

> [Tim Peters]
>  All Python behavior in the presence of infinities, NaNs, and signed
>  zeroes is a platform-dependent accident, mostly inherited from that
>  all C89 behavior in the presence of infinities, NaNs, and signed
>  zeroes is a platform-dependent crapshoot.
> 
> [Michael Hudson]
> >>> As you may have noticed by now, I'd kind of like to stop you saying
> >>> this :) -- at least on platforms where doubles are good old-fashioned
> >>> 754 8-byte values.
> 
> [Tim]
> >> Nope, I hadn't noticed!  I'll stop saying it when it stops being true,
> >> though .  Note that since there's not even an alpha out for 2.5
> >> yet, none of the good stuff you did in CVS counts for users yet.
> 
> [Michael] 
> > Well, obviously.  OTOH, there's nothing I CAN do that will be useful
> > for users until 2.5 actually comes out.
> 
> Sure.  I was explaining why I keep saying what you say you don't want
> me to say:  until 2.5 actually comes out, what purpose would it serve
> to stop warning people that 754 special-value behavior is a x-platform
> crapshoot?  Much of it (albeit less so) will remain a crapshoot after
> 2.5 comes out too.

Well, OK, I phrased my first post badly.  Let me try again:

I want to make this situation better, as you may have noticed.

> >>> But first, I'm going to whinge a bit, and lay out some stuff that Tim
> >>> at least already knows (and maybe get some stuff wrong, we'll see).
> >>>
> >>> Floating point standards lay out a number of "conditions": Overflow
> >>> (number too large in magnitude to represent), Underflow (non-zero
> >>> number to small in magnitude to represent), Subnormal (non-zero number
> >>> to small in magnitude to represent in a normalized way), ...
> 
> >> The 754 standard has five of them:  underflow, overflow, invalid
> >> operation, inexact, and "divide by 0" (which should be understood more
> >> generally as a singularity; e.g., divide-by-0 is also appropriate for
> >> log(0)).
> 
> > OK, the decimal standard has more, which confused me for a bit
> > (presumably it has more because it doesn't normalize after each
> > operation).
> 
> The "conditions" in IBM's decimal standard map, many-to-one, on to a
> smaller collection of "signals" in that standard.  It has 8 signals: 
> the 5 I named above from 754, plus "clamped", "rounded", and
> "subnormal".  Distinctions are excruciatingly subtle; e.g., "rounded"
> and "inexact" would be the same thing in 754, but, as you suggest, in
> the decimal standard a result can be exact yet also rounded (if it
> "rounds away" one or more trailing zeroes), due to the unnormalized
> model.

Right, yes, that last one confused me for a while.

Why doesn't 754 have subnormal?  Actually, I think I'm confused about
when Underflow is signalled -- is it when a denormalized result is
about to be returned or when a genuine zero is about to be returned?

> >>> For each condition, it should (at some level) is possible to trap each
> >>> condition, or continue in some standard-mandated way (e.g. return 0
> >>> for Underflow).
> 
> >> 754 requires that, yes.
> 
> >>> While ignoring the issue of allowing the user to control this, I do
> >>> wish sometimes that Python would make up it's mind about what it does
> >>> for each condition.
> 
> >> Guido and I agreed long ago that Python "should", by default, raise an
> >> exception on overflow, invalid operation, and divide by 0, and "should
> >> not", by default, raise an exception on underflow or inexact.
> 
> And, I'll add, "should not" on rounded, clamped and subnormal too.

Sure, but we already have a conforming implementation of 854 with
settable traps and flags and rounding modes and all that jazz.

Maybe we should just implement floats in Python.

> >> Such defaults favor non-expert use.  Experts may or may not be happy
> >> with them, so Python "should" also allow changing the set.
>  
> > Later :)
> 
> That's a problem, though.  754 subsets are barely an improvement over
> what Python does today:

Well, my contention is that the consistent application of one
particular 754 subset would be an improvement.  Maybe I'm wrong!

> > (In the mean time can we just kill fpectl, please?)
> 
> Has it been marked as deprecated yet (entered into the PEP for
> deprecated modules, raises deprecation warnings, etc)?  I don't know. 
> IMO it should become deprecated, but I don't have time to push that.

A bit of googling suggests that more people pass --with-fpectl to
configure than I expected, but I doubt more than 1% of those actually
use the features thus provided (of course, this is a guess).

> >>> There are a bunch of conditions which we shouldn't and don't trap by
> >>> default -- Underflow for example.  For the conditions that probably should
> >>> result in an exception, there are inconsistencies galore:
> >>>
> >>> >>> inf = 1e300 * 1e300 # <- Overflow, no exception
> >>> >>> nan = inf/inf # <- InvalidOperation, no exception
> 
> >> Meaning you're r

Re: __eq__ on a dict

2005-07-11 Thread Neil Benn
Steven D'Aprano wrote:

> On Mon, 11 Jul 2005 12:42:55 +0200, Neil Benn wrote:
>
>  
>
>> Hello,
>>
>>I can't find the docs for __eq__ on a dict and I can't 
>> find a description on what the eq does (strangely it does implement > 
>> and < but I have no idea what that does).  Does anyone know 
>> (definitively) what the __eq__, __gt__, __lt__ methods do.
>>
>>BTW, google is not my friend - I invited it out for a drink last 
>> week and it stood me up :-) .
>>   
>
>
> It works for me. Google on "__eq__ Python" and the 5th and 6th sites are:
>
> http://python.active-venture.com/ref/customization.html
> http://www.network-theory.co.uk/docs/pylang/ref_32.html
>  
>

As previous reply

> Normally, asking Python for help is a good way to read the docs, but in
> this particular case, it is a big let-down:
>
> py> help({}.__eq__)
> Help on method-wrapper:
>
> __eq__ = 
>
>
> For any two objects x and y, when you call
> x == y
>
> 
>


That's the empirical evidence that I got but I want to be 100% sure that 
this holds in all cases - I'm wary about using empirical evidence 
leading to assumptions in my code - I take the paradigm that 'Assumption 
is the mother of all f**k-ups'.

> In general, you should not call __eq__ directly, but use the == operator
> instead.
>
>  
>

   Yeah I'm aware of that, I didn't want to start talking about ==, etc 
or I may mislead people into the - this is what __eq__ means path of 
explanation.

Thanks for your response.

Neil

-- 

Neil Benn
Senior Automation Engineer
Cenix BioScience
BioInnovations Zentrum
Tatzberg 46
D-01307
Dresden
Germany

Tel : +49 (0)351 4173 154
e-mail : [EMAIL PROTECTED]
Cenix Website : http://www.cenix-bioscience.com

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


Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code)

2005-07-11 Thread Dan Sommers
On Mon, 11 Jul 2005 08:34:45 +0200,
Reinhold Birkenfeld <[EMAIL PROTECTED]> wrote:

> Kay Schluehr wrote:
>> Dan Sommers schrieb:
>> 
>>> How about this:
>>> 
>>> def __init__(self, self.x, y, self.z):
>>> # self.x, self.z from first and third explicit parameters
>>> do_something_with_y()
>> 
>> Can you tell me in which way it is anyhow better than the original
>> proposal
>> 
>> def __init__(self, .x, y, .z):
>> # self.x, self.z from first and third explicit parameters
>> do_something_with_y()
>> 
>> besides that it is more verbose? 

> It is more explicit. Explicit is better than implicit.

> But as with many proposals, this raises consequential questions, for
> example, how "self.x" parameters are handled in other methods, or even
> functions, as __init__ is not special-cased by the parser.

So why limit it to __init__?  Bengt Richter's idea of generalizing it is
a good one.  Currently, when this method:

def f(self, x, y, z):
pass

is called, Python binds self to a reference to the object, x to the
first argument, y to the second argument, z to and the third.  By
extension, hypothetically, this method:

def new_f(self, self.x, y, self.z):
do_something_with_y()

would be semantically identical to:

def new_f(self, __anonymous_argument_1, y, __anonymous_argument_2):
self.x = __anonymous_argument_1
del __anonymous_argument_1 # look:  a use case for del!  
self.z = __anonymous_argument_2
del __anonymous_argument_2
do_something_with_y()

It's not too far from the tuple unpacking that happens now:

def g(x, (a, b)):
pass

q = (3, 4)
g(1, q) # inside g, x = 1, a = q[0] = 3, b = q[1] = 4

and it's certainly not less explicit than properties.

Without thinking it all the way through, I suppose these:

   def method_1(self, *self.l):
   pass
   def method_2(self, **self.d):
   pass

could act as if they were these:

def method_1(self, *args):
self.l = args
del args
   def method_2(self, **kw):
self.d = kw
del kw

Regards,
Dan

-- 
Dan Sommers

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


Re: decorators as generalized pre-binding hooks

2005-07-11 Thread Kay Schluehr
George Sakkis schrieb:

> > 1. classes have metaclasses, functions don't have metafunctions.  No one
> > gave an example for classes not handled at least as well with a metaclass.
>
> Would something like the following count ?
>
> @abstractclass
> class AbstractFrame(object):
>
> @abstractclass
> @innerclass
> class AbstractPanel(object):
> pass
>
> For one thing, it's more readable than the respective __metaclass__
> declarations. Moreover, stacking two or more decorators is
> syntactically straightforward, while for metaclasses you have to write
> boilerplate code for making a subclass of the components, e.g.:
> class AbstractInnerClass(AbstractClass, InnerClass): pass
> Fortunately metaclasses are not that commonly used to cause
> combinatorial explosion of such boilerplate classes.

I think it would be a good idea to pronounce the similarity between
function decorators and metaclasses. Metaclasses were once introduced
as an arcane art of fuzzy bearded hackers or supersmart 'enterprise
architects' that plan at least products of Zope size but not as a tool
for the simple programmer on the street. But maybe they should be and
there should also be librarys of them representing orthogonal
customizations ready for plug in.

Since metaclasses follow an "adapt", "customize" or "decorate"
semantics it is a good idea not to use inheritance to stack them which
implies that one metaclass refines an other.

+1 for metaclasses as class decorators.

Kay

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


Re: __eq__ on a dict

2005-07-11 Thread [EMAIL PROTECTED]
"Use the source, Luke"

dict_richcompare:
http://fisheye.cenqua.com/viewrep/python/python/dist/src/Objects/dictobject.c?r=2.165#l1510

dict_compare:
http://fisheye.cenqua.com/viewrep/python/python/dist/src/Objects/dictobject.c?r=2.165#l1425

/Simon

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


Re: decorators as generalized pre-binding hooks

2005-07-11 Thread Christopher Subich
Kay Schluehr wrote:
> I think it would be a good idea to pronounce the similarity between
> function decorators and metaclasses. Metaclasses were once introduced
> as an arcane art of fuzzy bearded hackers or supersmart 'enterprise
> architects' that plan at least products of Zope size but not as a tool
> for the simple programmer on the street. But maybe they should be and
> there should also be librarys of them representing orthogonal
> customizations ready for plug in.

In which case, I point out the need for better, more accessible 
documentation.  The Python 2.4 tutorial, for example, doesn't mention 
them at all as far as I've noticed.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: pyo contains absolute paths

2005-07-11 Thread David Siroky
V Sat, 09 Jul 2005 10:22:06 -0400, Peter Hansen napsal(a):

> David Siroky wrote:
>> When I "compile" my python files with "python -OO " into pyo files
>> then they still contain absolute paths of the source files which is
>> undesirable for me. How can I deal with that?
> 
> Don't do that?
> 
> Delete the pyo files?
> 
> Stop using Python?
> 
> I could guess at a few more possibilities, but since you don't actually 
> say what you *want* to happen, just what you don't want to happen, there 
> are an infinite number of ways to satisfy you right now. 
> 
> (Hint #1: absolute paths are always, AFAIK, put into the .pyc or .pyo 
> files.)
> 
> (Hint #2: maybe explaining why you don't want this to happen would help 
> too, since that will probably determine the "best" solution.)
> 
> -Peter

I want to write a commercial application in Python and I don't want the
customer to see the source code and absolute paths of my modules which
have btw. the same base path as the main module so I would expect only
relative paths in the compiled files.

David

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


Re: pyo contains absolute paths

2005-07-11 Thread David Siroky
V Sat, 09 Jul 2005 11:48:51 -0700, ncf napsal(a):

> Python is compiling the files with absolute paths because it is much
> faster to load a file when you know where it is, than to have to find
> it and then load it.
> 
> I'm guessing you're wondering this so you can distribute it compiled or
> such? If so, I wouldn't do that in the first place. Python's compiled
> files might be version/architecture dependant.
> 
> -NcF

I want to write a commercial application in Python and I don't want the
customer to see the source code and absolute paths of my modules which
have btw. the same base path as the main module so I would expect only
relative paths in the compiled files.

David

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


cursor positioning

2005-07-11 Thread Mage
 Dear All,

I am writing a database import script in python and I would like to
print the percentage of the process to the last line. I would like to
update the last line at every percent. You know what I mean.

How can the cursor be positioned to the last line or somewhere else on
the screen? Curses starts with clearing the whole screen and it is
overkill. Many modules are on the net but I would like to resolve this
simply task with native python.

I tried:

for something:
print chr(8)*20+mystring,

but it is nasty and didn't work well.

  Mage

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


Re: PPC floating equality vs. byte compilation

2005-07-11 Thread Michael Hudson
"Terry Reedy" <[EMAIL PROTECTED]> writes:

> "Tim Peters" <[EMAIL PROTECTED]> wrote in message 
> news:[EMAIL PROTECTED]
> > [Donn Cave]
> >> I ran into a phenomenon that seemed odd to me, while testing a
> >> build of Python 2.4.1 on BeOS 5.04, on PowerPC 603e.
> >>
> >> test_builtin.py, for example, fails a couple of tests with errors
> >> claiming that apparently identical floating point values aren't equal.
> >> But it only does that when imported, and only when the .pyc file
> >> already exists.  Not if I execute it directly (python test_builtin.py),
> >> or if I delete the .pyc file before importing it and running 
> >> test_main().
> 
> This is a known problem with marshalling INFs and/or NANs.

I hope you've also read all the bits and pieces where Tim says
"whatever happens to INFs and NANs is a platform dependent crapshoot".
We don't test platform dependent crapshoots in test_builtin (or at
least, I hope not!).

> *This* has supposedly been fixed for 2.5.

Actually, it's likely that Donn's failure has been fixed for Python
2.5 as well, at least if Tim's guess is correct, because the C
string->float routines aren't invovled in loading .pycs any more.

> > It would be most helpful to open a bug report, with the output from
> > failing tests.
> 
> And assign to Tim.

That's mean! :)

> >In general, this can
> > happen if the platform C string<->float routines are so poor that
> >
> >eval(repr(x)) != x
> ...
> > The ultimate cause is most likely in the platform C library's
> > string<->float routines (sprintf, strtod, that kind of thing).
> 
> It would also be helpful if you could do some tests in plain C (no Python) 
> testing, for instance, the same values that failed.  Hardly anyone else can 
> ;-).  If you confirm a problem with the C library, you can close the report 
> after opening, leaving it as a note for anyone else working with that 
> platform.

I agree with this bit!

Cheers,
mwh

-- 
112. Computer Science is embarrassed by the computer.
  -- Alan Perlis, http://www.cs.yale.edu/homes/perlis-alan/quotes.html
-- 
http://mail.python.org/mailman/listinfo/python-list


httplib/HTTPS Post Problem

2005-07-11 Thread michaelparkin
Hi,

Sorry to post what might seem like a trivial problem here, but its
driving me mad!

I have a simple https client that uses httplib to post data to a web
server.

When I post over http & https using curl the data is recieved by the
web server with no problems.

When I post using my python client the headers get there, but the body
of the message does not.

My code is pretty standard and has the format:


httplib.HTTPSConnection.debuglevel = 1
connection = httplib.HTTPSConnection(host_name, key_file = key,
cert_file = cert)
connection.putrequest("POST", path)
connection.putheader("Content-Length", str(len(body)))

...(some more headers)...

connection.endheaders()
connection.send(body)

response = connection.getresponse()
connection.close()

(some code has been removed for clarity)..

I can see in the debug messages the body getting sent, but nothing
arrives at
the server...

I think I would understand whats going on better if I knew how Python
uses the
underlying socket - does it

a) open the socket, send the header & body together or
b) send the header, wait, then send the body?

I think the answer to this question solve my problem - can anyone help?

Thanks.

p.s. I'm using Python 2.3.3 [GCC 3.3.3 (SuseLinx)]

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


Re: pyo contains absolute paths

2005-07-11 Thread Michael Hudson
David Siroky <[EMAIL PROTECTED]> writes:

> Hi!
> 
> When I "compile" my python files with "python -OO " into pyo files
> then they still contain absolute paths of the source files which is
> undesirable for me. How can I deal with that?

Are you trying to save space?  In 2.4 and later each code object will
contain the same copy of the absolute path, so you can't save that
much space.

There are probably ways to make .pycs that have a path of "", if you
really want (see py_compile in the stdlib).

Cheers,
mwh

-- 
  I located the link but haven't bothered to re-read the article,
  preferring to post nonsense to usenet before checking my facts.
  -- Ben Wolfson, comp.lang.python
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code)

2005-07-11 Thread Reinhold Birkenfeld
Dan Sommers wrote:

> Without thinking it all the way through, I suppose these:
> 
>def method_1(self, *self.l):
>pass
>def method_2(self, **self.d):
>pass
> 
> could act as if they were these:
> 
> def method_1(self, *args):
> self.l = args
> del args
>def method_2(self, **kw):
> self.d = kw
> del kw

I still think it's too specialized. What would, hypothetically, this do?

class Bar: pass

class Foo:
x = Bar()
def method_1(self, x.y):
pass

It's hard to explain that you can autoassign self.y but not x.y.

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


Re: importing files from a directory

2005-07-11 Thread Thomas Guettler
Am Sat, 09 Jul 2005 20:30:04 -0700 schrieb spike grobstein:

> I'm a total Python newbie, so bear with me here...
> 
> I'm writing a program that has a user-configurable, module-based
> architecture. it's got a directory where modules are stored (.py files)
> which subclass one of several master classes.
[cut]

> for item in dir_list:
> # strip off the extensions...
> if (item == "__init__.py"):
> continue
> elif (item[-3:] == '.py'):

item.endswith(".py") would be more python-like.

> mod_name = item[:-3]
> elif (item[-4:] == '.pyc'):

elif item.endswith(".pyc"):
continue # Don't load module twice

> else:
> continue
> 
> print "Loading %s..." % mod
> 
> module_list.append(__import__("Modules.%s" % mod))
> 
> print "Done."
> 
> 
> it works more or less like I expect, except that...
> 
> A. the first time it runs, blah.py then has a blah.pyc counterpart.
> When I run the program again, it imports it twice. Not horrible, but
> not what I want. is there any way around this?

See above: Just don't load it. The compiled "pyc" file is taken
automatically if it is newer than the "py" file.
 
> B. module_list winds up consisting of items called 'Modules.blah' and
> I'd like to have just blah. I realize I could say:
> 
> my_module = __import__("Modules.%s" % mod)
> module_list.append(getattr(my_module, mod))

I use this getattr() after __import__, too. I don't think there
is a easier way.

HTH,
  Thomas


-- 
Thomas Güttler, http://www.thomas-guettler.de/


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


Re: httplib/HTTPS Post Problem

2005-07-11 Thread Thomas Guettler
Am Mon, 11 Jul 2005 06:29:23 -0700 schrieb michaelparkin:

> Hi,
> 
> Sorry to post what might seem like a trivial problem here, but its
> driving me mad!
> 
> I have a simple https client that uses httplib to post data to a web
> server.
> 
> When I post over http & https using curl the data is recieved by the
> web server with no problems.
> 
> When I post using my python client the headers get there, but the body
> of the message does not.

Hi,

can you look at the access log of the server? A slash at the
end of a URL is important (www.google.com/ is different from
www.google.com)

response = connection.getresponse()
What does "print response" do?

You can listen on the wire with ethereal (Capture, then "follow tcp-stream")

 HTH,
   Thomas


-- 
Thomas Güttler, http://www.thomas-guettler.de/


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


Re: pyo contains absolute paths

2005-07-11 Thread Daniel Dittmar
David Siroky wrote:
> When I "compile" my python files with "python -OO " into pyo files
> then they still contain absolute paths of the source files which is
> undesirable for me. How can I deal with that?

Use the script compileall.py (in Lib) to compile all the files. This 
script has an option -d  that allows to set the directory name 
compiled into the .pyo files.

 From the help: "-d destdir: purported directory name for error messages"

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


ImportError: No module named numarray

2005-07-11 Thread enas khalil


when i write a code to import some module like the following :
 
 
from nltk.probability import ConditionalFreqDist
 
I got the error : 
 
Traceback (most recent call last):  File "C:\Python24\toky.py", line 1, in -toplevel-    from nltk.probability import ConditionalFreqDist  File "C:\Python24\Lib\site-packages\nltk\probability.py", line 56, in -toplevel-    import types, math, numarrayImportError: No module named numarray
can you please tell me the cause 

		 Sell on Yahoo! Auctions  - No fees. Bid on great items.-- 
http://mail.python.org/mailman/listinfo/python-list

Re: Lisp development with macros faster than Python development?..

2005-07-11 Thread Thomas Bartkus
<[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
>
> > Well, his Viaweb company was founded in about '95, right? So he probably
just
> > used Lisp because Python wasn't as well known yet. ;-)
>
> David
>
> That is what I thought too.  It makes sense but I wasn't sure.  Still
> ain't.
> The problem is that questions like 'What lang is fastest to develop
> in?'
> are hard to answer definitively.

No it's not.

The answer is always whatever language you enjoy the most and know the best.

That's a somewhat redundant statement because if you enjoy a language, you
are highly motivated to use it often and learn it well.

An intimate knowledge of any particular language is *far* more important
than the syntactic and semantic arcana that people usually argue over.

So - what the question really boils down to is which language(s) have the
best balance of approachability (easy to learn!) and capability. Bear in
mind though, that if the language sacrifices capability in favor of being
easy, then the fun runs out of it too soon :-)

Thomas Bartkus




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


Re: cursor positioning

2005-07-11 Thread Larry Bates
While not "curses" based this class will update screen as you
want.  You could use it as a basis upon which to do a curses
version with your cursor positioning.

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/299207

-Larry Bates

Mage wrote:
>  Dear All,
> 
> I am writing a database import script in python and I would like to
> print the percentage of the process to the last line. I would like to
> update the last line at every percent. You know what I mean.
> 
> How can the cursor be positioned to the last line or somewhere else on
> the screen? Curses starts with clearing the whole screen and it is
> overkill. Many modules are on the net but I would like to resolve this
> simply task with native python.
> 
> I tried:
> 
> for something:
> print chr(8)*20+mystring,
> 
> but it is nasty and didn't work well.
> 
>   Mage
> 
-- 
http://mail.python.org/mailman/listinfo/python-list


relative import packages/modules workaround

2005-07-11 Thread peter
Hello all,

I've read all the posts concerning relative imports of modules and I am
glad I saw some consensus on a syntax.
At this moment I am however bound to python 2.3.

Does anyone know a good workaround (or a library) which can achieve a
relative import for this python version

kind regards

Peter

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


Re: cursor positioning

2005-07-11 Thread Mage
Larry Bates wrote:

>While not "curses" based this class will update screen as you
>want.  You could use it as a basis upon which to do a curses
>version with your cursor positioning.
>
>http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/299207
>
>  
>
Thank you. This is good for displaying the percentage.
However it fails to display this:
100 files read
200 files read
300 files read


of course all in the same line and not under the last line.

   Mage


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


RE: cursor positioning

2005-07-11 Thread Albert Leibbrandt
-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Mage
Sent: 11 July 2005 04:28 PM
To: [email protected]
Subject: Re: cursor positioning

Larry Bates wrote:

>While not "curses" based this class will update screen as you
>want.  You could use it as a basis upon which to do a curses
>version with your cursor positioning.
>
>http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/299207
>
>  
>
Thank you. This is good for displaying the percentage.
However it fails to display this:
100 files read
200 files read
300 files read


of course all in the same line and not under the last line.

   Mage


-- 
Why not use something like this?

counter = 0

while 1:
if (counter % 100) == 0:
print'%s files read '%counter
counter += 1

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


Re: Python exception hook simple example needed

2005-07-11 Thread Fuzzyman


Ed Leafe wrote:
> On Jul 7, 2005, at 7:27 AM, Fuzzyman wrote:
>
> > Do you have an exception handling dialog ?
>
>   Not per se, as there hasn't been a request for one; we have several
> dialogs ranging from simple messages to alerts to interactive dialogs,
> much as wxPython offers. But I'll make this offer: give me a spec as to
> what you need this "exception handling dialog" to do, and I'll have it
> added to the framework within 24 hours. Deal?
>

Hello Ed,

It's a brilliant offer - and dabo sounds very interesting.
I was  responding to someone else's question though ! Next time I need
to code  a GUI app  I'll take  a look at dabo.

Thanks
Fuzzy
http://www.voidspace.org.uk/python


> > Can you use the UI layer without being tied to the rest of the
> > framework ? They seemed pretty integrated to me.
>
>   They are integrated, but nothing forces you to use anything you don't
> want. I know of several people who have developed UI-only apps, with no
> need for business objects or database connectivity. They started in
> plain wxPython, and switched to Dabo because it was so much easier, and
> so much more Pythonic.
>
>   ___/
>  /
> __/
>/
>   /
>   Ed Leafe
>   http://leafe.com/
>   http://dabodev.com/

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


Re: cursor positioning

2005-07-11 Thread James Carroll
I haven't tried this myself, but I think the secret to displaying a
continuously updating %done on the command line is to
print "file 100, 1% done"

then send exactly 7 backspaces to the terminal, then print 2% done...
so the backspaces will write over the previous text.

Backspace is a \x08 (ascii character with the value 8.)

It _could_ work...

-Jim


On 7/11/05, Albert Leibbrandt <[EMAIL PROTECTED]> wrote:
> -Original Message-
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of
> Mage
> Sent: 11 July 2005 04:28 PM
> To: [email protected]
> Subject: Re: cursor positioning
> 
> Larry Bates wrote:
> 
> >While not "curses" based this class will update screen as you
> >want.  You could use it as a basis upon which to do a curses
> >version with your cursor positioning.
> >
> >http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/299207
> >
> >
> >
> Thank you. This is good for displaying the percentage.
> However it fails to display this:
> 100 files read
> 200 files read
> 300 files read
> 
> 
> of course all in the same line and not under the last line.
> 
>Mage
> 
> 
> --
> Why not use something like this?
> 
> counter = 0
> 
> while 1:
> if (counter % 100) == 0:
> print'%s files read '%counter
> counter += 1
> 
> --
> http://mail.python.org/mailman/listinfo/python-list
> 
>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cursor positioning

2005-07-11 Thread Mage
James Carroll wrote:

>I haven't tried this myself, but I think the secret to displaying a
>continuously updating %done on the command line is to
>print "file 100, 1% done"
>
>then send exactly 7 backspaces to the terminal, then print 2% done...
>so the backspaces will write over the previous text.
>
>Backspace is a \x08 (ascii character with the value 8.)
>
>It _could_ work...
>
>  
>
I tried but printing backslashes won't work in a loop (i think the
screen was not refreshed correctly). You can use stdout and flush.

Actually I am using this:

for (s,i) in [(list[i],i) for i in range(len(list))]:
content = file(s).read()
sys.stdout.write(chr(8)*35 + str(i + 1) + ' of ' +
str(len(list)) + ' files read')
sys.stdout.flush()

   Mage

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


Re: importing files from a directory

2005-07-11 Thread spike grobstein
my reason for loading both the .py and .pyc files was just in case
compiled files were supplied as modules... but I'm gonna disallow that,
so yeah.

I also got a response in email and I've been dabbling with my code
since I posted this and found a slightly better way of handling this
plugin system...

I stuck the import code into the Modules/__init__.py file, so it can
act as a kind of manager (instead of moving the files to a
Modules(disabled) directory) and appended the __import__s to an array.

like this:

[EMAIL PROTECTED] ~/Aphex $ cat Modules/__init__.py
module_list = []

def load_module(mod_name):
mod = __import__("Modules.%s" % mod_name)
mod = getattr(mod, mod_name)
module_list.append(mod.module())

def load_modules():
load_module("nes")
load_module("snes")
load_module("mame")

load_modules()

[end code]

I then just have to 'import Modules' from my main program and the whole
module import thing is encapsulated and invisible to my main program.

I'm gonna add some functions to the Modules module to make fetching
plugins a little less ambiguous (get_module(index) and
get_named_module(module_name), etc).

Thanks for the help. Python's making me have to think a little
backwards. I have to make sure I declare my functions before I call
them, but it's a very cool language overall.

...spike

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


Re: Read-only class properties

2005-07-11 Thread Bengt Richter
On Sun, 10 Jul 2005 21:10:36 -0700, Michael Spencer <[EMAIL PROTECTED]> wrote:

>Bengt Richter wrote:
>...
>> 
>> class Foo(object):
>> class __metaclass__(type):
>> def __setattr__(cls, name, value):
>> if type(cls.__dict__.get(name)).__name__ == 'Descriptor':
>> raise AttributeError, 'setting Foo.%s to %r is not allowed' 
>> %(name, value) 
>> type.__setattr__(cls, name, value)
>> @classproperty
>> def TheAnswer(cls):
>> return "The Answer according to %s is 42" % cls.__name__
>> @classproperty
>> def AnotherAnswer(cls):
>> return "Another Answer according to %s is 43" % cls.__name__
>> 
>
>or, simply put the read-only descriptor in the metaclass:
>
>  Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on win32
>  Type "help", "copyright", "credits" or "license" for more information.
>  >>> def classproperty(function):
>  ... class Descriptor(object):
>  ... def __get__(self, obj, objtype):
>  ...return function(objtype)
>  ... def __set__(self, obj, value):
>  ... raise AttributeError, "can't set class attribute"
>  ... return Descriptor()
>  ...
>  >>> class A(object):
>  ... class __metaclass__(type):
>  ... @classproperty
>  ... def TheAnswer(cls):
>  ... return "The Answer according to %s is 42" % cls.__name__
>  ...
>  >>> A.TheAnswer
>  'The Answer according to __metaclass__ is 42'
>  >>> A.TheAnswer = 3
>  Traceback (most recent call last):
>File "", line 1, in ?
>File "", line 6, in __set__
>  AttributeError: can't set class attribute
>  >>> class B(A): pass
>  ...
>  >>> B.TheAnswer
>  'The Answer according to __metaclass__ is 42'
>  >>>
>
>
>this means that the getter doesn't automatically get a reference to the class 
>(since it is a method of metaclass), which may or may not matter, depending on 
>the application
>
It appears that you can use an ordinary property in the metaclass, and get the 
reference:
(I tried doing this but I still had the classproperty decorator and somehow 
inside a metaclass
it bombed or I typoed, and I forgot to try the plain property, so I hacked 
onwards to the
more involved __setattr__ override). Anyway,

 >>> class A(object):
 ... class __metaclass__(type):
 ... def TheAnswer(cls):
 ... return "The Answer according to %s is 42" % cls.__name__
 ... def __refuse(cls, v):
 ... raise AttributeError, "Refusing to set %s.TheAnswer to 
%r"%(cls.__name__, v)
 ... TheAnswer = property(TheAnswer, __refuse)
 ...
 ...
 >>> A.TheAnswer
 'The Answer according to A is 42'
 >>> A.TheAnswer = 123
 Traceback (most recent call last):
   File "", line 1, in ?
   File "", line 6, in __refuse
 AttributeError: Refusing to set A.TheAnswer to 123

Of course, access through an instance won't see this:

 >>> a=A()
 >>> a.TheAnswer
 Traceback (most recent call last):
   File "", line 1, in ?
 AttributeError: 'A' object has no attribute 'TheAnswer'

since TheAnswer is found in type(a)'s mro, but not type(A)'s:

 >>> type(a).mro()
 [, ]

 >>> type(A).mro()
 Traceback (most recent call last):
   File "", line 1, in ?
 TypeError: descriptor 'mro' of 'type' object needs an argument

looks like you get type.mro as an unbound method that way...

 >>> type(A).mro(type(A))
 [, , ]

or

 >>> type.mro(A)
 [, ]
 >>> type.mro(type(A))
 [, , ]

or even

 >>> type.__dict__['mro']
 
 >>> type.__dict__['mro'](A)
 [, ]
 >>> type.__dict__['mro'](type(A))
 [, , ]
 >>> type(A)
 

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


Re: cursor positioning

2005-07-11 Thread Jeff Epler
Here's a simple module for doing progress reporting.  On systems without
curses, it simply uses "\r" to return the cursor to the first column.
On systems with curses, it also clears to the end of the line.  This
means that when the progress message gets shorter, there aren't droppings
left from the longer ones.

You have to take care that the progress message isn't wider than the
screen, but I don't know a nice way to *find* the width of the screen
that will work on windows and unix.  Hardcoding 80 ain't it either.

import sys

def progress(s):
sys.stderr.write(s + CLEAR_EOL + "\r"); sys.stderr.flush()

try:
import curses
except ImportError:
CLEAR_EOL = ''
else:
curses.setupterm()
CLEAR_EOL = curses.tigetstr("el") or ''

def test():
import time
for j in range(2):
for i in range(100):
progress("Doing item %d, %d%%" % (i * 100, i))
time.sleep(.01)
if __name__ == '__main__': test()


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

Getting files in a subdirectory in a zip

2005-07-11 Thread Echo
What would the best way to get a list of files in a subdirectory in a zip?

The only thing I can come up with is to extract the zip into a temp
directory and then just grab the list of files in the subdirectory
that I need. This way seems very messy to me and I was wondering if
there are any better ways.

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


regular expression questions in Python

2005-07-11 Thread Jeremy
I am (very) new top regular expressions and I am having a difficult time 
understanding how to do them.  I have the following in my script:

zaidsearch = r'''^ {5,}([\d]{4,5})(.\d{2,2}c)'''
ZAIDSearch = re.compile(search, re.IGNORECASE)

When I do: ZAID.search(...) then this works fine.  I would like to write 
   it as:

zaidsearch = r'''^ {5,}([\d]{4,5})  #My comments
  (.\d{2,2}c)#More of my comments'''
ZAIDSearch = re.compile(zaidsearch, re.VERBOSE)

but this doesn't work.  I get the following error:

 raise error, v # invalid expression
sre_constants.error: nothing to repeat


So I guess my question is: how do I use the VERBOSE option to make my 
regular expression easier to understand for a human?  Secondly, how can 
I use both the VERBOSE and IGNORECASE options?
Thanks,
Jeremy

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


Re: Should I use "if" or "try" (as a matter of speed)?

2005-07-11 Thread Dark Cowherd
> 
> def joels_function(args):
>error_result = 0
>good_result = None
>process(args)
>if error_condition():
>error_result = -1  # flag for an error
>elif different_error_conditon():
>error_result = -2
>else:
>more_processing()
>if another_error_conditon():
>error_result = -3
>do_more_work()
>good_result = "Success!"
>if error_result != 0:
>return (False, error_result)
>else:
>return (True, good_result)
> 
> 
> and then call it with:
> 
> status, msg = joels_function(args)
> if status == False:
>print msg
># and fail...
> else:
>print msg
># and now continue...
> 
> 
> This is how I would write it in Python:
> 
> def my_function(args):
>process(args)
>if error_condition():
>raise SomeError("An error occurred")
>elif different_error_conditon():
>raise SomeError("A different error occurred")
>more_processing()
>if another_error_conditon():
>raise SomeError("Another error occurred")
>do_more_work()
>return "Success!"
> 
> and call it with:
> 
> try:
>result = my_function(args)
>print "Success!!!"
> except SomeError, msg:
>print msg
># and fail...
> # and now continue safely here...
> 
> 
> In the case of Python, calling a function that may raise an exception is

I tend to use exceptions, but I think Joel has a point.

Taking the example code that you have given above.

Let us assume that somebody else is using my_function and DOES NOT
write a try except block.

This code will run fine except, when the exception is thrown and it
will suddenly pop up in some other error handler which may not be
handling the situation correctly. You have to plan and create a series
of errorhandling classes to handle such situations.

However Joels_function forces the caller to write some kind of error
handler. If he doesnt write the program will not run.

After reading that I have been giving this option some thought. The
nice thing about Python is I can easily return tuples. In C++ you have
to jump through hoops because you cant return two values easily.

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


Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code)

2005-07-11 Thread Bengt Richter
On Mon, 11 Jul 2005 01:44:07 -0400, "Terry Reedy" <[EMAIL PROTECTED]> wrote:

>
>"Bengt Richter" <[EMAIL PROTECTED]> wrote in message 
>news:[EMAIL PROTECTED]
>> Me too. I liked the leading _, but on second thought it is a weird 
>> language change
>> re names in a special context. Probably not so good.
>
>To repeat: while my '_' proposal could have been for a language change (in 
>3.0), it was actually for a convention recognized by a metaclass or, more 
>likely, decorator (and implementable now, I think).  *Any* flag would serve 
>the purpose, but I picked one that was a single char while being visually 
>striking and, as far as I know, rarely used in current practice even though 
>quite legal.  A 'self_' prefix would do as well except for being more to 
>type.  The prefix could even be an argument to the decorator!
>
Yes, sorry, I should have read more carefully. Yours is the high ground ;-)

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


Re: Yet Another Python Web Programming Question

2005-07-11 Thread Bill Mill
> Python using CGI, for example, was enough for him until he started
> getting 500 errors that he wasn't sure how to fix.

A common error is that python cgi files need line endings to be in
unix text file format, not windows text file format (\n instead of
\r\n) [1]. Why this is, I don't know, but it causes a lot of errors
for windows folks. I'm a frequent linux/windows switcher, and it's
caused me no end of troubles - if you're getting "premature end of
script headers" in your apache error logs, this may be your problem.

Peace
Bill Mill
bill.mill at gmail.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: regular expression questions in Python

2005-07-11 Thread Reinhold Birkenfeld
Jeremy wrote:
> I am (very) new top regular expressions and I am having a difficult time 
> understanding how to do them.  I have the following in my script:
> 
> zaidsearch = r'''^ {5,}([\d]{4,5})(.\d{2,2}c)'''
> ZAIDSearch = re.compile(search, re.IGNORECASE)
> 
> When I do: ZAID.search(...) then this works fine.  I would like to write 
>it as:
> 
> zaidsearch = r'''^ {5,}([\d]{4,5})  #My comments
^ This space will not be a space in the RE.
  You have to specify a space with '[ ]' or '\ '
  when using re.VERBOSE

>   (.\d{2,2}c)#More of my comments'''
> ZAIDSearch = re.compile(zaidsearch, re.VERBOSE)
> 
> but this doesn't work.  I get the following error:
> 
>  raise error, v # invalid expression
> sre_constants.error: nothing to repeat


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


Re: decorators as generalized pre-binding hooks

2005-07-11 Thread Kay Schluehr


Christopher Subich schrieb:
> Kay Schluehr wrote:
> > I think it would be a good idea to pronounce the similarity between
> > function decorators and metaclasses. Metaclasses were once introduced
> > as an arcane art of fuzzy bearded hackers or supersmart 'enterprise
> > architects' that plan at least products of Zope size but not as a tool
> > for the simple programmer on the street. But maybe they should be and
> > there should also be librarys of them representing orthogonal
> > customizations ready for plug in.
>
> In which case, I point out the need for better, more accessible
> documentation.  The Python 2.4 tutorial, for example, doesn't mention
> them at all as far as I've noticed.

That's true also for properties and decorators - the latter may be
excused because they are new in Python 2.4. There are a few good
documents out there explaining advanced stuff e.g. mro and descriptors.
Maybe those texts should be delivered with the doc and linked from the
tutorial as "further reading"? But maybe the whole document structure
could be redesigned providing a Wikipedia style with seperated but
linked articles, example code etc. ?

Kay

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


Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code)

2005-07-11 Thread Bengt Richter
On Mon, 11 Jul 2005 15:37:35 +0200, Reinhold Birkenfeld <[EMAIL PROTECTED]> 
wrote:

>Dan Sommers wrote:
>
>> Without thinking it all the way through, I suppose these:
>> 
>>def method_1(self, *self.l):
>>pass
>>def method_2(self, **self.d):
>>pass
>> 
>> could act as if they were these:
>> 
>> def method_1(self, *args):
>> self.l = args
>> del args
>>def method_2(self, **kw):
>> self.d = kw
>> del kw
>
>I still think it's too specialized. What would, hypothetically, this do?
>
>class Bar: pass
>
>class Foo:
>x = Bar()
>def method_1(self, x.y):
>pass
>
>It's hard to explain that you can autoassign self.y but not x.y.
>
No, that limitation wouldn't exist, so you wouldn't have to explain it ;-)
I.e., the above would act like

 class Foo:
 x = Bar()
 def method_1(self, _anonymous_arg_1):
 x.y = _anonymous_arg_1

and would do whatever it would do now (probably look for a global x or a 
closure cell x, but
it wouldn't find the class variable in a normal method call)

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


Re: Legacy data parsing

2005-07-11 Thread gov
Actually, we receive the data in the form of a text file.  The original
data is sent from an IBM mainframe then to Ottawa where it is captured
by an "SNA Print Server that receives the VPS print jobs, writes them
to disk and then runs a PERL script program on the disk file.  This
PERL script program scans the file's VPS banner page for key words
(e.g. JobName, Destination, Form) and then creates a Plain Text and a
Rich Text Format (RTF)."  This system is available Nationally for every
region in Canada.  It is unfortunate that our government has been so
slow in updating such an old process.

Since I don't really know (or have access to) the inner workings of the
mainframe or the conversion process, I can't really do much there.

The reason why I don't wish to simply replace the printer simply
convert it so it can be used on newer printers is because the data will
also be used to automate tasks (such as creating form letters to
clients).

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


C API : Creating a Py_Method object from a C function.

2005-07-11 Thread Hugh Macdonald
I've got a pure python module that parses a certain type of file. It
has a load() function that allows a callback function to be passed for
getting progress information.

In straight python, this works fine.

However, I'm now trying to use this from a C++ program. The current
flow that I'm trying to get is as follows:

C++ calls python interface function, passing a C++ function pointer
Python interface function stores C++ function pointer
Python interface function generates new Py_Object method pointer
pointing to a different C python function. (This different function
calls the stored C++ function pointer)
Python interface function calls python function
Python function calls the python method pointer it was passed
C python function then calls the stored C++ function pointer.


The problem in this workflow is taking the C python function that I've
defined (using the standard "static PyObject *someFunction(PyObject
*self, PyObject *args)" method) and converting this into a Py_Object.
Any ideas?

Py_Method doesn't seem to allow you to generate a new one with your own
pointers inside... and I can't see anything else in the docs that might
allow me to do this...


Thanks for any advice!

--
Hugh Macdonald

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


Re: Getting files in a subdirectory in a zip

2005-07-11 Thread Scott David Daniels
Echo wrote:
> What would the best way to get a list of files in a subdirectory in a zip?
> 
> The only thing I can come up with is to extract the zip into a temp
> directory and then just grab the list of files in the subdirectory
> that I need. This way seems very messy to me and I was wondering if
> there are any better ways.
> 

 import zipfile
 z = zipfile.ZipFile('block.zip')
 names = [name[7:] for name in z.namelist()
  if name.startswith('others/')]

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


ftputil - uploading many files too long

2005-07-11 Thread geon
Hi,

When I try to upload many files I get such a error message:

Traceback (most recent call last):
  File "I:\Python\my_py\wwwzaci\xcopy_ftp.py", line 51, in ?
except: x=host.upload(zdroj, cilFTP,'b')
  File "C:\prg\python24\Lib\site-packages\ftputil\ftputil.py", line 463, in uplo
ad
self.__copy_file(source, target, mode, open, self.file)
  File "C:\prg\python24\Lib\site-packages\ftputil\ftputil.py", line 452, in __co
py_file
target = target_open(target, target_mode)
  File "C:\prg\python24\Lib\site-packages\ftputil\ftputil.py", line 265, in file

host = self._copy()
  File "C:\prg\python24\Lib\site-packages\ftputil\ftputil.py", line 241, in _cop
y
return FTPHost(*self._args, **self._kwargs)
  File "C:\prg\python24\Lib\site-packages\ftputil\ftputil.py", line 138, in __in
it__
self._session = self._make_session()
  File "C:\prg\python24\Lib\site-packages\ftputil\ftputil.py", line 235, in _mak
e_session
return ftp_error._try_with_oserror(factory, *args, **kwargs)
  File "C:\prg\python24\Lib\site-packages\ftputil\ftp_error.py", line 78, in _tr
y_with_oserror
raise TemporaryError(obj)
ftputil.ftp_error.TemporaryError: 421 Login Timeout (25 seconds): closing contro
l connection.

I think its not about many files but because of it takes too long for my ftp 
server (25s). I tried
many things but nothing helps.

Any help is appreciated...

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


Re: What is Expresiveness in a Computer Language?

2005-07-11 Thread Default User


Randy Howard wrote:
> Keith Thompson wrote
> (in article <[EMAIL PROTECTED]>):
>
>
> >\/|  |\|   __\,,\ /,,/__
> > \||/ |  | |  jgs (__Y__)
> > /\/\/\/\/\/\/\/\//\/\\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
> > ==
>
> Out of curiosity, does anyone remember who 'jgs' refers to
> above?


http://en.wikipedia.org/wiki/Joan_Stark



Brian

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


Tricky Dictionary Question from newbie

2005-07-11 Thread Ric Da Force
Hi all,

I have a dictionary containing about 300 items, some of the values being 
repeated.  Both keys and values are strings.  How can I turn this thing on 
its head so that we create a key based on each unique value and build the 
values based on the keys corresponding to the repeated values?

It is hard to explain but this is what I mean:

Dict = {'rt': 'This is repeated', 'sr': 'This is repeated', 'gf': 'This is 
not'}

I want this to return a new dict with string keys and lists containing the 
previous keys for repeated values.

NewDict = {'This is repeated':['rt','sr'],'This is not':['gf']}

I am still learning Python and have struggled with this for hours before 
deciding to go for help.  Unfortunately, I didn't really know how to search 
for this in google and decided to post it here.  I apologise if this is too 
basic for this newsgroup...

Ric 


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


Re: Tricky Dictionary Question from newbie

2005-07-11 Thread Cyril Bazin
Hello, 

Try that, it may not be the better solution, but it seems to work:

#def invertDict(d):
#    d2 = {}
#    for k, v in d.iteritems():
#    d2.setdefault(v, []).append(k)
#    return d2
Cyril
On 7/11/05, Ric Da Force <[EMAIL PROTECTED]> wrote:
Hi all,I have a dictionary containing about 300 items, some of the values beingrepeated.  Both keys and values are strings.  How can I turn this thing onits head so that we create a key based on each unique value and build the
values based on the keys corresponding to the repeated values?It is hard to explain but this is what I mean:Dict = {'rt': 'This is repeated', 'sr': 'This is repeated', 'gf': 'This isnot'}I want this to return a new dict with string keys and lists containing the
previous keys for repeated values.NewDict = {'This is repeated':['rt','sr'],'This is not':['gf']}I am still learning Python and have struggled with this for hours beforedeciding to go for help.  Unfortunately, I didn't really know how to search
for this in google and decided to post it here.  I apologise if this is toobasic for this newsgroup...Ric--http://mail.python.org/mailman/listinfo/python-list

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

Re: Tricky Dictionary Question from newbie

2005-07-11 Thread Markus Weihs
Hi!


 Dict = {'rt': 'repeated', 'sr':'repeated', 'gf':'not repeated'} 
 NewDic = {}

 for k,v in Dict.items():
 NewDic.setdefault(v, []).append(k)


Regards, mawe



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


Re: Tricky Dictionary Question from newbie

2005-07-11 Thread Cyril Bazin
Hum... I think an iteritems is better, this way, python don't need to create in memory 
a complete list of couple key, value.On 7/11/05, Markus Weihs <[EMAIL PROTECTED]> wrote:
Hi! Dict = {'rt': 'repeated', 'sr':'repeated', 'gf':'not repeated'} NewDic = {} for k,v in Dict.items(): NewDic.setdefault(v, []).append(k)Regards, mawe--
http://mail.python.org/mailman/listinfo/python-list
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: Tricky Dictionary Question from newbie

2005-07-11 Thread Mark Jackson
"Ric Da Force" <[EMAIL PROTECTED]> writes:

> It is hard to explain but this is what I mean:
> 
> Dict = {'rt': 'This is repeated', 'sr': 'This is repeated', 'gf': 'This is 
> not'}
> 
> I want this to return a new dict with string keys and lists containing the 
> previous keys for repeated values.
> 
> NewDict = {'This is repeated':['rt','sr'],'This is not':['gf']}

NewDict = {}
for x in Dict.keys():
try:
NewDict[Dict[x]].append(x)
except KeyError:
NewDict[Dict[x]] = [x]

-- 
Mark Jackson - http://www.alumni.caltech.edu/~mjackson
It is difficult for men in high office to avoid
the malady of self-delusion.- Calvin Coolidge


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


Re: Tricky Dictionary Question from newbie

2005-07-11 Thread Reinhold Birkenfeld
Mark Jackson wrote:
> "Ric Da Force" <[EMAIL PROTECTED]> writes:
> 
>> It is hard to explain but this is what I mean:
>> 
>> Dict = {'rt': 'This is repeated', 'sr': 'This is repeated', 'gf': 'This is 
>> not'}
>> 
>> I want this to return a new dict with string keys and lists containing the 
>> previous keys for repeated values.
>> 
>> NewDict = {'This is repeated':['rt','sr'],'This is not':['gf']}
> 
> NewDict = {}
> for x in Dict.keys():
>   try:
>   NewDict[Dict[x]].append(x)
>   except KeyError:
>   NewDict[Dict[x]] = [x]

Or, more up-to-date:

NewDict = {}
for key, val in Dict.iteritems():
NewDict.setdefault(val, []).append(key)

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


Re: cursor positioning

2005-07-11 Thread Danny Milosavljevic
Hi,

On Mon, 11 Jul 2005 15:29:41 +0200, Mage wrote:

>  Dear All,
> 
> I am writing a database import script in python and I would like to
> print the percentage of the process to the last line. I would like to
> update the last line at every percent. You know what I mean.
> 
> How can the cursor be positioned to the last line or somewhere else on
> the screen? Curses starts with clearing the whole screen and it is
> overkill. Many modules are on the net but I would like to resolve this
> simply task with native python.
> 
> I tried:
> 
> for something:
> print chr(8)*20+mystring,
> 
> but it is nasty and didn't work well.
> 
>   Mage

If you only want to support ansi terminals (which is questionable, but
possible), then there are escape codes that are very helpful (searching
for ansi escape codes or something in google should help you find the
remainder):

the general syntax is 

ESC[

action usually is the first letter in the sequence, hence parameters are
usually numbers (duh :))

ESC is chr(27) (ascii 27, octal \033)

actions are
  Hcursor go home (top left corner usually)
  Cgo right  times
  Dgo left   times
  Ago up  times
  Bgo down  times
  Kclear to end of line
  2J   clear screen (yes, to every rule there are exceptions :), note that
this does not make the cursor go home)
  mset color/highlight/formatting flags

Examples
  ESC[2JESC[H   same as "clear", clear screen, go home
  \rESC[Kprogress %dprobably what you want :)

The downside of this is that determining the size of the screen is pretty
hard to do right.

Process is usually, read TERM environment variable, read /etc/termcap
(deprecated) "co" attribute (columns), "li" attribute (rows). That has
been deprecated because of all those resizeable terminals out there. 

Now its something like outputting some magical stuff to make the terminal
emulator send back the current sizes immediately once, and whenever they
change. 
I'm not totally clear how that works since I'm too lazy to care :)

What you want is probably

prc = 0
for prc in range(100):
sys.stderr.write("\r\033[KProgress %d%% ... " % prc) 
sys.stderr.flush()
time.sleep(0.5)

though :)

Note that this can wreck havoc onscreen if the terminal is smaller than what is
needed to print that horizontally, so technically its not totally clean code.

Hope that helps

cheers,
   Danny

  

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


Re: relative import packages/modules workaround

2005-07-11 Thread Terry Hancock
On Monday 11 July 2005 09:19 am, peter wrote:
> I've read all the posts concerning relative imports of modules and I am
> glad I saw some consensus on a syntax.
> At this moment I am however bound to python 2.3.
> 
> Does anyone know a good workaround (or a library) which can achieve a
> relative import for this python version

Basically, you can use information from the sys module to dynamically
determine your module or package's absolute path.  Then you construct
the absolute path to the module you want by a fairly simple application
of os.path from the relative path. 

How exactly to do that is not something I remember off the top of my
head, but I remember it's not hard -- check the "sys" and "os.path"
modules' documentation. You probably also want to look at the 
"__path__" property of packaged loaded with __init__.py, as I believe
there is some special "magic" behavior designed for packages to make
this a little easier.

You can easily encapsulate this in a function under your module with
just a few lines of code.  Zope provides a function called "package_home"
that does this. I'm sure there are other examples.

The missing thing here is not that there's no way to do it, but rather
that it's a common enough task that there ought to be *one* way to do
it and it ought to be in the library.  Otherwise, there's a lot of
redundancy.

--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks  http://www.anansispaceworks.com

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


Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code)

2005-07-11 Thread Ralf W. Grosse-Kunstleve
--- Bengt Richter <[EMAIL PROTECTED]> wrote:
> >I still think it's too specialized. What would, hypothetically, this do?
> >
> >class Bar: pass
> >
> >class Foo:
> >x = Bar()
> >def method_1(self, x.y):
> >pass
> >
> >It's hard to explain that you can autoassign self.y but not x.y.
> >
> No, that limitation wouldn't exist, so you wouldn't have to explain it ;-)
> I.e., the above would act like
> 
>  class Foo:
>  x = Bar()
>  def method_1(self, _anonymous_arg_1):
>  x.y = _anonymous_arg_1
> 
> and would do whatever it would do now (probably look for a global x or a
> closure cell x, but
> it wouldn't find the class variable in a normal method call)

I am a bit afraid of opening a door for weird side effects. E.g.

class unrelated: pass
u = unrelated()

class grouping:
  def __init__(self, self.x, u.y, self.z):
pass

Is this really a good thing to allow? I am afraid it will be abused. My prime
concern was to provide a good solution for a very common problem. If we stray
too far from this most important goal we may get nothing in the end.

"self" (or whatever people prefer as a name for the first argument of a bound
function) *is* special. I think therefore it deserves special support.

I think it would be fantastic if we could push through the

  def __init__(self, self.x, y, self.y)

syntax, with the explicit limitation that only the first argument can be used
on the left side of the dot. I'd also happily settle for a decorator approach,
__autoinit__ or over variations, as long as they are built-in and easy to
remember/use/explain to a novice. However, to me the self.x approach seems to
be "just right" because:

  1. It is a good compromise between "redundant" and "explicit"; i.e.:

  too redundant:

def __init__(self, x, y, z):
  self.x = x
  self.y = y
  self.z = z

  middle ground:

def __init__(self, self.x, self.y, self.z):
  pass

  the other extreme:

def __init__(self, .x, .y, .z):
  pass

I am thinking people can understand the "middle ground" approach even
without looking at release notes and will not be surprised if unrelated.y
doesn't work.

  2. This approach is open to full optimization for runtime performance
 and should therefore be faster than the redundant conventional
 approach. I.e. the arguments can directly be inserted into the
 desired dictionary (or slot), without ever being added to locals().

  3. The user can always write "grouping(x=1,y=2,z=3)". I.e. how the
 arguments are used is strictly an implementation detail, as it
 should be.

Cheers,
Ralf





Sell on Yahoo! Auctions – no fees. Bid on great items.  
http://auctions.yahoo.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: ImportError: No module named numarray

2005-07-11 Thread Robert Kern
enas khalil wrote:
> 
> when i write a code to import some module like the following :
>  
>  
> from nltk.probability import ConditionalFreqDist
>  
> I got the error :
>  
> Traceback (most recent call last):
>   File "C:\Python24\toky.py", line 1, in -toplevel-
> from nltk.probability import ConditionalFreqDist
>   File "C:\Python24\Lib\site-packages\nltk\probability.py", line 56,
> in -toplevel-
> import types, math, numarray
> ImportError: No module named numarray
> 
> can you please tell me the cause 

I already did. You need to install numarray.

http://www.stsci.edu/resources/software_hardware/numarray

-- 
Robert Kern
[EMAIL PROTECTED]

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter

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


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Ralf W. Grosse-Kunstleve
--- Robert Williscroft <[EMAIL PROTECTED]> wrote:

> My apologies for having to resort to email but for some reason I can't post
> this message to comp.lang.python. I've tried about 4 times including 
> starting a
> new thread, but for some reason it doesn't turn up, though I've followed 
> up on
> another thread without problem.

Very strange. I hope it is not a conspiracy! :)
You can email to the list directly (that's what I am doing):

  [email protected]

>  > Is there a way out with Python as-is?
>  > -
>  >
>  > Yes. If you take the time to look at the file in the CVS you'll find
>  > that I was cheating a bit. To reduce the terrible clutter above, I am
>  > actually using a simple trick::
>  >
>  > adopt_init_args(self, locals())
>  >
> 
> Also there is a decorator solution:
> 
> def init_self( init ):
> vn = init.func_code.co_varnames[ 1 : init.func_code.co_argcount ]
>
> def decorated_init(self, *args, **kw):
> off = 0
> for name in vn:
> if not name.startswith('_'):
> if name in kw:
> value = kw[name]
> else:
> value = args[off]
> off += 1
>
> setattr( self, name, value )
>
> init( self, *args, **kw )
> return decorated_init
>
> 
> class MyClass(object):
> __slots__ = ['x', 'z']
> 
> @init_self
> def __init__( self, x, _y, z ):
> pass
> 
> def show( self ):
> for i in self.__slots__:
> print 'self.%s = %d' %(i,eval('self.%s' % (i,)))
> 
> MyClass( 1, 2, 3 ).show()
> 
> MyClass( z = 1, x = 2, _y = 3 ).show()
> 
> The __slots__ is in the test just because you mentioned you like it,
> the decorator doesn't need a "slots" class.
> 
> AFAICT this differs from your proposal in that in your proposal you
> want to use '.' as an include prefix the above uses '_' as an exclude
> prefix.
> 
> Rob.

I like the looks of the decorator approach a lot. Could this somehow be
enhanced such that the user doesn't have to know about the underscore? Thinking
about runtime efficiency, could the decorator approach somehow achieve that the
attribute-to-be arguments are never added to locals()?

Cheers,
Ralf




Sell on Yahoo! Auctions – no fees. Bid on great items.  
http://auctions.yahoo.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Environment Variable

2005-07-11 Thread Vivek Chaudhary
Is it possible to set an environment variable in python script whose
value is retained even after the script exits.

Doing the following creates an environment variable "name" which is
visible to only subprocesses created by os.system() and os.popen(). 

os.putvar("name", "vivek")

Is it possible to somehow create this environment variable inside
python script which will be avaibale even after the script exits. In
otherwords, after I run my script, if I do a "echo $name" in my shell,
it should return the value "vivek"


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


Re: Environment Variable

2005-07-11 Thread Grant Edwards
On 2005-07-11, Vivek Chaudhary <[EMAIL PROTECTED]> wrote:

> Is it possible to set an environment variable in python script whose
> value is retained even after the script exits.

No, not in Unix/Linux.  In VMS I think there is.  

-- 
Grant Edwards   grante Yow!  I think my CAREER
  at   is RUINED!!
   visi.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: computer algebra packages

2005-07-11 Thread Florian Diesch
François Pinard <[EMAIL PROTECTED]> wrote:
>> >  Mascyma is (trying to be) a user-friendly graphical frontend for
>> >  the Computer Algebra System GNU MAXIMA.
>
>> I was not successful googling for this one.  Would you have an URL handy?
>
> Oops, OK!  Found it at  http://cens.ioc.ee/~pearu/misc/maxima/  .


As I'm reading news offline I don't know what's on that page. The Ubuntu
Linux copyright file says the files are obtained from
 and you can find more information at




   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


Parsing Data, Storing into an array, Infinite Backslashes

2005-07-11 Thread [EMAIL PROTECTED]
I am using this function to parse data I have stored in an array.

This is what the array looks like:

[['Memory', '0', 'Summary', '0'], ['Memory', '0', 'Speed',
'PC3200U-30330'], ['Memory', '0', 'Type', 'DDR SDRAM'], ['Memory', '0',
'Size', '512'], ['Memory', '0', 'Slot', 'DIMM0/J11'], ['Memory', '0',
'ConfigurationType', '2'], ['Memory', '1', 'Summary', '0'], ['Memory',
'1', 'Speed', 'PC3200U-30330'], ['Memory', '1', 'Type', 'DDR SDRAM'],
['Memory', '1', 'Size', '512'], ['Memory', '1', 'Slot', 'DIMM1/J12'],
['Memory', '1', 'ConfigurationType', '2'], ['Memory', '2', 'Summary',
'0'], ['Memory', '2', 'Speed', 'PC3200U-30330'], ['Memory', '2',
'Type', 'DDR SDRAM'], ['Memory', '2', 'Size', '512'], ['Memory', '2',
'Slot', 'DIMM2/J13'], ['Memory', '2', 'ConfigurationType', '2'],
['Memory', '3', 'Summary', '0'], ['Memory', '3', 'Speed',
'PC3200U-30330'], ['Memory', '3', 'Type', 'DDR SDRAM'], ['Memory', '3',
'Size', '512'], ['Memory', '3', 'Slot', 'DIMM3/J14'], ['Memory', '3',
'ConfigurationType', '2']]

This is the code to parse the array:

count=0
place=0
query=[]
while 1:
try:
i=fetch.next()
except StopIteration:
break
if i[1] != count:
++count
query.append(count)
qval=`query[count]`
query[count]=qval+i[2]+"="+i[3]+", "

print qval,"\n"

When it runs I get an output similar to this.

\\\'Type=DDR
SDRAM,
\\\'Size=512,
\\\'Slot=DIMM2/J13,
\\\'ConfigurationType=2,
\\\'Summary=0,
\\\'Speed=PC3200U-30330, \\\'Type=DDR SDRAM,
\\\'Size=512, \'Slot=DIMM3/J14, '

When it's supposed to print just the plain text with the numbers etc.

I have changed these lines:

qval=`query[count]`
query[count]=qval+i[2]+"="+i[3]+", "

To this:

query[count]=query[count]+i[2]+"="+i[3]+", "

I get this error:

 Traceback (most recent call last):  File "infnode.py", line 60, in ?
  query[count]=query[count]+i[2]+"="+i[3]+", "TypeError: unsupported
operand type(s) for +: 'int' and 'str'

So I try and fix it by doing this:

query[count]=`query[count]`+i[2]+"="+i[3]+", "

Can someone please point me in the right direction I am sure that the
`query[count]` is causing the backslashes.

Thanks in advance.

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


BayPIGgies: July 14, 7:30pm (Google)

2005-07-11 Thread Aahz
The next meeting of BayPIGgies will be Thurs, July 14 at 7:30pm at
Google, building 40, room Temp Tech Talk.

Alex Martelli will be doing his "Black Magic" talk on descriptors,
decorators, and metaclasses.  Prepare to have your head exploded!


BayPIGgies meetings alternate between IronPort (San Bruno, California)
and Google (Mountain View, California).  For more information and
directions, see http://www.baypiggies.net/


Before the meeting, we may meet at 6pm for dinner.  Discussion of dinner
plans is handled on the BayPIGgies mailing list.  This week, there has
been discussion of a potluck -- if you want a potluck, speak up NOW on
the mailing list.

Advance notice: The August 11 meeting agenda has not been set.  Please send
e-mail to [EMAIL PROTECTED] if you want to suggest an agenda (or
volunteer to give a presentation).
-- 
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


Re: Environment Variable

2005-07-11 Thread Sybren Stuvel
Vivek Chaudhary enlightened us with:
> Is it possible to set an environment variable in python script whose
> value is retained even after the script exits.

It is, if you have absolute control over the calling environment.

> Is it possible to somehow create this environment variable inside
> python script which will be avaibale even after the script exits. In
> otherwords, after I run my script, if I do a "echo $name" in my
> shell, it should return the value "vivek"

Here is an example Python script:


import sys

name = sys.stdin.readline()
print "export name=%s" % name.strip()


If you call it like this:

bash$ $(python examplescript)

It'll change the 'name' variable of your shell. It's not really a
generic nor an elegant way of doing this. Heck, it even depends on the
type of shell you're using. If it suits your needs, be happy ;-)

Sybren
-- 
The problem with the world is stupidity. Not saying there should be a
capital punishment for stupidity, but why don't we just take the
safety labels off of everything and let the problem solve itself? 
 Frank Zappa
-- 
http://mail.python.org/mailman/listinfo/python-list


Extending and embedding Python

2005-07-11 Thread Tommy Nordgren
I want to write an application that embeds and extends (at least) the 
Python and Perl interpreters. Now i want to find as much as possible 
about the Python tools used for extending and embedding Python.
To be more specific: My app should:
1. Parse an input file.
2. Call a script in some scripting language, to generate an output file, 
for example in C++.

For task 2 I need to call an embedded interpreter, and also provide call 
backs from the scripting language to C++, in order to read global 
information collected during parsing.

In order to correctly compile and link my Application, I need a OS 
independent way to find compiler options and linker options necessary to 
find header files and libraries. What methods should I use from 
DistUtils for this purpose.


I also need to find some way to verify that linker options necessary for
embedding Perl is not incompatible with linking options for embedding 
Python.

Stockholm July 11, 2005
Tommy Nordgren
-- 
http://mail.python.org/mailman/listinfo/python-list


Environment Variable

2005-07-11 Thread tuxlover
Is it possible to set an environment variable from inside the python
script which will be retained after the script exits.

If I use the following code:

import os
os.putvar("name", "tuxlover")

the enivironment variable name is visible to only the sub-process
created by os.system and os.popen. But as soon as the python script
vanishes, the environment variable "name" is gone.

What I am wondering is that is it possible to set a environment
variable from inside a python script, and then access it (say, echo
$name from the shell) after the python script exits.

Thanks
Tuxlover

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


Re: Parsing Data, Storing into an array, Infinite Backslashes

2005-07-11 Thread Jeff Epler
Your code is needlessly complicated.

Instead of this business
while 1:
try:
i = fetch.next()
except stopIteration:
break
simply write:
for i in fetch:
(if there's an explicit 'fetch = iter(somethingelse)' in code you did
not show, then get rid of that and just loop 'for i in somethingelse')

i[1] will never compare equal to count, because i[1] is always a string
and count is always an integer.  Integers and strings are never equal to
each other.

Wring code like
x = "a string " + 3
does not work in Python.  You can either convert to a string and then
use the + operator to concatenate:
x = "a string " + str(3)
or you can use %-formatting:
x = "a string %s" % 3
("%s" accepts any sort of object, not just strings)

Using repr(...) (`...` is just a shorthand for this) is what is really
introducing the backslashes.  When it outputs a string, it quotes the
string using backslashes.  But you pass the old part of the prepared
string through it each time, which leads to doubling backslashes.

Below is a program I wrote to process the data in your message.  It prints
out
Memory 2 Summary=0, Speed=PC3200U-30330, Type=DDR SDRAM, Size=512, 
Slot=DIMM2/J13, ConfigurationType=2
Memory 3 Summary=0, Speed=PC3200U-30330, Type=DDR SDRAM, Size=512, 
Slot=DIMM3/J14, ConfigurationType=2
Memory 0 Summary=0, Speed=PC3200U-30330, Type=DDR SDRAM, Size=512, 
Slot=DIMM0/J11, ConfigurationType=2
Memory 1 Summary=0, Speed=PC3200U-30330, Type=DDR SDRAM, Size=512, 
Slot=DIMM1/J12, ConfigurationType=2
the result is out of order because the result of calling .items() on a
dict is in an arbitrary order.

Jeff

s = [['Memory', '0', 'Summary', '0'], ['Memory', '0', 'Speed',
 'PC3200U-30330'], ['Memory', '0', 'Type', 'DDR SDRAM'], ['Memory', '0',
 'Size', '512'], ['Memory', '0', 'Slot', 'DIMM0/J11'], ['Memory', '0',
 'ConfigurationType', '2'], ['Memory', '1', 'Summary', '0'], ['Memory',
 '1', 'Speed', 'PC3200U-30330'], ['Memory', '1', 'Type', 'DDR SDRAM'],
 ['Memory', '1', 'Size', '512'], ['Memory', '1', 'Slot', 'DIMM1/J12'],
 ['Memory', '1', 'ConfigurationType', '2'], ['Memory', '2', 'Summary',
 '0'], ['Memory', '2', 'Speed', 'PC3200U-30330'], ['Memory', '2',
 'Type', 'DDR SDRAM'], ['Memory', '2', 'Size', '512'], ['Memory', '2',
 'Slot', 'DIMM2/J13'], ['Memory', '2', 'ConfigurationType', '2'],
 ['Memory', '3', 'Summary', '0'], ['Memory', '3', 'Speed',
 'PC3200U-30330'], ['Memory', '3', 'Type', 'DDR SDRAM'], ['Memory', '3',
 'Size', '512'], ['Memory', '3', 'Slot', 'DIMM3/J14'], ['Memory', '3',
 'ConfigurationType', '2']]

query = {}

for a, b, c, d in s:
if not query.has_key((a,b)): query[(a,b)] = []
query[(a,b)].append("%s=%s" % (c, d))

for (a,b), v in query.items():
print a, b, ", ".join(v)


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

Minor correction July 11, 2005

2005-07-11 Thread edgrsprj
"edgrsprj" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> PROPOSED EARTHQUAKE FORECASTING
> COMPUTER PROGRAM DEVELOPMENT EFFORT

> it jumps strait to the display routine and uses the entered command to
begin

Should be the word "straight" instead of strait.


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


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Rob Williscroft
Ralf W. Grosse-Kunstleve wrote in
news:[EMAIL PROTECTED] in
comp.lang.python: 

> --- Robert Williscroft <[EMAIL PROTECTED]> wrote:
> 
>> My apologies for having to resort to email but for some reason I
>> can't post this message to comp.lang.python. I've tried about 4 times
>> including starting a
>> new thread, but for some reason it doesn't turn up, though I've
>> followed up on
>> another thread without problem.
> 
> Very strange. I hope it is not a conspiracy! :)
> You can email to the list directly (that's what I am doing):
> 
>   [email protected]
> 

I'll follow up and post this, and then see what happens :).

>>  > Is there a way out with Python as-is?
>>  > -
>>  >
>>  > Yes. If you take the time to look at the file in the CVS you'll
>>  > find that I was cheating a bit. To reduce the terrible clutter
>>  > above, I am actually using a simple trick::
>>  >
>>  > adopt_init_args(self, locals())
>>  >
>> 
>> Also there is a decorator solution:
>> 
>> def init_self( init ):
>> vn = init.func_code.co_varnames[ 1 : init.func_code.co_argcount ]
>>
>> def decorated_init(self, *args, **kw):
>> off = 0
>> for name in vn:
>> if not name.startswith('_'):
>> if name in kw:
>> value = kw[name]
>> else:
>> value = args[off]
>> off += 1
>>
>> setattr( self, name, value )
>>
>> init( self, *args, **kw )
>> return decorated_init
>>
>> 
>> class MyClass(object):
>> __slots__ = ['x', 'z']
>> 
>> @init_self
>> def __init__( self, x, _y, z ):
>> pass
>> 
>> def show( self ):
>> for i in self.__slots__:
>> print 'self.%s = %d' %(i,eval('self.%s' % (i,)))
>> 
>> MyClass( 1, 2, 3 ).show()
>> 
>> MyClass( z = 1, x = 2, _y = 3 ).show()
>> 
>> The __slots__ is in the test just because you mentioned you like it,
>> the decorator doesn't need a "slots" class.
>> 
>> AFAICT this differs from your proposal in that in your proposal you
>> want to use '.' as an include prefix the above uses '_' as an exclude
>> prefix.
>> 
>> Rob.
> 
> I like the looks of the decorator approach a lot. Could this somehow
> be enhanced such that the user doesn't have to know about the
> underscore? 

The underscore is just there so there is a way of having arguments
that aren't added as attributes to the first object, so if that isn't
required it could just be omited.

Also AIUI (the above is my first attempt to write a decorator), 
decorators can have arguments so the decorator could take an
"omit_prefix" argument, so the user could specify there own prefix.

Or maybe have an include prefix, say "self_", if thats what you prefer.

Personaly I'm happy with the underscore, 1 leading underscore at
module scope means hide the name, 2 at class scope means hide the
name, so I kinda like that an undersore is used to omit an argument.

> Thinking about runtime efficiency, could the decorator
> approach somehow achieve that the attribute-to-be arguments are never
> added to locals()? 
> 

Again AIUI, locals() is an inbuild that constructs a dict of the local
arguments and variables, IOW the dict doesn't exist *until* you call
locals().

Wether or not the fact the decorator doesn't call locals() makes any
difference though I don't know, the real arguments will get passed
to decorated_init() in some way and then setattr()'d to the self object.

But then again there is a loop, 2 if's and a lookup of the keyword 
dictionary in there, using this as it stands is going to hurt compared
to doing the asignments manually inside __init__(), though
as I haven't timed it, I could be wrong ;-).

Rob.
-- 
http://www.victim-prime.dsl.pipex.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


tuple.index(item)

2005-07-11 Thread David Isaac
Why don't tuples support an index method?
It seems natural enough ...

Thanks,
Alan Isaac


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


Re: Environment Variable

2005-07-11 Thread Reinhold Birkenfeld
[EMAIL PROTECTED] wrote:
> Is it possible to set an environment variable from inside the python
> script which will be retained after the script exits.
> 
> If I use the following code:
> 
> import os
> os.putvar("name", "tuxlover")
> 
> the enivironment variable name is visible to only the sub-process
> created by os.system and os.popen. But as soon as the python script
> vanishes, the environment variable "name" is gone.
> 
> What I am wondering is that is it possible to set a environment
> variable from inside a python script, and then access it (say, echo
> $name from the shell) after the python script exits.

No, I regret it is currently not. But I see a significant chance that
someone gets on the time machine and implants this into Thompson's head
some 30 years earlier as soon as you post that a third time.

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


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Lonnie Princehouse
IIRC, the self.__dict__.update(locals())  trick confuses psyco.

But you can make a decorator to achieve the same result.  There's not
really a convincing case for extending python syntax.

def attribute_decorator(f):
import inspect
argnames = inspect.getargspec(f)[0]
def decorator(*args, **keywords):
bound_instance = args[0]
for name, value in zip(argnames[1:], args[1:]):
setattr(bound_instance, name, value)
return f(*args, **keywords)
return decorator

#- example use:

class foo(object):
@attribute_decorator
def __init__(self, thing):
print "init: self.thing is", repr(self.thing)

f = foo('hello world')





--ljp

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


read output and store in file

2005-07-11 Thread [EMAIL PROTECTED]
Hi,

I'm a beginner, and what I want to accomplish is this:

1. For all files under several folders, do some processing (using an
existing program).  The program will output one line of text for each
file.

2. Store the output of all files in one file.

It would be great if someone can give me a crash start on accomplishing
this.  If you think there is a definitely better tool than Python for
doing this, please tell me so.  I just heard that Python or Perl are
better in these kind of jobs.

Thanks.

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


Re: read output and store in file

2005-07-11 Thread Grant Edwards
On 2005-07-11, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

> I'm a beginner, and what I want to accomplish is this:
>
> 1. For all files under several folders, do some processing (using an
> existing program).  The program will output one line of text for each
> file.
>
> 2. Store the output of all files in one file.
>
> It would be great if someone can give me a crash start on accomplishing
> this.  If you think there is a definitely better tool than Python for
> doing this, please tell me so.  I just heard that Python or Perl are
> better in these kind of jobs.

Using bash and find:

(find path1 path2 path3 -type f -exec existingProgram {} \;) >outputFile

-- 
Grant Edwards   grante Yow!  You can't hurt
  at   me!! I have an ASSUMABLE
   visi.comMORTGAGE!!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Environment Variable

2005-07-11 Thread tuxlover
Sorry for posting twice.

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


Re: read output and store in file

2005-07-11 Thread tuxlover
use os.path.walk() or os.walk()

Tuxlover

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


Re: Environment Variable

2005-07-11 Thread Reinhold Birkenfeld
[EMAIL PROTECTED] wrote:
> Sorry for posting twice.
> 

Sorry for forgetting my . 

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


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Ralf W. Grosse-Kunstleve
--- Lonnie Princehouse <[EMAIL PROTECTED]> wrote:

> IIRC, the self.__dict__.update(locals())  trick confuses psyco.
> 
> But you can make a decorator to achieve the same result.  There's not
> really a convincing case for extending python syntax.

Not if you have (enough memory for) psyco. :)
I am doing C++ extensions by hand; did quite a lot of them. Anything that helps
in pushing back the point where I have to move from Python to C++ is highly
appreciated. That's probably the strongest argument for the (self, self.x, ...)
approach. I believe it can be made more efficient than any other solution. But
see also the two other arguments:

http://mail.python.org/pipermail/python-list/2005-July/289721.html

> def attribute_decorator(f):
> import inspect
> argnames = inspect.getargspec(f)[0]
> def decorator(*args, **keywords):
> bound_instance = args[0]
> for name, value in zip(argnames[1:], args[1:]):
> setattr(bound_instance, name, value)
> return f(*args, **keywords)
> return decorator
> 
> #- example use:
> 
> class foo(object):
> @attribute_decorator
> def __init__(self, thing):
> print "init: self.thing is", repr(self.thing)
> 
> f = foo('hello world')

Thanks! Rob Williscroft had a similar suggestion:

http://mail.python.org/pipermail/python-list/2005-July/289734.html

Does anyone know if there is a way to hide the _ or self_ from the user of the
class, i.e. given:

class foo(object):
  @attribute_decorator
  def __init__(self, x, _y, z):
 pass

can we make it such that the user can still write

foo(x=1,y=2,z=3)

without the underscore?

Cheers,
Ralf



__ 
Discover Yahoo! 
Use Yahoo! to plan a weekend, have fun online and more. Check it out! 
http://discover.yahoo.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Help with report

2005-07-11 Thread ChrisH
I have some data in the following format:

Fred Flintstone,445553454,47634565
Wilma Flintstone,74857346,27576847
Barney Rubble,73487346,27576435

I need to convert this data into a report with the user's name and 
difference between the 2 numbers.

Can someone recommend a good way to do this?

BTW, it would be best if I can have it up and running by tomorrow. Also, 
html would be the preferred format, but not required.

Any help would be greatly appreciated!!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: [Baypiggies] BayPIGgies: July 14, 7:30pm (Google)

2005-07-11 Thread tpc247
I'd like to proffer the suggestion we meet for dinner at 6pm at Mei
Long in Mountain View, although it's probably best to run it past our
dinner coordinator first to make sure it gets his OK.   What say you
Brian ?

On 7/11/05, Aahz <[EMAIL PROTECTED]> wrote:
> 
> 
> Before the meeting, we may meet at 6pm for dinner.  Discussion of dinner
> plans is handled on the BayPIGgies mailing list.  This week, there has
> been discussion of a potluck -- if you want a potluck, speak up NOW on
> the mailing list.
> 
> Advance notice: The August 11 meeting agenda has not been set.  Please send
> e-mail to [EMAIL PROTECTED] if you want to suggest an agenda (or
> volunteer to give a presentation).
> --
> Aahz ([EMAIL PROTECTED])   <*> http://www.pythoncraft.com/
> 
> f u cn rd ths, u cn gt a gd jb n nx prgrmmng.
> ___
> Baypiggies mailing list
> [EMAIL PROTECTED]
> http://www.baypiggies.net/cgi-bin/mailman/listinfo/baypiggies
>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Help with report

2005-07-11 Thread Grant Edwards
On 2005-07-11, ChrisH <[EMAIL PROTECTED]> wrote:
> I have some data in the following format:
>
> Fred Flintstone,445553454,47634565
> Wilma Flintstone,74857346,27576847
> Barney Rubble,73487346,27576435
>
> I need to convert this data into a report with the user's name and 
> difference between the 2 numbers.
>
> Can someone recommend a good way to do this?
>
> BTW, it would be best if I can have it up and running by tomorrow.

You really oughtn't put off homework assignments until the last
minute.  Especially if you don't know how to do them.

> Also, html would be the preferred format, but not required.
>
> Any help would be greatly appreciated!!

Hints:

The string object's "split" method: 
http://docs.python.org/lib/string-methods.html
  
for line in file('inputfile.txt','r')

the built-in int()

the string formatting operator "%": 
http://docs.python.org/lib/typesseq-strings.html
  
-- 
Grant Edwards   grante Yow!  All right, you
  at   degenerates! I want this
   visi.complace evacuated in 20
   seconds!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: gettext and "disambiguating comments"

2005-07-11 Thread Martin v. Löwis
Terry Hancock wrote:
> /* Comment right before the gettext call, obviously in C */
> printf(_("Apparently ambiguous string to translate"));
> 
> This will get captured into the .po file, according to the
> gettext manual and appear as a comment right before
> the msgid (i.e. next to the line number reference).

Not automatically. You need to pass the -c option to xgettext
to make that happen, preferably using a tag:

/* TRANSLATORS: Comment right before the gettext call */

> Is there an equivalent Python gettext idiom?  I've tried the
> obvious 
> 
> # Comment right before the gettext call, now in Python
> print _("Apparently ambiguous string to translate")
> 
> But this is ignored by both pygettext and xgettext.

Did you give -c to xgettext? It works for me, for xgettext
0.14.5. -c appears to be unimplemented in pygettext.

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


How does this code works:

2005-07-11 Thread vch
Here's an example from some book:

def foo(n):
s = [n]
def bar(i):
s[0] += i
return s[0]
return bar

what I don't understand is how this example works, taking into account 
the LGB rule. I thought that s is not accessible from bar, but it is, 
apparently. Why?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: C API : Creating a Py_Method object from a C function.

2005-07-11 Thread Martin v. Löwis
Hugh Macdonald wrote:
> The problem in this workflow is taking the C python function that I've
> defined (using the standard "static PyObject *someFunction(PyObject
> *self, PyObject *args)" method) and converting this into a Py_Object.
> Any ideas?

You should use PyCFunction_New(Ex), passing a static PyMethodDef
variable that you define along with your function definition.

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


Re: Extending and embedding Python

2005-07-11 Thread Martin v. Löwis
Tommy Nordgren wrote:
> In order to correctly compile and link my Application, I need a OS 
> independent way to find compiler options and linker options necessary to 
> find header files and libraries. What methods should I use from 
> DistUtils for this purpose.

I don't think distutils supports linking applications that embed
Python, yet. It might be possible to write a distutils command for
that purpose, but I'd advise against that.

Instead, you should integrate the Python embedding into the build
process you alread have (e.g. make, shell scripts, whatever). You
can simplify the process by having a Python script compute all
the necessary parameters. You find the configuration-specific
information in distutils.sysconfig.

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


Re: How long is a piece of string? How big's a unit?

2005-07-11 Thread Chuck E. Cheese
The correct answer to the above question

How long is a piece of string? 

is 

2 times half it's length


CEC

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


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Rob Williscroft
Ralf W. Grosse-Kunstleve wrote in
news:[EMAIL PROTECTED] in
comp.lang.python: 

> Does anyone know if there is a way to hide the _ or self_ from the
> user of the class, i.e. given:
> 
> class foo(object):
>   @attribute_decorator
>   def __init__(self, x, _y, z):
>  pass
> 
> can we make it such that the user can still write
> 
> foo(x=1,y=2,z=3)
> 
> without the underscore?
> 

 

Sorry I didn't understand what you ment before:


def init_self( init ):
  class KeywordArgumentError(Exception):
pass

  vn = init.func_code.co_varnames[ 1 : init.func_code.co_argcount ]
  
  def decorated_init(self, *args, **kw):
off = 0
for name in vn:
  if not name.startswith('_'):
  if name in kw:
  value = kw[name]
  else:
  value = args[off]
  off += 1
  
  setattr( self, name, value )
  else:
off += 1 #was missing (a bug) in last version.
if name in kw:
  raise KeywordArgumentError(
  "Use %s not %s" % (name[1:],name) 
)
if name[1:] in kw:
  kw[name] = kw[name[1:]]
  del kw[name[1:]]

init( self, *args, **kw )
  return decorated_init
  

class MyClass(object):
  @init_self
  def __init__( self, x, _y, z ):
print "in __init__() _y =", _y

  def show( self ):
for i in self.__dict__:
  print 'self.%s = %d' %(i,eval('self.%s' % (i,)))

MyClass( 1, 2, 3 ).show()

MyClass( z = 1, x = 2, y = 3 ).show()

MyClass( z = 1, x = 2, _y = 3 ).show()


Rob.
-- 
http://www.victim-prime.dsl.pipex.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How does this code works:

2005-07-11 Thread Robert Kern
vch wrote:
> Here's an example from some book:
> 
> def foo(n):
>   s = [n]
>   def bar(i):
>   s[0] += i
>   return s[0]
>   return bar
> 
> what I don't understand is how this example works, taking into account 
> the LGB rule. I thought that s is not accessible from bar, but it is, 
> apparently. Why?

Python now has nested scopes.

http://www.python.org/peps/pep-0227.html

-- 
Robert Kern
[EMAIL PROTECTED]

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter

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


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Ralf W. Grosse-Kunstleve
--- Rob Williscroft <[EMAIL PROTECTED]> wrote:
> def init_self( init ):
>   class KeywordArgumentError(Exception):
> pass
> 
>   vn = init.func_code.co_varnames[ 1 : init.func_code.co_argcount ]
>   
>   def decorated_init(self, *args, **kw):
> off = 0
> for name in vn:
>   if not name.startswith('_'):
>   if name in kw:
>   value = kw[name]
>   else:
>   value = args[off]
>   off += 1
>   
>   setattr( self, name, value )
>   else:
> off += 1 #was missing (a bug) in last version.
> if name in kw:
>   raise KeywordArgumentError(
>   "Use %s not %s" % (name[1:],name) 
> )
> if name[1:] in kw:
>   kw[name] = kw[name[1:]]
>   del kw[name[1:]]
> 
> init( self, *args, **kw )
>   return decorated_init
>   
> 
> class MyClass(object):
>   @init_self
>   def __init__( self, x, _y, z ):
> print "in __init__() _y =", _y
> 
>   def show( self ):
> for i in self.__dict__:
>   print 'self.%s = %d' %(i,eval('self.%s' % (i,)))
> 
> MyClass( 1, 2, 3 ).show()
> 
> MyClass( z = 1, x = 2, y = 3 ).show()
> 
> MyClass( z = 1, x = 2, _y = 3 ).show()

Wow!

Here is the output, so everyone can see it immediately:

in __init__() _y = 2
self.x = 1
self.z = 3
in __init__() _y = 3
self.x = 2
self.z = 1
Traceback (most recent call last):
  File "/net/cci/rwgk/decorated_init.py", line 45, in ?
MyClass( z = 1, x = 2, _y = 3 ).show()
  File "/net/cci/rwgk/decorated_init.py", line 21, in decorated_init
raise KeywordArgumentError(
__main__.KeywordArgumentError: Use y not _y


I am impressed. I'll do some timings to see where we stand...

Cheers,
Ralf




__ 
Discover Yahoo! 
Use Yahoo! to plan a weekend, have fun online and more. Check it out! 
http://discover.yahoo.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How does this code works:

2005-07-11 Thread Rocco Moretti
vch wrote:
> Here's an example from some book:
> 
> def foo(n):
> s = [n]
> def bar(i):
>  s[0] += i
>  return s[0]
>  return bar
> 
> what I don't understand is how this example works, taking into account 
> the LGB rule. I thought that s is not accessible from bar, but it is, 
> apparently. Why?

Nested Scopes (Since Python 2.1):

http://www.python.org/peps/pep-0227.html
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

2005-07-11 Thread Ralf W. Grosse-Kunstleve
--- Rob Williscroft <[EMAIL PROTECTED]> wrote:
> class MyClass(object):
>   @init_self
>   def __init__( self, x, _y, z ):
> print "in __init__() _y =", _y

Here are the timings (script attached):

  overhead: 0.01
  plain_grouping: 0.26
  update_grouping: 0.45
  plain_adopt_grouping: 0.69
  autoinit_grouping: 1.14
  autoinit_setattr_grouping: 1.07
  autoattr_grouping: 1.01
  decorated_init_grouping: 0.94

I think your decorator solution looks nice and has a good potential time-wise.

Cheers,
Ralf




Sell on Yahoo! Auctions – no fees. Bid on great items.  
http://auctions.yahoo.com/import sys, os

class plain_grouping:
  def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

class update_grouping:
  def __init__(self, x, y, z):
self.__dict__.update(locals())
del self.self

def plain_adopt():
  frame = sys._getframe(1)
  init_locals = frame.f_locals
  self = init_locals[frame.f_code.co_varnames[0]]
  self.__dict__.update(init_locals)
  del self.self

class plain_adopt_grouping:
  def __init__(self, x, y, z):
plain_adopt()

class autoinit(object):

  def __init__(self, *args, **keyword_args):
self.__dict__.update(
  zip(self.__autoinit__.im_func.func_code.co_varnames[1:], args))
self.__dict__.update(keyword_args)
self.__autoinit__(*args, **keyword_args)

class autoinit_grouping(autoinit):

  def __autoinit__(self, x, y, z):
pass

class autoinit_setattr(object):
  def __init__(self, *args, **keyword_args):
for name, value in zip(self.__autoinit__.im_func.func_code.
 co_varnames[1:], args):
  setattr(self, name, value)
for name, value in keyword_args.items():
  setattr(self, name, value)
self.__autoinit__(*args, **keyword_args)

class autoinit_setattr_grouping(autoinit_setattr):

  def __autoinit__(self, x, y, z):
pass

class autoattr(type):
  def __init__(cls, name, bases, dct):
super(autoattr, cls).__init__(name, bases, dct)
old_init = cls.__init__
varnames = old_init.im_func.func_code.co_varnames[1:]
def new_init(self, *args, **keyword_args):
  self.__dict__.update(zip(varnames, args))
  self.__dict__.update(keyword_args)
  old_init(self, *args, **keyword_args)
cls.__init__ = new_init

class autoattr_grouping:
  __metaclass__ = autoattr
  def __init__(self, x, y, z):
pass

def init_self( init ):
  class KeywordArgumentError(Exception):
pass

  vn = init.func_code.co_varnames[ 1 : init.func_code.co_argcount ]

  def decorated_init(self, *args, **kw):
off = 0
for name in vn:
  if not name.startswith('_'):
  if name in kw:
  value = kw[name]
  else:
  value = args[off]
  off += 1

  setattr( self, name, value )
  else:
off += 1
if name in kw:
  raise KeywordArgumentError(
  "Use %s not %s" % (name[1:],name)
)
if name[1:] in kw:
  kw[name] = kw[name[1:]]
  del kw[name[1:]]

init( self, *args, **kw )
  return decorated_init

class decorated_init_grouping(object):
  @init_self
  def __init__(self, x, y, z):
pass

try:
  from namespace import Record
except ImportError:
  Record = None
else:
  class record_grouping(Record):
x = None
y = None
z = None

class timer:
  def __init__(self):
self.t0 = os.times()
  def get(self):
tn = os.times()
return (tn[0]+tn[1]-self.t0[0]-self.t0[1])

def time_overhead(n_repeats):
  t = timer()
  for i in xrange(n_repeats):
pass
  return t.get()

def time(method, n_repeats):
  g = method(x=1,y=2,z=3)
  assert g.x == 1
  assert g.y == 2
  assert g.z == 3
  t = timer()
  for i in xrange(n_repeats):
method(x=1,y=2,z=3)
  return t.get()

def time_all(n_repeats=10):
  print "overhead: %.2f" % time_overhead(n_repeats)
  print "plain_grouping: %.2f" % time(plain_grouping, n_repeats)
  print "update_grouping: %.2f" % time(update_grouping, n_repeats)
  print "plain_adopt_grouping: %.2f" % time(plain_adopt_grouping, n_repeats)
  print "autoinit_grouping: %.2f" % time(autoinit_grouping, n_repeats)
  print "autoinit_setattr_grouping: %.2f" % time(autoinit_setattr_grouping, 
n_repeats)
  print "autoattr_grouping: %.2f" % time(autoattr_grouping, n_repeats)
  print "decorated_init_grouping: %.2f" % time(decorated_init_grouping, 
n_repeats)
  if (Record is not None):
print "record_grouping: %.2f" % time(record_grouping, n_repeats)

if (__name__ == "__main__"):
  time_all()
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: __autoinit__

2005-07-11 Thread Mike Meyer
"Ralf W. Grosse-Kunstleve" <[EMAIL PROTECTED]> writes:

> --- Bengt Richter <[EMAIL PROTECTED]> wrote:
>> No, that limitation wouldn't exist, so you wouldn't have to explain it ;-)
>> I.e., the above would act like
>> 
>>  class Foo:
>>  x = Bar()
>>  def method_1(self, _anonymous_arg_1):
>>  x.y = _anonymous_arg_1
>> 
>> and would do whatever it would do now (probably look for a global x or a
>> closure cell x, but
>> it wouldn't find the class variable in a normal method call)
>
> I am a bit afraid of opening a door for weird side effects. E.g.
>
> class unrelated: pass
> u = unrelated()
>
> class grouping:
>   def __init__(self, self.x, u.y, self.z):
> pass
>
> Is this really a good thing to allow? I am afraid it will be abused. My prime
> concern was to provide a good solution for a very common problem. If we stray
> too far from this most important goal we may get nothing in the end.

Remember that what we're suggesting is just syntactic sugar. You can
abuse things the same way by writing:

class grouping:
def __init__(self, self.x, u_y, self.z):
   u.y = u_y
   del u_y
   pass

Why is this acceptable, but your usage not?

> "self" (or whatever people prefer as a name for the first argument of a bound
> function) *is* special. I think therefore it deserves special support.

Yes, but is it special enough to justify adding a special case to
another construct?

I'm not sure I like the idea of allowing "self.x" yet. But if you're
going to allow it, I don't think it should be restricted.

The question is - how far are you really willing to carry this? What
do you think of allowing arbitrary lvalues, with the assumption that
the previous arguments are all defined (ala let*)? So you could do:

class grouping:
def __init__(self, x, x['abc']):
pass

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


Access descendant class's module namespace from superclass

2005-07-11 Thread Reid Priedhorsky
Dear group,

I'd have a class defined in one module, which descends from another class
defined in a different module. I'd like the superclass to be able to
access objects defined in the first module (given an instance of the first
class) without importing it. Example of what I'm looking for:

<<>>

   class Spam(object):
  def fish(self):
 a = self.__module__.Ham()

<<>>

   import spam

   class Eggs(spam.Spam):
  pass

   class Ham(object):
  pass

The above doesn't work because __module__ is a string, not a module object: 

   >>> import eggs
   >>> b = eggs.Eggs()
   >>> b.fish()
   Traceback (most recent call last):
 File "", line 1, in ?
 File "spam.py", line 3, in foo
   a = self.__module__.Ham()
   AttributeError: 'str' object has no attribute 'Ham'

(I suppose I could call __import__(self.__module__), but that seems kind
of awkward.)

Is this possible using Python 2.3? Any better ways to accomplish this?

Thanks very much for any help,

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


  1   2   >