Skip to content

Commit

Permalink
Patch #1215184: fileinput now has a fileno() function for getting the
Browse files Browse the repository at this point in the history
current file number.
  • Loading branch information
birkenfeld committed Feb 19, 2006
1 parent 602b9ba commit 67e9fb9
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 7 deletions.
15 changes: 11 additions & 4 deletions Doc/lib/libfileinput.tex
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ \section{\module{fileinput} ---
line has been read, returns \code{None}.
\end{funcdesc}

\begin{funcdesc}{fileno}{}
Return the integer ``file descriptor'' for the current file. When no
file is opened (before the first line and between files), returns
\code{-1}.
\end{funcdesc}

\begin{funcdesc}{lineno}{}
Return the cumulative line number of the line that has just been
read. Before the first line has been read, returns \code{0}. After
Expand Down Expand Up @@ -107,10 +113,11 @@ \section{\module{fileinput} ---
\begin{classdesc}{FileInput}{\optional{files\optional{,
inplace\optional{, backup}}}}
Class \class{FileInput} is the implementation; its methods
\method{filename()}, \method{lineno()}, \method{fileline()},
\method{isfirstline()}, \method{isstdin()}, \method{nextfile()} and
\method{close()} correspond to the functions of the same name in the
module. In addition it has a \method{readline()} method which
\method{filename()}, \method{fileno()}, \method{lineno()},
\method{fileline()}, \method{isfirstline()}, \method{isstdin()},
\method{nextfile()} and \method{close()} correspond to the functions
of the same name in the module.
In addition it has a \method{readline()} method which
returns the next input line, and a \method{__getitem__()} method
which implements the sequence behavior. The sequence must be
accessed in strictly sequential order; random access and
Expand Down
24 changes: 21 additions & 3 deletions Lib/fileinput.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@
- optional getopt argument processing
- specify open mode ('r' or 'rb')
- fileno()
- isatty()
- read(), read(size), even readlines()
Expand Down Expand Up @@ -153,6 +152,15 @@ def filelineno():
raise RuntimeError, "no active input()"
return _state.filelineno()

def fileno():
"""
Return the file number of the current file. When no file is currently
opened, returns -1.
"""
if not _state:
raise RuntimeError, "no active input()"
return _state.fileno()

def isfirstline():
"""
Returns true the line just read is the first line of its file,
Expand All @@ -175,8 +183,9 @@ class FileInput:
"""class FileInput([files[, inplace[, backup]]])
Class FileInput is the implementation of the module; its methods
filename(), lineno(), fileline(), isfirstline(), isstdin(), nextfile()
and close() correspond to the functions of the same name in the module.
filename(), lineno(), fileline(), isfirstline(), isstdin(), fileno(),
nextfile() and close() correspond to the functions of the same name
in the module.
In addition it has a readline() method which returns the next
input line, and a __getitem__() method which implements the
sequence behavior. The sequence must be accessed in strictly
Expand Down Expand Up @@ -334,6 +343,15 @@ def lineno(self):
def filelineno(self):
return self._filelineno

def fileno(self):
if self._file:
try:
return self._file.fileno()
except ValueError:
return -1
else:
return -1

def isfirstline(self):
return self._filelineno == 1

Expand Down
16 changes: 16 additions & 0 deletions Lib/test/test_fileinput.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,3 +167,19 @@ def writeFiles():
verify(lines == ["A\n", "B"])
finally:
remove_tempfiles(t1)

if verbose:
print "16. fileno()"
try:
t1 = writeTmp(1, ["A\nB"])
t2 = writeTmp(2, ["C\nD"])
fi = FileInput(files=(t1, t2))
verify(fi.fileno() == -1)
line = fi.next()
verify(fi.fileno() != -1)
fi.nextfile()
verify(fi.fileno() == -1)
line = list(fi)
verify(fi.fileno() == -1)
finally:
remove_tempfiles(t1, t2)
3 changes: 3 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,9 @@ Extension Modules
Library
-------

- Patch #1215184: fileinput now has a fileno() function for getting the
current file number.

- Patch #1349274: gettext.install() now optionally installs additional
translation functions other than _() in the builtin namespace.

Expand Down

0 comments on commit 67e9fb9

Please sign in to comment.