[Patches] [ python-Patches-608182 ] Enhanced file constructor
SourceForge.net
noreply@sourceforge.net
Mon, 02 Jun 2003 21:47:22 -0700
Patches item #608182, was opened at 2002-09-11 20:45
Message generated for change (Comment added) made by bcannon
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=608182&group_id=5470
Category: Core (C code)
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Taral (taral)
Assigned to: Nobody/Anonymous (nobody)
Summary: Enhanced file constructor
Initial Comment:
This patch allows the file constructor to take a file
descriptor, allowing for much easier extension of its
functionality.
----------------------------------------------------------------------
>Comment By: Brett Cannon (bcannon)
Date: 2003-06-02 21:47
Message:
Logged In: YES
user_id=357491
You can use groups.google.com or python-list@python.org.
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2003-06-02 12:33
Message:
Logged In: YES
user_id=25129
No, I don't have usenet access.
----------------------------------------------------------------------
Comment By: Brett Cannon (bcannon)
Date: 2003-06-01 14:21
Message:
Logged In: YES
user_id=357491
Has a discussion comp.lang.python occured to judge the demand for this
feature?
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2003-05-09 09:37
Message:
Logged In: YES
user_id=25129
Okay, you have a good point. I could convert it to this format:
file(filename[, mode[, buffering[, fd]]])
or
file(filename[,mode[, buffering]][, fd=fd])
That should satisfy the type requirement. I kind of prefer
the keyword version, but that's just me.
I know about the containment solution, but I can't pass
containers to functions that expect isinstance(arg, file).
(As for os.popen, that's happens to be why I made this patch
in the first case. I needed to extend popen functionality,
and this was the minimum way to do it without violating the
above isinstance requirement.)
----------------------------------------------------------------------
Comment By: Tim Peters (tim_one)
Date: 2003-05-08 20:53
Message:
Logged In: YES
user_id=31435
You do need to convince people it's a good idea. I cringe
for two reasons: it mixes up a higher-level facility with a
lower-level one; and, in a language with dynamic typing, it's
*helpful* that file(xyz, 'w') raises TypeError today when the
runtime type of xyz is an integer. This catches a serious
error before it can harm files.
I'd dislike losing that error detection more than I'd like the
new facility this offers. Perhaps I'm in a small minority,
though, in which case a discussion on comp.lang.python
could reveal that. Someone there will point out that while
you can't get what you want directly via subclassing file
today, you can get the effect via containment and a
__getattr__ hook (to delegate the file methods you don't
want to intercept to the contained file object). That covers
cases this patch doesn't, too, such as file objects returned
by os.popen() (i.e., even with this patch, there are still "file
objects that CANNOT be subclassed").
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2003-05-08 19:32
Message:
Logged In: YES
user_id=25129
I have a very good reason! Without it, there are file
objects that CANNOT be subclassed, specifically those
created via os.fdopen.
Yes, I am _still_ waiting for this to go in. Do I need to do
something else on some mailing list to get people to notice it?
----------------------------------------------------------------------
Comment By: Brett Cannon (bcannon)
Date: 2003-05-08 18:09
Message:
Logged In: YES
user_id=357491
This functionality has still not made it into 2.3b1 . If no one speaks up and
comes up with a good argument to apply this by May 15 I am going to reject
this patch.
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2003-01-31 12:12
Message:
Logged In: YES
user_id=25129
Didn't make it into 2.3alpha?
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2002-09-12 11:39
Message:
Logged In: YES
user_id=25129
class some_class(file):
def __init__(self, arg):
fd = do_some_os_stuff_with_forks_and_pipes_or_sockets
return file.__init__(self, fd, 'r')
def close(self):
do_some_cleanup_stuff
return file.close(self)
and so on.
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2002-09-11 23:59
Message:
Logged In: YES
user_id=21627
What's wrong with os.fdopen? Why is
f = file(10, "r")
much easier than
f = os.fdopen(10, "r")
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2002-09-11 22:31
Message:
Logged In: YES
user_id=25129
Okay, fixed it all. Passes 'make test' on linux/x86 with
default configure (does not test dbm/gdbm/mpz/bsddb).
(btw, old versions can be deleted)
----------------------------------------------------------------------
Comment By: Neal Norwitz (nnorwitz)
Date: 2002-09-11 21:10
Message:
Logged In: YES
user_id=33168
fp's and fd's are not interchangable. The variable should
be called fd, since it's an int. fill_file_fields() 2nd arg
is a FILE*, not an int. So you would need to do file =
fdopen(fd, mode), then pass file as the 2nd arg. In order
for this patch to be accepted, a test would also need to be
added (see Lib/test/test_file.py) and doc should be updated
(see Doc/lib/libfuncs.tex).
----------------------------------------------------------------------
Comment By: Taral (taral)
Date: 2002-09-11 20:47
Message:
Logged In: YES
user_id=25129
Bah, forgot the variable.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=608182&group_id=5470