summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/reference/introduction.rst2
-rw-r--r--Lib/calendar.py20
-rw-r--r--Lib/logging/config.py30
-rw-r--r--Objects/descrobject.c18
4 files changed, 54 insertions, 16 deletions
diff --git a/Doc/reference/introduction.rst b/Doc/reference/introduction.rst
index ceb2cf3..6959a77 100644
--- a/Doc/reference/introduction.rst
+++ b/Doc/reference/introduction.rst
@@ -58,7 +58,7 @@ Jython
Python for .NET
This implementation actually uses the CPython implementation, but is a managed
- .NET application and makes .NET libraries available. This was created by Brian
+ .NET application and makes .NET libraries available. It was created by Brian
Lloyd. For more information, see the `Python for .NET home page
<http://pythonnet.sourceforge.net>`_.
diff --git a/Lib/calendar.py b/Lib/calendar.py
index 5487095..e811518 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -6,7 +6,9 @@ Sunday as the last (the European convention). Use setfirstweekday() to
set the first day of the week (0=Monday, 6=Sunday)."""
from __future__ import with_statement
-import sys, datetime, locale
+import sys
+import datetime
+import locale as _locale
__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
"firstweekday", "isleap", "leapdays", "weekday", "monthrange",
@@ -485,11 +487,11 @@ class TimeEncoding:
self.locale = locale
def __enter__(self):
- self.oldlocale = locale.setlocale(locale.LC_TIME, self.locale)
- return locale.getlocale(locale.LC_TIME)[1]
+ self.oldlocale = _locale.setlocale(_locale.LC_TIME, self.locale)
+ return _locale.getlocale(_locale.LC_TIME)[1]
def __exit__(self, *args):
- locale.setlocale(locale.LC_TIME, self.oldlocale)
+ _locale.setlocale(_locale.LC_TIME, self.oldlocale)
class LocaleTextCalendar(TextCalendar):
@@ -503,7 +505,7 @@ class LocaleTextCalendar(TextCalendar):
def __init__(self, firstweekday=0, locale=None):
TextCalendar.__init__(self, firstweekday)
if locale is None:
- locale = locale.getdefaultlocale()
+ locale = _locale.getdefaultlocale()
self.locale = locale
def formatweekday(self, day, width):
@@ -537,7 +539,7 @@ class LocaleHTMLCalendar(HTMLCalendar):
def __init__(self, firstweekday=0, locale=None):
HTMLCalendar.__init__(self, firstweekday)
if locale is None:
- locale = locale.getdefaultlocale()
+ locale = _locale.getdefaultlocale()
self.locale = locale
def formatweekday(self, day):
@@ -658,9 +660,11 @@ def main(args):
parser.error("if --locale is specified --encoding is required")
sys.exit(1)
+ locale = options.locale, options.encoding
+
if options.type == "html":
if options.locale:
- cal = LocaleHTMLCalendar(locale=options.locale)
+ cal = LocaleHTMLCalendar(locale=locale)
else:
cal = HTMLCalendar()
encoding = options.encoding
@@ -676,7 +680,7 @@ def main(args):
sys.exit(1)
else:
if options.locale:
- cal = LocaleTextCalendar(locale=options.locale)
+ cal = LocaleTextCalendar(locale=locale)
else:
cal = TextCalendar()
optdict = dict(w=options.width, l=options.lines)
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index ed14052..e5b8bb1 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2005 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2007 by Vinay Sajip. All Rights Reserved.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
@@ -22,7 +22,7 @@ by Apache's log4j system.
Should work under Python versions >= 1.5.2, except that source line
information is not available unless 'sys._getframe()' is.
-Copyright (C) 2001-2004 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2007 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
"""
@@ -203,6 +203,14 @@ def _install_loggers(cp, handlers):
#which were in the previous configuration but
#which are not in the new configuration.
existing = list(root.manager.loggerDict.keys())
+ #The list needs to be sorted so that we can
+ #avoid disabling child loggers of explicitly
+ #named loggers. With a sorted list it is easier
+ #to find the child loggers.
+ existing.sort()
+ #We'll keep the list of existing loggers
+ #which are children of named loggers here...
+ child_loggers = []
#now set up the new ones...
for log in llist:
sectname = "logger_%s" % log
@@ -214,6 +222,14 @@ def _install_loggers(cp, handlers):
propagate = 1
logger = logging.getLogger(qn)
if qn in existing:
+ i = existing.index(qn)
+ prefixed = qn + "."
+ pflen = len(prefixed)
+ num_existing = len(existing)
+ i = i + 1 # look at the entry after qn
+ while (i < num_existing) and (existing[i][:pflen] == prefixed):
+ child_loggers.append(existing[i])
+ i = i + 1
existing.remove(qn)
if "level" in opts:
level = cp.get(sectname, "level")
@@ -231,8 +247,16 @@ def _install_loggers(cp, handlers):
#Disable any old loggers. There's no point deleting
#them as other threads may continue to hold references
#and by disabling them, you stop them doing any logging.
+ #However, don't disable children of named loggers, as that's
+ #probably not what was intended by the user.
for log in existing:
- root.manager.loggerDict[log].disabled = 1
+ logger = root.manager.loggerDict[log]
+ if log in child_loggers:
+ logger.level = logging.NOTSET
+ logger.handlers = []
+ logger.propagate = 1
+ else:
+ logger.disabled = 1
def listen(port=DEFAULT_LOGGING_CONFIG_PORT):
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index a0fc217..8e4dd2e 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -1259,10 +1259,20 @@ PyDoc_STRVAR(property_doc,
"fset is a function for setting, and fdel a function for del'ing, an\n"
"attribute. Typical use is to define a managed attribute x:\n"
"class C(object):\n"
-" def getx(self): return self.__x\n"
-" def setx(self, value): self.__x = value\n"
-" def delx(self): del self.__x\n"
-" x = property(getx, setx, delx, \"I'm the 'x' property.\")");
+" def getx(self): return self._x\n"
+" def setx(self, value): self._x = value\n"
+" def delx(self): del self._x\n"
+" x = property(getx, setx, delx, \"I'm the 'x' property.\")\n"
+"\n"
+"Decorators make defining new properties or modifying existing ones easy:\n"
+"class C(object):\n"
+" @property\n"
+" def x(self): return self._x\n"
+" @x.setter\n"
+" def x(self, value): self._x = value\n"
+" @x.deleter\n"
+" def x(self): del self._x\n"
+);
static int
property_traverse(PyObject *self, visitproc visit, void *arg)