Merged revisions 58930-58938 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r58931 | vinay.sajip | 2007-11-11 15:27:30 +0100 (Sun, 11 Nov 2007) | 1 line Fixed a bug reported (in private email, by Robert Crida) in logging configuration whereby child loggers of a logger named in a configuration file, which are not themselves named in the configuration, are disabled when the configuration is applied. ........ r58932 | georg.brandl | 2007-11-11 16:16:16 +0100 (Sun, 11 Nov 2007) | 2 lines Remove duplication of "this". ........ r58935 | christian.heimes | 2007-11-12 02:15:40 +0100 (Mon, 12 Nov 2007) | 2 lines Added new decorator syntax to property.__doc__ Guido prefers _x over __x. ........ r58936 | christian.heimes | 2007-11-12 02:20:56 +0100 (Mon, 12 Nov 2007) | 2 lines Fix for #1427: Error in standard module calendar the prweek() method is still broken and I can't figure out how it suppose to work. ........ r58938 | andrew.kuchling | 2007-11-12 02:25:21 +0100 (Mon, 12 Nov 2007) | 1 line Re-word sentence ........
This commit is contained in:
parent
29fd7120e4
commit
96f31636f4
|
@ -58,7 +58,7 @@ Jython
|
||||||
|
|
||||||
Python for .NET
|
Python for .NET
|
||||||
This implementation actually uses the CPython implementation, but is a managed
|
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
|
Lloyd. For more information, see the `Python for .NET home page
|
||||||
<http://pythonnet.sourceforge.net>`_.
|
<http://pythonnet.sourceforge.net>`_.
|
||||||
|
|
||||||
|
|
|
@ -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)."""
|
set the first day of the week (0=Monday, 6=Sunday)."""
|
||||||
|
|
||||||
from __future__ import with_statement
|
from __future__ import with_statement
|
||||||
import sys, datetime, locale
|
import sys
|
||||||
|
import datetime
|
||||||
|
import locale as _locale
|
||||||
|
|
||||||
__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
|
__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
|
||||||
"firstweekday", "isleap", "leapdays", "weekday", "monthrange",
|
"firstweekday", "isleap", "leapdays", "weekday", "monthrange",
|
||||||
|
@ -485,11 +487,11 @@ class TimeEncoding:
|
||||||
self.locale = locale
|
self.locale = locale
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.oldlocale = locale.setlocale(locale.LC_TIME, self.locale)
|
self.oldlocale = _locale.setlocale(_locale.LC_TIME, self.locale)
|
||||||
return locale.getlocale(locale.LC_TIME)[1]
|
return _locale.getlocale(_locale.LC_TIME)[1]
|
||||||
|
|
||||||
def __exit__(self, *args):
|
def __exit__(self, *args):
|
||||||
locale.setlocale(locale.LC_TIME, self.oldlocale)
|
_locale.setlocale(_locale.LC_TIME, self.oldlocale)
|
||||||
|
|
||||||
|
|
||||||
class LocaleTextCalendar(TextCalendar):
|
class LocaleTextCalendar(TextCalendar):
|
||||||
|
@ -503,7 +505,7 @@ class LocaleTextCalendar(TextCalendar):
|
||||||
def __init__(self, firstweekday=0, locale=None):
|
def __init__(self, firstweekday=0, locale=None):
|
||||||
TextCalendar.__init__(self, firstweekday)
|
TextCalendar.__init__(self, firstweekday)
|
||||||
if locale is None:
|
if locale is None:
|
||||||
locale = locale.getdefaultlocale()
|
locale = _locale.getdefaultlocale()
|
||||||
self.locale = locale
|
self.locale = locale
|
||||||
|
|
||||||
def formatweekday(self, day, width):
|
def formatweekday(self, day, width):
|
||||||
|
@ -537,7 +539,7 @@ class LocaleHTMLCalendar(HTMLCalendar):
|
||||||
def __init__(self, firstweekday=0, locale=None):
|
def __init__(self, firstweekday=0, locale=None):
|
||||||
HTMLCalendar.__init__(self, firstweekday)
|
HTMLCalendar.__init__(self, firstweekday)
|
||||||
if locale is None:
|
if locale is None:
|
||||||
locale = locale.getdefaultlocale()
|
locale = _locale.getdefaultlocale()
|
||||||
self.locale = locale
|
self.locale = locale
|
||||||
|
|
||||||
def formatweekday(self, day):
|
def formatweekday(self, day):
|
||||||
|
@ -658,9 +660,11 @@ def main(args):
|
||||||
parser.error("if --locale is specified --encoding is required")
|
parser.error("if --locale is specified --encoding is required")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
locale = options.locale, options.encoding
|
||||||
|
|
||||||
if options.type == "html":
|
if options.type == "html":
|
||||||
if options.locale:
|
if options.locale:
|
||||||
cal = LocaleHTMLCalendar(locale=options.locale)
|
cal = LocaleHTMLCalendar(locale=locale)
|
||||||
else:
|
else:
|
||||||
cal = HTMLCalendar()
|
cal = HTMLCalendar()
|
||||||
encoding = options.encoding
|
encoding = options.encoding
|
||||||
|
@ -676,7 +680,7 @@ def main(args):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
if options.locale:
|
if options.locale:
|
||||||
cal = LocaleTextCalendar(locale=options.locale)
|
cal = LocaleTextCalendar(locale=locale)
|
||||||
else:
|
else:
|
||||||
cal = TextCalendar()
|
cal = TextCalendar()
|
||||||
optdict = dict(w=options.width, l=options.lines)
|
optdict = dict(w=options.width, l=options.lines)
|
||||||
|
|
|
@ -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
|
# Permission to use, copy, modify, and distribute this software and its
|
||||||
# documentation for any purpose and without fee is hereby granted,
|
# 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
|
Should work under Python versions >= 1.5.2, except that source line
|
||||||
information is not available unless 'sys._getframe()' is.
|
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!
|
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 were in the previous configuration but
|
||||||
#which are not in the new configuration.
|
#which are not in the new configuration.
|
||||||
existing = list(root.manager.loggerDict.keys())
|
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...
|
#now set up the new ones...
|
||||||
for log in llist:
|
for log in llist:
|
||||||
sectname = "logger_%s" % log
|
sectname = "logger_%s" % log
|
||||||
|
@ -214,6 +222,14 @@ def _install_loggers(cp, handlers):
|
||||||
propagate = 1
|
propagate = 1
|
||||||
logger = logging.getLogger(qn)
|
logger = logging.getLogger(qn)
|
||||||
if qn in existing:
|
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)
|
existing.remove(qn)
|
||||||
if "level" in opts:
|
if "level" in opts:
|
||||||
level = cp.get(sectname, "level")
|
level = cp.get(sectname, "level")
|
||||||
|
@ -231,8 +247,16 @@ def _install_loggers(cp, handlers):
|
||||||
#Disable any old loggers. There's no point deleting
|
#Disable any old loggers. There's no point deleting
|
||||||
#them as other threads may continue to hold references
|
#them as other threads may continue to hold references
|
||||||
#and by disabling them, you stop them doing any logging.
|
#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:
|
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):
|
def listen(port=DEFAULT_LOGGING_CONFIG_PORT):
|
||||||
|
|
|
@ -1259,10 +1259,20 @@ PyDoc_STRVAR(property_doc,
|
||||||
"fset is a function for setting, and fdel a function for del'ing, an\n"
|
"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"
|
"attribute. Typical use is to define a managed attribute x:\n"
|
||||||
"class C(object):\n"
|
"class C(object):\n"
|
||||||
" def getx(self): return self.__x\n"
|
" def getx(self): return self._x\n"
|
||||||
" def setx(self, value): self.__x = value\n"
|
" def setx(self, value): self._x = value\n"
|
||||||
" def delx(self): del self.__x\n"
|
" def delx(self): del self._x\n"
|
||||||
" x = property(getx, setx, delx, \"I'm the 'x' property.\")");
|
" 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
|
static int
|
||||||
property_traverse(PyObject *self, visitproc visit, void *arg)
|
property_traverse(PyObject *self, visitproc visit, void *arg)
|
||||||
|
|
Loading…
Reference in New Issue