[issue45339] concurrent.future.ThreadPoolExecutor should parameterize class used for threads

2021-10-04 Thread Erick


Erick  added the comment:

It also occurs to me that even if `concurrent.futures` adopted an alternative 
Thread class, it would still be preferable to allow for composition in the 
manner that was originally proposed.

--

___
Python tracker 
<https://bugs.python.org/issue45339>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45339] concurrent.future.ThreadPoolExecutor should parameterize class used for threads

2021-10-04 Thread Erick


Erick  added the comment:

> What are examples of your some_important_context()? Is it important to call 
> some code before destroying the thread?

To be honest, pulled a context manager example out of thin air to illustrate 
the point. But sure, I want to allocate a resource before the thread runs, and 
release it when the work is done.

> The problem with allowing the user to specify the Thread subclass is that in 
> general using Thread is an implementation detail. ThreadPoolExecutor could be 
> implemented using the low-level _thread module instead. Or in future it can 
> need to create a special Thread subclass, and user-specified Thread subclass 
> can be not compatible with it. 

This is surprising to hear, since I imagine that there are many potential users 
of this library that are evolving from direct wrangling of Thread objects, 
where custom Thread subclasses are commonplace. This was certainly the scenario 
that prompted me to post.

Ultimately it's up to the maintainers what direction the library will go. Are 
there specific plans to adopt an alternative implementation that is orthogonal 
to `threading.Thread`? Or are there reasons to think that it is likely? I would 
submit that maintaining smooth interoperability between this library and the 
`threading` library would be a welcome constraint, absent specific drivers to 
the contrary.

--

___
Python tracker 
<https://bugs.python.org/issue45339>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45339] concurrent.future.ThreadPoolExecutor should parameterize class used for threads

2021-10-04 Thread Erick


Erick  added the comment:

> Can you apply some custom logic by specifying the initializer?

Not sure that I follow; how would I use a context manager with the initializer?

Of course this is just one example. In the `threading` docs, the second 
sentence in the description of the `Thread.run` method 
(https://docs.python.org/3/library/threading.html#threading.Thread.run) is:

> You may override this method in a subclass. 

But one cannot use a subclass of `Thread` with `ThreadPoolExecutor` without the 
gymnastics indicated earlier. That's the real issue here, I think.

--

___
Python tracker 
<https://bugs.python.org/issue45339>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue45339] concurrent.future.ThreadPoolExecutor should parameterize class used for threads

2021-10-01 Thread Erick


New submission from Erick :

Currently the only way to use a class other than `threading.Thread` with 
`concurrent.futures.ThreadPoolExecutor` is to extend `ThreadPoolExecutor` and 
override the private method `_adjust_thread_count()`. 

For example, suppose I have a class that applies some custom logic when running 
code in a new thread:

```
class MyThread(threading.Thread):
def run(self):
with some_important_context():
super().run()
```

Using this class with `ThreadPoolExecutor` requires me to write the following 
code:

```
class MyThreadPoolExecutor(ThreadPoolExecutor):
def _adjust_thread_count(self):
# if idle threads are available, don't spin new threads
if self._idle_semaphore.acquire(timeout=0):
return

# When the executor gets lost, the weakref callback will wake up
# the worker threads.
def weakref_cb(_, q=self._work_queue):
q.put(None)

num_threads = len(self._threads)
if num_threads < self._max_workers:
thread_name = '%s_%d' % (self._thread_name_prefix or self,
 num_threads)
t = MyThread(name=thread_name, target=_worker,
 args=(weakref.ref(self, weakref_cb),
   self._work_queue,
   self._initializer,
   self._initargs))
t.start()
self._threads.add(t)
_threads_queues[t] = self._work_queue


with MyThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(pow, 323, 1235)
print(future.result())
```

That's a bummer, because now I have to maintain this method if there are 
upstream fixes/changes. I also can't count on it existing in the future, since 
it's a private method. 

In other words, `ThreadPoolExecutor` is not composable, and extending it to use 
a custom `Thread` class is neither safe nor maintainable.

Here's what I'd like to be able to do instead:

```
with ThreadPoolExecutor(max_workers=1, thread_class=MyThread) as executor:
future = executor.submit(pow, 323, 1235)
print(future.result())
```

--
components: Library (Lib)
messages: 403007
nosy: erickpeirson
priority: normal
pull_requests: 27040
severity: normal
status: open
title: concurrent.future.ThreadPoolExecutor should parameterize class used for 
threads
versions: Python 3.11

___
Python tracker 
<https://bugs.python.org/issue45339>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Fwd: bug in download

2020-12-16 Thread Erick Willum




Begin forwarded message:

> From: Erick Willum 
> Date: 16 December 2020 at 15:53:40 GMT
> To: python-list@python.org
> Subject: bug in download
> 
> Hallo and good afternoon,
> 
> Having installed python (big thank you) and sublime text, i get the next 
> message when trying to download numpy or matplotlib in sublime text:
> 
> fails to pass a sanity check due to a bug in the windows runtime. See this 
> issue for more information: 
> https://tinyurl.com/y3dm3h86I
> 
> I got the next message from tiny.url, the long url is:
> 
> https://developercommunity.visualstudio.com/content/problem/
> 1207405/fmod-after-an-update-to-windows-2004-is-causing-a.html
> 
> These next lines appear in the sublime window as well:
> 
>   File 
> "C:\Users\Bill\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\__init__.py",
>  line 305, in 
> _win_os_check()
>   File 
> "C:\Users\Bill\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\__init__.py",
>  line 302, in _win_os_check
> raise RuntimeError(msg.format(__file__)) from None
> 
> I would appreciate your help.
> Thanks again.
> Bill.
> 
> 
-- 
https://mail.python.org/mailman/listinfo/python-list


[issue24676] Error in pickle using cProfile

2015-07-20 Thread Erick Fonseca

New submission from Erick Fonseca:

cPickle raises a PicklingError when trying to pickle an instance of a class 
defined in a module being profiled with cProfile.

Example code:

import cPickle

class A(object):
pass

a = A()
with open('file.dat', 'wb') as f:
cPickle.dump(a, f)

Running the above example with python -m cProfile resulted in 

cPickle.PicklingError: Can't pickle class '__main__.A': attribute lookup 
__main__.A failed

I'm not sure if this is the intended behavior (I suppose __main__ in this case 
refers to the cProfile module file), but I googled it and couldn't find 
anything. I noticed this problem in Ubuntu 14.04 and Windows 8.1, both with 
Python 2.7.

--
components: Extension Modules
messages: 247006
nosy: Erick Fonseca
priority: normal
severity: normal
status: open
title: Error in pickle using cProfile
type: crash
versions: Python 2.7

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



[issue9698] When reusing an handler, urllib(2)'s digest authentication fails after multiple regative replies

2015-02-12 Thread Erick Jones

Erick Jones added the comment:

This ended up biting me also.  I had a list of URLs to fetch with 
authentication.  One of the URLs was bad (returning 401 even with 
authentication), and that was causing all of the subsequent URLs to fail as 
well since the reset count wasn't getting reset.

I also don't like that the retry count is stored in the handler -- that's 
mutable global state, which wreaks havoc if I use this with Eventlet coroutines 
for concurrent page fetches.  (If I just add the authentication headers myself, 
then urllib2 works just fine under Eventlet.)

Couldn't the retry count be stored in the request object itself?

And why do we even need a retry count?  If it fails without authentication, 
then try it with authentication.  If it fails again, just return to the 
application.  It makes no sense to retry four more times.

--
nosy: +Erick.Jones

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



[issue10811] sqlite segfault with generators

2011-01-02 Thread Erick Tryzelaar

New submission from Erick Tryzelaar erick.tryzel...@gmail.com:

I found that the sqlite3 function executemany module crashes when passed in a 
generator that it iself is executing a query. It looks like this confuses the 
statement cache, and causes it to get cleared inappropriately in this case.

I've attached a file that exhibits the problem, which results in this stack 
trace:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0028
pysqlite_statement_mark_dirty (self=0x0) at 
/Users/Shared/erickt/Projects/py3k/Modules/_sqlite/statement.c:367
367 self-in_use = 1;
(gdb) bt
#0  pysqlite_statement_mark_dirty (self=0x0) at 
/Users/Shared/erickt/Projects/py3k/Modules/_sqlite/statement.c:367
#1  0x00010067e125 in _pysqlite_query_execute (self=0x100568880, 
multiple=1, args=value temporarily unavailable, due to optimizations) at 
/Users/Shared/erickt/Projects/py3k/Modules/_sqlite/cursor.c:625
#2  0x0001000af6a2 in PyEval_EvalFrameEx (f=0x1003579f0, throwflag=value 
temporarily unavailable, due to optimizations) at Python/ceval.c:3874
#3  0x0001000b000a in PyEval_EvalCodeEx (_co=0x1004977a0, globals=value 
temporarily unavailable, due to optimizations, locals=value temporarily 
unavailable, due to optimizations, args=0x0, argcount=0, kws=0x0, kwcount=0, 
defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3310
#4  0x0001000b031f in PyEval_EvalCode (co=value temporarily unavailable, 
due to optimizations, globals=value temporarily unavailable, due to 
optimizations, locals=value temporarily unavailable, due to optimizations) 
at Python/ceval.c:760
#5  0x0001000d71eb in run_mod [inlined] () at 
/Users/Shared/erickt/Projects/py3k/Python/pythonrun.c:1759
#6  0x0001000d71eb in PyRun_FileExFlags (fp=0x7fff703f6f40, 
filename=0x1005c9190 /Users/erickt/sqlite-crash.py, start=value temporarily 
unavailable, due to optimizations, globals=0x100325220, locals=0x100325220, 
closeit=1, flags=0x7fff5fbfef90) at Python/pythonrun.c:1716
#7  0x0001000d74b9 in PyRun_SimpleFileExFlags (fp=0x7fff703f6f40, 
filename=0x1005c9190 /Users/erickt/sqlite-crash.py, closeit=1, 
flags=0x7fff5fbfef90) at Python/pythonrun.c:1241
#8  0x0001000ebe13 in Py_Main (argc=4832928, argv=value temporarily 
unavailable, due to optimizations) at Modules/main.c:297
#9  0x00010abf in main (argc=2, argv=0x7fff5fbff090) at 
./Modules/python.c:59

--
components: Library (Lib)
files: sqlite-crash.py
messages: 125148
nosy: Erick.Tryzelaar
priority: normal
severity: normal
status: open
title: sqlite segfault with generators
type: crash
versions: Python 3.2
Added file: http://bugs.python.org/file20238/sqlite-crash.py

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



[issue6651] Py3k's posixpath.relpath not compatible with ntpath.relpath

2009-08-05 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

It looks like Python 3.x's relpath isn't compatible between posixpath
and ntpath. In posixpath.relpath, the start keyword defaults to None,
but ntpath.relpath, the start keyword defaults to curdir.

Interestingly enough, 2.6 and 2.7 have a different implementation of
posixpath.relpath, where it explicitly sets the start to equal curdir,
just like ntpath does.

--
components: Library (Lib)
messages: 91327
nosy: erickt
severity: normal
status: open
title: Py3k's posixpath.relpath not compatible with ntpath.relpath
type: performance
versions: Python 3.0, Python 3.1, Python 3.2

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



[issue6154] Python 3.1 rc1 will not build on OS X 10.5.7

2009-05-31 Thread Erick Tryzelaar

Erick Tryzelaar idade...@users.sourceforge.net added the comment:

Benjamin, I just applied that patch but I still got the same error:

/usr/bin/libtool -o Python.framework/Versions/3.1/Python 
-dynamic  libpython3.1.a \
 -lSystem -lSystemStubs -arch_only i386 -
install_name 
/opt/local/Library/Frameworks/Python.framework/Versions/3.1/Python -
compatibility_version 3.1 -current_version 3.1 -framework 
CoreFoundation;\
fi
Undefined symbols:
  _libintl_textdomain, referenced from:
  _PyIntl_textdomain in libpython3.1.a(_localemodule.o)
  _libintl_dgettext, referenced from:
  _PyIntl_dgettext in libpython3.1.a(_localemodule.o)
  _libintl_dcgettext, referenced from:
  _PyIntl_dcgettext in libpython3.1.a(_localemodule.o)
  _libintl_bindtextdomain, referenced from:
  _PyIntl_bindtextdomain in libpython3.1.a(_localemodule.o)
  _libintl_gettext, referenced from:
  _PyIntl_gettext in libpython3.1.a(_localemodule.o)
ld: symbol(s) not found
/usr/bin/libtool: internal link edit command failed

--
nosy: +erickt

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



[issue5451] patch to make io.StringIO consistent with open with respect to newlines

2009-03-08 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

I noticed that io.StringIO is inconsistent with open on how newlines are 
handled. The default approach open uses is universal newlines:

 with open('foo', 'w') as f:
...   f.write('hello hi\r\nla la\r\n')
... 
17
 open('foo').readlines()
['hello hi\n', 'la la\n']

io.StringIO, however, defaults to just treating \n as newlines:

 io.StringIO('hello hi\r\nla la \r\n').readlines()
['hello hi\r\n', 'la la \r\n']

The attached patch changes this so that if the newline keyword isn't 
specified, then StringIO will act just like open with respect to 
keywords. It will then produce this:

 io.StringIO('hello hi\r\nla la \r\n').readlines()
['hello hi\n', 'la la \n']

--
components: Library (Lib)
files: 0001-Make-StringIO-consistent-with-open-wrt-newlines.patch
keywords: patch
message_count: 1.0
messages: 83341
nosy: erickt
nosy_count: 1.0
severity: normal
status: open
title: patch to make io.StringIO consistent with open with respect to newlines
type: behavior
versions: Python 3.1
Added file: 
http://bugs.python.org/file13276/0001-Make-StringIO-consistent-with-open-wrt-newlines.patch

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



[issue5451] patch to make io.StringIO consistent with open with respect to newlines

2009-03-08 Thread Erick Tryzelaar

Erick Tryzelaar idade...@users.sourceforge.net added the comment:

Thanks Benjamin. Could the documentation for StringIO be updated then? The 
docs for io.StringIO [1] says that io.TextIOWrapper implements the 
constructor, but TextIOWrapper defaults newline to None [2], and there's 
nothing that states that io.StringIO changes the default to newline='\n'.

[1]: http://docs.python.org/3.0/library/io.html#io.StringIO
[2]: http://docs.python.org/3.0/library/io.html#io.TextIOWrapper

--
message_count: 2.0 - 3.0

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



[issue5452] Documentation for io.StringIO has wrong info for arguments

2009-03-08 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

(this is redirecting from http://bugs.python.org/issue5451). The 
documentation for io.StringIO is incorrect on the arguments. First off, it 
doesn't actually accept the encoding and errors arguments. Second, 
it's not stated that the default newline argument is \n, as opposed to 
it's parent class TextIOWrapper, which defaults to None.

--
assignee: georg.brandl
components: Documentation
message_count: 1.0
messages: 83345
nosy: erickt, georg.brandl
nosy_count: 2.0
severity: normal
status: open
title: Documentation for io.StringIO has wrong info for arguments
type: behavior
versions: Python 3.1

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



[issue5451] patch to make io.StringIO consistent with open with respect to newlines

2009-03-08 Thread Erick Tryzelaar

Erick Tryzelaar idade...@users.sourceforge.net added the comment:

Moving this to a documentation bug here: http://bugs.python.org/issue5452

--
message_count: 3.0 - 4.0

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



[issue5456] io.StringIO's universal newlines support is broken in 3.0.1

2009-03-08 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

Python version 3.0.1's io.StringIO has a bug when trying to use 
universal newlines on the mac. It's fixed in 3.1a1 though. Here's the 
exception:

 io.StringIO('hello there\r\nlela\r\n', newline=None).readlines()
Traceback (most recent call last):
  File stdin, line 1, in module
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/io.py, line 536, in readlines
return list(self)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/io.py, line 523, in __next__
line = self.readline()
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/io.py, line 2110, in readline
more_line = self.read(self._CHUNK_SIZE)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/io.py, line 2007, in read
res = self._decode_newlines(self._read(n), True)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/io.py, line 1953, in _decode_newlines
return output
UnboundLocalError: local variable 'output' referenced before assignment


The broken code is this:

if self._readtranslate:
if crlf:
output = input.replace(\r\n, \n)
if cr:
output = input.replace(\r, \n)
else:
output = input

It appears to fix the problem if we do this:

output = input
if self._readtranslate:
if crlf:
output = output.replace(\r\n, \n)
if cr:
output = output.replace(\r, \n)

--
components: Library (Lib)
message_count: 1.0
messages: 83352
nosy: erickt
nosy_count: 1.0
severity: normal
status: open
title: io.StringIO's universal newlines support is broken in 3.0.1
type: behavior
versions: Python 3.0

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



[issue4375] inspect.getsource doesn't work with PYTHONPATH and source compiled from a different dir

2009-01-30 Thread Erick Tryzelaar

Erick Tryzelaar idade...@users.sourceforge.net added the comment:

I just checked, and the latest svn version of python has fixed this. Could 
someone close this bug for me?

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



[issue5115] Extend subprocess.kill to be able to kill process groups

2009-01-30 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

It would be really handy to add a way to portably kill process groups of 
a process spawned with subprocess.Popen. My project starts a process, 
which then starts other long running processes. Because of this process 
tree, there's no way for me to portably kill all of those processes. 
Would it be possible to extend subprocess with these features? I did 
find someone who's already implemented this [1], and it's working well 
in my project. There was some discussion about adding this, but it seems 
no one actually committed a patch to implement it.

Anyway, I've attached a patch against python3.0's svn branch that 
implements this. I don't have access to windows, so I'm not able to make 
sure that the TerminateJobObject is correct, and works.

[1]: http://benjamin.smedbergs.us/blog/2006-12-11/killableprocesspy/
[2]: http://mail.python.org/pipermail/python-list/2008-April/487588.html

--
components: Library (Lib)
files: killpg.patch
keywords: patch
messages: 80850
nosy: erickt
severity: normal
status: open
title: Extend subprocess.kill to be able to kill process groups
type: feature request
versions: Python 3.0
Added file: http://bugs.python.org/file12899/killpg.patch

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



[issue4904] Typo for PickingError in pickle.py

2009-01-09 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

Noticed that in the release version of python 3.0 and the latest svn that 
on line 835 the exception UnpickingError is raised instead of UnpicklingError.

--
components: Library (Lib)
messages: 79531
nosy: erickt
severity: normal
status: open
title: Typo for PickingError in pickle.py
type: behavior
versions: Python 3.0

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



[issue4727] pickle/copyreg doesn't support keyword only arguments in __new__

2008-12-22 Thread Erick Tryzelaar

New submission from Erick Tryzelaar idade...@users.sourceforge.net:

According to both of these bugs:

http://bugs.python.org/issue1398
http://bugs.python.org/issue4331

pickle can't pickle functools.partial objects. It looks the underlying 
reason is that objects that pickle can't handle objects with __new__ and 
keyword only arguments. To support this, would this require a new pickle 
protocol and a __getnewfullargs__ that returns a tuple and dict?

--
components: Library (Lib)
messages: 78222
nosy: erickt
severity: normal
status: open
title: pickle/copyreg doesn't support keyword only arguments in __new__
type: feature request
versions: Python 2.7, Python 3.1

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



[issue4573] zsh-style subpattern matching for fnmatch/glob

2008-12-07 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

As I mentioned on python-ideas, I my project needs to extend fnmatch to 
support zsh-style globbing, where you can use brackets to designate 
subexpressions. Say you had a directory structure like this:

foo/
 foo.ext1
 foo.ext2
bar/
 foo.ext1
 foo.ext2

The subexpressions will let you do patterns like this:

 glob.glob('foo/foo.{ext1,ext2}')
['foo/foo.ext1', 'foo/foo.ext2']
 glob.glob('foo/foo.ext{1,2}')
['foo/foo.ext1', 'foo/foo.ext2']
 glob.glob('{foo,bar}')
['bar', 'foo']
 glob.glob('{foo,bar}/foo*')
['bar/foo.ext1', 'bar/foo.ext2', 'foo/foo.ext1', 'foo/foo.ext2']
 glob.glob('{foo,bar}/foo.{ext*}')
['bar/foo.ext1', 'bar/foo.ext2', 'foo/foo.ext1', 'foo/foo.ext2']
 glob.glob('{f?o,b?r}/foo.{ext*}')
['bar/foo.ext1', 'bar/foo.ext2', 'foo/foo.ext1', 'foo/foo.ext2']


Would this be interesting to anyone else? It would unfortunately break 
fnmatch since it currently treats {} as ordinary characters. It'd be 
easy to work around that by adding a flag or using a different function 
name though. Anyway, here's the patch against the head of py3k.

--
components: Library (Lib)
files: zsh-fnmatch.diff
keywords: patch
messages: 77216
nosy: erickt
severity: normal
status: open
title: zsh-style subpattern matching for fnmatch/glob
type: feature request
versions: Python 3.0
Added file: http://bugs.python.org/file12259/zsh-fnmatch.diff

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



[issue4375] inspect.getsource doesn't work with PYTHONPATH and source compiled from a different dir

2008-11-21 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

I'm running into a similar problem as Jean-Paul in:

http://bugs.python.org/issue4223

But the patch in it doesn't work for me. My issue is also with files 
compiled already with python3.0, but then being accessed from a 
different location using PYTHONPATH. Here's a full example of the 
problem:

mkdir dir1
mkdir dir1/foo
mkdir dir2
echo 'def f(): pass'   dir1/foo/__init__.py
cd dir1
python3.0 -c import foo
cd ../dir2
python3.0 -c import inspect, sys; sys.path.append('../dir1'); import 
foo; print(inspect.getsource(foo.f))

Which errors out with:

Traceback (most recent call last):
  File string, line 1, in module
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/inspect.py, line 691, in getsource
lines, lnum = getsourcelines(object)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/inspect.py, line 680, in getsourcelines
lines, lnum = findsource(object)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/inspect.py, line 528, in findsource
raise IOError('could not get source code')
IOError: could not get source code


If I instrument inspect, it looks like what's happening is that 
linecache is being passed f.__code__.co_filename. However with the 
sys.path manipulation, that filename is baked into the .pyc file as 
foo/__init__.py. This confuses linecache which can't find the file. 
Here's one suggestion of a fix.

--- /tmp/inspect.py 2008-11-21 01:34:56.0 -0800
+++ /opt/local/lib/python3.0/inspect.py 2008-11-21 01:35:28.0 -
0800
@@ -518,6 +518,7 @@
 is raised if the source code cannot be retrieved.
 file = getsourcefile(object) or getfile(object)
 module = getmodule(object, file)
+file = getsourcefile(module) or getfile(file)
 if module:
 lines = linecache.getlines(file, module.__dict__)
 else:

It looks like in most situations the module has an accurate __file__ 
that's updated from PYTHONPATH. I'm not sure if this works in every 
situation, but this, along with the other patch, work together to get 
the source printing working.

--
components: Library (Lib)
messages: 76170
nosy: erickt
severity: normal
status: open
title: inspect.getsource doesn't work with PYTHONPATH and source compiled from 
a different dir
type: behavior
versions: Python 3.0

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



[issue4321] unintended syntax error with decorators, parenthesis, and dots?

2008-11-13 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

I believe I found an unintentional syntax error with a combination of 
decorators, parenthesis, and dots. Here's a demonstration:

class C:
def prop(self, function):
return property(function)

class F:
@C().prop
def foo(self):
return 5

Which errors out with:

  File foo.py, line 6
@C().prop
^
SyntaxError: invalid syntax

I can't imagine why this would be desired, since these equivalent forms 
work:

class D:
def foo(self):
return 5
foo = C().prop(foo)

class E:
c = C()
@c.prop
def foo(self):
return 5

--
components: Interpreter Core
messages: 75850
nosy: erickt
severity: normal
status: open
title: unintended syntax error with decorators, parenthesis, and dots?
type: compile error
versions: Python 2.5.3, Python 3.0

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



[issue4322] function with modified __name__ uses original name when there's an arg error

2008-11-13 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

I ran into a case where I modified the __name__ attribute of a function 
and then didn't specify the right number of arguments, and I got a 
TypeError that used the original function name, as demonstrated here:

 def foo(): pass
... 
 foo.__name__ = 'bar'
 foo(1)
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: foo() takes no arguments (1 given)

I would have expected it to say TypeError: bar()  I'm guessing 
that the interpreter isn't using the __name__ attribute in this case.

--
components: Library (Lib)
messages: 75853
nosy: erickt
severity: normal
status: open
title: function with modified __name__ uses original name when there's an arg 
error
type: behavior
versions: Python 3.0

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue4322
___
___
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-24 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

fyi, the multiprocessing docs also refer to applyAync, but the function 
was renamed to apply_async. This is also in the python 3.0 docs.

--
nosy: +erickt
versions: +Python 3.0

___
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



[issue4170] segfault with defaultdict and pickle

2008-10-22 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

It seems like there's a bug with defaultdict. This is segfaulting with 
the latest python 3.0 svn checkout:

import collections, pickle
d=collections.defaultdict(int)
d[1]
pickle.dumps(d)


It errors out with:

Assertion failed: (PyIter_Check(iter)), function PyIter_Next, file 
Objects/abstract.c, line 2751.
zsh: abort  /tmp/python/bin/python3.0 foo.py

--
components: Library (Lib)
messages: 75073
nosy: erickt
severity: normal
status: open
title: segfault with defaultdict and pickle
type: crash
versions: Python 3.0

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



python-ldap reading an OU with more than 1000 objects

2008-10-17 Thread Erick Perez - Quadrian Enterprises, S.A.
Hi,
I have a MS Windows AD domain, and have one OU with more tan 1000 users
objects. When I try to read it, I hit the 1000 limit of AD while returning
objects, so I'm asking for advice as to how to read them.
Here is my actual code, it is not the cleanest as I am learning python.
Suggestions are welcomed :)

Runnig this script on RedHat 5.x with python zimbra2.py returns:
{'info': '', 'desc': 'Size limit exceeded'}

The script:

#!/usr/bin/python
#---
---
# Variables can be changed here:
import ldap, string, os, time, sys
base = 'ou=usuarios con papel tapiz,dc=organojudicial,dc=gob,dc=pa'
scope = ldap.SCOPE_SUBTREE
ZimbraEmail = CN=ZimbraEmail,CN=Users,DC=organojudicial,DC=gob,DC=pa
domain = organojudicial.gob.pa # example.com
ldapserver=ancon
port=389
emaildomain=organojudicial.gob.pa
ldapbinddomain=organojudicial
ldapbind=zimbrasync
ldappassword=
pathtozmprov=/opt/zimbra/bin/zmprov
#---
---

#---
---
#output the list of all accounts from zmprov gaa (get all accounts)
# this is related to the Zimbra Mail System
f = os.popen(pathtozmprov +' gaa')
zmprovgaa= []
zmprovgaa = f.readlines()
#---
---

#---
---
# Let's connect to the Windows AD Domain
l=ldap.initialize(ldap://+ldapserver+.+domain+:+port)
try:
l.simple_bind_s(ldapbinddomain+\\+ldapbind,ldappassword)
except ldap.INVALID_CREDENTIALS:
print Your username or password to bind to AD is incorrect.
sys.exit()
except ldap.LDAPError, e:
if type(e.message) == dict and e.message.has_key('desc'):
print e.message['desc']
else:
print e
sys.exit()
# end of connection procedure to AD
#---
---

#---
---
# If connection to AD is ok
# Lets find only enabled users in a specific OU controlled by the variable
named   base
# and get the login username the first name, the last name and what groups
this
# user belongs to as well as the email field.
#userAccountControl  512 = normal , 514 = disabled account. We  only want
enabled accounts

try:
res = l.search_s(base,scope, ((ObjectCategory=user)
(userAccountControl=512)),  ['sAMAccountName','givenName','sn','memberOf',
'mail'])
for (dn, vals) in res:
  samaccount = vals['sAMAccountName'][0].lower()
  accountname = vals['sAMAccountName'][0].lower()
  try:
 alias1 = vals['mail'][0].lower()
  except:
 alias1 = 'none'
  try:
sirname = vals['sn'][0]
  except:
sirname = vals['sAMAccountName'][0]
  try:
givenname = vals['givenName'][0]
  except:
givenname = vals['sAMAccountName'][0]
  try:
groups = vals['memberOf']
  except:
groups = 'none'

  # this code is not working. Python chokes.
  #initial = givenname[:1].upper()
  #sirname = sirname.replace(' ', )
  #sirname = sirname.replace('\\', )
  #sirname = sirname.replace('-', )
  #sirname = sirname.capitalize()

  name = givenname +   + sirname
  accountname = accountname + @ + emaildomain
  password =   \'\' 
  sys.stdout.flush()
  # If the Active Directory user is a member of the AD group called
ZimbraMail, we begin processing this user.
  if ZimbraEmail in groups:
  print SAM ACCOUNT:  + samaccount
  print accountname:  + accountname
  print name:  + name
  print Alias de zimbra  + alias1
  if accountname +\n not in zmprovgaa:
print  accountname, exists in active directory but not in
zimbra, the   account is being created\n
time.sleep(1)
os.system(pathtozmprov +' ca %s %s displayName %s' %
(accountname,password,name))
print Creando Alias
os.system(pathtozmprov +' aaa %s %s' % (accountname,alias1))
time.sleep(1)
  else:
print accountname, alias1,  user is not a member of  the ZimbraMail
AD Group. Will not be processed\n
#---
---

except ldap.LDAPError, error_message:
  print error_message
l.unbind_s()

thanks all for your comments.

Erick.


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


[issue3976] pprint._safe_repr is not general enough in one instance

2008-09-26 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

I've run into a case where pprint isn't able to print out a particular 
data structure, and have distilled it down to a simple example:

import pprint

class A:
pass

pprint.pprint({A(): 1, A(): 2})

Which throws this exception:

Traceback (most recent call last):
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 272, in _safe_repr
items = sorted(items)
TypeError: unorderable types: A()  A()

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File foo.py, line 6, in module
pprint.pprint({A(): 1, A(): 2})
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 55, in pprint
printer.pprint(object)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 106, in pprint
self._format(object, self._stream, 0, 0, {}, 0)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 129, in _format
rep = self._repr(object, context, level - 1)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 216, in _repr
self._depth, level)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 228, in format
return _safe_repr(object, context, maxlevels, level)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pprint.py, line 277, in _safe_repr
items = sorted(items, key=sortkey)
TypeError: unorderable types: A()  A()


This is happening because of this block of code:

try:
items = sorted(items)
except TypeError:
def sortkey(item):
key, value = item
return str(type(key)), key, value
items = sorted(items, key=sortkey)

The exception block is trying to sort the items again, but in this 
instance, it's still not orderable. Could we get _safe_repr to at least 
give up on sorting at this point? Or, we could try just falling back to 
sorting according to the class name, with:

try:
items = sorted(items)
except TypeError:
def sortkey(item):
key, value = item
return str(type(key)), key, value
try:
items = sorted(items, key=sortkey)
except TypeError:
def sortkey(item):
key, value = item
return str(type(key))

That would at least give some ordering to the output. Unfortunately, in 
this case it's a shame that we don't have the cmp function any more, 
because then we could just fall back to giving up on the ordering for 
just certain unorderable keys, but still have sorted output for 
orderable keys. I thought maybe we could test if the key and value have 
__lt__, but it looks like all classes now have that function, even if 
the user didn't implement it. In the long run though, I suppose the case 
where you have mixed types in a dict there's no sensible ordering 
anyway.

--
components: Library (Lib)
messages: 73858
nosy: erickt
severity: normal
status: open
title: pprint._safe_repr is not general enough in one instance
versions: Python 3.0

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



[issue3976] pprint._safe_repr is not general enough in one instance

2008-09-26 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

fyi, I found another case where pprint needs a safe sort, this is
when you have a list that contains a dictionary. Anyway, Here's a
simple patch that creates a _safe_sorted function that implements the
fallback:

--- /opt/local/lib/python3.0/pprint.py  2008-09-26 09:35:21.0 -0700
+++ /tmp/pprint.py  2008-09-26 09:35:13.0 -0700
@@ -145,7 +145,7 @@
 if length:
 context[objid] = 1
 indent = indent + self._indent_per_level
-items  = sorted(object.items())
+items  = _safe_sorted(object.items())
 key, ent = items[0]
 rep = self._repr(key, context, level)
 write(rep)
@@ -267,14 +267,7 @@
 append = components.append
 level += 1
 saferepr = _safe_repr
-items = object.items()
-try:
-items = sorted(items)
-except TypeError:
-def sortkey(item):
-key, value = item
-return str(type(key)), key, value
-items = sorted(items, key=sortkey)
+items = _safe_sorted(object.items())
 for k, v in items:
 krepr, kreadable, krecur = saferepr(k, context, maxlevels, level)
 vrepr, vreadable, vrecur = saferepr(v, context, maxlevels, level)
@@ -321,6 +314,20 @@
 rep = repr(object)
 return rep, (rep and not rep.startswith('')), False

+def _safe_sorted(items):
+try:
+return sorted(items)
+except TypeError:
+def sortkey(item):
+key, value = item
+return str(type(key)), key, value
+try:
+return sorted(items, key=sortkey)
+except TypeError:
+def sortkey(item):
+key, value = item
+return str(type(key))
+return sorted(items, key=sortkey)

 def _recursion(object):
 return (Recursion on %s with id=%s

One other thing to note is that I'm also aware that the yaml project
also has this problem, and they've got their own safe_sorted
function. It might be worthwhile formalizing this in a public function
in the api somewhere.

--
nosy: +idadesub

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



[issue3290] python-config --cflags includes irrelevant flags

2008-09-26 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

fyi, on the mac with gcc-4.2, distutils is erroring out because of the -
Wno-long-double it is getting from python-config --cflags, as it's no 
longer accepted as an argument. Fortunately this can be worked around by 
doing CC=gcc-4.0 python setup.py.

--
nosy: +erickt

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



[issue3715] hashlib's docstring throws exception in pydoc

2008-08-28 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

Hello,

I noticed that doing pydoc3.0 hashlib was throwing this exception:

Traceback (most recent call last):
  File /opt/local/bin/pydoc3.0, line 5, in module
pydoc.cli()
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pydoc.py, line 2237, in cli
help.help(arg)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pydoc.py, line 1714, in help
elif request: doc(request, 'Help on %s:')
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pydoc.py, line 1504, in doc
pager(render_doc(thing, title, forceload))
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pydoc.py, line 1319, in pager
pager(text)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pydoc.py, line 1339, in lambda
return lambda text: pipepager(text, 'less')
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/pydoc.py, line 1360, in pipepager
pipe.write(text)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/io.py, line 1486, in write
b = encoder.encode(s)
  File 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/lib/python3
.0/encodings/mac_roman.py, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]


This problem is coming from this block of text:

 import hashlib
 m = hashlib.md5()
 m.update(bNobody inspects)
 m.update(b the spammish repetition)
 m.digest()
b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'

Specifically, the last line. It seems that pydoc is interpreting the 
last line as a unicode string, and then when it tries to print it out on 
my mac it errors out.

--
components: Library (Lib)
messages: 72099
nosy: erickt
severity: normal
status: open
title: hashlib's docstring throws exception in pydoc
type: crash
versions: Python 3.0

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



[issue3717] Py_InitModule* is still referenced in docs

2008-08-28 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

The docs still reference Py_InitModule*, which was removed in r64107. 
Also,  Demo/embed/demo.c still use Py_InitModule, and thus doesn't 
compile.

--
assignee: georg.brandl
components: Documentation
messages: 72111
nosy: erickt, georg.brandl
severity: normal
status: open
title: Py_InitModule* is still referenced in docs
versions: Python 3.0

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



[issue3717] Py_InitModule* is still referenced in docs

2008-08-28 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

On Thu, Aug 28, 2008 at 1:48 PM, Erick Tryzelaar [EMAIL PROTECTED] wrote:

 New submission from Erick Tryzelaar [EMAIL PROTECTED]:

 The docs still reference Py_InitModule*, which was removed in r64107.
 Also,  Demo/embed/demo.c still use Py_InitModule, and thus doesn't
 compile.

Here's a patch to get demo.c working, though it's acting a little
strange. Printing out sys.argv results in japanese characters for some
reason.

Index: Demo/embed/demo.c
===
--- Demo/embed/demo.c   (revision 66055)
+++ Demo/embed/demo.c   (working copy)
@@ -2,9 +2,9 @@

 #include Python.h

-void initxyzzy(void); /* Forward */
+PyObject* PyInit_xyzzy(void); /* Forward */

-main(int argc, char **argv)
+main(int argc, wchar_t **argv)
 {
/* Pass argv[0] to the Python interpreter */
Py_SetProgramName(argv[0]);
@@ -13,7 +13,7 @@
Py_Initialize();

/* Add a static module */
-   initxyzzy();
+   PyInit_xyzzy();

/* Define sys.argv.  It is up to the application if you
   want this; you can also let it undefined (since the Python
@@ -26,10 +26,10 @@

/* Execute some Python statements (in module __main__) */
PyRun_SimpleString(import sys\n);
-   PyRun_SimpleString(print sys.builtin_module_names\n);
-   PyRun_SimpleString(print sys.modules.keys()\n);
-   PyRun_SimpleString(print sys.executable\n);
-   PyRun_SimpleString(print sys.argv\n);
+   PyRun_SimpleString(print(sys.builtin_module_names)\n);
+   PyRun_SimpleString(print(sys.modules.keys())\n);
+   PyRun_SimpleString(print(sys.executable)\n);
+   PyRun_SimpleString(print(sys.argv)\n);

/* Note that you can call any public function of the Python
   interpreter here, e.g. call_object(). */
@@ -57,9 +57,22 @@
{NULL,  NULL}   /* sentinel */
 };

-void
-initxyzzy(void)
+static struct PyModuleDef xyzzymodule = {
+   {}, /* m_base */
+   xyzzy,  /* m_name */
+   0,  /* m_doc */
+   0,  /* m_size */
+   xyzzy_methods,  /* m_methods */
+   0,  /* m_reload */
+   0,  /* m_traverse */
+   0,  /* m_clear */
+   0,  /* m_free */
+};
+
+PyObject*
+PyInit_xyzzy(void)
 {
-   PyImport_AddModule(xyzzy);
-   Py_InitModule(xyzzy, xyzzy_methods);
+   PyObject* res = PyModule_Create(xyzzymodule);
+   if (!res) return NULL;
+   return res;
 }

With loop.c, there are issues with char*/wchar_t* and I'm not sure
what the right approach is. Finally, importexc.c is segfaulting with:

#0  0x0005b2f3 in PyDict_SetItem (op=0x0, key=0x44bed0,
value=0x17d460) at Objects/dictobject.c:712
#1  0x0005ee02 in PyDict_SetItemString (v=0x0, key=0x16e860
last_type, item=0x17d460) at Objects/dictobject.c:2090
#2  0x0012c23a in PySys_SetObject (name=0x16e860 last_type,
v=0x17d460) at Python/sysmodule.c:67
#3  0x00122c99 in PyErr_PrintEx (set_sys_last_vars=1) at Python/pythonrun.c:1254
#4  0x001228bc in PyErr_Print () at Python/pythonrun.c:1150
#5  0x001223a1 in PyRun_SimpleStringFlags (command=0x157b80 import
sys, flags=0x0) at Python/pythonrun.c:1075
#6  0x243b in main () at importexc.c:13

--
nosy: +idadesub

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



[issue3564] making partial functions comparable

2008-08-16 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

functools.partial functions are not comparable, in both python 2.5 and 
3.0:

 def foo(): pass
 functools.partial(foo) == functools.partial(foo)
False

It can be worked around by comparing the func, args, and keywords, but 
this means that if a partial function is stored in some structure, such 
as:

 def foo(): pass
 f1=functools.partial(foo)
 f2=functools.partial(foo)
 (1,'a',f1) == (1,'a',f2)
False

Which complicates things when I'm comparing things in a function that 
works with generic data structures. Would it be possible to extend 
partial to support comparisons?

--
components: Library (Lib)
messages: 71200
nosy: erickt
severity: normal
status: open
title: making partial functions comparable
type: feature request
versions: Python 2.5, Python 3.0

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



[issue3514] pickle segfault with infinite loop in __getattr__

2008-08-07 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

I found a segfault in pickle.load when you overload __getattr__ and 
create yourself a infinite loop in the latest svn checkout of python 3:


import pickle

class Foo:
def __getattr__(self, key):
self.foo

with open('foo.db', 'wb') as f:
foo = Foo()
pickle.dump(foo, f)

with open('foo.db', 'rb') as f:
pickle.load(f)


This results in this stack trace on my mac:

Reason: KERN_PROTECTION_FAILURE at address: 0x000c
0xdc6b in PyObject_Call (func=0x0, arg=0x44cd58, kw=0x0) at 
Objects/abstract.c:2174
2174if ((call = func-ob_type-tp_call) != NULL) {
(gdb) bt
#0  0xdc6b in PyObject_Call (func=0x0, arg=0x44cd58, kw=0x0) at 
Objects/abstract.c:2174
#1  0x004c1b4d in unpickler_call (self=0x4a6240, func=0x0, arg=0x4b66c8) 
at /Users/Shared/erickt/Projects/py3k.svn/Modules/_pickle.c:413
#2  0x004cac9a in load_build (self=0x4a6240) at 
/Users/Shared/erickt/Projects/py3k.svn/Modules/_pickle.c:3844
#3  0x004cbb4f in load (self=0x4a6240) at 
/Users/Shared/erickt/Projects/py3k.svn/Modules/_pickle.c:4047
#4  0x004cbe71 in Unpickler_load (self=0x4a6240) at 
/Users/Shared/erickt/Projects/py3k.svn/Modules/_pickle.c:4119
#5  0x000f2fef in call_function (pp_stack=0xbfffea84, oparg=0) at 
Python/ceval.c:3387
#6  0x000edfdb in PyEval_EvalFrameEx (f=0x326cd8, throwflag=0) at 
Python/ceval.c:2205
#7  0x000f157e in PyEval_EvalCodeEx (co=0x4a9628, globals=0x487f50, 
locals=0x0, args=0x32593c, argcount=1, kws=0x325940, kwcount=0, 
defs=0x0, defcount=0, kwdefs=0x4b6428, closure=0x0) at 
Python/ceval.c:2840
#8  0x000f39e5 in fast_function (func=0x4b4ab8, pp_stack=0xbfffee54, 
n=1, na=1, nk=0) at Python/ceval.c:3501
#9  0x000f35cf in call_function (pp_stack=0xbfffee54, oparg=1) at 
Python/ceval.c:3424
#10 0x000edfdb in PyEval_EvalFrameEx (f=0x3257f8, throwflag=0) at 
Python/ceval.c:2205
#11 0x000f157e in PyEval_EvalCodeEx (co=0x444c28, globals=0x255818, 
locals=0x255818, args=0x0, argcount=0, kws=0x0, kwcount=0, defs=0x0, 
defcount=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:2840
#12 0x000e564f in PyEval_EvalCode (co=0x444c28, globals=0x255818, 
locals=0x255818) at Python/ceval.c:519
#13 0x00122a96 in run_mod (mod=0x872c80, filename=0xb228 foo.py, 
globals=0x255818, locals=0x255818, flags=0xb628, arena=0x322020) at 
Python/pythonrun.c:1553
#14 0x00122884 in PyRun_FileExFlags (fp=0xa00dcde0, filename=0xb228 
foo.py, start=257, globals=0x255818, locals=0x255818, closeit=1, 
flags=0xb628) at Python/pythonrun.c:1510
#15 0x00120e39 in PyRun_SimpleFileExFlags (fp=0xa00dcde0, 
filename=0xb228 foo.py, closeit=1, flags=0xb628) at 
Python/pythonrun.c:1048
#16 0x001202f9 in PyRun_AnyFileExFlags (fp=0xa00dcde0, 
filename=0xb228 foo.py, closeit=1, flags=0xb628) at 
Python/pythonrun.c:845
#17 0x00134d1c in Py_Main (argc=2, argv=0x227028) at Modules/main.c:592
#18 0x2574 in main (argc=2, argv=0xb748) at python.c:57


It seems that this isn't just for infinite loops. If you replace the 
class with this:


class Foo:
def __init__(self):
self.foo = {}

def __getattr__(self, key):
self.foo[5]


It still errors out. So I'm guessing pickle is just not handling 
exceptions properly.

--
components: Library (Lib)
messages: 70815
nosy: erickt
severity: normal
status: open
title: pickle segfault with infinite loop in __getattr__
versions: Python 3.0

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



[issue3514] pickle segfault with infinite loop in __getattr__

2008-08-07 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

 Guido van Rossum [EMAIL PROTECTED] added the comment:

 Does this occur in 2.6 or 2.5?

It doesn't in python 2.5. The RuntimeError manages to get printed out.
I don't have 2.6 installed to test against at the moment. Here's the
equivalent code:


import pickle

class Foo:
def __getattr__(self, key):
self.foo

f = open('foo.db', 'w')
foo = Foo()
pickle.dump(foo, f)
f.close()

f = open('foo.db', 'r')
pickle.load(f)
f.close()


This also happens with cPickle.

--
nosy: +idadesub

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



[issue3413] typo in Mac/Makefile.in breaks installing IDLE

2008-07-18 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

There's a slight typo in Mac/Makefile.in, where DESDIR was used instead of 
DESTDIR. This 
patch fixes it:

--- /tmp/Makefile.in2008-07-18 19:42:29.0 -0700
+++ Mac/Makefile.in 2008-07-18 19:42:33.0 -0700
@@ -216,7 +216,7 @@
test -d $(DESTDIR)$(PYTHONAPPSDIR) || mkdir -p 
$(DESTDIR)$(PYTHONAPPSDIR)
-test -d $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app  rm -r 
$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app
cp -PR IDLE/IDLE.app $(DESTDIR)$(PYTHONAPPSDIR)
-   ln -sf $(INSTALLED_PYTHONAPP) 
$(DESDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python
+   ln -sf $(INSTALLED_PYTHONAPP) 
$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python
touch $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app
 
 $(INSTALLED_PYTHONAPP): install_Python

--
components: Build
messages: 70001
nosy: erickt
severity: normal
status: open
title: typo in Mac/Makefile.in breaks installing IDLE
versions: Python 3.0

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



[issue3414] frameworkinstall doesn't create Python.app, which breaks python

2008-07-18 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

Hello again!

It looks like doing make frameworkinstall maninstall isn't creating 
Python.framework/Versions/3.0/Resources/Python.app, so when I try to 
run python it errors out with: python3.0: execv: 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/Resources/Py
thon.app/Contents/MacOS/Python: No such file or directory. In order to 
get that file created, I need to manually run cd Mac  make 
install_Python.

This patch fixes it, but I'm not sure if this is the proper fix:

--- Mac/Makefile.in.old 2008-07-18 20:59:44.0 -0700
+++ Mac/Makefile.in 2008-07-18 20:57:44.0 -0700
@@ -46,7 +46,7 @@
 compileall=$(srcdir)/../Lib/compileall.py
 
 installapps: install_PythonLauncher install_IDLE checkapplepython 
install_pythonw \
-   install_versionedtools
+   install_versionedtools install_Python
 
 installapps4way: install_Python4way install_BuildApplet 
install_PythonLauncher install_IDLE install_pythonw4way 
install_versionedtools

--
components: Build
messages: 70004
nosy: erickt
severity: normal
status: open
title: frameworkinstall doesn't create Python.app, which breaks python
type: behavior
versions: Python 3.0

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



[issue3267] yield in list comprehensions possibly broken in 3.0

2008-07-03 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

This may be a known consequence of python 3.0, but I couldn't find any 
reference to it, nor a test case that covers it. Here's a valid use of yield 
in 2.5.1:

 def foo():
...   x=[(yield x) for x in 1,2,3]
...   yield 5
...   yield x
 x=foo()
 x.next()
1
 x.send(6)
2
 x.send(7)
3
 x.send(8)
5
 x.send(9)
[6, 7, 8]
 x.send(10)
Traceback (most recent call last):
  File stdin, line 1, in module
StopIteration


But in python 3.0, this code results in:

 def foo():
...   x=[(yield x) for x in (1,2,3)]
...   yield 5
...   yield x
 x=foo()
 next(x)
5
 x.send(6)
generator object listcomp at 0x3678f0
 x.send(7)
Traceback (most recent call last):
  File stdin, line 1, in module
StopIteration


Looking further, it seems that this is a comprehension:

 def foo(): [(yield 5)]
 type(foo())
class 'generator'

Whereas this is not:

 def foo(): [(yield 5) for x in range(3)]
 type(foo())
class 'NoneType'


Is this expected behavior?

--
components: Interpreter Core
messages: 69168
nosy: erickt
severity: normal
status: open
title: yield in list comprehensions possibly broken in 3.0
versions: Python 3.0

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



[issue3174] 3.0b1 doesn't seem to install on macs

2008-06-23 Thread Erick Tryzelaar

New submission from Erick Tryzelaar [EMAIL PROTECTED]:

Revision r63851 [1] by Benjamin Peterson removed a couple mac scripts, 
including cachersrc.py. Unfortunately, this script is still referenced in 
Mac/Makefile.in, so it fails to install on my mac. Anyone have a 
workaround I could add for packaging this up for macports?

[1]: http://svn.python.org/view?rev=63851view=rev

--
components: Installation
messages: 68614
nosy: erickt
severity: normal
status: open
title: 3.0b1 doesn't seem to install on macs
type: behavior
versions: Python 3.0

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



[issue3174] 3.0b1 doesn't seem to install on macs

2008-06-23 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

I should add the error message:

DYLD_FRAMEWORK_PATH=/opt/local/var/macports/build/_Users_Shared_erickt_P
rojects_macports_dports.git_lang_python30/work/Python-3.0b1: 
../python.exe ./scripts/cachersrc.py -v 
/opt/local/var/macports/build/_Users_Shared_erickt_Projects_macports_dpo
rts.git_lang_python30/work/destroot/opt/local/Library/Frameworks/Python.
framework/Versions/3.0/lib/python3.0/plat-mac 
/opt/local/var/macports/build/_Users_Shared_erickt_Projects_macports_dpo
rts.git_lang_python30/work/destroot/opt/local/Library/Frameworks/Python.
framework/Versions/3.0/Mac/Tools
../python.exe: can't open file './scripts/cachersrc.py': [Errno 2] No 
such file or directory
make[1]: *** [installmacsubtree] Error 2
make: *** [frameworkinstallmaclib] Error 2


Also, I saw that someone else is having the same problem, so it's not 
just me:

http://groups.google.com/group/python-
dev2/browse_thread/thread/65813603fb4d93b9/2585073b7dcb2dbb?
lnk=gstq=cachersrc#2585073b7dcb2dbb

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



[issue3174] 3.0b1 doesn't seem to install on macs

2008-06-23 Thread Erick Tryzelaar

Erick Tryzelaar [EMAIL PROTECTED] added the comment:

Hello again,

I then have problems with it finding MacOS.py in the BuildApplet.py script:

DYLD_FRAMEWORK_PATH=/opt/local/var/macports/build/_Users_Shared_erickt_Projects_macports_dports.git_lang_python30/work/Python-3.0b1:
../python.exe ./scripts/BuildApplet.py \
--destroot 
/opt/local/var/macports/build/_Users_Shared_erickt_Projects_macports_dports.git_lang_python30/work/destroot
\
--python 
/opt/local/Library/Frameworks/Python.framework/Versions/3.0/Resources/Python.app/Contents/MacOS/Python
\
--output 
/opt/local/var/macports/build/_Users_Shared_erickt_Projects_macports_dports.git_lang_python30/work/destroot/Applications/Python
3.0/Build Applet.app \
./scripts/BuildApplet.py
Traceback (most recent call last):
  File ./scripts/BuildApplet.py, line 14, in module
import MacOS
ImportError: No module named MacOS
make[1]: *** [install_BuildApplet] Error 1
make: *** [frameworkinstallapps] Error 2

On Mon, Jun 23, 2008 at 1:09 PM, Benjamin Peterson
[EMAIL PROTECTED] wrote:

 Benjamin Peterson [EMAIL PROTECTED] added the comment:

 If you just remove the reference to cachesrc.py, do you still have
 adverse effects?

 --
 nosy: +benjamin.peterson

 ___
 Python tracker [EMAIL PROTECTED]
 http://bugs.python.org/issue3174
 ___


--
nosy: +idadesub

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



[issue1753] TextIOWrapper.write writes utf BOM for every string

2008-01-07 Thread Erick Tryzelaar

New submission from Erick Tryzelaar:

I was playing around with python 3's io functions, and I found that when trying 
to write to 
an encoded utf-16 file that TextIOWrapper.write re-writes the utf-16 bom for 
every string:

 f=open('foo', 'w', encoding='utf-16')
 print('1234', file=f)
 print('5678', file=f)
 open('foo', 'rb').read()
b'\xff\xfe1\x002\x003\x004\x00\xff\xfe\n\x00\xff\xfe5\x006\x007\x008\x00\xff\xfe\n\x00'
 open('foo', 'r', encoding='utf-16').read()
'1234\ufeff\n\ufeff5678\ufeff\n'
 

With the attached patch, it appears to generate the correct file:

 f=open('foo', 'w', encoding='utf-16')
 print('1234', file=f)
 print('5678', file=f)
 open('foo', 'rb').read()
b'\xff\xfe1\x002\x003\x004\x00\n\x005\x006\x007\x008\x00\n\x00'
 open('foo', 'r', encoding='utf-16').read()
'1234\n5678\n'


--
components: Library (Lib)
files: io.py.patch
messages: 59438
nosy: erickt
severity: normal
status: open
title: TextIOWrapper.write writes utf BOM for every string
type: behavior
versions: Python 3.0
Added file: http://bugs.python.org/file9091/io.py.patch

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



Re: streaming a file object through re.finditer

2005-02-03 Thread Erick
I did try to see if I could get that to work, but I couldn't figure it
out. I'll see if I can play around more with that api.

So say I did investigate a little more to see how much work it would
take to adapt the re module to accept an iterator (while leaving the
current string api as another code path). Depending on how complicated
a change this would be, how much interest would there be in other
people using this feature? From what I understand about regular
expressions, they're essentially stream processing and don't need
backtracking, so reading from an interator should work too (right?).

Thanks,

-e

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


streaming a file object through re.finditer

2005-02-02 Thread Erick
Hello,

I've been looking for a while for an answer, but so far I haven't been
able to turn anything up yet. Basically, what I'd like to do is to use
re.finditer to search a large file (or a file stream), but I haven't
figured out how to get finditer to work without loading the entire file
into memory, or just reading one line at a time (or more complicated
buffering).

For example, say I do this:
cat a b c  blah

Then run this python script:
 import re
 for m in re.finditer('\w+', buffer(file('blah'))):
...   print m.group()
...
Traceback (most recent call last):
File stdin, line 1, in ?
TypeError: buffer object expected

Of course, this works fine, but it loads the file completely into
memory (right?):
 for m in re.finditer('\w+', buffer(file('blah').read())):
...   print m.group()
...
a
b
c

So, is there any way to do this?

Thanks,

-e

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


Re: Easy Q: dealing with object type

2005-02-02 Thread Erick
Ah, you're running into the old-style classes vs. new style classes.
Try subclassing from object.

For example:

 class A(object):
...   pass
...
 a=A()
 type(a)
class '__main__.A'
 type(a) == A
True
 type(a) is A
True
 b=A()
 type(a) == type(b)
True
 type(a) is type(b)
True


Check out the following article, it should answer your questions:
http://www.python.org/doc/2.2.3/whatsnew/sect-rellinks.html#SECTION00031
-e

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