[Python-Dev] sys.setcheckinterval doc problems

Tim Peters tim.one@comcast.net
Sun, 6 Jul 2003 14:23:34 -0400


This is a multi-part message in MIME format.

------=_NextPart_000_0016_01C343CA.2F1584A0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

[Alex Martelli]
> ...
> As I was checking that, I was struck by the fact that
> having "write-only" settings is quite an anomaly --
> e.g. it makes writing a function that sets the check
> interval to 0 temporarily, fiddles around a bit, then
> sets it back to the previous value, a bit of trouble.
>
> Now that the check interval is a global variable, is
> there any problem with making it readable (presumably
> with a new sys.getcheckinterval() function) as well as
> writable?

Write-only settings are indeed strange.  We could add a new function, or
have setcheckinterval() return the old value.

The attached patch implements the former.  Guido, do you object to adding
this to 2.3?  I don't (the potential for breakage seems insignificant).

------=_NextPart_000_0016_01C343CA.2F1584A0
Content-Type: text/plain;
	name="getcheck.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="getcheck.txt"

Index: Doc/lib/libsys.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v
retrieving revision 1.65
diff -c -r1.65 libsys.tex
*** Doc/lib/libsys.tex	2 Jul 2003 21:38:34 -0000	1.65
--- Doc/lib/libsys.tex	6 Jul 2003 18:21:43 -0000
***************
*** 197,202 ****
--- 197,207 ----
    or when \code{os._exit()} is called.}
  \end{datadesc}
  
+ \begin{funcdesc}{getcheckinterval}{}
+   Return the interpreter's ``check interval'';
+   see \function{setcheckinterval()}.
+ \end{funcdesc}
+ 
  \begin{funcdesc}{getdefaultencoding}{}
    Return the name of the current default string encoding used by the
    Unicode implementation.
Index: Lib/test/test_sys.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sys.py,v
retrieving revision 1.7
diff -c -r1.7 test_sys.py
*** Lib/test/test_sys.py	1 May 2003 17:45:51 -0000	1.7
--- Lib/test/test_sys.py	6 Jul 2003 18:21:44 -0000
***************
*** 172,179 ****
  
      def test_setcheckinterval(self):
          self.assertRaises(TypeError, sys.setcheckinterval)
!         sys.setcheckinterval(120)
!         sys.setcheckinterval(100)
  
      def test_recursionlimit(self):
          self.assertRaises(TypeError, sys.getrecursionlimit, 42)
--- 172,181 ----
  
      def test_setcheckinterval(self):
          self.assertRaises(TypeError, sys.setcheckinterval)
!         orig = sys.getcheckinterval()
!         for n in 0, 100, 120, orig: # orig last to restore starting state
!             sys.setcheckinterval(n)
!             self.assertEquals(sys.getcheckinterval(), n)
  
      def test_recursionlimit(self):
          self.assertRaises(TypeError, sys.getrecursionlimit, 42)
Index: Misc/NEWS
===================================================================
RCS file: /cvsroot/python/python/dist/src/Misc/NEWS,v
retrieving revision 1.808
diff -c -r1.808 NEWS
*** Misc/NEWS	4 Jul 2003 04:40:44 -0000	1.808
--- Misc/NEWS	6 Jul 2003 18:21:46 -0000
***************
*** 10,15 ****
--- 10,18 ----
  Core and builtins
  -----------------
  
+ - The new function sys.getcheckinterval() returns the last value set
+   by sys.setcheckinterval().
+ 
  - The Windows implementation of PyThread_start_new_thread() never
    checked error returns from Windows functions correctly.  As a result,
    it could claim to start a new thread even when the Microsoft
Index: Python/sysmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v
retrieving revision 2.119
diff -c -r2.119 sysmodule.c
*** Python/sysmodule.c	10 May 2003 07:08:50 -0000	2.119
--- Python/sysmodule.c	6 Jul 2003 18:21:47 -0000
***************
*** 432,437 ****
--- 432,447 ----
  );
  
  static PyObject *
+ sys_getcheckinterval(PyObject *self, PyObject *args)
+ {
+ 	return PyInt_FromLong(_Py_CheckInterval);
+ }
+ 
+ PyDoc_STRVAR(getcheckinterval_doc,
+ "getcheckinterval() -> current check interval; see setcheckinterval()."
+ );
+ 
+ static PyObject *
  sys_setrecursionlimit(PyObject *self, PyObject *args)
  {
  	int new_limit;
***************
*** 723,728 ****
--- 733,740 ----
  #endif
  	{"setcheckinterval",	sys_setcheckinterval, METH_VARARGS,
  	 setcheckinterval_doc}, 
+ 	{"getcheckinterval",	sys_getcheckinterval, METH_NOARGS,
+ 	 getcheckinterval_doc}, 
  #ifdef HAVE_DLOPEN
  	{"setdlopenflags", sys_setdlopenflags, METH_VARARGS, 
  	 setdlopenflags_doc},

------=_NextPart_000_0016_01C343CA.2F1584A0--