configfile: Use Python2's ConfigParser when running on Python2

The backport of Python3's configparser causes issues when there is
unicode characters in the config file.  To avoid introducing new
errors, go back to using the Python2 version of ConfigParser when
running on Python2.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-10-09 19:34:08 -04:00
parent 21d5a34d22
commit c56c34fa1c
3 changed files with 8 additions and 6 deletions

View File

@ -3,7 +3,7 @@
# Copyright (C) 2016-2021 Kevin O'Connor <kevin@koconnor.net> # Copyright (C) 2016-2021 Kevin O'Connor <kevin@koconnor.net>
# #
# This file may be distributed under the terms of the GNU GPLv3 license. # This file may be distributed under the terms of the GNU GPLv3 license.
import os, glob, re, time, logging, configparser, io import sys, os, glob, re, time, logging, configparser, io
error = configparser.Error error = configparser.Error
@ -255,9 +255,11 @@ class PrinterConfig:
self._parse_config_buffer(buffer, filename, fileconfig) self._parse_config_buffer(buffer, filename, fileconfig)
visited.remove(path) visited.remove(path)
def _build_config_wrapper(self, data, filename): def _build_config_wrapper(self, data, filename):
cp = (';', '#') if sys.version_info.major >= 3:
fileconfig = configparser.RawConfigParser( fileconfig = configparser.RawConfigParser(
strict=False, comment_prefixes=cp, inline_comment_prefixes=cp) strict=False, inline_comment_prefixes=(';', '#'))
else:
fileconfig = configparser.RawConfigParser()
self._parse_config(data, filename, fileconfig, set()) self._parse_config(data, filename, fileconfig, set())
return ConfigWrapper(self.printer, fileconfig, {}, 'printer') return ConfigWrapper(self.printer, fileconfig, {}, 'printer')
def _build_config_string(self, config): def _build_config_string(self, config):

View File

@ -98,7 +98,8 @@ def setup_python2_wrappers():
if sys.version_info.major >= 3: if sys.version_info.major >= 3:
return return
# Add module hacks so that common Python3 module imports work in Python2 # Add module hacks so that common Python3 module imports work in Python2
import Queue, io, StringIO, time import ConfigParser, Queue, io, StringIO, time
sys.modules["configparser"] = ConfigParser
sys.modules["queue"] = Queue sys.modules["queue"] = Queue
io.StringIO = StringIO.StringIO io.StringIO = StringIO.StringIO
time.process_time = time.clock time.process_time = time.clock

View File

@ -7,4 +7,3 @@ pyserial==3.4
greenlet==1.1.2 greenlet==1.1.2
Jinja2==2.11.3 Jinja2==2.11.3
python-can==3.3.4 python-can==3.3.4
configparser==4.0.2