1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-05-30 15:19:40 +03:00

Handle newlines and semicolons on Linux

This commit is contained in:
Jonathan Harris 2017-07-22 16:19:53 +01:00
parent f0c18debda
commit e95034565f

View File

@ -315,9 +315,9 @@ class Config:
try:
val = self.config.get(self.SECTION, key)
if u'\n' in val:
return val.split(u'\n')[:-1]
return [self._unescape(x) for x in val.split(u'\n')[:-1]]
else:
return val
return self._unescape(val)
except:
return None
@ -329,9 +329,9 @@ class Config:
def set(self, key, val):
if isinstance(val, basestring) or isinstance(val, numbers.Integral):
self.config.set(self.SECTION, key, val)
self.config.set(self.SECTION, key, self._escape(val))
elif hasattr(val, '__iter__'): # iterable
self.config.set(self.SECTION, key, u'\n'.join([unicode(x) for x in val] + [u';']))
self.config.set(self.SECTION, key, u'\n'.join([self._escape(x) for x in val] + [u';']))
else:
raise NotImplementedError()
@ -346,6 +346,20 @@ class Config:
self.save()
self.config = None
def _escape(self, val):
return unicode(val).replace(u'\\', u'\\\\').replace(u'\n', u'\\n').replace(u';', u'\\;')
def _unescape(self, val):
chars = list(val)
i = 0
while i < len(chars):
if chars[i] == '\\':
chars.pop(i)
if chars[i] == 'n':
chars[i] = '\n'
i += 1
return u''.join(chars)
else: # ???
def __init__(self):