[issue17390] display python version on idle title bar

2014-06-04 Thread Kent Johnson

Changes by Kent Johnson k...@kentsjohnson.com:


--
nosy:  -kjohnson

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17390
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17390] display python version on idle title bar

2013-04-13 Thread Kent Johnson

Kent Johnson added the comment:

issue17390_editor_title.patch is not correct, it changes the title on any 
window that inherits from EditorWindow, including the shell window. Here is a 
new patch that changes short_title() instead of saved_change_hook(), so it can 
be overridden by derived classes. This is the same method used to change the 
title of the shell window.

Derived classes of EditorWindow are PyShellEditorWindow and OutputWindow. 
OutputWindow overrides short_title() and IIUC PyShellEditorWindow should use 
the same title as a normal editor window.

--
nosy: +kjohnson
Added file: http://bugs.python.org/file29804/issue17390_editor_title_rev2.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17390
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17719] IDLE help text refers to incorrect Python version

2013-04-13 Thread Kent Johnson

New submission from Kent Johnson:

The IDLE help text says, Running without a subprocess: (DEPRECATED in Python 
3.5 see Issue 16123). According to the referenced issue, this feature is 
scheduled to be deprecated in *3.4* and *removed* in 3.5. The attached patch 
corrects the help text.

--
assignee: docs@python
components: Documentation
files: deprecated_in_3.4.patch
keywords: patch
messages: 186769
nosy: docs@python, kjohnson
priority: normal
severity: normal
status: open
title: IDLE help text refers to incorrect Python version
type: behavior
versions: Python 3.4
Added file: http://bugs.python.org/file29808/deprecated_in_3.4.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17719
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17719] IDLE help text refers to incorrect Python version

2013-04-13 Thread Kent Johnson

Kent Johnson added the comment:

Note: this text does not appear in Doc/library/idle.rst so it does not have to 
be corrected there.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17719
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: Generators and propagation of exceptions

2011-04-09 Thread Kent Johnson
On Apr 8, 3:47 pm, r nbs.pub...@gmail.com wrote:
 I'm already making something like this (that is, if I understand you
 correctly). In the example below (an almost real code this time, I
 made too many mistakes before) all the Expressions (including the
 Error one) implement an 'eval' method that gets called by one of the
 loops. So I don't have to do anything to detect the error, just have
 to catch it and reraise it at each stage so that it propagates to the
 next level (what I have to do anyway as the next level generates
 errors as well).

 class Expression(object):
     def eval(self):
         pass

 class Error(Expression):
     def __init__(self, exception):
         self.exception = exception

     def eval(self):
         raise self.exception

Perhaps, instead of raising exceptions at each level, you could return
an Error object that implements the eval() (or whatever appropriate
protocol) to return an appropriate new Error object. In this case, you
could have
class Error(Expression);

def eval(self):
return unicode(self.exception)

Error would itself be created by Expression.parseToken(), instead of
raising an exception.

The idea is that at each level of parsing, instead of raising an
exception you return an object which, when interpreted at the next
outer level, will again return an appropriate error object for that
level. You might be able to have a single Error object which
implements the required methods at each level to just return self.

I don't know if this really works when you start nesting but perhaps
it is worth a try.

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


Re: Python 2.7.1

2010-11-29 Thread Kent Johnson
On Nov 27, 11:33 pm, Benjamin Peterson benja...@python.org wrote:
 On behalf of the Python development team, I'm happy as a clam to announce the
 immediate availability of Python 2.7.1.

Will there be Mac binaries for 2.7.1 and 3.1.3? Currently the web site
shows only source and Windows binaries.

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


[issue10303] small inconsistency in tutorial

2010-11-07 Thread Kent Johnson

Kent Johnson k...@kentsjohnson.com added the comment:

Attached patch deletes the referenced sentence.

--
keywords: +patch
nosy: +kjohnson
Added file: http://bugs.python.org/file19536/issue10303.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue10303
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue7935] Cross-reference ast.literal_eval() from eval() docs

2010-02-15 Thread Kent Johnson

New submission from Kent Johnson k...@kentsjohnson.com:

eval() is a known security hole. Since Python 2.6 ast.literal_eval() provides a 
better alternative in many cases. literal_eval() is not as well known as eval() 
and not easy to find even if you know it exists (but don't remember the name).

eval() comes up over and over in the Python-tutor list and the attendant 
warnings are repeated ad nauseum; literal_eval() is rarely mentioned as an 
alternative.

Suggestion: in the docs for eval(), put a warning about security risks and a 
cross-reference to literal_eval(). For example:

Warning: eval() executes any expression and should be used only with trusted 
input. ast.literal_eval() is a safe alternative for evaluating expressions 
containing only Python literals.

Thanks!

--
assignee: georg.brandl
components: Documentation
messages: 99363
nosy: georg.brandl, kjohnson
severity: normal
status: open
title: Cross-reference ast.literal_eval() from eval() docs
type: feature request
versions: Python 2.6

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue7935
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue7310] Unhelpful __repr__() in os.environ

2009-11-12 Thread Kent Johnson

New submission from Kent Johnson k...@kentsjohnson.com:

In Python 2.x, os.environ extends UserDict.IterableUserDict and
therefore os.environ.__repr__() shows the environment. This makes it
easy and intuitive to view the entire environment in the interactive
interpreter.

In Python 3.1, os.environ extends _abcoll.MutableMapping and uses
object.__repr__(). This is a much less useful representation.

I suggest adding this __repr__() method to class os._Environ (os.py line
380):

def __repr__(self): return repr(self.data)

--
components: Library (Lib)
messages: 95160
nosy: kjohnson
severity: normal
status: open
title: Unhelpful __repr__() in os.environ
type: behavior
versions: Python 3.1

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue7310
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: ANN: PyGUI 2.0.4

2009-04-21 Thread Kent Johnson
On Apr 21, 8:05 am, Greg Ewing greg.ew...@canterbury.ac.nz wrote:
 PyGUI 2.0.4 is available:

    http://www.cosc.canterbury.ac.nz/greg.ewing/python_gui/

 Fixes a few more bugs and hopefully improves things
 on Windows, although I can't be sure it will fix all
 the Windows problems people are having, because I
 haven't been able to reproduce some of them.

There is still a problem with unhandled WM_MOUSELEAVE events on WinXP/
Python 2.5. For example,
- run blobedit.py
- add a blob
- quit the app; the Save Changes dialog appears
- mouse over one of the buttons, then off the button to get this
error:

Traceback (most recent call last):
  File C:\Downloads\PyGUI-2.0.4\GUI\Win32\Components.py, line 208,
in _win_event_message
event = win_message_to_event(message, self)
  File C:\Downloads\PyGUI-2.0.4\GUI\Win32\Events.py, line 65, in
win_message_to_event
kind, button = win_message_map[msg]
KeyError: 675

Adding this line to win_message_map in GUI/Win32/Events.py seems to
fix it:
wc.WM_MOUSELEAVE: ('mouse_leave', None),

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


[issue4156] Docs for BaseHandler.protocol_xxx methods are unclear

2008-10-21 Thread Kent Johnson

New submission from Kent Johnson [EMAIL PROTECTED]:

In the docs for urllib2.BaseHandler previous to Python 2.6, the names of
the protocol_xxx() methods were spelled with 'protocol' in italics to
indicate that it is a placeholder; the actual method name is e.g.
http_opener().
http://www.python.org/doc/2.5.2/lib/base-handler-objects.html

In the Python 2.6 docs this typographic distinction has been lost
http://docs.python.org/library/urllib2.html#basehandler-objects
so it is not so clear that e.g. protocol_open() is not an actual method.

I suggest either restoring the italics or using a spelling such as
protocol_open() for the method names. If this is difficult then the
body of the descriptions should be rewritten to make it clear that the
'given protocol' is indicated by the name of the method.

--
assignee: georg.brandl
components: Documentation
messages: 75023
nosy: georg.brandl, kjohnson
severity: normal
status: open
title: Docs for BaseHandler.protocol_xxx methods are unclear
versions: Python 2.6

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue4156
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: utf-8 read/write file

2008-10-08 Thread Kent Johnson
On Oct 8, 5:55 pm, gigs [EMAIL PROTECTED] wrote:
 Benjamin wrote:
  On Oct 8, 12:49 pm, Bruno [EMAIL PROTECTED] wrote:
  Hi!

  I have big .txt file which i want to read, process and write to another 
  .txt file.
  I have done script for that, but im having problem with croatian characters
  (©,Ð,®,È,Æ).

 UnicodeDecodeError: 'utf8' codec can't decode byte 0x9e in position 0:
 unexpected code byte

Are you sure you have UTF-8 data? I guess your file is encoded in
CP1250 or CP1252; in both of these charsets 0x9e represents LATIN
SMALL LETTER Z WITH CARON.

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


[issue4017] IDLE 2.6 broken on OSX (Leopard)

2008-10-07 Thread Kent Johnson

Changes by Kent Johnson [EMAIL PROTECTED]:


--
nosy: +kjohnson

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue4017
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: tcl/tk version confusion with tkinter in Python 2.6, on OS X

2008-10-06 Thread Kent Johnson
On Oct 6, 5:58 pm, [EMAIL PROTECTED] wrote:
 On Oct 6, 4:48 pm, [EMAIL PROTECTED] wrote:

  I'm having trouble with tkinter on a new installation of Python (2.6),
  built with the framework option from source that was downloaded from
  python.org. I'm running OS 10.4 on a PowerPC G4.

  The problem first arose when I tried to run matplotlib - it couldn't
  find tcl/tk because it was searching for 8.5, and I had 8.4.

I also had this problem. The error message at this point is
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/
lib/python2.6/lib-dynload/_tkinter.so, 2): Library not loaded: /
Library/Frameworks/Tcl.framework/Versions/8.5/Tcl
  Referenced from: /Library/Frameworks/Python.framework/Versions/2.6/
lib/python2.6/lib-dynload/_tkinter.so
  Reason: image not found

Note that at this point I did have Tk 8.4 installed at
/System/Library/Frameworks/Tk.framework/Versions/8.4
and this works fine with Python 2.5, so Python 2.6 seems to be looking
specifically for Tk 8.5.

 I found
  and built tcl/tk 8.5, which led to a new error, reproduced below:
  RuntimeError: tk.h version (8.4) doesn't match libtk.a version (8.5)

I installed Tcl/Tk 8.5 from ActiveState and got the same error.

 Based on what I'm seeing in the error message and in the setup.py file
 in the source code, it appears that Python 2.6 is looking in
 /System/Library/Frameworks for a Tcl/Tk installation rather than in
 /Library/Frameworks, which is second on the list of places to look.
 Tcl/Tk 8.4 comes standard with OS X in 10.4 and 10.5, and it's
 installed
 in /System/Library/Frameworks. The problem is that Python 2.6 seems to
 be linked against Tcl/Tk 8.5--is this correct?--and when it finds Tcl/
 tk
 8.4, it returns an error.

I don't think that is quite right. In this second error, I think 8.4
is the compiled-in version, 8.5 is the version detected at runtime.
8.4 is the value of _tkinter.TK_VERSION, 8.4 is read from the Tk
object.

It looks to me like Python 2.6 is built against Tcl/tk 8.4 but at
runtime it looks for Tcl/tk 8.5.

 Should a bug report be filed against this? If the Mac build of Python
 2.6 consistently looks in /System/Library/Frameworks for Tcl/Tk, it
 won't run Tkinter applications. It makes the build pretty much useless
 for anyone needing it to run Tkinter apps, including Idle. I'd say
 it's
 a showstopper issue.

I think so.

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


[issue4012] Minor errors in multiprocessing docs

2008-10-02 Thread Kent Johnson

Kent Johnson [EMAIL PROTECTED] added the comment:

On Thu, Oct 2, 2008 at 1:07 PM, Jesse Noller [EMAIL PROTECTED] wrote:

 Jesse Noller [EMAIL PROTECTED] added the comment:

 Which examples are you talking about Georg?

I think you mean me, not Georg...I was referring to the example that
immediately follows
http://docs.python.org/library/multiprocessing.html#multiprocessing.pool.AsyncResult.successful

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue4012
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue4012] Minor errors in multiprocessing docs

2008-10-01 Thread Kent Johnson

New submission from Kent Johnson [EMAIL PROTECTED]:

In the docs for AsyncResult
http://docs.python.org/dev/library/multiprocessing.html#multiprocessing.pool.AsyncResult

get([timeout) is missing a ]

In the example following, it refers to pool.applyAsync() in two places;
the docs spell this apply_async(), one of them must be wrong :-)

--
assignee: georg.brandl
components: Documentation
messages: 74150
nosy: georg.brandl, kjohnson
severity: normal
status: open
title: Minor errors in multiprocessing docs
versions: Python 2.6

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue4012
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue3866] int() doesn't 'guess'

2008-09-14 Thread Kent Johnson

New submission from Kent Johnson [EMAIL PROTECTED]:

The library reference for int() says, If radix is zero, the proper
radix is guessed based on the contents of string; the interpretation is
the same as for integer literals. The use of the word 'guess' implies
that there is some heuristic used here, that somehow the function will
look at an arbitrary number and figure out the correct radix. This can
confuse newbies:
http://mail.python.org/pipermail/tutor/2008-September/064268.html

'determined' might be a better word. For bonus points link to the
Language Reference page on integer literals:
http://docs.python.org/ref/integers.html

--
assignee: georg.brandl
components: Documentation
messages: 73214
nosy: georg.brandl, kjohnson
severity: normal
status: open
title: int() doesn't 'guess'
versions: Python 2.6

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue3866
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue3671] What's New in 2.6 - corrections

2008-09-04 Thread Kent Johnson

Kent Johnson [EMAIL PROTECTED] added the comment:

For the itertools examples, perhaps you could remove the [ ] from the
result text so it doesn't look like a list. For example:
itertools.izip_longest([1,2,3], [1,2,3,4,5]) -
 (1, 1), (2, 2), (3, 3), (None, 4), (None, 5)

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue3671
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue3670] Reporting bugs - no such sections

2008-08-24 Thread Kent Johnson

New submission from Kent Johnson [EMAIL PROTECTED]:

The Reporting Bugs section of the Python 2.6b3 docs
http://docs.python.org/dev/bugs.html

says,
please use either the “Add a comment” or the “Suggest a change” features
of the relevant page in the most recent online documentation at
http://docs.python.org/.

I don't see either of these features in the 2.6 docs or the 2.5 docs at
the link.

--
assignee: georg.brandl
components: Documentation
messages: 71885
nosy: georg.brandl, kjohnson
severity: normal
status: open
title: Reporting bugs - no such sections
versions: Python 2.6

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue3670
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue3671] What's New in 2.6 - corrections

2008-08-24 Thread Kent Johnson

New submission from Kent Johnson [EMAIL PROTECTED]:

These are minor corrections to the What's New in Python 2.6[b3] doc.

Note: the PEP references are to the headers in What's New, not the
  actual PEPs

- PEP 371: The multiprocessing Package
- apply() or apply_async, adding a single request, and map() or
  map_async() All four function names should link to the Pool
  docs. Currently apply and map link to the docs for the builtins
  of the same name; the other two don't link.

- PEP 3101: Advanced String Formatting
- In the first example, uid = 'root' is not needed

- PEP 3112: Byte Literals
- In the second example, the value of b should not have a space in
  the middle, i.e. bytearray(b'\xe2\x87\xaf\xe3\x89\x84') instead
  of bytearray(b'\xe2\x87\xaf \xe3\x89\x84')

- Other Language Changes
- next(*iterator*, [*default*]) - the asterisks are not needed
- letting complex(repr(cmplx)) will now round-trip values - so
  complex(repr(cmplx)) will now round-trip values

- Interpreter Changes
- **encoding** or **encoding**:**errorhandler** - Are the **
  truly part of the syntax?

- New, Improved, and Deprecated Modules
- heapq.merge() returns a generator; the example should be
  list(heapq.merge([1, 3, 5, 9], [2, 8, 16]))
- All the new itertools functions return iterators, not lists;
  their examples should also be wrapped in list()
- itertools.product([1,2], repeat=3)) - extra )
- shutil - ignore_patterns() takes an arbitrary number of
  glob-style patterns and will ignore any files and directories
  that match this pattern. - ignore_patterns() takes an arbitrary
  number of glob-style patterns and returns a callable which will
  ignore any files and directories that match this pattern.
- The future_builtins module
- I think all the ** are extraneous.

--
assignee: georg.brandl
components: Documentation
messages: 71888
nosy: georg.brandl, kjohnson
severity: normal
status: open
title: What's New in 2.6 - corrections
versions: Python 2.6

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue3671
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue3670] Reporting bugs - no such sections

2008-08-24 Thread Kent Johnson

Kent Johnson [EMAIL PROTECTED] added the comment:

You should add something like the old About this document footer.
AFAICT there is no information in the new docs about how to report a
problem with the docs.

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue3670
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1163367] correct/clarify documentation for super

2008-03-21 Thread Kent Johnson

Kent Johnson [EMAIL PROTECTED] added the comment:

This issue seems to have foundered on finding an explanation for the
finer points of super(). Perhaps the glaring errors could at least be
corrected, or the fine points could be omitted or glossed over? For
example change the first sentence of the docs to Returns a proxy for
the type following 'type' in the method resolution order of
'object-or-type'. 

Perhaps link to these?
http://chandlerproject.org/bin/view/Projects/UsingSuper
http://fuhm.net/super-harmful/

--
nosy: +kjohnson

_
Tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1163367
_
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: Prioritization function needed (recursive help!)

2008-01-21 Thread Kent Johnson
rh0dium wrote:
 Hi all,
 
 I need some help on writing a recursive priority function
 
 Given a list = [ A, B, C, D]
 
 Where the following constraints are in place:
 
 A depends on [B, C]
 C depends on [B]
 
 Figure out real order that prioritizes these.

You need a topological sort.
http://en.wikipedia.org/wiki/Topological_sort

Two Python implementations:
http://pypi.python.org/pypi/topsort/0.9
http://www.bitformation.com/art/python_toposort.html

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


Blogmaker 0.5 - blog app for Django

2007-12-12 Thread Kent Johnson
PreFab Software has released Blogmaker (tm) 0.5, a full-featured, 
production-quality blogging application for Django. It supports 
trackbacks, ping and comments with moderation and honeypot spam 
prevention. Blogmaker is free, open-source software licensed under a BSD 
license.

Blogmaker powers the blogs at http://blog.blogcosm.com/ and 
http://prefabcosm.com/blog/.

Full announcement:
http://blog.blogcosm.com/2007/12/06/

Release page with the full feature list and (limited) documentation:
http://blogcosm.com/media/blog/release/README.html

Blogmaker is hosted at Google code:
http://code.google.com/p/blogmaker/

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

Support the Python Software Foundation:
http://www.python.org/psf/donations.html


Re: Is there any way to automatically create a transcript of an interactive Python session?

2007-02-18 Thread Kent Johnson
Jonathan Mark wrote:
 Some languages, such as Scheme, permit you to make a transcript of an
 interactive console session. Is there a way to do that in Python?
 
Maybe IPython's logging feature is what you want?
http://ipython.scipy.org/doc/manual/node6.html#SECTION00066000

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


Re: multiple inheritance of a dynamic list of classes?

2007-02-12 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi,
 
 I am currently using the Cmd module for a mixed cli+gui application. I
 am starting to refactor my code and it would be highly desirable if
 many commands could be built as simple plugins.
 
 My idea was:
 - Load a list of plugin names (i.e. from the config file, or from the
 plugins directory)
 - Import all plugins found dynamically:
 and this is easy, since I can do, for example:
 
 PLUGIN_NAMES=['foo', 'bar']
 PLUGIN_MODULES = map(__import__, PLUGIN_NAMES)
 PLUGINS = [item.Commands for item in PLUGIN_MODULES]
 
 Now, what I have to do is to define my command line class. This is
 usually done by subclassing cmd.Cmd:
 
 class MyCli(cmd.Cmd):
 
 
 Now I want to add the commands defined in foo.Commands and
 bar.Commands. foo.Commands contains the functions corresponding to the
 new commands this way:
 #foo.py
 class Commands
 
  def do_this(self,args):
   ...
  def do_that(self,args):
   ...
 
 I've seen I can do it by explicitely import them and using multiple
 inheritance:
 
 class MyCli(cmd.Cmd , foo.Commands, bar.Commands)
   
 
 so that do_this and do_that are now methods of a Cmd command line.
 
 Now:
 - how can I instead have MyCli inherit from a dynamic list of modules?
 - is there a better way than using multiple inheritance to plug-in
 dynamically commands in a Cmd command line?

Your plugins could define plain functions with names starting with do_. 
Then you can create an empty subclass of cmd.Cmd and just plug in the 
imported commands:

In [1]: import cmd

In [3]: def do_this(self, arg): print 'This', arg
...:

In [4]: def do_that(self, arg): print 'That', arg
...:


In [8]: class MyCmd(cmd.Cmd): pass
...:

In [9]: MyCmd.do_this = do_this

In [10]: MyCmd.do_that = do_that

In [11]: c=MyCmd()

In [12]: c.cmdloop()
(Cmd) help

Undocumented commands:
==
help  that  this

(Cmd) that
That

In your code you could use introspection to locate the plugin commands, 
something like
PLUGIN_MODULES = map(__import__, PLUGIN_NAMES)
for module in PLUGIN_MODULES:
   for name in dir(module):
 if name.startswith('do_'):
   setattr(MyCmd, name, getattr(module, name))

If the plugin module defines a list of commands then use that instead of 
dir(module).

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


Re: Array delete

2007-02-08 Thread Kent Johnson
azrael wrote:
 if you are new to python then this will be easier to understand. if
 you change this a liitle bit (depending on syntax) it should work in
 any language.
 just copy and paste to a .py file

Yikes. If you are new to Python please ignore this un-Pythonic 
abomination. Check(listItem, temp) is just a long-winded way to say 
'listItem in temp' and the whole thing could better be written as

def main():
 list, temp = [1, 1, 2, 4, 8, 8, 8, 8, 8, 8, 10], []
 for item in list:
 if item not in temp:
 temp.append(item)
 print temp  # print the new list where duplicates are removed

For longer lists the set() method will probably be faster as this one 
searches temp for each item.

Kent

 
 def main():
 list, temp = [1, 1, 2, 4, 8, 8, 8, 8, 8, 8, 10], []
 for i in range(len(list)):
 if Check(list[i], temp) == 1:
 temp.append(list[i])
 print temp  # print the new list where duplicates are removed
 
 def Check(listItem,temp):
 for i in range(len(temp)):
 if listItem == temp[i]:
 return 0
 return 1
 
 if __name__==__main__:
 main()
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: in place-ness of list.append

2007-02-05 Thread Kent Johnson
Bart Van Loon wrote:
 Hi all,
 
 I would like to find out of a good way to append an element to a list
 without chaing that list in place, like the builtin list.append() does.
 
 currently, I am using the following (for a list of integers, but it
 could be anything, really)
 
 #--
 def addnumber(alist, num):
  work around the inplace-ness of .append  
 mylist = alist[:]
 mylist.append(num)
 return mylist
 #--

Use + :

In [1]: a=[1,2]

In [2]: b=a+[3]

In [3]: a
Out[3]: [1, 2]

In [4]: b
Out[4]: [1, 2, 3]

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


Re: Unicode formatting for Strings

2007-02-05 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi,
 
 I´m trying desperately to tell the interpreter to put an 'á' in my
 string, so here is the code snippet:
 
 # -*- coding: utf-8 -*-
 filename = uAtaris Aquáticos #2.txt
 f = open(filename, 'w')
 
 Then I save it with Windows Notepad, in the UTF-8 format. So:
 
 1) I put the magic comment at the start of the file
 2) I write u to specify my unicode string
 3) I save it in the UTF-8 format
 
 And even so, I get an error!
 
   File Ataris Aqußticos #2.py, line 1
 SyntaxError: Non-ASCII character '\xff' in file Ataris Aqußticos #2.py
 on line 1

It looks like you are saving the file in Unicode format (not utf-8) and 
Python is choking on the Byte Order Mark that Notepad puts at the 
beginning of the document.

Try using an editor that will save utf-8 without a BOM, e.g. jedit or 
TextPad.

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


Re: Can I undecorate a function?

2007-01-29 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Matt In some instances I want to access just the function f, though,
 Matt and catch the values before they've been decorated.
 
 def f(x):
 return x * x
 
 @as_string
 def fs(x):
 return f(x)

or just
fs = as_string(f)

Kent

 
 Call the one you want.
 
 Skip
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning Python book, new edition?

2007-01-11 Thread Kent Johnson
Bjoern Schliessmann wrote:
 Demel, Jeff wrote:
 
 Does anyone know if there's a plan in the works for a new edition
 of Learning Python?  The current edition (2nd) is a few years old
 and looks like it only covers Python 2.3.
 
 IIRC, differences to 2.4 are in it, too.

No, it is one version back from that. From the Preface to the second 
edition: This edition has been thoroughly updated to reflect Python 
2.2...in addition, discussion of anticipated changes in the upcoming 2.3 
release have been incorporated.

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


Re: Some basic newbie questions...

2007-01-02 Thread Kent Johnson
jonathan.beckett wrote:
  I'm just finding it a bit weird that some of the built in functions are
 static, rather than methods of objects (such as len() being used to
 find the length of a list).

Another explanation here:
http://effbot.org/pyfaq/why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list.htm

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


Re: Slowdown in Jython

2006-12-29 Thread Kent Johnson
tac-tics wrote:
 I have an application written in jython which has to process a number
 of records. It runs fine until it gets to about 666 records (and maybe
 that's a sign), and then, it's performance and responsiveness goes down
 the toilet. It looks like it's running out of memory and is being
 forced to use extended memory, but I do not know enough about the
 language to figure out where this is happening. It will eventually
 finish the task, but the window stops responding, and it ends up taking
 several hours (as opposed to several minutes as it should). I really
 just wish I had a tool for polling the amount of memory Jython was
 using at any given moment.
 
 Does anyone have any strategy or advice for me?

You can find out how much memory Jython is using the same as you would 
for any other application, e.g. Windows Task Manager or the equivalent.

Jython is a Java application and you can increase the max heap available 
the same as for other java apps, using the command line switch -Xmx, 
e.g. -Xmx512m to set the max heap to 512 megabytes.

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


Re: One module per class, bad idea?

2006-12-25 Thread Kent Johnson
Carl Banks wrote:
 Kent Johnson wrote:
 Carl Banks wrote:
 Now, I think this is the best way to use modules, but you don't need to
 use modules to do get higher-level organization; you could use packages
 instead.  It's a pain if you're working on two different classes in the
 same system you have to keep switching files; but I guess some people
 prefer to switch files rather than to scroll for some reason.
 That would be me. I strongly prefer to switch files rather than scroll.
 I use an editor that makes it easy to switch files. For me it is much
 easier to switch between files than to scroll between two parts of a
 file, and I don't lose my place when I switch back. I like to be able to
 see things side by side.
 
 Man, I don't know you do it.
 
 Say I'm sitting there concentrating on programming something, and I see
 that I'll have to make a change in another file.  All of a sudden, I
 have to recall some filename out of thin air.  Totally breaks my train
 of thought, sometimes I space out trying to think of it because I have
 to cold-start an entirely different part of my brain.  It's less of a
 mental distraction to just scroll.

But then to go back to where you were, you have to scroll back and find 
your place. For me, just a click or keystroke to restore the last file 
with the cursor or selection exactly where I left it. And if I am going 
back and forth between the two, each switch is equally easy after the 
first (opening the file).

 (BTW, any decent editor will let you view different positions of the
 same file side-by-side.)

Right, at a cost of showing you half as much of the one you care about.

Anyway, I'm not trying to convince anyone to change, just pointing out 
that there are different styles of editing that make sense to those who 
use them, if not to outside observers ;-)

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


Re: One module per class, bad idea?

2006-12-22 Thread Kent Johnson
Carl Banks wrote:
 Now, I think this is the best way to use modules, but you don't need to
 use modules to do get higher-level organization; you could use packages
 instead.  It's a pain if you're working on two different classes in the
 same system you have to keep switching files; but I guess some people
 prefer to switch files rather than to scroll for some reason.

That would be me. I strongly prefer to switch files rather than scroll. 
I use an editor that makes it easy to switch files. For me it is much 
easier to switch between files than to scroll between two parts of a 
file, and I don't lose my place when I switch back. I like to be able to 
see things side by side.

So I do tend to put classes in separate modules. Not always - when two 
or more classes are closely related or a class has one or more helper 
classes they may share a module - but in general my major classes are 
each to a module.

It does make the imports look funny - I tend to give the module the same 
name as the class, Java style, so I have
from foo.bar.MyClass import MyClass
but that is a minor point IMO.

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


Re: reloading modules

2006-12-15 Thread Kent Johnson
Dustan wrote:
 [EMAIL PROTECTED] wrote:
 I'm using python.exe to execute my modules. I have a music.py module
 which contains my classes and a main.py module which uses these
 classes. In python.exe, I call import main to execute my program. The
 problem is that I have to close python and reopen it everytime i change
 music.py or main.py. What should I be doing.

 Thanks,

 Aine.
 
 import main
 ### Execution Occurs ###
 # You go off to edit your module
 reload(main)
 ### Execution Occurs ###

If you edit music.py you will have to
import music
reload(music)

to get the new music module, then
reload(main)

to run again.

You could just type
  python main.py

at the command line each time you want to run, or use an editor that 
lets you run the program from within the editor.

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


Re: Common Python Idioms

2006-12-15 Thread Kent Johnson
Fredrik Lundh wrote:
 Stephen Eilert wrote:
 
 I do think that, if it is faster, Python should translate
 x.has_key(y) to y in x.
 
 http://svn.python.org/view/sandbox/trunk/2to3/fix_has_key.py?view=markup

Seems to have moved to here:
http://svn.python.org/view/sandbox/trunk/2to3/fixes/fix_has_key.py?view=markup

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


Re: Functions, callable objects, and bound/unbound methods

2006-12-01 Thread Kent Johnson
Ron Garret wrote:
 The reason I want to do this is that I want to implement a trace 
 facility that traces only specific class methods.  I want to say:
 
 trace(c1.m1)
 
 and have c1.m1 be replaced with a wrapper that prints debugging info 
 before actually calling the old value of m1.  The reason I want that to 
 be an instance of a callable class instead of a function is that I need 
 a place to store the old value of the method so I can restore it, and I 
 don't want to start building a global data structure because that gets 
 horribly ugly, and a callable class is the Right Thing -- if there's a 
 way to actually make it work.

If the only reason for a callable class is to save a single value (the 
original function), you could instead store it as an attribute of the 
wrapper function.

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


Re: Functions, callable objects, and bound/unbound methods

2006-12-01 Thread Kent Johnson
Ron Garret wrote:
 The reason I want to do this is that I want to implement a trace 
 facility that traces only specific class methods.  I want to say:
 
 trace(c1.m1)
 
 and have c1.m1 be replaced with a wrapper that prints debugging info 
 before actually calling the old value of m1.  The reason I want that to 
 be an instance of a callable class instead of a function is that I need 
 a place to store the old value of the method so I can restore it, and I 
 don't want to start building a global data structure because that gets 
 horribly ugly, and a callable class is the Right Thing -- if there's a 
 way to actually make it work.

If the only reason for a callable class is to save a single value (the 
original function), you could instead store it as an attribute of the 
wrapper function.

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


Re: a quickie: range - x

2006-11-30 Thread Kent Johnson
Steven D'Aprano wrote:
 On Wed, 29 Nov 2006 19:42:16 -0800, rjtucke wrote:
 
 I want an iterable from 0 to N except for element m (=M).


 x = range(m-1) + range(m+1, N)

Should be range(m) + range(m+1, N)

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


Re: multi split function taking delimiter list

2006-11-14 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi, I'm looking for something like:
 
 multi_split( 'a:=b+c' , [':=','+'] )
 
 returning:
 ['a', ':=', 'b', '+', 'c']
 
 whats the python way to achieve this, preferably without regexp?

What do you have against regexp? re.split() does exactly what you want:

In [1]: import re

In [2]: re.split(r'(:=|\+)', 'a:=b+c')
Out[2]: ['a', ':=', 'b', '+', 'c']

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


Re: Book about database application development?

2006-10-17 Thread Kent Johnson
Wolfgang Keller wrote:
 I know about the existence of MVC. But what I'm actually missing is a nice 
 textbook that teaches how to actually implement it (and other design patterns 
 which are useful for database applications) in a real-world application in a 
 way that leads to non-ridiculous behaviour of the resulting application when 
 it gets actually used.

Maybe you would like Martin Fowler's Patterns of Enterprise Application 
Architecture
http://martinfowler.com/books.html#eaa

 Preferrably using a language for the examples that's readable for someone who 
 has learned programming ages ago with Pascal and is now using Python because 
 he _hates_ everything that remotely ressembles to any mutation of 
 C(++/#/Java).

Examples are mostly Java and C#, sorry!

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


Re: why should dict not be callable?

2006-10-17 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 A couple of times recently I've come across this problem:  I have a
 large list to sort and I need to the the key=function argument to
 sort appropriately.  But I actually have the key mapping in a big
 dictionary.  Now I have to make an intermediary function:
 
 def key_fn(key):
return key_dict[key]

Try key=key_dict.__getitem__

In [3]: d=dict(a=1,b=2)

In [4]: d.__getitem__('a')
Out[4]: 1

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


Re: command text parsing and hints displaying on user input.

2006-10-17 Thread Kent Johnson
Andy wrote:
 Hi guys,
 
 I'm writing a program with a feature of accepting user input as command
 text and parsing it to correct function calls...example:
 
 5 minutes later/5 min later/5 minute later/after 5 minutes...
 are being parsed as the same rule so the system will call a later
 function with minutes=5 as parameter.

Maybe one of these will help:
http://cheeseshop.python.org/pypi/parsedatetime/0.7.4
http://cheeseshop.python.org/pypi/when/1

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


Re: preemptive OOP?

2006-10-04 Thread Kent Johnson
Mark Elston wrote:
 * Kent Johnson wrote (on 9/30/2006 2:04 PM):
 John Salerno wrote:
 So my question in general is, is it a good idea to default to an OOP 
 design like my second example when you aren't even sure you will need 
 it? I know it won't hurt, and is probably smart to do sometimes, but 
 maybe it also just adds unnecessary code to the program.
 In general, no. I'm a strong believer in You Aren't Going to Need It 
 (YAGNI):
 http://c2.com/xp/YouArentGonnaNeedIt.html

 because it *does* hurt
 - you have to write the code in the first place
 - every time you see a reference to MyNotebook you have to remind 
 yourself that it's just a wx.Notebook
 - anyone else looking at the code has to figure out that MyNotebook is 
 just wx.Notebook, and then wonder if they are missing something subtle 
 because you must have had a reason to create a new class...

 and so on...Putting in extra complexity because you think you will need 
 it later leads to code bloat. It's usually a bad idea.

 Possible exceptions are
 - If you are really, really, really sure you are going to need it 
 really, really soon and it would be much, much easier to add it now then 
 after the next three features go in, then you might consider adding it 
 now. But are you really that good at predicting the future?
 - When you are working in a domain that you are very familiar with and 
 the last six times you did this job, you needed this code, and you have 
 no reason to think this time is any different.

 You struck a nerve here, I have seen so clearly at work the difference 
 between projects that practice YAGNI and those that are designed to meet 
 any possible contingency. It's the difference between running with 
 running shoes on or wet, muddy boots.

 Kent
 
 I have only caught the tail of this thread so far so I may have missed
 some important info.  However, Kent's response is, I think, a bit of
 an oversimplification.
 
 The answer to the original question, as quoted above, is ... it depends.
 On several things, actually.

Of course.

 However, when an application (or library) is designed to provide a more
 'general purpose' solution to one or more problems and is likely to have
 a lifetime beyond the 'short term' (whatever that may mean to you), then
 OO can start to pay off.  In these kinds of applications you see the
 need for future maintenance and a likely need to expand on the existing
 solution to add new features or cover new ground.  This is made easier
 when the mechanism for this expansion is planned for in advance.

I am a fan of OOP and use it all the time. I was just arguing against 
using it when it is not called for.
 
 Without this prior planning, any expansion (not to mention bug fixing)
 becomes more difficult and makes the resulting code more brittle.  While
 not all planning for the future requires OO, this is one mechanism that
 can be employed effectively *because* it is generally well understood
 and can be readily grasped *if* it is planned and documented well.

Unfortunately prior planning is an attempt to predict the future.
Correctly planning for future requirements is difficult. It is possible
to expand code without making it brittle.

Robert Martin has a great rule of thumb - first, do the simplest thing
that meets the current requirements. When the requirements change,
change the code so it will accommodate future changes of the same type.
Rather than try to anticipate all future changes, make the code easy to
change.

 
 There is certainly a *lot* of 'Gratuitous OOP' (GOOP?) out there.  This
 isn't a good thing.  However, that doesn't mean that the use of OOP in
 any given project is bad.  It may be inappropriate.

In my experience a lot of GOOP results exactly from trying to anticipate 
future requirements, thus introducing unneeded interfaces, factories, etc.

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


Re: preemptive OOP?

2006-09-30 Thread Kent Johnson
John Salerno wrote:
 So my question in general is, is it a good idea to default to an OOP 
 design like my second example when you aren't even sure you will need 
 it? I know it won't hurt, and is probably smart to do sometimes, but 
 maybe it also just adds unnecessary code to the program.

In general, no. I'm a strong believer in You Aren't Going to Need It 
(YAGNI):
http://c2.com/xp/YouArentGonnaNeedIt.html

because it *does* hurt
- you have to write the code in the first place
- every time you see a reference to MyNotebook you have to remind 
yourself that it's just a wx.Notebook
- anyone else looking at the code has to figure out that MyNotebook is 
just wx.Notebook, and then wonder if they are missing something subtle 
because you must have had a reason to create a new class...

and so on...Putting in extra complexity because you think you will need 
it later leads to code bloat. It's usually a bad idea.

Possible exceptions are
- If you are really, really, really sure you are going to need it 
really, really soon and it would be much, much easier to add it now then 
after the next three features go in, then you might consider adding it 
now. But are you really that good at predicting the future?
- When you are working in a domain that you are very familiar with and 
the last six times you did this job, you needed this code, and you have 
no reason to think this time is any different.

You struck a nerve here, I have seen so clearly at work the difference 
between projects that practice YAGNI and those that are designed to meet 
any possible contingency. It's the difference between running with 
running shoes on or wet, muddy boots.

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


Re: windev vs python SOS

2006-09-29 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi Stéphane,
 
 stéphane bard wrote:
 hello, my boss ask me to prefer windev to python.
 I have to argue
 
 First, no matter how good is Python, you should not desagree with your
 boss.
 Second, Windew is quite good and fun, you will love it.

Yes, the boss is always right, shut up and drink your Kool-Aid!

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


Re: Looking for the Perfect Editor

2006-09-11 Thread Kent Johnson
Dick Moores wrote:
 At 06:30 PM 9/10/2006, Kent Johnson wrote:
 Dick Moores wrote:
 Also, why do you use TextPad instead of IDLE?
 You're kidding, right?
 
 No. Tell me, please. Macros? Comparing files? What else?

OK...please, no one interpret this as IDLE bashing or attempt to show me 
a better way. I'm happy with TextPad and just writing this because I was 
asked...

In my opinion:

- Most of my Python work is actually in Jython. I can run a Jython 
program with a tool in TP. Actually I have separate tools for each 
active project that set the correct working directory and invoke a batch 
file with the right jars. Can't do that in IDLE.

- TextPad is a good general-purpose editor, not just for Python. All the 
following reasons really come under this heading. I have an editor I 
like, it works great for Python, there is really no reason to use IDLE.

- Fast and powerful multi-file search (easily specify the directory and 
file types to search)

- Syntax highlighting for XML, HTML, Velocity templates, Ruby, Java, 
JavaScript, R, SQL, CSS...all file types I use more or less frequently.

- Word wrap

- Show invisibles

- Customizable with macros and external tools

- Open as binary

etc...

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


Re: efficient text file search.

2006-09-11 Thread Kent Johnson
noro wrote:
 Is there a more efficient method to find a string in a text file then:
 
 f=file('somefile')
 for line in f:
 if 'string' in line:
  print 'FOUND'

Probably better to read the whole file at once if it isn't too big:
f = file('somefile')
data = f.read()
if 'string' in data:
print 'FOUND'
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Looking for the Perfect Editor

2006-09-10 Thread Kent Johnson
Dick Moores wrote:
 At 01:10 PM 9/8/2006, Doug Stell wrote:
 Try www.TextPad.com. I've used it for years and love it. It
 understands many programming language constructs and can be taught to
 understand python so that things show up in color.
 
 Any tips on how to teach TextPad to understand python?

Download and install the Python syntax highlighting definition from the 
TextPad website.

I make a tool to run the front window in Python. Here are the values 
from the preferences window for the tool:

Command: C:\Python24\python.exe
Parameters: -u $File
Init fldr: $FileDir

regex to match output:
^.*([^]+), *line ([0-9]+)

with File: 1, Line: 2

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


Re: Looking for the Perfect Editor

2006-09-10 Thread Kent Johnson
Dick Moores wrote:

 I downloaded Python (7) from 
 http://www.textpad.com/add-ons/synn2t.html and put the file 
 PythonV2.4.syn in C:\Program Files\TextPad 4\system .
 
 However, no syntax highlighting is showing up. so I must have done 
 something wrong. Do I have to do something other than put 
 PythonV2.4.syn in C:\Program Files\TextPad 4\system ?

One more step - make a new Document Class for Python (in the prefs). 
Associate it with *.py, turn on syntax highlighting and select the 
syntax file you downloaded.

 
 Also, why do you use TextPad instead of IDLE?

You're kidding, right?

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


Re: Finding the name of a class

2006-08-02 Thread Kent Johnson
Kirk Strauser wrote:
 Larry Bates wrote:
 
 print print b.__class__.__name__  gives what you want
 
 That doesn't seem to do it, though.  Here's the result of importing a module
 from my company's internally-developed library:
 
 from Daycos.TableCopier.copyfro import StateProcessor
 print StateProcessor.__class__.__name__
 type
 
 I'm looking for something that would print 'StateProcessor' but am not
 having much luck.

It looks like StateProcessor is a class; StateProcessor.__class__ is the 
class of a class, i.e. type. Try
StateProcessor.__name__

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


Python proficiency test

2006-07-21 Thread Kent Johnson
I recently helped create an on-line Python proficiency test. The 
publisher of the test is looking for beta testers to try the test and 
give feedback. If you are interested, here is an announcement from the 
publisher:

  Brainbench is currently beta testing a new series of test questions
  for our Python 2.4 test.
 
  We are looking for knowledgeable Python 2.4 users.
 
  To take the test, simply go to
  http://www.brainbench.com/xml/bb/common/testcenter/betatests.xml
  and the rest should be self-explanatory.
 
  Any feedback you can provide us on the quality of the questions and
  the test itself would be greatly appreciated.
  You will be given the opportunity to provide anonymous feedback on
  each question as it is administered as well as at the end of the test.
 
  We hope that you enjoy the test and look forward to your feedback!
 
  Feel free to pass this along to your friends.
 
  Thanks in advance for your help and good luck!

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


Re: Standard Yes / No Windows Dialog box creation

2006-06-21 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 I found a way to create Open File or Open Folder windows dialog
 boxes, but not to create an easier Yes / No dialog box...
 Maybe someone has a solution for this?

Maybe you would like EasyGui
http://www.ferg.org/easygui/

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


Re: nested functions

2006-06-15 Thread Kent Johnson
Fredrik Lundh wrote:
 George Sakkis wrote:
 
 It shouldn't come as a surprise if it turns out to be slower, since the
 nested function is redefined every time the outer is called.
 
 except that it isn't, really: all that happens is that a new function object 
 is created from
 prebuilt parts, and assigned to a local variable.  it's not slower than, say, 
 a method call.

Interesting. So func_code for a nested function is created when the 
module is compiled, and stuck in a new function object when the 
definition is executed. Like George, I always assumed that the body of 
the nested function was compiled when the outer function was executed, 
but that doesn't really make any sense - the *code* for the inner 
function is static, just the environment changes (globals(), closure).

dis.dis reveals all:

In [10]: def g():
: def h():
: print 'foo'
: return h
:

In [11]: dis.dis(g)
   2   0 LOAD_CONST   1 (code object h at 00E8D960, 
file ipython console, line 2)
   3 MAKE_FUNCTION0
   6 STORE_FAST   0 (h)

   4   9 LOAD_FAST0 (h)
  12 RETURN_VALUE

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


Re: Is there a better way of accessing functions in a module?

2006-06-13 Thread Kent Johnson
Ant wrote:
 Ant wrote:
 ...
 But this feels like a hack... Is there a cleaner way for accessing the
 functions of the current module similar to the __dict__ attribute of
 classes? i.e. a way to access the local symbol table?
 
 Sorry - posted too soon. Found the globals() built-in...

You can also
import __main__
tests = [x for x in dir(__main__) if x.endswith(test)]

for test in tests:
getattr(__main__, test)()

but I second the suggestion of looking in to unittest or one of the 
other test frameworks.

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


Re: secure xmlrpc server?

2006-06-09 Thread Kent Johnson
Laszlo Nagy wrote:
 But I do not know how to create an XML RPC server in Python that uses 
 HTTPS for XML transports.

This recent recipe seems to do exactly what you want:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496786

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


Re: secure xmlrpc server?

2006-06-09 Thread Kent Johnson
Kent Johnson wrote:
 Laszlo Nagy wrote:
 But I do not know how to create an XML RPC server in Python that uses 
 HTTPS for XML transports.
 
 This recent recipe seems to do exactly what you want:
 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496786

It was gently pointed out to me that the OP is the author of the 
recipe...well I guess he figured it out!

That will teach me to get two days behind on reading c.l.py...
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: regexp questoin

2006-06-09 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 hi
 
 i created a script to ask user for an input that can be a pattern
 right now, i use re to compile that pattern
 pat = re.compile(r%s %(userinput) )  #userinput is passed from
 command line argument
 if the user key in a pattern , eg [-] ,  and my script will search some
 lines that contains [-]
 
 pat.findall(lines)
 
 but the script produce some error: sre_constants.error: unexpected end
 of regular expression
 
 how can i successful catch  patterns such as [-] in my regexp
 compilation where input is unknown...?

Maybe you want
pat = re.compile(re.escape(userinput))

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


Re: Storing nothing in a dictionary and passing it to a function

2006-06-05 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi,
 
 I'm writing a hand-written recursive decent parser for SPICE syntax
 parsing.  In one case I have one function that handles a bunch of
 similar cases (you pass the name and the number of tokens you're
 looking for).  In another case I have a function that handles a
 different set of tokens and so it can't use the same arguments as the
 first one, and in fact takes no arguments.  However, these functions
 are semantically similar and are called from the same place one right
 after the other.
 
 I'd like to have a dictionary (actually a nested dictionary) to call
 these functions so I can avoid if-then-elsing everything.  Eath
 dictionary item has three things in it: the function to be called, a
 string to pass to the function (which is also the key to the dict), and
 a tuple to pass to the function.  In the case of the function with no
 arguments, obviously I'd like not to pass anything.
 
 I'm trying to do this 'functionally' (i guess), by avoiding
 if-then-elses and just calling out the  functions by accessing them and
 their arguments from the dictionary.
 
 something like this:
   alldict = \
   {'pulse': {'func': self.arbtrandef, 'args':(2,5)},\
'sin'  : {'func': self.arbtrandef, 'args':(2,3)},\
'exp'  : {'func': self.arbtrandef, 'args':(2,4)},\
'pwl'  : {'func': self.pwldef, 'args': (None,)},\  
 --- how
 do I store no arguments?
'sffm' : {'func': self.arbtrandef, 'args':(5,0)}}
 
   for it in alldict.items():
   name = it[0]
   args = (name,) + it[1]['args']
   it[1]['func'](*args)
 
 So  basically this doesn't work.  
 
 Any thoughts?

You could omit the 'args' entry completely and test for this in the 
dispatch:
'pwl'  : {'func': self.pwldef},\

for name, params in alldict.items():
try
args = (name,) + params['args']
except KeyError:
args = ()
params['func'](*args)

Or include the 'name' parameter in the arg list and use an empty tuple 
for the arg to pwldef:

'exp'  : {'func': self.arbtrandef, 'args':('exp', 2,4)},\
'pwl'  : {'func': self.pwldef, 'args': ()},\

for name, params in alldict.items():
params['func'](*args)

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


Re: ANN: PQRC - Python Quick Reference Card - v 0.55

2006-06-04 Thread Kent Johnson
Laurent Pointal wrote:
 And I'll maintain a fixed URL at
 
 http://laurent.pointal.org/python/pqrc/

Broken at the moment.

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


Re: [ANN] lxml 1.0 released

2006-06-02 Thread Kent Johnson
Stefan Behnel wrote:
 Hallo everyone,
 
 I have the honour to announce the availability of lxml 1.0.
 
 http://codespeak.net/lxml/
 
 It's downloadable from cheeseshop:
 http://cheeseshop.python.org/pypi/lxml

Are there any plans to offer a Windows installer?

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


Re: os.walk trouble

2006-06-01 Thread Kent Johnson
The Prophet wrote:
 As my first Python script, I am trying to make a program that recurses
 a directory searching for files whose names match a pattern. 

If your patterns are simple (supported by fnmatch), the path module 
makes this very easy:
import path
for f in path.path(dirname).walkfiles('*.foo'):
   # process a .foo file here

http://www.jorendorff.com/articles/python/path/index.html

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


Re: An oddity in list comparison and element assignment

2006-06-01 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi Alex,
 With all due respect to your well-deserved standing in the Python
 community, I'm not convinced that equality shouldn't imply invariance
 under identical operations.
 
 Perhaps the most fundamental notion is mathematics is that the left and
 right sides of an equation remain identical after any operation applied
 to both sides.  Our experience of the physical world is similar.  If I
 make identical modifications to the engines of two identical
 automobiles, I expect the difference in performance to be identical.
 If my expectation is met, I would assert that either the two vehicles
 were not identical to begin with or that my modifications were not
 performed identically.

But programming is not mathematics and assignment is not an equation. 
How about this:

In [1]: a=3.0

In [2]: b=3

In [3]: a==b
Out[3]: True

In [4]: a/2 == b/2
Out[4]: False

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


Re: Python for Visual Basic or C# programmers

2006-06-01 Thread Kent Johnson
A.M wrote:
 I am trying to find the equivalent functions  such as vb's str or asc in 
 Python. Is there any resource that help me to find these kinds of functions 
 in Python faster?

The Library Reference has a section on built-in functions:
http://docs.python.org/lib/built-in-funcs.html

Also take a look at the section on string methods:
http://docs.python.org/lib/string-methods.html

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


Re: genexp performance problem?

2006-05-30 Thread Kent Johnson
Delaney, Timothy (Tim) wrote:
 python -mtimeit sum(int(L) for L in xrange(3000))
 100 loops, best of 3: 6.76 msec per loop
 
 python -mtimeit -s g = (int(L) for L in xrange(3000)) sum(g)
 100 loops, best of 3: 1.09 usec per loop
 
 The generator comprehension needs to create a new generator each time
 around.

Reusing the generator doesn't give a correct answer; after the first 
sum() the generator is exhausted:

In [1]: g=(int(L) for L in xrange(10))

In [2]: sum(g)
Out[2]: 45

In [3]: sum(g)
Out[3]: 0

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


Re: Speed up this code?

2006-05-26 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 I'm creating a program to calculate all primes numbers in a range of 0
 to n, where n is whatever the user wants it to be. I've worked out the
 algorithm and it works perfectly and is pretty fast, but the one thing
 seriously slowing down the program is the following code:
 
 def rmlist(original, deletions):
return [i for i in original if i not in deletions]
 
 original will be a list of odd numbers and deletions will be numbers
 that are not prime, thus this code will return all items in original
 that are not in deletions. For n  100,000 or so, the program takes a
 very long time to run, whereas it's fine for numbers up to 10,000.
 
 Does anybody know a faster way to do this? (finding the difference all
 items in list a that are not in list b)?

- Make deletions a set, testing for membership in a set is much faster 
than searching a large list.

- Find a better algorithm ;)

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


Re: Parsing python dictionary in Java using JPython

2006-05-26 Thread Kent Johnson
sandip desale wrote:
 Hi,
 

 We have some tools which are developed in Python and using python
dictionaries. Now for some new requirments we are using Java and want to
use the existing dictionaries as both the tools are executed on the same
platform. So we are trying to use the existing dictionaries only using
JPython libraries.

How do you access the dictionary files from Python? The same thing may 
work in Jython. For example importing the file, if it is Python syntax, 
should work in Jython; also I think format 0 (text) and format 1 pickles 
are compatible with Jython.

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


Re: Finding Upper-case characters in regexps, unicode friendly.

2006-05-25 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 I'm trying to make a unicode friendly regexp to grab sentences
 reasonably reliably for as many unicode languages as possible, focusing
 on european languages first, hence it'd be useful to be able to refer
 to any uppercase unicode character instead of just the typical [A-Z],
 which doesn't include, for example É.   Is there a way to do this, or
 do I have to stick with using the isupper method of the string class?
 

See http://tinyurl.com/7jqgt

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


Re: Best way to handle exceptions with try/finally

2006-05-25 Thread Kent Johnson
Zameer wrote:
 I wonder where the else goes in try..except..finally...
 
try / except / else / finally

See the PEP:
http://www.python.org/dev/peps/pep-0341/

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


Re: NEWB: how to convert a string to dict (dictionary)

2006-05-24 Thread Kent Johnson
manstey wrote:
 Hi,
 
 How do I convert a string like:
 a={'syllable': u'cv-i b.v^ y^-f', 'ketiv-qere': 'n', 'wordWTS': u'8'}
 
 into a dictionary:
 b={'syllable': u'cv-i b.v^ y^-f', 'ketiv-qere': 'n', 'wordWTS': u'8'}

Try this recipe:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/364469
-- 
http://mail.python.org/mailman/listinfo/python-list


GUI viewer for profiler output?

2006-05-23 Thread Kent Johnson
Can anyone point me to a GUI program that allows viewing and browsing 
the output of the profiler? I know I have used one in the past but I 
can't seem to find it...

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


Re: can't figure out error: module has no attribute...

2006-05-23 Thread Kent Johnson
Chris_147 wrote:
 but it seems to depend on from where I start the Python shell.
 
 so I've got a module selfservicelabels.py with some variables defined,
 like this:
 BtnSave = link=label.save
 DeliveryAutomaat= //[EMAIL PROTECTED]'deliveryMethod' and @value='AU']
 This module is in the Lib directory.
 
 Now when I do
 import selfservicelabels
 selfservicelabels.BtnSave
- link=nmbs.label.save
 selfservicelabels.DeliveryAutomaat
- AttributeError: 'module' object has no attribute
 'DeliveryAutomaat'
 
 to make it more strange: PyCrust and Idle recognise DeliveryAutomaat
 perfectly.
 Everything above is done with Python 2.4.3 on Windows XP SP2
 
 So after some testing it seems to depend on from which partition I
 start Python.

Probably you have multiple copies of selfservicelabels.py or an old 
selfservicelabels.pyc that is being imported. Try
import selfservicelabels
print selfservicelabels.__file__

to see where the import is coming from.

Kent

 So open commandline and navigate to a dir on C: everything works
 perfectly.
 Close python shell en navigate to D: some variables in
 selfservicelabels.py are not known.
 What is going on here?  Is this a known error?
 
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: grabbing portions of a file to output files

2006-05-22 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 hi.
 I have a file with this kind of structure:
 
 Hxxx
 .
 .
 .
 x
 Hxxx
 ...
 
 ...
 x
 H
 .
 
 and so onlines starting with 'H' are headers. I wish to get the
 parts of the file
 where line start with 'H' all the way till before the next 'H' and save
 to files of different names...how is the best way to do it ?
 thanks

Something like this?

out = None
for line in open(...):
   if line.startswith('H'):
 if out:
   out.close()
 out = open(..., 'w')
   if out:
 out.write(line)
out.close()

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


Re: who can give me the detailed introduction of re modle?

2006-05-19 Thread Kent Johnson
softwindow wrote:
 the re module is too large and difficult to study
 
 i need a detaild introduction.
 
http://www.amk.ca/python/howto/regex/

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


Re: OOP and Tkinter

2006-05-15 Thread Kent Johnson
Ronny Mandal wrote:
 file front_ui.py:
 
 class Front(object):
 _images = [] # Holds image refs to prevent GC
 def __init__(self, root):
 # Widget Initialization
 self._listbox_1 = Tkinter.Listbox(root,
 height = 0,
 width = 0,
   ...
   )
 

 other file:
 
 from Front_ui import Front
 
 class CustomFront(Front):
  Front._listbox_1.insert( 0, 'foo' ) 
 
 ...
 ...
   File H:\My Documents\Komodo\Front.py, line 63, in CustomFront
 Front._listbox_1.insert( 0, foo' )
 AttributeError: type object 'Front' has no attribute '_listbox_1'
 
 
 i.e., it cannot find the listbox! Strange, both files is in the same
 folder. What is wrong here?

_listbox_1 is an instance attribute, not a class attribute. You need to 
refer to self._listbox_1 from a CustomFront method, or change _listbox_1 
to a class attribute if that is what you really want.

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


Re: retain values between fun calls

2006-05-14 Thread Kent Johnson
George Sakkis wrote:
 Gary Wessle wrote:
 Hi

 the second argument in the functions below suppose to retain its value
 between function calls, the first does, the second does not and I
 would like to know why it doesn't? and how to make it so it does?

 thanks

 # it does
 def f(a, L=[]):
 L.append(a)
 return L
 print f('a')
 print f('b')


 # it does not
 def f(a, b=1):
 b = a + b
 return b
 print f(1)
 print f(2)
 
 It's a FAQ:
 http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects.
 
 Whenever you want to control one or more objects beyond the lifetime of
 a single function call, your first thought should be to use a class to
 couple behaviour with state:
 
 class SomeFancyClassName(object):
 def __init__(self, b=1):
 self.b = b
 def f(self, a):
 self.b += a
 return self.b
 
 x = SomeFancyClassName()
 print x.f(1)
 print x.f(2)

If you make the class callable you can match the original syntax:
In [40]: class F(object):
: b=1
: def __call__(self, a):
: F.b += a
: return F.b
:
:

In [41]: f=F()

In [42]: f(1)
Out[42]: 2

In [43]: f(2)
Out[43]: 4

Alternately you can use an attribute of the function to save the state:

In [35]: def f(a):
: f.b += a
: return f.b
:

In [36]: f.b=1

In [37]: f(1)
Out[37]: 2

In [38]: f(2)
Out[38]: 4

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


Re: any plans to make pprint() a builtin?

2006-05-14 Thread Kent Johnson
Duncan Booth wrote:
 Personally I'd just like to see 'python' a builtin shorthand for importing 
 a name you aren't going to use much
  e.g.
 
 python.pprint.pprint(x)

Would you settle for
import py
py.std.pprint.pprint(x) ?

http://codespeak.net/py/current/doc/misc.html#the-py-std-hook

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


Re: Memory leak in Python

2006-05-11 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Sure, are there any available simulators...since i am modifying some
 stuff i thought of creating one of my own. But if you know some
 exisiting simlators , those can be of great help to me.

http://simpy.sourceforge.net/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: unittest: How to fail if environment does not allow execution?

2006-05-11 Thread Kent Johnson
Kai Grossjohann wrote:
 I wrote a test case that depends on a certain file existing in the
 environment.  So, I guess I should test that the file exists in the
 setUp method.  But what if it doesn't exist?  How do I fail in that case?
 
 I would like to emit an error message explaining what is wrong.

I would just use the file normally in the test. If it's not there you 
will get an IOError with a traceback and a helpful error message.

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


Re: glob() that traverses a folder tree

2006-05-11 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 # i'm guessing os.walk() is the best way to traverse folder trees.
 
 import os, glob
 
 for dir, subdir, files in os.walk('.\InteropSolution'):
for file in files:
   if glob.fnmatch.fnmatch(file,*.dll) or
 glob.fnmatch.fnmatch(file,*.exe):
  print dir+file

Or use Jason Orendorff's path module. For a single glob it is very easy:

import path
for f in path.path('.\InteropSolution').walkfiles('*.dll'):
   print f

For multiple globs you have to work a little harder:
for f in path.path('.\InteropSolution').walkfiles():
   if f.fnmatch('*.dll') or f.fnmatch('*.exe'):
 print f

or maybe
for f in path.path('.\InteropSolution').walkfiles():
   if f.ext in ['.dll', '.exe']:
 print f

http://www.jorendorff.com/articles/python/path/index.html

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


Re: regular expressions, substituting and adding in one step?

2006-05-10 Thread Kent Johnson
John Salerno wrote:
 Call 
 me crazy, but I'm interested in regular expressions right now. :)

Not crazy at all. REs are a powerful and useful tool that every 
programmer should know how to use. They're just not the right tool for 
every job!

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


Re: data entry tool

2006-05-10 Thread Kent Johnson
Peter wrote:
 This post seeks advice on whether python would be appropriate for a task, or
 whether you can suggest another approach.
 
 The project is to transcribe historical records such as schools admissions,
 ship passenger lists, birth/death/marriages, etc for genealogy studies. 
 What we need is a simple software tool that will give the user a form set
 out like the page being transcribed, do some simple validation and put the
 data in a file (can be fixed field length plain text).  Data files from
 volunteers will be compiled into a master database.
 
 This software tool needs to work on a variety of different computers; Win95,
 Win98, WinXP, Mac, Linux.

Take a look at Tkinter, it is pretty easy to get started with and good 
for making simple GUIs. Look at the csv module for writing the data to 
files.

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


Re: reusing parts of a string in RE matches?

2006-05-10 Thread Kent Johnson
John Salerno wrote:
 I probably should find an RE group to post to, but my news server at 
 work doesn't seem to have one, so I apologize. But this is in Python 
 anyway :)
 
 So my question is, how can find all occurrences of a pattern in a 
 string, including overlapping matches? 

You can specify a start location to re.search(), and get the location of 
a match from a match object. This allows you to loop, searching the 
string following the last match:

import re
string = 'abababababababab'
pattern = re.compile(r'ab(?=a)')

ans = []
start = 0
while True:
 m = pattern.search(string, start)
 if not m: break
 ans.append( (m.start(), m.end()) )
 start = m.start() + 1

print ans # = [(0, 2), (2, 4), (4, 6), (6, 8), (8, 10), (10, 12), (12, 14)]

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


Re: Global utility module/package

2006-05-09 Thread Kent Johnson
Christoph Haas wrote:
 Evening,
 
 I'm currently working on a larger Python project that consists of multiple
 programs and packages. As I need a few utility functions time and again I
 moved them all into a Utility package and created a class there.
...
 As I know that importing packages from multiple modules always keeps it a
 singleton I thought of something like this:
 
 Util.py:
 
 debugFlag = False
 vibranceLevel = 'good'
 
 def function1():
global debugFlag
print debugFlag
 
 main.py:
 
 import Util
 Util.debugFlag = True
 Util.function1(whatever)
 
 def doThis():
Util.function1(42)
 
 Here I don't use classes any longer. Good. But to access the package
 variables I probably need to use global again which just moved the
 ugliness to another position.

This is fine. You don't need 'global' statements to read global 
variables, function1() can be simply
def function1():
 print debugFlag

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


Re: regular expressions, substituting and adding in one step?

2006-05-09 Thread Kent Johnson
John Salerno wrote:
 Ok, this might look familiar. I'd like to use regular expressions to 
 change this line:
 
 self.source += 'p' + paragraph + '/p\n\n'
 
 to read:
 
 self.source += 'p%s/p\n\n' % paragraph
 
 Now, matching the middle part and replacing it with '%s' is easy, but 
 how would I add the extra string to the end of the line? Is it done all 
 at once, or must I make a new regex to match?
 
 Also, I figure I'd use a group to match the word 'paragraph', and use 
 that group to insert the word at the end, but how will I 'retain' the 
 state of \1 if I use more than one regex to do this?

Do it all in one match / substitution using \1 to insert the value of 
the paragraph group at the new location:

In [19]: test = self.source += 'p' + paragraph + '/p\n\n'

In [20]: re.sub(r'p' \+ (.*?) \+ '/p\n\n', r'p%s/p\n\n' % 
\1, test)
Out[20]: self.source += 'p%s/p\n\n' % paragraph

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


Re: Enumerating Regular Expressions

2006-05-09 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Hi all,
 
 Does anybody know of a module that allows you to enumerate all the
 strings a particular regular expression describes?

Make a generator that yields *all* strings in your chosen alphabet (see 
the monthly threads about permutations and combinations for hints). 
Filter with the regex. Halting is left as an exercise for the reader. 
(Halting when the length reaches a predetermined limit would be one way 
to do it.)

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


Re: Designing Plug-in Systems in Python

2006-05-07 Thread Kent Johnson
mystilleef wrote:
 Hello,
 
 I need to design a plug-in system for a project. The goal is
 to allow third party developers interact with an application
 via plug-ins in a clean and robust manner. At this point I
 am overwhelmed by my inexperience with designing plug-in
 systems.

One of these might be helpful:
http://developer.berlios.de/projects/plugboard/
http://termie.pbwiki.com/SprinklesPy

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


Re: the print statement

2006-05-07 Thread Kent Johnson
[EMAIL PROTECTED] wrote:
 Thank you.  Yes, that post answers most of the questions.  I now have a
 bit of an understanding of the \xhh pattern.  It's still unclear to me,
 however, how one can go from the \x92 pattern and arrive at the
 apostrophe character.  Is \x92 theh apostrophe character in another
 character set?  If so, which character set?

\x92 is a right single quote in Windows cp1252.
http://www.microsoft.com/globaldev/reference/sbcs/1252.mspx

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


Re: Replace

2006-05-06 Thread Kent Johnson
Eric wrote:
 I have a string...
 
 str = tyrtrbd =ffgtyuf == =tyryr =u=p ff
 
 I want to replace the characters after each '=',

If you are replacing any char after = with # then re.sub() makes it easy:
In [1]: import re

In [2]: s = tyrtrbd =ffgtyuf == =tyryr =u=p ff

In [3]: re.sub('=.', '=#', s)
Out[3]: 'tyrtrbd =#fgtyuf =# =#yryr =#=# ff'

If the replacement char is not fixed then make the second argument to 
re.sub() be a callable that computes the replacement.

PS str is not a good name for a string, it shadows the built-in str.

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


Re: string.find first before location

2006-05-03 Thread Kent Johnson
Gary Wessle wrote:
 ps. is there a online doc or web page where one enters a method and it
 returns the related docs?

The index to the library reference is one place:
http://docs.python.org/lib/genindex.html

and of course help() in the interactive interpreter...

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


Re: Regular Expression help

2006-04-28 Thread Kent Johnson
Edward Elliott wrote:
 [EMAIL PROTECTED] wrote:
 If you are parsing HTML, it may make more sense to use a package
 designed especially for that purpose, like Beautiful Soup.
 
 I don't know Beautiful Soup, but one advantage regexes have over some
 parsers is handling malformed html. 

Beautiful Soup is intended to handle malformed HTML and seems to do 
pretty well.

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


Re: best way to determine sequence ordering?

2006-04-28 Thread Kent Johnson
I V wrote:
 Incidentally, does python have a built-in to do a binary search on a
 sorted list? Obviously it's not too tricky to write one, but it would be
 nice if there was one implemented in C.

See the bisect module.

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


Re: list of functions question

2006-04-27 Thread Kent Johnson
val bykoski wrote:
 Hi The List:
I have a modeling app where i'm detecting events (in temporal 
 dynamics) applying a set of (boolean) functions - kind of:
 
 event_list = f1 f2 etc.split()  # each fi detects a specific event
 i have defs for functions fi, or simple boolean expressions for each, so 
 that evList is a list of defs or boolean expressions
 for ev in evList:
 if ev:# this supposedly is a call ev(t)
# doing smth with the event

# Make a list of the actual functions, not their names
# For the events that are expressions, encapsulate them in functions
event_list = [f1, f2, etc]

# Call each one:
for ev in event_list:
   if ev(t):
 # do something

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


Re: can this be done without eval/exec?

2006-04-27 Thread Kent Johnson
Schüle Daniel wrote:
 and now the obvious one (as I thought at first)
 
   lst=[]
   for i in range(10):
 ... lst.append(lambda:i)
 ...
   lst[0]()
 9
   i
 9
  
 
 I think I understand where the problem comes from
 lambda:i seems not to be fully evalutated
 it just binds object with name i and not the value of i
 thus lst[0]() is not 0

The problem is that variables in closures are not bound until the 
variable goes out of scope. So each lambda is bound to the final value of i.
 
 are there other solutions to this problem
 without use of eval or exec?

The workaround is to use a default argument to bind the current value of i:
In [1]: lst = []

In [2]: for i in range(10):
...: lst.append(lambda i=i: i)
...:
...:

In [3]: lst[0]()
Out[3]: 0

In [4]: lst[5]()
Out[4]: 5

A list comp makes this IMO cleaner:
In [5]: lst = [ lambda i=i: i for i in range(10) ]

In [6]: lst[0]()
Out[6]: 0

In [7]: lst[5]()
Out[7]: 5

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


Re: Thanks from the Java Developer

2006-04-21 Thread Kent Johnson
Alex Martelli wrote:
 Ant [EMAIL PROTECTED] wrote:
 
 Python ruined my life.

Python ruined me for Java coding too.

 At least in the Bay Area, the jobmarket for Python programmers is wild,
 right now -- firms such as Google, Pixar, BitTorrent, IronPort, etc,
 etc, all hungry for Pythonistas -- BayPIGgies mailing list bitching over
 too many job-offer posts, and the nuisance of all those recruiters
 haunting our monthly meetings and how much time they take, ...!!!

Hmm...eagerly awaiting this phenomenon to reach the Boston area. Python 
seems to be mostly used for QA around here.

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


Re: Confused by Python and nested scoping (2.4.3)

2006-04-20 Thread Kent Johnson
Kelvie Wong wrote:
 There are only two scopes in Python -- global scope and function scope.

No, Python has local, nested, global and built-in scope.

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


Re: Method Call in Exception

2006-04-20 Thread Kent Johnson
Carl Banks wrote:
 mwt wrote:
 In my latest attempt at some Python code, I've been tempted to write
 something in the form of:

 try:
 [...] #doing some internet stuff
 except IOError:
 alternate_method_that_doesnt_need_internet()

 This works when I try it, but I feel vaguely uneasy about putting
 method calls in exception blocks. So tell me, Brave Pythoneers, is this
 evil sorcery that I will end up regretting, or is it just plain good
 ol' Python magic?
 
 It's ok.  In fact a lot of Pythonistas recommend this way over the
 alternative, even when you don't have to.  For example, a lot of people
 recommend this:
 
 try:
 name = record.name
 except AttributeError:
 name = Freddy
 
 instead of this:
 
 if hasattr(record,name):
 name = record.name
 else:
 name = Freddy

or maybe
name = getattr(record, 'name', 'Freddy')

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


Re: how to transfer a python object to other computer?

2006-04-20 Thread Kent Johnson

 Hey, all.Now I wanna to transfer a object to other computer, Maybe I
 could serialize the object to a file by pickle moudle, then send the file
 and get it from the file.But I think the efficency is awful, because the
 disk io is very slow.
  Someone could do me a favor to give me some idea?

Use pickle.dumps() and pickle.loads() to serialize to/from a string.

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


Re: send cookie on request with urllib2

2006-04-20 Thread Kent Johnson
itay_k wrote:
 Hi,
 
 I dont understand why this is so complicated, just to add one line of
 cookie header on the GET request.
 
 This is my unworking code:
 import time
 import Cookie
 import cookielib, urllib2
 
 c= cookielib.Cookie(1,Name,Tom, 80,False, itay, False, False,
 d:\\asddd,False, False,time.time()+1000,False,None,None,None)

 path is the server path to which the cookie applies. Try '/'.

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


  1   2   3   4   5   6   7   >