In <[EMAIL PROTECTED]>, James T. Dennis wrote:
> Tonight I discovered something odd in the __doc__ for tempfile
> as shipped with Python 2.4.4 and 2.5: it says:
>
> This module also provides some data items to the user:
>
> TMP_MAX - maximum number of names that will be tried before
> giving up.
> template - the default prefix for all temporary names.
> You may change this to control the default prefix.
>
> ... which would lead one to think that the following code would work:
>
> >>> import tempfile
> >>> tempfile.template = 'mytest'
> >>> tf = tempfile.NamedTemporaryFile()
> >>> tf.name
> '/tmp/mytest-XXXXXX'
>
> It doesn't.
The source says:
__all__ = [
"NamedTemporaryFile", "TemporaryFile", # high level safe interfaces
"mkstemp", "mkdtemp", # low level safe interfaces
"mktemp", # deprecated unsafe interface
"TMP_MAX", "gettempprefix", # constants
"tempdir", "gettempdir"
]
Maybe the doc should be clearer in saying "constants" too.
> Secondly, the author(s) of the tempfile module apparently didn't
> understand this either. And no one else even noticed that the __doc__
> is wrong (or at least misleading -- since the only way I can see to
> change tempfile.template is to edit the .py file!
You can change it by simply assigning to the name:
In [15]: tempfile.template = 'spam'
In [16]: tempfile.template
Out[16]: 'spam'
If you want to change the outcome of the functions and objects then simply
give the prefix as argument.
In [21]: tempfile.mktemp(prefix='eggs')
Out[21]: '/tmp/eggsBqiqZD'
In [22]: a = tempfile.NamedTemporaryFile(prefix='eric')
In [23]: a.name
Out[23]: '/tmp/ericHcns14'
> ... why can't I change that value in that other namespace? Is it
> a closure? (Or like a closure?) Where is this particular aspect
> of the import/namespace semantics documented?
You *can* change it, but it is not used by the code in that module.
Ciao,
Marc 'BlackJack' Rintsch
--
http://mail.python.org/mailman/listinfo/python-list