[issue1031213] Use correct encoding for printing SyntaxErrors

2007-10-15 Thread atsuo ishimoto

atsuo ishimoto added the comment:

That's fine with me. Please replace PyErr_Print() with PyErr_Clear().

_
Tracker <[EMAIL PROTECTED]>

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



[issue1074462] Irregular behavior of datetime.__str__()

2007-10-15 Thread Skip Montanaro

Skip Montanaro added the comment:

Zooko> Here is a note for the next person who comes to this ticket
Zooko> wondering why isoformat() exhibits this slightly un-Pythonic
Zooko> behavior.

What are you referring to, that it doesn't display any microseconds when the
microsecond field happens to be 0 or that it doesn't truncate the fractions
of a second to milliseconds?

Skip

_
Tracker <[EMAIL PROTECTED]>

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



[issue1263] PEP 3137 patch - str8/str comparison should return false

2007-10-15 Thread Thomas Lee

Thomas Lee added the comment:

Hack to make Python/codecs.c use Unicode strings internally. I recognize
the way I have fixed it here is probably not ideal (basically ripped out
PyString_*, replaced with a PyMem_Malloc/PyMem_Free call) but it fixes
10-12 tests that were failing with my earlier changes. If anybody can
recommend a "nice" way to fix this, I'm all ears.

The following still fail for me with this patch applied:

-- test_compile

This is due to PyString_*/PyUnicode_*/PyBytes_* confusion in the
assembler struct (specifically: a_lnotab and a_bytecode) in
Python/compile.c - tried replacing PyString_* calls with PyBytes_*
calls, but this raises a TypeError because PyBytes is not hashable ...
not sure what exactly is causing this.

-- test_ctypes
Looks like a simple case of ctypes using str8 instead of str. Appears to
be an easy fix.

-- test_modulefinder
Failing because str8 >= str is now an invalid operation

-- test_set
This test needs some love.

-- test_sqlite
Not sure what's going on here.

-- test_str

This one is a little tricky: str8/str with __str__/__unicode__ ... how
is this test supposed to behave with the fix in this patch?

-- test_struct
"unpack/pack not transitive" - what does that mean?

-- test_subprocess
Like modulefinder, this is probably just due to the use of str8 over str
internally in the subprocess module. Likely to be an easy fix.
 
The following tests fail for me irrespective of whether or not I have r4
of my patch applied:

-- test_doctest
-- test_email
-- test_nis
-- test_pty

If anybody can give this new patch a try and let me know the result it
would be much appreciated.

__
Tracker <[EMAIL PROTECTED]>

__Index: Python/codecs.c
===
--- Python/codecs.c	(revision 58468)
+++ Python/codecs.c	(working copy)
@@ -55,16 +55,15 @@
 size_t len = strlen(string);
 char *p;
 PyObject *v;
-
+
 if (len > PY_SSIZE_T_MAX) {
 	PyErr_SetString(PyExc_OverflowError, "string is too large");
 	return NULL;
 }
 	
-v = PyString_FromStringAndSize(NULL, len);
-if (v == NULL)
-	return NULL;
-p = PyString_AS_STRING(v);
+p = PyMem_Malloc(len + 1);
+if (p == NULL)
+return NULL;
 for (i = 0; i < len; i++) {
 register char ch = string[i];
 if (ch == ' ')
@@ -73,6 +72,11 @@
 ch = tolower(Py_CHARMASK(ch));
 	p[i] = ch;
 }
+p[i] = '\0';
+v = PyUnicode_FromString(p);
+if (v == NULL)
+return NULL;
+PyMem_Free(p);
 return v;
 }
 
@@ -112,7 +116,7 @@
 v = normalizestring(encoding);
 if (v == NULL)
 	goto onError;
-PyString_InternInPlace(&v);
+PyUnicode_InternInPlace(&v);
 
 /* First, try to lookup the name in the registry dictionary */
 result = PyDict_GetItem(interp->codec_search_cache, v);
@@ -193,7 +197,7 @@
 if (errors) {
 	PyObject *v;
 	
-	v = PyString_FromString(errors);
+	v = PyUnicode_FromString(errors);
 	if (v == NULL) {
 	Py_DECREF(args);
 	return NULL;
Index: Python/structmember.c
===
--- Python/structmember.c	(revision 58468)
+++ Python/structmember.c	(working copy)
@@ -51,13 +51,13 @@
 			v = Py_None;
 		}
 		else
-			v = PyString_FromString(*(char**)addr);
+			v = PyUnicode_FromString(*(char**)addr);
 		break;
 	case T_STRING_INPLACE:
-		v = PyString_FromString((char*)addr);
+		v = PyUnicode_FromString((char*)addr);
 		break;
 	case T_CHAR:
-		v = PyString_FromStringAndSize((char*)addr, 1);
+		v = PyUnicode_FromStringAndSize((char*)addr, 1);
 		break;
 	case T_OBJECT:
 		v = *(PyObject **)addr;
@@ -225,8 +225,8 @@
 		Py_XDECREF(oldv);
 		break;
 	case T_CHAR:
-		if (PyString_Check(v) && PyString_Size(v) == 1) {
-			*(char*)addr = PyString_AsString(v)[0];
+		if (PyUnicode_Check(v) && PyUnicode_GetSize(v) == 1) {
+			*(char*)addr = PyUnicode_AsString(v)[0];
 		}
 		else {
 			PyErr_BadArgument();
Index: Objects/unicodeobject.c
===
--- Objects/unicodeobject.c	(revision 58468)
+++ Objects/unicodeobject.c	(working copy)
@@ -6224,16 +6224,6 @@
 if (PyUnicode_Check(left) && PyUnicode_Check(right))
 return unicode_compare((PyUnicodeObject *)left,
(PyUnicodeObject *)right);
-if ((PyString_Check(left) && PyUnicode_Check(right)) ||
-(PyUnicode_Check(left) && PyString_Check(right))) {
-if (PyUnicode_Check(left))
-left = _PyUnicode_AsDefaultEncodedString(left, NULL);
-if (PyUnicode_Check(right))
-right = _PyUnicode_AsDefaultEncodedString(right, NULL);
-assert(PyString_Check(left));
-assert(PyString_Check(right));
-return PyObject_Compare(left, right);
-}
 PyErr_Format(PyExc_TypeError,
  "Can't compare %.100s and %.100s",
 

[issue1279] os.system() oddity under Windows XP SP2

2007-10-15 Thread Stefan Sonnenberg-Carstens

New submission from Stefan Sonnenberg-Carstens:

When doing such
os.system("a command wich writes a outfile")
f = open("the file the command before wrote")

the file is empty.

If I do this:

os.popen("a command wich writes a outfile")
f = open("the file the command before wrote")

everything is fine

--
components: Interpreter Core
messages: 56439
nosy: pythonmeister
severity: major
status: open
title: os.system() oddity under Windows XP SP2
type: behavior
versions: Python 2.3

__
Tracker <[EMAIL PROTECTED]>

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



[issue1074462] Irregular behavior of datetime.__str__()

2007-10-15 Thread Zooko O'Whielacronx

Zooko O'Whielacronx added the comment:

I meant that it special-cases .microseconds == 0.  If I want to produce
a custom output format using Python Standard Library, I expect to have
to slice, add my own fields and so forth, but I don't expect to need an
"if" to handle a special-case that is there for improving the appearance
to human readers.  That's something I had to do a lot more often when I
worked in Perl.

Even if the cost of changing the definition of isoformat() is too high
at this point, I still wanted to post my code from http://allmydata.org
as an example to other users so that they can use isoformat() safely.

_
Tracker <[EMAIL PROTECTED]>

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



[issue1279] os.system() oddity under Windows XP SP2

2007-10-15 Thread Tim Golden

Tim Golden added the comment:

Not, apparently, on my (XP SP2) box:


Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system ("""python -c "f=open
('temp.txt','w');f.write('hello');f.close ()"""); print open
("temp.txt").read ()
0
hello
>>>



Perhaps you could provide a runnable piece of code which demonstrates
the problem?

--
nosy: +tim.golden

__
Tracker <[EMAIL PROTECTED]>

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



[issue1074462] Irregular behavior of datetime.__str__()

2007-10-15 Thread Skip Montanaro

Skip Montanaro added the comment:

Zooko> I meant that it special-cases .microseconds == 0.

Tim indicated in his comment that the behavior is both by design and
documented and isn't going to change.  In an earlier comment I showed how to
achieve the result you ased for in one line.  Here's another example using
your desire for millisecond display resolution:

>>> dt.replace(microsecond=0).strftime("%Y-%m-%dT%H:%M:%S") + ".%03dZ" % 
(dt.microsecond//1000)
'2007-10-15T08:24:02.509Z'

Also, I have a patch for py3k which adds a %f format specifier to strftime.
I still have to make some other additions, but you're more than welcome to
review what's there now:

http://bugs.python.org/issue1158

Skip

_
Tracker <[EMAIL PROTECTED]>

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



[issue1280] PEP 3137: Make PyString's indexing and iteration return integers

2007-10-15 Thread Alexandre Vassalotti

New submission from Alexandre Vassalotti:

Here a preliminary patch to make PyString return integers on indexing
and iteration. There is still quite a few XXX in the patch, that I would
like to fix. However, the good thing is all tests passes.

--
components: Interpreter Core
files: string_iter_ret_ints.patch
messages: 56442
nosy: alexandre.vassalotti
severity: normal
status: open
title: PEP 3137: Make PyString's indexing and iteration return integers
versions: Python 3.0

__
Tracker <[EMAIL PROTECTED]>

__Index: Objects/stringobject.c
===
--- Objects/stringobject.c	(revision 58458)
+++ Objects/stringobject.c	(working copy)
@@ -1233,23 +1233,13 @@
 static PyObject *
 string_item(PyStringObject *a, register Py_ssize_t i)
 {
-	char pchar;
-	PyObject *v;
+	if (i < 0)
+		i += Py_Size(a);
 	if (i < 0 || i >= Py_Size(a)) {
 		PyErr_SetString(PyExc_IndexError, "string index out of range");
 		return NULL;
 	}
-	pchar = a->ob_sval[i];
-	v = (PyObject *)characters[pchar & UCHAR_MAX];
-	if (v == NULL)
-		v = PyString_FromStringAndSize(&pchar, 1);
-	else {
-#ifdef COUNT_ALLOCS
-		one_strings++;
-#endif
-		Py_INCREF(v);
-	}
-	return v;
+	return PyInt_FromLong((unsigned char)a->ob_sval[i]);
 }
 
 static PyObject*
@@ -5150,8 +5140,8 @@
 	assert(PyString_Check(seq));
 
 	if (it->it_index < PyString_GET_SIZE(seq)) {
-		item = PyString_FromStringAndSize(
-			PyString_AS_STRING(seq)+it->it_index, 1);
+		item = PyInt_FromLong(
+			(unsigned char)seq->ob_sval[it->it_index]);
 		if (item != NULL)
 			++it->it_index;
 		return item;
Index: Lib/modulefinder.py
===
--- Lib/modulefinder.py	(revision 58458)
+++ Lib/modulefinder.py	(working copy)
@@ -367,7 +367,7 @@
 consts = co.co_consts
 LOAD_LOAD_AND_IMPORT = LOAD_CONST + LOAD_CONST + IMPORT_NAME
 while code:
-c = code[0]
+c = chr(code[0])
 if c in STORE_OPS:
 oparg, = unpack('t', c)[0] is not True:
+for c in b'\x01\x7f\xff\x0f\xf0':
+# XXX str8 constructor uses UTF-8 by default. So, to converting
+# XXX to int to a str8 of length-1 require this odd maneuver.
+x = str8(bytes(chr(255), 'latin-1'))
+if struct.unpack('>t', x)[0] is not True:
 raise TestFailed('%c did not unpack as True' % c)
 
 test_bool()
Index: Lib/test/string_tests.py
===
--- Lib/test/string_tests.py	(revision 58458)
+++ Lib/test/string_tests.py	(working copy)
@@ -558,6 +558,10 @@
 a = self.type2test('DNSSEC')
 b = self.type2test('')
 for c in a:
+# Special case for the str8, since indexing returns a integer
+# XXX Maybe it would be a good idea to seperate str8's tests...
+if self.type2test == str8:
+c = chr(c)
 b += c
 hash(b)
 self.assertEqual(hash(a), hash(b))
Index: Lib/test/test_bytes.py
===
--- Lib/test/test_bytes.py	(revision 58458)
+++ Lib/test/test_bytes.py	(working copy)
@@ -347,7 +347,7 @@
 sample = str8("Hello world\n\x80\x81\xfe\xff")
 buf = memoryview(sample)
 b = bytes(buf)
-self.assertEqual(b, bytes(map(ord, sample)))
+self.assertEqual(b, bytes(sample))
 
 def test_to_str(self):
 sample = "Hello world\n\x80\x81\xfe\xff"
Index: Lib/dis.py
===
--- Lib/dis.py	(revision 58458)
+++ Lib/dis.py	(working copy)
@@ -117,8 +117,7 @@
 extended_arg = 0
 free = None
 while i < n:
-c = code[i]
-op = ord(c)
+op = code[i]
 if i in linestarts:
 if i > 0:
 print()
@@ -134,7 +133,7 @@
 print(opname[op].ljust(20), end=' ')
 i = i+1
 if op >= HAVE_ARGUMENT:
-oparg = ord(code[i]) + ord(code[i+1])*256 + extended_arg
+oparg = code[i] + code[i+1]*256 + extended_arg
 extended_arg = 0
 i = i+2
 if op == EXTENDED_ARG:
@@ -162,8 +161,7 @@
 n = len(code)
 i = 0
 while i < n:
-c = code[i]
-op = ord(c)
+op = code[i]
 if i == lasti: print('-->', end=' ')
 else: print('   ', end=' ')
 if i in labels: print('>>', end=' ')
@@ -172,7 +170,7 @@
 print(opname[op].ljust(15), end=' ')
 i = i+1
 if op >= HAVE_ARGUMENT:
-oparg = ord(code[i]) + ord(code[i+1])*256
+oparg = code[i] + code[i+1]*256
 i = i+2
 print(repr(oparg).rjust(5), end=' ')
 if op in hasconst:
@@ -208,11 +206,10 @@
 n = len(code)
 i = 0
 while i <

[issue1074462] Irregular behavior of datetime.__str__()

2007-10-15 Thread Zooko O'Whielacronx

Zooko O'Whielacronx added the comment:

Thank you for the one-liner.  I was about to use it in the allmydata.org
project, but I remembered that my programming partner would probably
prefer the larger but more explicit if:else: over the clever one-liner.
 Perhaps it will be useful to someone else.

I'll have a look at issue1158.

_
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

Here is an updated patch which applies cleanly and fixes some additional
unit tests and removes one that doesn't make sense any more (re.compile
doesn't accept bytes).

The unit tests profile, cProfile and doctest fail w/ and w/o this patch.
They seem to suffer from the latest changes of our previous patch and
additional calls to utf_8_decode().

__
Tracker <[EMAIL PROTECTED]>

__Index: Lib/email/generator.py
===
--- Lib/email/generator.py	(revision 58469)
+++ Lib/email/generator.py	(working copy)
@@ -288,7 +288,7 @@
 for part in msg.walk():
 maintype = part.get_content_maintype()
 if maintype == 'text':
-print(part.get_payload(decode=True), file=self)
+print(part.get_payload(decode=False), file=self)
 elif maintype == 'multipart':
 # Just skip this
 pass
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1031213] Use correct encoding for printing SyntaxErrors

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

> atsuo ishimoto added the comment:
>
> That's fine with me. Please replace PyErr_Print() with PyErr_Clear().

Done.

Committed revision 58471.

_
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Hm? This is a one-word patch to email/generator.py.

On 10/15/07, Christian Heimes <[EMAIL PROTECTED]> wrote:
>
> Christian Heimes added the comment:
>
> Here is an updated patch which applies cleanly and fixes some additional
> unit tests and removes one that doesn't make sense any more (re.compile
> doesn't accept bytes).
>
> The unit tests profile, cProfile and doctest fail w/ and w/o this patch.
> They seem to suffer from the latest changes of our previous patch and
> additional calls to utf_8_decode().

__
Tracker <[EMAIL PROTECTED]>

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



[issue1253] IDLE - Percolator overhaul

2007-10-15 Thread Kurt B. Kaiser

Kurt B. Kaiser added the comment:

Thanks for the patch, it will definitely be applied once I
finish reviewing it!  Good job splitting off TkTextPercolator
and inheriting from Delegator.

--
assignee:  -> kbk
priority:  -> normal

__
Tracker <[EMAIL PROTECTED]>

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



[issue1280] PEP 3137: Make PyString's indexing and iteration return integers

2007-10-15 Thread Martin v. Löwis

Changes by Martin v. Löwis:


--
keywords: +patch

__
Tracker <[EMAIL PROTECTED]>

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



[issue1276] LookupError: unknown encoding: X-MAC-JAPANESE

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Marc-Andre, do you understand this issue? Your name is in
Tools/unicode/Makefile; the patch deletes the line

$(RM) build/mac_japanese.*

from the apple target, which seems rather arbitrary.

--
assignee:  -> lemburg
nosy: +gvanrossum, lemburg

__
Tracker <[EMAIL PROTECTED]>

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



[issue1277] mailbox.Maildir: factory not used

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Patch please?

--
nosy: +gvanrossum

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Can you suggest a patch?

Adding Brett Cannon to the list, possibly his import-in-python would
supersede this?

--
nosy: +brett.cannon, gvanrossum

__
Tracker <[EMAIL PROTECTED]>

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



[issue1263] PEP 3137 patch - str8/str comparison should return false

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

I'll look at this at some point. One quick comment: the lnotab and bytecode
should use PyString, which will be 'bytes' in 3.0a2. They must be immutable
because code objects must be immutable (it must not be possible to modify an
existing code object).

On 10/15/07, Thomas Lee <[EMAIL PROTECTED]> wrote:
>
>
> Thomas Lee added the comment:
>
> Hack to make Python/codecs.c use Unicode strings internally. I recognize
> the way I have fixed it here is probably not ideal (basically ripped out
> PyString_*, replaced with a PyMem_Malloc/PyMem_Free call) but it fixes
> 10-12 tests that were failing with my earlier changes. If anybody can
> recommend a "nice" way to fix this, I'm all ears.
>
> The following still fail for me with this patch applied:
>
> -- test_compile
>
> This is due to PyString_*/PyUnicode_*/PyBytes_* confusion in the
> assembler struct (specifically: a_lnotab and a_bytecode) in
> Python/compile.c - tried replacing PyString_* calls with PyBytes_*
> calls, but this raises a TypeError because PyBytes is not hashable ...
> not sure what exactly is causing this.
>
> -- test_ctypes
> Looks like a simple case of ctypes using str8 instead of str. Appears to
> be an easy fix.
>
> -- test_modulefinder
> Failing because str8 >= str is now an invalid operation
>
> -- test_set
> This test needs some love.
>
> -- test_sqlite
> Not sure what's going on here.
>
> -- test_str
>
> This one is a little tricky: str8/str with __str__/__unicode__ ... how
> is this test supposed to behave with the fix in this patch?
>
> -- test_struct
> "unpack/pack not transitive" - what does that mean?
>
> -- test_subprocess
> Like modulefinder, this is probably just due to the use of str8 over str
> internally in the subprocess module. Likely to be an easy fix.
>
> The following tests fail for me irrespective of whether or not I have r4
> of my patch applied:
>
> -- test_doctest
> -- test_email
> -- test_nis
> -- test_pty
>
> If anybody can give this new patch a try and let me know the result it
> would be much appreciated.
>
> __
> Tracker <[EMAIL PROTECTED]>
> 
> __
>

__
Tracker <[EMAIL PROTECTED]>

__I'll look at this at some point. One quick comment: the lnotab and bytecode 
should use PyString, which will be 'bytes' in 3.0a2. They must be 
immutable because code objects must be immutable (it must not be possible to 
modify an existing code object).
On 10/15/07, Thomas Lee [EMAIL PROTECTED]> wrote:
Thomas Lee added the comment:Hack to make Python/codecs.c use 
Unicode strings internally. I recognizethe way I have fixed it here is 
probably not ideal (basically ripped outPyString_*, replaced with a 
PyMem_Malloc/PyMem_Free call) but it fixes
10-12 tests that were failing with my earlier changes. If anybody 
canrecommend a "nice" way to fix this, I'm all 
ears.The following still fail for me with this patch applied:-- 
test_compile
This is due to PyString_*/PyUnicode_*/PyBytes_* confusion in 
theassembler struct (specifically: a_lnotab and a_bytecode) 
inPython/compile.c - tried replacing PyString_* calls with 
PyBytes_*calls, but this raises a TypeError because PyBytes is not hashable 
...
not sure what exactly is causing this.-- test_ctypesLooks like 
a simple case of ctypes using str8 instead of str. Appears tobe an easy 
fix.-- test_modulefinderFailing because str8 >= str is now an 
invalid operation
-- test_setThis test needs some love.-- test_sqliteNot 
sure what's going on here.-- test_strThis one is a little 
tricky: str8/str with __str__/__unicode__ ... howis this test supposed to 
behave with the fix in this patch?
-- test_struct"unpack/pack not transitive" - what does 
that mean?-- test_subprocessLike modulefinder, this is probably 
just due to the use of str8 over strinternally in the subprocess module. 
Likely to be an easy fix.
The following tests fail for me irrespective of whether or not I have 
r4of my patch applied:-- test_doctest-- test_email-- 
test_nis-- test_ptyIf anybody can give this new patch a try and let 
me know the result it
would be much 
appreciated.__Tracker [EMAIL PROTECTED]>http://bugs.python.org/issue1263
>__-- --Guido van Rossum (home page: http://www.python.org/~guido/";>http://www.python.org/~guido/)

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

> Can you suggest a patch?
> 
> Adding Brett Cannon to the list, possibly his import-in-python would
> supersede this?

No, I can't suggest a patch. I don't know how we could get the encoding
from the tokenizer or AST.

Brett is obviously the best man to fix the problem. :)

Christian

__
Tracker <[EMAIL PROTECTED]>

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



[issue1251] ssl module doesn't support non-blocking handshakes

2007-10-15 Thread Bill Janssen

Bill Janssen added the comment:

Perhaps we shouldn't expose this at the application level.  We could 
check, in the C module's sslwrap, whether the socket is blocking or not, 
and do the right thing there, so that sslwrap would always succeed in 
one call.  Since we are releasing the GIL whenever we do SSL_accept() or 
SSL_connect(), other threads get a chance to run, so doing it 
transparently shouldn't affect the Python program's liveness.  And it 
would reduce the chances for application error.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1276] LookupError: unknown encoding: X-MAC-JAPANESE

2007-10-15 Thread Marc-Andre Lemburg

Marc-Andre Lemburg added the comment:

My name appears in that Makefile because I wrote it and used it to
create the charmap codecs.

The reason why the Mac Japanese codec was not created for 2.x was the
size of the mapping table. 

Ideal would be to have the C version of the CJK codecs support the Mac
Japanese encoding as well. Adding back the charmap based Mac Japanese
codec would be a compromise.

The absence of the Mac Japanese codec causes (obvious) problems for many
Japanese Python users running Mac OS X.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1276] LookupError: unknown encoding: X-MAC-JAPANESE

2007-10-15 Thread Marc-Andre Lemburg

Marc-Andre Lemburg added the comment:

Adding Python 2.6 as version target.

--
versions: +Python 2.6

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

> No, I can't suggest a patch. I don't know how we could get the encoding
> from the tokenizer or AST.

Try harder. :-) Look at the code that accomplishes this feat in the
regular parser...

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

> Try harder. :-) Look at the code that accomplishes this feat in the
> regular parser...

I've already found the methods that find the encoding in
Parser/tokenizer.c: check_coding_spec() and friends.

But it seems like a waste of time to use PyTokenizer_FromFile() just to
find the encoding. *reading* Mmh ... It's not a waste of time if I can
stop the tokenizer. I think it may be possible to use the tokenizer to
get the encoding efficiently. I could read until
tok_state->read_coding_spec or tok_state->indent != 0.

Do you know a better way to stop the tokenizer when the line isn't a
special comment line "# -*-"?

Christian

__
Tracker <[EMAIL PROTECTED]>

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



[issue1281] type in docutmentatio section 14.3.3.4

2007-10-15 Thread Ben Sherman

New submission from Ben Sherman:

"""
If, a little later on, "-tracks=4" is seen, it does:

options.tracks.append(int("4"))
"""

That should read --tracks=4, not -tracks=4

Found at
http://docs.python.org/lib/optparse-standard-option-actions.html

--
components: Documentation
messages: 56460
nosy: bsherman
severity: normal
status: open
title: type in docutmentatio section 14.3.3.4
versions: Python 2.5

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Call PyTokenizer_Get until the line number is > 2?

On 10/15/07, Christian Heimes <[EMAIL PROTECTED]> wrote:
>
> Christian Heimes added the comment:
>
> > Try harder. :-) Look at the code that accomplishes this feat in the
> > regular parser...
>
> I've already found the methods that find the encoding in
> Parser/tokenizer.c: check_coding_spec() and friends.
>
> But it seems like a waste of time to use PyTokenizer_FromFile() just to
> find the encoding. *reading* Mmh ... It's not a waste of time if I can
> stop the tokenizer. I think it may be possible to use the tokenizer to
> get the encoding efficiently. I could read until
> tok_state->read_coding_spec or tok_state->indent != 0.
>
> Do you know a better way to stop the tokenizer when the line isn't a
> special comment line "# -*-"?
>
> Christian
>
> __
> Tracker <[EMAIL PROTECTED]>
> 
> __
>

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Brett Cannon

Brett Cannon added the comment:

No, my work has the exact same problem.  Actually, this bug report has
confirmed for me why heapq could not be imported when I accidentally
forced all open text files to use UTF-8.  I just have not gotten around
to trying to solve this issue yet.  But since importlib just uses open()
directly it has the same problems.

Since it looks like TextIOWrapper does not let one change the encoding
after it has been set, some subclass might need to be written that reads
Looks for the the stanza or else immediately stops and uses the expected
encoding (UTF-8 in the case of Py3K or ASCII for 2.6).  That or expose
some C function that takes a file path or open file that returns a code
object.

But I have bigger fish to fry as my attempt to get around open() being
defined in site.py is actually failing once I clobbered my .pyc files as
codecs requires importing modules, even for ASCII encoding.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1281] type in docutmentation - lib ref section 14.3.3.4

2007-10-15 Thread Ben Sherman

Ben Sherman added the comment:

Typos corrected.

--
title: type in docutmentatio section 14.3.3.4 -> type in docutmentation - lib 
ref section 14.3.3.4

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

> Call PyTokenizer_Get until the line number is > 2?

That's too easy :]
I'm going to implement the fix tonight.

Christian

__
Tracker <[EMAIL PROTECTED]>

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



[issue1267] Py3K cannot run as ``python -S``

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

I've some code around which sets sys.stdin, out and err in C code. The
code is far from perfect and I haven't checked it for reference leaks
yet. I like to get your comment on the style and error catching.

--
nosy: +tiran

__
Tracker <[EMAIL PROTECTED]>

__Index: Python/pythonrun.c
===
--- Python/pythonrun.c	(revision 58477)
+++ Python/pythonrun.c	(working copy)
@@ -51,6 +51,7 @@
 /* Forward */
 static void initmain(void);
 static void initsite(void);
+static int initsysstd(void);
 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
 			  PyCompilerFlags *, PyArena *);
 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
@@ -241,8 +242,11 @@
 		initsigs(); /* Signal handling stuff, including initintr() */
 
 	initmain(); /* Module __main__ */
+	if (initsysstd() < 0)
+		Py_FatalError("Py_Initialize: can't initialize sys std streams");
 	if (!Py_NoSiteFlag)
 		initsite(); /* Module site */
+	
 
 	/* auto-thread-state API, if available */
 #ifdef WITH_THREAD
@@ -676,6 +680,93 @@
 	}
 }
 
+/* Initialize sys.stdin, stdout and stderr */
+static int
+initsysstd(void)
+{
+	PyObject *io=NULL, *iod, *open;
+	PyObject *bi=NULL, *bid;
+	PyObject *m, *wrapper;
+	PyObject *std, *args=NULL, *kwargs=NULL;
+
+	/* Hack to avoid a nasty recursion issue when Python is invoked
+	   in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
+	if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL)
+		return -1;
+	Py_DECREF(m);
+	
+	if ((m = PyImport_ImportModule("encodings.latin_1")) == NULL)
+		return -1;
+	Py_DECREF(m);
+
+	if ((bi = PyImport_ImportModule("__builtin__")) == NULL)
+		goto error;
+	if ((bid = PyModule_GetDict(bi)) == NULL)
+		goto error;
+
+	if ((io = PyImport_ImportModule("io")) == NULL)
+		goto error;
+	if ((iod = PyModule_GetDict(io)) == NULL)
+		goto error;
+
+	if ((wrapper = PyDict_GetItemString(iod, "OpenWrapper")) == NULL)
+		goto error;
+	Py_INCREF(wrapper);
+	if (PyDict_SetItemString(bid, "open", wrapper) == -1) {
+		Py_DECREF(wrapper); /* ??? */
+		goto error;
+	}
+
+	if ((open = PyDict_GetItemString(iod, "open")) == NULL)
+		goto error;
+
+	if ((kwargs = PyDict_New()) == NULL)
+		goto error;
+	if (PyDict_SetItemString(kwargs, "newline", PyString_FromString("\n"))
+	== -1)
+		goto error;
+	
+	/* stdin */
+	if ((args = Py_BuildValue("(is)", 0, "r")) == NULL)
+		goto error;
+	if ((std = PyObject_Call(open, args, kwargs)) == NULL)
+		goto error;
+	PySys_SetObject("__stdin__", std);
+	PySys_SetObject("stdin", std);
+	Py_DECREF(std);
+	Py_DECREF(args);
+
+	/* stdout */
+	if ((args = Py_BuildValue("(is)", 1, "w")) == NULL)
+		goto error;
+	if ((std = PyObject_Call(open, args, kwargs)) == NULL)
+		goto error;
+	PySys_SetObject("__stdout__", std);
+	PySys_SetObject("stdout", std);
+	Py_DECREF(std);
+	Py_DECREF(args);
+
+	/* stderr */
+	if ((args = Py_BuildValue("(is)", 2, "w")) == NULL)
+		goto error;
+	if ((std = PyObject_Call(open, args, kwargs)) == NULL)
+		goto error;
+	PySys_SetObject("__stderr__", std);
+	PySys_SetObject("stderr", std);
+	Py_DECREF(std);
+	Py_DECREF(args);
+	
+	return 0;
+	
+	error:
+		Py_XDECREF(bi);
+		Py_XDECREF(io);
+		Py_XDECREF(kwargs);
+		Py_XDECREF(args);
+		return -1;
+
+}
+
 /* Parse input from a file and execute it */
 
 int
Index: Lib/site.py
===
--- Lib/site.py	(revision 58477)
+++ Lib/site.py	(working copy)
@@ -433,7 +433,7 @@
 sethelper()
 aliasmbcs()
 setencoding()
-installnewio()
+#installnewio()
 execsitecustomize()
 # Remove sys.setdefaultencoding() so that users cannot change the
 # encoding after initialization.  The test for presence is needed when
Index: Lib/io.py
===
--- Lib/io.py	(revision 58477)
+++ Lib/io.py	(working copy)
@@ -178,6 +178,16 @@
 return text
 
 
+class OpenWrapper:
+"""Wrapper for __builtin__.open
+
+Trick so that open won't become a bound method when stored
+as a class variable (as dumbdbm does)
+"""
+def __new__(cls, *args, **kwargs):
+return open(*args, **kwargs)
+
+
 class UnsupportedOperation(ValueError, IOError):
 pass
 
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1267] Py3K cannot run as ``python -S``

2007-10-15 Thread Brett Cannon

Changes by Brett Cannon:


--
assignee:  -> brett.cannon
keywords: +patch

__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Is it worth my time to review this yet?

__
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Guido van Rossum

Changes by Guido van Rossum:


__
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

> The unit tests profile, cProfile and doctest fail w/ and w/o this patch.
> They seem to suffer from the latest changes of our previous patch and
> additional calls to utf_8_decode().

Any details on those? They don't fail for me.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Gregory P. Smith

Changes by Gregory P. Smith:


__
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

I'll check this in as soon as there's agreement on the list about this.

Not that I expect disagreement, but I just realized it was never brought
up and it isn't in PEP 3137 (yet).

__
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

> Any details on those? They don't fail for me.

Here you are.

$ ./python Lib/test/test_cProfile.py

 121 function calls (101 primitive calls) in 1.000 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
10.0000.0001.0001.000 :1()
80.0640.0080.0800.010
test_cProfile.py:103(subhelper)
   280.0280.0010.0280.001
test_cProfile.py:115(__getattr__)
10.2700.2701.0001.000 test_cProfile.py:30(testfunc)
 23/30.1500.0070.1700.057 test_cProfile.py:40(factorial)
   200.0200.0010.0200.001 test_cProfile.py:53(mul)
20.0400.0200.6000.300 test_cProfile.py:60(helper)
40.1160.0290.1200.030 test_cProfile.py:78(helper1)
20.0000.0000.1400.070
test_cProfile.py:89(helper2_indirect)
80.3120.0390.4000.050 test_cProfile.py:93(helper2)
10.0000.0000.0000.000 utf_8.py:15(decode)
10.0000.0000.0000.000 {_codecs.utf_8_decode}
10.0000.0001.0001.000 {exec}
   120.0000.0000.0120.001 {hasattr}
40.0000.0000.0000.000 {method 'append' of 'list'
objects}
10.0000.0000.0000.000 {method 'disable' of
'_lsprof.Profiler' objects}
40.0000.0000.0000.000 {sys.exc_info}

   Ordered by: standard name

Function  called...
  ncalls  tottime
cumtime
:1()  ->   10.270
 1.000  test_cProfile.py:30(testfunc)
test_cProfile.py:103(subhelper)   ->  160.016
 0.016  test_cProfile.py:115(__getattr__)
test_cProfile.py:115(__getattr__) ->
test_cProfile.py:30(testfunc) ->   10.014
 0.130  test_cProfile.py:40(factorial)
   20.040
 0.600  test_cProfile.py:60(helper)
test_cProfile.py:40(factorial)->20/30.130
 0.147  test_cProfile.py:40(factorial)
  200.020
 0.020  test_cProfile.py:53(mul)
test_cProfile.py:53(mul)  ->
test_cProfile.py:60(helper)   ->   40.116
 0.120  test_cProfile.py:78(helper1)
   20.000
 0.140  test_cProfile.py:89(helper2_indirect)
   60.234
 0.300  test_cProfile.py:93(helper2)
test_cProfile.py:78(helper1)  ->   40.000
 0.004  {hasattr}
   40.000
 0.000  {method 'append' of 'list' objects}
   40.000
 0.000  {sys.exc_info}
test_cProfile.py:89(helper2_indirect) ->   20.006
 0.040  test_cProfile.py:40(factorial)
   20.078
 0.100  test_cProfile.py:93(helper2)
test_cProfile.py:93(helper2)  ->   80.064
 0.080  test_cProfile.py:103(subhelper)
   80.000
 0.008  {hasattr}
utf_8.py:15(decode)   ->   10.000
 0.000  {_codecs.utf_8_decode}
{_codecs.utf_8_decode}->
{exec}->   10.000
 1.000  :1()
   10.000
 0.000  utf_8.py:15(decode)
{hasattr} ->  120.012
 0.012  test_cProfile.py:115(__getattr__)
{method 'append' of 'list' objects}   ->
{method 'disable' of '_lsprof.Profiler' objects}  ->
{sys.exc_info}->

   Ordered by: standard name

Function  was called by...
  ncalls  tottime
cumtime
:1()  <-   10.000
 1.000  {exec}
test_cProfile.py:103(subhelper)   <-   80.064
 0.080  test_cProfile.py:93(helper2)
test_cProfile.py:115(__getattr__) <-  160.016
 0.016  test_cProfile.py:103(subhelper)
  120.012
 0.012  {hasattr}
test_cProfile.py:30(testfunc) <-   10.270
 1.000  :1()
test_cProfile.py:40(factorial)<-   10.014
 0.130  test_cProfile.py:30(testfunc)
20/30.130
 0.147  test_cProfile.py:40(factorial)
   2 

[issue1258] Removal of basestring type

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

BTW we need a 2to3 fixer for this.  Should be trivial -- just replace
*all* occurrences of basestring with str.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1282] re module needs to support bytes / memoryview well

2007-10-15 Thread Guido van Rossum

New submission from Guido van Rossum:

Once PEP 3137 is fully implemented, the re module needs to be fixed so
that the regex argument, the substitution argument, and the argument
being searched/replaced are allowed to be arbitrary bytes arrays; where
hashing is needed a copy in an immutable bytes object can be made.

--
messages: 56472
nosy: gvanrossum
severity: normal
status: open
title: re module needs to support bytes / memoryview well
versions: Python 3.0

__
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Even before this patch, the re module doesn't work very well on byte
strings. IMO this should be fixed.  I've filed a separate bug to remind
us: bug 1282.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1258] Removal of basestring type

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

Guido van Rossum wrote:
> BTW we need a 2to3 fixer for this.  Should be trivial -- just replace
> *all* occurrences of basestring with str.

I believe you that it's trivial for *you* but I've never dealt with the
fixers or the grammar. Fortunately for me I was able to copy the fixer
for standarderror. It toke just some minor tweaks :)

Let's see if the mail interface can handle attachments.

__
Tracker <[EMAIL PROTECTED]>

__# Copyright 2007 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Fixer for basestring -> str
"""

# Local imports
from fixes import basefix
from fixes.util import Name

class FixBasestr(basefix.BaseFix):

PATTERN = "'basestring'"

def transform(self, node, results):
return Name("str", prefix=node.get_prefix())

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



[issue1251] ssl module doesn't support non-blocking handshakes

2007-10-15 Thread Chris Stawarz

Chris Stawarz added the comment:

Bill,

You seem to be missing the whole point of doing non-blocking I/O,  
which is to handle multiple concurrent, I/O-bound tasks in a single  
OS thread.  The application must be able to try the handshake, detect  
that it didn't complete because I/O needs to take place, and then  
retry it at a later time of its choosing (presumably when select()  
says it's OK to read from the socket).  And between now and that  
later time, it can do other things, like read or write to other sockets.

The point is that the *application* must have control over when it  
does I/O, when it waits for sockets to be ready for I/O, and what it  
does in between.  There's just no way it can do this if the sslwrap()  
function doesn't return until the handshaking is complete.  sslwrap()  
can't "do the right thing", because the right thing is to return  
control to the application until it's ready to try the handshake again.

And this has nothing to do with the GIL or multiple threads.  Like I  
said, the point of doing non-blocking I/O with select() is to *avoid*  
the need for multiple threads.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Very impressive!

(Apologies if these lines are occasionally out of order.)

+extern PyObject* _bytes_isspace(const char *cptr, const Py_ssize_t len);

IMO all these functions should have names starting with _Py or _Py_,
since they are visible to the linker.

Also, why 'const Py_ssize_t'? It's a scalar!

+/* these store their len sized answer in the given preallocated *result
arg */

Mind using a Capital first letter?

+extern const char isspace__doc__[];

This needs a _Py or _Py_ prefix too.

+extern const unsigned int ctype_table[256];

Now this is no longer static, it also needs a _Py or _Py_ prefix.

+extern const unsigned char ctype_tolower[256];
+extern const unsigned char ctype_toupper[256];

Ditto (the macros are fine though, since they are only visible to code
that #includes this file, which is only a few files).

+Return True if all characters in S are whitespace\n\

Shouldn't that be bytes instead of characters (and consistently
throughout)?  And probably use B for the variable name instead of S.

+/* --- GPS - */

What's this?  Your initials? :-)  I don't think it's needed.  I'm
guessing you 

 /* The nullbytes are used by the stringlib during partition.
  * If partition is removed from bytes, nullbytes and its helper

This comment block refers to something that ain't gonna happen
(partition being removed).  IMO the whole comment block can go, it's a
red herring.

+/* XXX: this depends on a signed integer overflow to < 0 */
+/* C compilers, including gcc, do -NOT- guarantee this. */

(And repeated twice more.)  Wouldn't it be better to write this in a way
that doesn't require this XXX comment?  ISTR that we already had one
area where we had to fight with gcc because it had proved to itself that
something could never be negative, even though it could be due to
overflow.  The GCC authors won. :-(

+/* TODO(gps):

Don't you mean XXX(gps)? :-)

+ * These methods still need implementing (porting over from
stringobject.c):
+ *
+ * IN PROGRESS:
+ * .capitalize(), .title(), .upper(), .lower(), .center(), .zfill(),
+ * .expandtabs(), .ljust(), .rjust(), .swapcase(), .splitlines(), 
+ */
+

Hmmm... Aren't these done now?

+/* XXX(gps): the docstring above says any iterable int will do but the
+ * bytes_setslice code only accepts something supporting PEP 3118.
+ * Is a list or tuple of 0 <= ints <= 255 also supposed to work? */

Yes, it is, and it's a bug that it currently doesn't.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1283] PyBytes (buffer) .extend method needs to accept any iterable of ints

2007-10-15 Thread Gregory P. Smith

New submission from Gregory P. Smith:

The PyBytes (pep3137 buffer) .extend() method currently only accepts as
input something supporting the pep3118 buffer API.  It also needs to
accept an iterable of ints in the 0..255 range.

--
keywords: py3k
messages: 56478
nosy: gregory.p.smith
severity: normal
status: open
title: PyBytes (buffer) .extend method needs to accept any iterable of ints
versions: Python 3.0

__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Gregory P. Smith

Changes by Gregory P. Smith:


__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Gregory P. Smith

Changes by Gregory P. Smith:


__
Tracker <[EMAIL PROTECTED]>

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



[issue1284] typo in lib doc 7.3.2.1 MaildirMessage

2007-10-15 Thread Eric Wollesen

New submission from Eric Wollesen:

get_subdir( )
Return either "new" (if the message should be stored in the new
subdirectory) or "cur" (if the message should be stored in the cur
subdirectory). Note: A message is typically moved from new to cur after
its mailbox has been accessed, whether or not the message is has been
read. A message msg has been read if "S" not in msg.get_flags() is True. 



The last sentence above is incorrect.  The "not" should be removed.  It
should read:

A message msg has been read if "S" in msg.get_flags() is True.

--
components: Documentation
messages: 56481
nosy: encoded
severity: minor
status: open
title: typo in lib doc 7.3.2.1 MaildirMessage
type: rfe
versions: Python 2.5

__
Tracker <[EMAIL PROTECTED]>

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



[issue1278] imp.find_module() ignores -*- coding: Latin-1 -*-

2007-10-15 Thread Alexandre Vassalotti

Changes by Alexandre Vassalotti:


--
nosy: +alexandre.vassalotti

__
Tracker <[EMAIL PROTECTED]>

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



[issue1272] Decode __file__ and co_filename to unicode using fs default

2007-10-15 Thread Alexandre Vassalotti

Alexandre Vassalotti added the comment:

I wrote in msg56419:
> It is not perfect, since the extra function calls in the codecs module
> causes test_profile and test_doctest to fail.

How this was resolved?

__
Tracker <[EMAIL PROTECTED]>

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



[issue1272] Decode __file__ and co_filename to unicode using fs default

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

>> It is not perfect, since the extra function calls in the codecs module
>> causes test_profile and test_doctest to fail.
> 
> How this was resolved?

It's not resolved yet.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1267] Py3K cannot run as ``python -S``

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

I've carefully checked and tested the initstdio() method. I'm sure that
I've catched every edged case. The unit tests pass w/o complains.

I've also added a PyErr_Display() call to Py_FatalError(). It's still
hard to understand an error in io.py but at least the dependency on
site.py is removed.

__
Tracker <[EMAIL PROTECTED]>

__Index: Python/pythonrun.c
===
--- Python/pythonrun.c	(revision 58477)
+++ Python/pythonrun.c	(working copy)
@@ -51,6 +51,7 @@
 /* Forward */
 static void initmain(void);
 static void initsite(void);
+static int initstdio(void);
 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
 			  PyCompilerFlags *, PyArena *);
 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
@@ -241,8 +242,12 @@
 		initsigs(); /* Signal handling stuff, including initintr() */
 
 	initmain(); /* Module __main__ */
+	if (initstdio() < 0)
+		Py_FatalError("Py_Initialize: can't initialize sys standard"
+"streams");
 	if (!Py_NoSiteFlag)
 		initsite(); /* Module site */
+	
 
 	/* auto-thread-state API, if available */
 #ifdef WITH_THREAD
@@ -676,6 +681,103 @@
 	}
 }
 
+/* Initialize sys.stdin, stdout, stderr and __builtins__.open */
+static int
+initstdio(void)
+{
+	PyObject *iomod=NULL, *open, *wrapper;
+	PyObject *bimod=NULL;
+	PyObject *m;
+	PyObject *std=NULL, *args=NULL, *kwargs=NULL;
+	int status = 0;
+
+	/* Hack to avoid a nasty recursion issue when Python is invoked
+	   in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
+	if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
+		goto error;
+	}
+	Py_DECREF(m);
+	
+	if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
+		goto error;
+	}
+	Py_DECREF(m);
+
+	if (!(bimod = PyImport_ImportModule("__builtin__"))) {
+		goto error;
+	}
+
+	if (!(iomod = PyImport_ImportModule("io"))) {
+		goto error;
+	}
+	if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
+		goto error;
+	}
+	if (!(open = PyObject_GetAttrString(iomod, "open"))) {
+		goto error;
+	}
+
+	if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
+		goto error;
+	}
+	
+	/* Add __builtin__.open */
+	if (!(kwargs = PyDict_New())) {
+		goto error;
+	}
+	if (PyDict_SetItemString(kwargs, "newline", PyString_FromString("\n"))
+	== -1) {
+		goto error;
+	}
+	
+	/* Set sys.stdin */
+	if (!(args = Py_BuildValue("(is)", 0, "r"))) {
+		goto error;
+	}
+	if (!(std = PyObject_Call(open, args, kwargs))) {
+		goto error;
+	}
+	PySys_SetObject("__stdin__", std);
+	PySys_SetObject("stdin", std);
+	Py_DECREF(std);
+	Py_DECREF(args);
+	
+	/* Set sys.stdout */
+	if (!(args = Py_BuildValue("(is)", 1, "w"))) {
+		goto error;
+	}
+	if (!(std = PyObject_Call(open, args, kwargs))) {
+		goto error;
+	}
+	PySys_SetObject("__stdout__", std);
+	PySys_SetObject("stdout", std);
+	Py_DECREF(std);
+	Py_DECREF(args);
+	
+	/* Set sys.stderr */
+	if (!(args = Py_BuildValue("(is)", 2, "w"))) {
+		goto error;
+	}
+	if (!(std = PyObject_Call(open, args, kwargs))) {
+		goto error;
+	}
+	PySys_SetObject("__stderr__", std);
+	PySys_SetObject("stderr", std);
+	Py_DECREF(std);
+	Py_DECREF(args);
+	
+	goto finally;
+
+error:
+	status = -1;
+	Py_XDECREF(args);
+finally:
+	Py_XDECREF(kwargs);
+	Py_XDECREF(bimod);
+	Py_XDECREF(iomod);
+	return status;
+}
+
 /* Parse input from a file and execute it */
 
 int
@@ -1146,10 +1248,10 @@
 	int err = 0;
 	PyObject *f = PySys_GetObject("stderr");
 	Py_INCREF(value);
-	if (f == NULL)
+	if (f == NULL) {
 		_PyObject_Dump(value);
-	if (f == NULL)
 		fprintf(stderr, "lost sys.stderr\n");
+	}
 	else {
 		fflush(stdout);
 		if (tb && tb != Py_None)
@@ -1589,6 +1691,9 @@
 Py_FatalError(const char *msg)
 {
 	fprintf(stderr, "Fatal Python error: %s\n", msg);
+	if (PyErr_Occurred()) {
+		PyErr_Print();
+	}
 #ifdef MS_WINDOWS
 	OutputDebugString("Fatal Python error: ");
 	OutputDebugString(msg);
Index: Lib/site.py
===
--- Lib/site.py	(revision 58477)
+++ Lib/site.py	(working copy)
@@ -402,23 +402,6 @@
 (err.__class__.__name__, err))
 
 
-def installnewio():
-"""Install new I/O library as default."""
-import io
-# Hack to avoid a nasty recursion issue when Python is invoked
-# in verbose mode: pre-import the Latin-1 and UTF-8 codecs
-from encodings import latin_1, utf_8
-# Trick so that open won't become a bound method when stored
-# as a class variable (as dumbdbm does)
-class open:
-def __new__(cls, *args, **kwds):
-return io.open(*args, **kwds)
-__builtin__.open = open
-sys.__stdin__ = sys.stdin = io.open(0, "r", newline='\n')
-sys.__stdout__ = sys.stdout = io.open(1, "w", newline='\n')
-sys.__stderr__ = sys.stderr = io.open(2, "w", newline='\n')
-
-
 def main():
 abs__file__()

[issue1259] string find and rfind methods give a TypeError that is misleading

2007-10-15 Thread Facundo Batista

Facundo Batista added the comment:

Documentation for find():

str.find(sub[, start[, end]])
Return the lowest index in the string where substring sub is found,
such that sub is contained in the range [start, end]. Optional arguments
start and end are interpreted as in slice notation. Return -1 if sub is
not found.

I think that it shouldn't be possible to call it with None arguments. 

The error message is wrong: it's a TypeError, but the message should say
something like...

  TypeError: slice indices must be integers or have an __index__ method

If you're ok with this change, assign this bug to me and I'll fix it.

Regards,

--
nosy: +facundobatista

__
Tracker <[EMAIL PROTECTED]>

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



[issue1251] ssl module doesn't support non-blocking handshakes

2007-10-15 Thread Bill Janssen

Bill Janssen added the comment:

"You seem to be missing the whole point of doing non-blocking I/O,"

You know, I think that's right.  I'm so used to using threads by now
that the whole select-based approach seems very odd to me by now.

OK, I've folded your patch into the PyPI version, ssl 1.8.  It will
meander into the trunk and 3K version as well.  Thanks for the help!

Bill

On 10/15/07, Chris Stawarz <[EMAIL PROTECTED]> wrote:
>
> Chris Stawarz added the comment:
>
> Bill,
>
> You seem to be missing the whole point of doing non-blocking I/O,
> which is to handle multiple concurrent, I/O-bound tasks in a single
> OS thread.  The application must be able to try the handshake, detect
> that it didn't complete because I/O needs to take place, and then
> retry it at a later time of its choosing (presumably when select()
> says it's OK to read from the socket).  And between now and that
> later time, it can do other things, like read or write to other sockets.
>
> The point is that the *application* must have control over when it
> does I/O, when it waits for sockets to be ready for I/O, and what it
> does in between.  There's just no way it can do this if the sslwrap()
> function doesn't return until the handshaking is complete.  sslwrap()
> can't "do the right thing", because the right thing is to return
> control to the application until it's ready to try the handshake again.
>
> And this has nothing to do with the GIL or multiple threads.  Like I
> said, the point of doing non-blocking I/O with select() is to *avoid*
> the need for multiple threads.
>
> __
> Tracker <[EMAIL PROTECTED]>
> 
> __
>

__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

Good! Check it in before I change my mind. :-)

The words can be tweaked later.

> 04b is the same as 04, i just fixed the docstrings that i had missed in
> stringlib/transmogrify.h to use 'B' instead of 'S' and say they return a
> "modified copy of B" instead of a "string"
>
> wording could probably be improved further if anyone has any ideas.

__
Tracker <[EMAIL PROTECTED]>

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



[issue1267] Py3K cannot run as ``python -S``

2007-10-15 Thread Guido van Rossum

Guido van Rossum added the comment:

> I've carefully checked and tested the initstdio() method. I'm sure that
> I've catched every edged case. The unit tests pass w/o complains.
>
> I've also added a PyErr_Display() call to Py_FatalError(). It's still
> hard to understand an error in io.py but at least the dependency on
> site.py is removed.

Very cool!

Some final suggestions:

+   Py_FatalError("Py_Initialize: can't initialize sys standard"
+   "streams");

Break this differently:

Py_FatalError(
"Py_");

Don't call open() with keyword arg for newline="\r"; open() takes
positional args too. This is done specifically to simplify life for C
code calling it. :-) Perhaps one of the PyFunction_Call(..) variants
makes it easier to call it without having to explicitly construct the
tuple for the argument list. (All this because you're leaking the
value of PyString_FromString("\n"). :-)

I would change the error handling to avoid the 'finally' label, like this:

if (0) {
  error:
status = -1;
Py_XDECREF(args);
}

I would add a comment "see initstdio() in pythonrun.c" to the
OpenWrapper class, which otherwise looks a bit mysterious (as it's not
used anywhere in the Python code).

Thanks for doing this!!!

__
Tracker <[EMAIL PROTECTED]>

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



[issue1259] string find and rfind methods give a TypeError that is misleading

2007-10-15 Thread Robert Collins

Robert Collins added the comment:

> The error message is wrong: it's a TypeError, but the message should say
> something like...
> 
>   TypeError: slice indices must be integers or have an __index__ method

This would be a false message, as, as my report demonstrated, slice
indices *can* be None. And there is a very good reason for accepting
None in the second parameter in slice notation as there is no value for
'-0' to represent the end of the region being sliced, and None meaning
'default' fills that need most effectively.

Surely the right fix is as Barry noted, to handle None correctly within
this function?

__
Tracker <[EMAIL PROTECTED]>

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



[issue1663329] subprocess/popen close_fds perform poor if SC_OPEN_MAX is hi

2007-10-15 Thread Mike Klaas

Mike Klaas added the comment:

This problem has also afflicted us.

Attached is a patch which adds closerange(fd_low, fd_high) to the posix 
(and consequently os) module, and modifies subprocess to use it.  Patch 
is against trunk but should work for 2.5maint.

I don't really think that this is useful enough to add to the public 
api, but it results in a huge performance benefit for subprocess:

[python-trunk]$ ./python -m timeit -s 'import python_close' 
'python_close.go(10)'
10 loops, best of 3: 358 msec per loop
[python-trunk]$ ./python -m timeit -s 'import os' 'os.closerange(4, 
10)'
10 loops, best of 3: 20.7 msec per loop
[python-trunk]$ ./python -m timeit -s 'import python_close' 
'python_close.go(30)'
10 loops, best of 3: 1.05 sec per loop
[python-trunk]$ ./python -m timeit -s 'import os' 'os.closerange(4, 
30)'10 loops, best of 3: 63 msec per loop

[python-trunk]$ cat python_close.py
import os, sys
def go(N):
for i in xrange(4, N):
try:
os.close(i)
except:
pass

--
nosy: +klaas

_
Tracker <[EMAIL PROTECTED]>

_

posix_closerange.patch
Description: Binary data
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1663329] subprocess/popen close_fds perform poor if SC_OPEN_MAX is hi

2007-10-15 Thread Mike Klaas

Mike Klaas added the comment:

I see that some spaces crept in to the patch.  I can fix that (and perhaps 
rename the function to start with an underscore) if desired.

_
Tracker <[EMAIL PROTECTED]>

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



[issue1663329] subprocess/popen close_fds perform poor if SC_OPEN_MAX is hi

2007-10-15 Thread Mike Klaas

Mike Klaas added the comment:

Finally, I did not include any platform-specific optimizations, as I don't 
have AIX or solaris boxes on which to test them (and they can easily be 
added later).  An order-mag speedup on all *nix platforms is a good start.

_
Tracker <[EMAIL PROTECTED]>

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



[issue1663329] subprocess/popen close_fds perform poor if SC_OPEN_MAX is hi

2007-10-15 Thread Martin v. Löwis

Changes by Martin v. Löwis:


--
keywords: +patch

_
Tracker <[EMAIL PROTECTED]>

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



[issue1267] Py3K cannot run as ``python -S``

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

Guido van Rossum wrote:
> Don't call open() with keyword arg for newline="\r"; open() takes
> positional args too. This is done specifically to simplify life for C
> code calling it. :-) Perhaps one of the PyFunction_Call(..) variants
> makes it easier to call it without having to explicitly construct the
> tuple for the argument list. (All this because you're leaking the
> value of PyString_FromString("\n"). :-)

I need a way to open a file with a specific encoding for
imp.find_module(), too. I found PyFile_FromFile(). It uses io.open but
it doesn't accept the additional arguments. I like to add another
function PyFile_FromFileEx() to the API.

PyObject *
PyFile_FromFileEx(FILE *fp, char *name, char *mode, int (*close)(FILE
*), int buffering, char *encoding, char *newline)

Some people may also miss the PyFile_FromString() function but that's a
different story. With the my new function I can create sys.stdin with:

PyFile_FromFileEx(stdin, "", "r", fclose, -1, NULL, "\n")

I kinda like it :)

> I would change the error handling to avoid the 'finally' label, like this:
> 
> if (0) {
>   error:
> status = -1;
> Py_XDECREF(args);
> }

Wow, that's tricky. :)

> I would add a comment "see initstdio() in pythonrun.c" to the
> OpenWrapper class, which otherwise looks a bit mysterious (as it's not
> used anywhere in the Python code).

That sounds like a good idea!

The code for const char *PyTokenizer_FindEncoding(FILE *fp) and
imp.find_module() is also finished and works.

Christian

__
Tracker <[EMAIL PROTECTED]>

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



[issue1267] Py3K cannot run as ``python -S``

2007-10-15 Thread Christian Heimes

Christian Heimes added the comment:

The patch is a combined patch for the imp.find_module() problem and
initstdio. Both patches depend on the new PyFile_FromFileEx() function.
I hope you don't mind.

__
Tracker <[EMAIL PROTECTED]>

__Index: Python/pythonrun.c
===
--- Python/pythonrun.c	(revision 58477)
+++ Python/pythonrun.c	(working copy)
@@ -51,6 +51,7 @@
 /* Forward */
 static void initmain(void);
 static void initsite(void);
+static int initstdio(void);
 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
 			  PyCompilerFlags *, PyArena *);
 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
@@ -241,6 +242,9 @@
 		initsigs(); /* Signal handling stuff, including initintr() */
 
 	initmain(); /* Module __main__ */
+	if (initstdio() < 0)
+		Py_FatalError(
+		"Py_Initialize: can't initialize sys standard streams");
 	if (!Py_NoSiteFlag)
 		initsite(); /* Module site */
 
@@ -676,6 +680,84 @@
 	}
 }
 
+/* Initialize sys.stdin, stdout, stderr and __builtin__.open */
+static int
+initstdio(void)
+{
+	PyObject *iomod=NULL, *open, *wrapper;
+	PyObject *bimod=NULL;
+	PyObject *m;
+	PyObject *std=NULL;
+	int status = 0;
+
+	/* Hack to avoid a nasty recursion issue when Python is invoked
+	   in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
+	if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
+		goto error;
+	}
+	Py_DECREF(m);
+	
+	if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
+		goto error;
+	}
+	Py_DECREF(m);
+
+	if (!(bimod = PyImport_ImportModule("__builtin__"))) {
+		goto error;
+	}
+
+	if (!(iomod = PyImport_ImportModule("io"))) {
+		goto error;
+	}
+	if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
+		goto error;
+	}
+	if (!(open = PyObject_GetAttrString(iomod, "open"))) {
+		goto error;
+	}
+
+	/* Set __builtin__.open */
+	if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
+		goto error;
+	}
+	
+	/* Set sys.stdin */
+	if (!(std = PyFile_FromFileEx(stdin, "", "r", fclose, -1,
+  NULL, "\n"))) {
+		goto error;
+	}
+	PySys_SetObject("__stdin__", std);
+	PySys_SetObject("stdin", std);
+	Py_DECREF(std);
+
+	/* Set sys.stdout */
+	if (!(std = PyFile_FromFileEx(stdout, "", "w", fclose, -1,
+  NULL, "\n"))) {
+goto error;
+}
+	PySys_SetObject("__stdout__", std);
+	PySys_SetObject("stdout", std);
+	Py_DECREF(std);
+
+	/* Set sys.stderr */
+	if (!(std = PyFile_FromFileEx(stderr, "", "w", fclose, -1,
+  NULL, "\n"))) {
+goto error;
+}
+PySys_SetObject("__stderr__", std);
+	PySys_SetObject("stderr", std);
+	Py_DECREF(std);
+
+if (0) {
+  error:
+status = -1;
+}
+
+	Py_XDECREF(bimod);
+	Py_XDECREF(iomod);
+	return status;
+}
+
 /* Parse input from a file and execute it */
 
 int
@@ -1146,10 +1228,10 @@
 	int err = 0;
 	PyObject *f = PySys_GetObject("stderr");
 	Py_INCREF(value);
-	if (f == NULL)
+	if (f == NULL) {
 		_PyObject_Dump(value);
-	if (f == NULL)
 		fprintf(stderr, "lost sys.stderr\n");
+	}
 	else {
 		fflush(stdout);
 		if (tb && tb != Py_None)
@@ -1589,6 +1671,9 @@
 Py_FatalError(const char *msg)
 {
 	fprintf(stderr, "Fatal Python error: %s\n", msg);
+	if (PyErr_Occurred()) {
+		PyErr_Print();
+	}
 #ifdef MS_WINDOWS
 	OutputDebugString("Fatal Python error: ");
 	OutputDebugString(msg);
Index: Python/import.c
===
--- Python/import.c	(revision 58477)
+++ Python/import.c	(working copy)
@@ -91,6 +91,9 @@
 /* This table is defined in config.c: */
 extern struct _inittab _PyImport_Inittab[];
 
+/* Method from Parser/tokenizer.c */
+extern const char * PyTokenizer_FindEncoding(FILE *fp);
+
 struct _inittab *PyImport_Inittab = _PyImport_Inittab;
 
 /* these tables define the module suffixes that Python recognizes */
@@ -2558,6 +2561,7 @@
 	struct filedescr *fdp;
 	char pathname[MAXPATHLEN+1];
 	FILE *fp = NULL;
+	const char *encoding = NULL;
 
 	pathname[0] = '\0';
 	if (path == Py_None)
@@ -2566,7 +2570,11 @@
 	if (fdp == NULL)
 		return NULL;
 	if (fp != NULL) {
-		fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
+		encoding = PyTokenizer_FindEncoding(fp);
+		encoding = (encoding != NULL) ? encoding :
+		PyUnicode_GetDefaultEncoding();
+		fob = PyFile_FromFileEx(fp, pathname, fdp->mode, fclose,
+	-1, (char*)encoding, NULL);
 		if (fob == NULL) {
 			fclose(fp);
 			return NULL;
Index: Include/fileobject.h
===
--- Include/fileobject.h	(revision 58477)
+++ Include/fileobject.h	(working copy)
@@ -9,6 +9,9 @@
 #define PY_STDIOTEXTMODE "b"
 
 PyAPI_FUNC(PyObject *) PyFile_FromFile(FILE *, char *, char *, int (*)(FILE*));
+PyAPI_FUNC(PyObject *) PyFile_FromFileEx(FILE *, char *, char *,
+	 int (*)(FILE *), 

[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Gregory P. Smith

Gregory P. Smith added the comment:

Committed revision 58493

--
resolution:  -> accepted
status: open -> closed

__
Tracker <[EMAIL PROTECTED]>

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



[issue1261] PEP 3137: make bytesobject.c methods

2007-10-15 Thread Gregory P. Smith

Changes by Gregory P. Smith:


__
Tracker <[EMAIL PROTECTED]>

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