diff --git a/tests/project_dir/.transifexrc b/tests/project_dir/.transifexrc index 6bf92eb3..94e5cc51 100644 --- a/tests/project_dir/.transifexrc +++ b/tests/project_dir/.transifexrc @@ -3,4 +3,3 @@ api_hostname = https://api.transifex.com hostname = https://www.transifex.com password = foo username = bar - diff --git a/tests/test_commands.py b/tests/test_commands.py index b2e4bbd9..1bc68147 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -81,7 +81,7 @@ def tearDown(self, *args, **kwargs): def test_init(self): argv = [] - config_text = "[main]\nhost = https://www.transifex.com\n\n" + config_text = "[main]\nhost = https://www.transifex.com\n" with patch('txclib.commands.project.Project'): with patch('txclib.commands.cmd_config') as set_mock: cmd_init(argv, '') @@ -255,7 +255,7 @@ def test_bare_set_source_no_file(self): def test_bare_set_source_file(self): expected = ("[main]\nhost = https://foo.var\n\n[project1.resource1]\n" - "source_file = test.txt\nsource_lang = en\n\n") + "source_file = test.txt\nsource_lang = en\n") args = ["-r", "project1.resource1", '--source', '-l', 'en', 'test.txt'] cmd_config(args, self.path_to_tx) with open(self.config_file) as config: @@ -264,7 +264,7 @@ def test_bare_set_source_file(self): # set translation file for de expected = ("[main]\nhost = https://foo.var\n\n[project1.resource1]\n" "source_file = test.txt\nsource_lang = en\n" - "trans.de = translations/de.txt\n\n") + "trans.de = translations/de.txt\n") args = ["-r", "project1.resource1", '-l', 'de', 'translations/de.txt'] cmd_config(args, self.path_to_tx) with open(self.config_file) as config: @@ -289,7 +289,7 @@ def test_auto_locale_is_backwards_compatible(self): expected = ("[main]\nhost = https://foo.var\n\n[project1.resource1]\n" "file_filter = translations//test.txt\n" "source_file = translations/en/test.txt\n" - "source_lang = en\n\n") + "source_lang = en\n") args = ["--auto-local", "-r", "project1.resource1", '--source-language', 'en', '--execute', @@ -302,7 +302,7 @@ def test_auto_locale_execute(self): expected = ("[main]\nhost = https://foo.var\n\n[project1.resource1]\n" "file_filter = translations//test.txt\n" "source_file = translations/en/test.txt\n" - "source_lang = en\n\n") + "source_lang = en\n") args = [MAPPING, "-r", "project1.resource1", '--source-language', 'en', '--execute', 'translations//test.txt'] @@ -333,7 +333,7 @@ def test_auto_remote_project(self, extension_mock, get_details_mock): "file_filter = translations/proj.resource_1/.txt\n" "source_lang = fr\ntype = TXT\n\n[proj.resource_2]\n" "file_filter = translations/proj.resource_2/.txt\n" - "source_lang = fr\ntype = TXT\n\n") + "source_lang = fr\ntype = TXT\n") extension_mock.return_value = ".txt" get_details_mock.side_effect = [ # project details @@ -372,7 +372,7 @@ def test_auto_remote_is_backwards_compatible(self, extension_mock, "file_filter = translations/proj.resource_1/.txt\n" "source_lang = fr\ntype = TXT\n\n[proj.resource_2]\n" "file_filter = translations/proj.resource_2/.txt\n" - "source_lang = fr\ntype = TXT\n\n") + "source_lang = fr\ntype = TXT\n") extension_mock.return_value = ".txt" get_details_mock.side_effect = [ # project details @@ -417,7 +417,7 @@ def test_bulk(self): "[test-project.translations_en_test]\n" "file_filter = translations//en/test.txt\n" "source_file = translations/en/test.txt\n" - "source_lang = en\ntype = TXT\n\n") + "source_lang = en\ntype = TXT\n") args = [MAPPINGBULK, "-p", "test-project", "--source-file-dir", "translations", "--source-language", "en", "-t", "TXT", "--file-extension", ".txt", "--execute", "--expression", diff --git a/txclib/config.py b/txclib/config.py index 2c0e8c14..cdaf8d6e 100644 --- a/txclib/config.py +++ b/txclib/config.py @@ -14,20 +14,21 @@ class OrderedRawConfigParser(configparser.RawConfigParser): """ def write(self, fp): """Write an .ini-format representation of the configuration state.""" + section_prefix = '' if self._defaults: fp.write("[%s]\n" % DEFAULTSECT) for key in sorted(self._defaults): fp.write("%s = %s\n" % (key, str(self._defaults[key]). replace('\n', '\n\t'))) - fp.write("\n") + section_prefix = '\n' for section in self._sections: - fp.write("[%s]\n" % section) + fp.write("%s[%s]\n" % (section_prefix, section)) for key in sorted(self._sections[section]): if key != "__name__": fp.write("%s = %s\n" % (key, str(self._sections[section][key]). replace('\n', '\n\t'))) - fp.write("\n") + section_prefix = '\n' optionxform = str