Browse Source

Merge "py3: (Better) fix percentages in configs" into stable/ussuri

stable/ussuri
Zuul 2 weeks ago
committed by Gerrit Code Review
parent
commit
40978e1b34
2 changed files with 28 additions and 20 deletions
  1. +25
    -1
      swift/common/utils.py
  2. +3
    -19
      swift/common/wsgi.py

+ 25
- 1
swift/common/utils.py View File

@@ -75,6 +75,7 @@ if not six.PY2:
utf16_decoder = codecs.getdecoder('utf-16')
utf16_encoder = codecs.getencoder('utf-16')
from six.moves import cPickle as pickle
from six.moves import configparser
from six.moves.configparser import (ConfigParser, NoSectionError,
NoOptionError, RawConfigParser)
from six.moves import range, http_client
@@ -2984,6 +2985,17 @@ def read_conf_dir(parser, conf_dir):
return parser.read(sorted(conf_files))


if six.PY2:
NicerInterpolation = None # just don't cause ImportErrors over in wsgi.py
else:
class NicerInterpolation(configparser.BasicInterpolation):
def before_get(self, parser, section, option, value, defaults):
if '%(' not in value:
return value
return super(NicerInterpolation, self).before_get(
parser, section, option, value, defaults)


def readconf(conf_path, section_name=None, log_name=None, defaults=None,
raw=False):
"""
@@ -3005,7 +3017,19 @@ def readconf(conf_path, section_name=None, log_name=None, defaults=None,
if raw:
c = RawConfigParser(defaults)
else:
c = ConfigParser(defaults)
if six.PY2:
c = ConfigParser(defaults)
else:
# In general, we haven't really thought much about interpolation
# in configs. Python's default ConfigParser has always supported
# it, though, so *we* got it "for free". Unfortunatley, since we
# "supported" interpolation, we have to assume there are
# deployments in the wild that use it, and try not to break them.
# So, do what we can to mimic the py2 behavior of passing through
# values like "1%" (which we want to support for
# fallocate_reserve).
c = ConfigParser(defaults, interpolation=NicerInterpolation())

if hasattr(conf_path, 'readline'):
if hasattr(conf_path, 'seek'):
conf_path.seek(0)


+ 3
- 19
swift/common/wsgi.py View File

@@ -36,7 +36,6 @@ from io import BytesIO

import six
from six import StringIO
from six.moves import configparser

from swift.common import utils, constraints
from swift.common.storage_policy import BindPortsCache
@@ -45,7 +44,7 @@ from swift.common.swob import Request, wsgi_quote, wsgi_unquote, \
from swift.common.utils import capture_stdio, disable_fallocate, \
drop_privileges, get_logger, NullLogger, config_true_value, \
validate_configuration, get_hub, config_auto_int_value, \
reiterate, clean_up_daemon_hygiene, systemd_notify
reiterate, clean_up_daemon_hygiene, systemd_notify, NicerInterpolation

SIGNUM_TO_NAME = {getattr(signal, n): n for n in dir(signal)
if n.startswith('SIG') and '_' not in n}
@@ -61,23 +60,6 @@ except (ImportError, NotImplementedError):
CPU_COUNT = 1


if not six.PY2:
# In general, we haven't really thought much about interpolation in
# configs. Python's default ConfigParser has always supported it, though,
# so *we* got it "for free". Unfortunatley, since we "supported"
# interpolation, we have to assume there are deployments in the wild that
# use it, and try not to break them. So, do what we can to mimic the py2
# behavior of passing through values like "1%" (which we want to support
# for fallocate_reserve).
class NicerInterpolation(configparser.BasicInterpolation):
def before_get(self, parser, section, option, value, defaults):
if '%(' not in value:
return value
return super(NicerInterpolation, self).before_get(
parser, section, option, value, defaults)
configparser.ConfigParser._DEFAULT_INTERPOLATION = NicerInterpolation()


class NamedConfigLoader(loadwsgi.ConfigLoader):
"""
Patch paste.deploy's ConfigLoader so each context object will know what
@@ -85,6 +67,8 @@ class NamedConfigLoader(loadwsgi.ConfigLoader):
"""

def get_context(self, object_type, name=None, global_conf=None):
if not six.PY2:
self.parser._interpolation = NicerInterpolation()
context = super(NamedConfigLoader, self).get_context(
object_type, name=name, global_conf=global_conf)
context.name = name


Loading…
Cancel
Save