def push(config, languages=None, overwrite=False, sync_terms=False): """ Push terms and languages """ assert config client = POEditorAPI(api_token=_get_api_token(config)) sections = config.sections() for section in sections: if not section.startswith("project."): continue print("Project: {}".format(section)) project_id = config.get(section, "project_id") options = config.options(section) for option in options: if option.startswith("trans."): import_path = config.get(section, option) language = option.split('.', 1)[-1] if languages and language not in languages: continue if not os.path.exists(import_path): print( "Error: {path} doesn't exist: ignoring language '{language}'" .format(path=import_path, language=language)) continue print(" Pushing language '{}'...".format(language)) client.update_terms_definitions(project_id, language_code=language, file_path=import_path, overwrite=overwrite, sync_terms=sync_terms) # Avoids API rate limit: https://poeditor.com/docs/error_codes#code-4048 sleep(32)
def test_scenario(self): client = POEditorAPI(api_token=self.API_TOKEN) # Project: projects = client.list_projects() self.assertTrue(isinstance(projects, list)) self.new_project_id = client.create_project( name='test project', description='Created by test_scenario method' ) project_details = client.view_project_details( self.new_project_id ) self.assertEqual(project_details['name'], "test project") self.assertEqual(project_details['id'], self.new_project_id) self.assertEqual(project_details['open'], False) self.assertEqual(project_details['public'], False) project_languages = client.list_project_languages( self.new_project_id ) self.assertEqual(project_languages, []) result = client.add_language_to_project( project_id=self.new_project_id, language_code='fr' ) self.assertTrue(result) result = client.add_language_to_project( project_id=self.new_project_id, language_code='de' ) self.assertTrue(result) result = client.delete_language_from_project( project_id=self.new_project_id, language_code='de' ) self.assertTrue(result) project_languages = client.list_project_languages( self.new_project_id ) self.assertEqual(len(project_languages), 1) project_language_fr = project_languages[0] self.assertEqual(project_language_fr['percentage'], 0) self.assertEqual(project_language_fr['code'], 'fr') self.assertEqual(project_language_fr['name'], 'French') result = client.set_reference_language( project_id=self.new_project_id, language_code='fr' ) self.assertTrue(result) result = client.clear_reference_language( project_id=self.new_project_id ) self.assertTrue(result) # Plays with terms: terms = client.view_project_terms( project_id=self.new_project_id, language_code='fr' ) self.assertEqual(terms, []) details = client.add_terms( project_id=self.new_project_id, data=[ { "term": "Welcome to my new website", "context": "", "reference": "Homepage title", "plural": "" }, { "term": "There is 1 student in the band", "context": "", "reference": "Band count", "plural": "there are {count} students in the band" }, ] ) self.assertEqual(details['parsed'], 2) self.assertEqual(details['added'], 2) details = client.delete_terms( project_id=self.new_project_id, data=[ { "term": "There is 1 student in the band", "context": "" } ] ) self.assertEqual(details['parsed'], 1) self.assertEqual(details['deleted'], 1) details = client.sync_terms( project_id=self.new_project_id, data=[ { "term": "Welcome to my new website", "context": "", "reference": "Homepage title", "plural": "" }, { "term": "New term", "context": "", "reference": "", "plural": "", "tags": [ "first_tag", "second_tag" ] }, ] ) self.assertEqual(details['parsed'], 2) self.assertEqual(details['added'], 1) self.assertEqual(details['updated'], 0) self.assertEqual(details['deleted'], 0) # Plays with translations details = client.update_project_language( project_id=self.new_project_id, language_code='fr', data=[ { "term": { "term": "Welcome to my new website", "context": "" }, "definition": { "forms": [ "first form", "second form", "and so on" ], "fuzzy": "1/0" } } ] ) self.assertEqual(details['parsed'], 1) self.assertEqual(details['added'], 1) self.assertEqual(details['updated'], 0) # Export file_url, self.file_path = client.export( project_id=self.new_project_id, language_code='fr', file_type='po' ) self.assertTrue( file_url.startswith('https://poeditor.com/api/download/file/')) self.assertTrue(os.path.isfile(self.file_path)) with open(self.file_path, 'r') as file_read: data = file_read.read() self.assertIn('Welcome to my new website', data) self.assertIn('first form', data) # Import # Just a quick update before: with open(self.file_path, "r") as sources: lines = sources.readlines() with open(self.file_path, "w") as sources: for line in lines: sources.write( re.sub(r'^msgstr "first form"', 'msgstr "Bienvenue"', line) ) details = client.update_terms_definitions( project_id=self.new_project_id, file_path=self.file_path, language_code='fr', overwrite=True, sync_terms=True ) expected_dict = { u'definitions': { u'added': 0, u'parsed': 1, u'updated': 1 }, u'terms': { u'added': 0, u'deleted': 0, u'parsed': 2 } } self.assertDictEqual(details, expected_dict) # Languages: languages = client.available_languages() self.assertTrue(isinstance(languages, dict)) self.assertIn('French', languages) # Contributors contributors = client.list_contributors( project_id=self.new_project_id) self.assertEqual(contributors, []) result = client.add_contributor( project_id=self.new_project_id, name="Peter", email="*****@*****.**", language_code='fr' ) self.assertTrue(result) result = client.add_administrator( project_id=self.new_project_id, name="John", email="*****@*****.**" ) self.assertTrue(result)
def test_scenario(self): client = POEditorAPI(api_token=self.API_TOKEN) # Project: projects = client.list_projects() self.assertTrue(isinstance(projects, list)) self.new_project_id = client.create_project( name='test project', description='Created by test_scenario method' ) project_details = client.view_project_details( self.new_project_id ) self.assertEqual(project_details['name'], "test project") self.assertEqual(project_details['id'], self.new_project_id) self.assertEqual(project_details['open'], False) self.assertEqual(project_details['public'], False) project_languages = client.list_project_languages( self.new_project_id ) self.assertEqual(project_languages, []) result = client.add_language_to_project( project_id=self.new_project_id, language_code='fr' ) self.assertTrue(result) result = client.add_language_to_project( project_id=self.new_project_id, language_code='de' ) self.assertTrue(result) result = client.delete_language_from_project( project_id=self.new_project_id, language_code='de' ) self.assertTrue(result) project_languages = client.list_project_languages( self.new_project_id ) self.assertEqual(len(project_languages), 1) project_language_fr = project_languages[0] self.assertEqual(project_language_fr['percentage'], 0) self.assertEqual(project_language_fr['code'], 'fr') self.assertEqual(project_language_fr['name'], 'French') result = client.set_reference_language( project_id=self.new_project_id, language_code='fr' ) self.assertTrue(result) result = client.clear_reference_language( project_id=self.new_project_id ) self.assertTrue(result) # Plays with terms: terms = client.view_project_terms( project_id=self.new_project_id, language_code='fr' ) self.assertEqual(terms, []) details = client.add_terms( project_id=self.new_project_id, data=[ { "term": "Welcome to my new website", "context": "", "reference": "Homepage title", "plural": "" }, { "term": "There is 1 student in the band", "context": "", "reference": "Band count", "plural": "there are {count} students in the band" }, ] ) self.assertEqual(details['parsed'], 2) self.assertEqual(details['added'], 2) details = client.delete_terms( project_id=self.new_project_id, data=[ { "term": "There is 1 student in the band", "context": "" } ] ) self.assertEqual(details['parsed'], 1) self.assertEqual(details['deleted'], 1) details = client.sync_terms( project_id=self.new_project_id, data=[ { "term": "Welcome to my new website", "context": "", "reference": "Homepage title", "plural": "" }, { "term": "New term", "context": "", "reference": "", "plural": "", "tags": [ "first_tag", "second_tag" ] }, ] ) self.assertEqual(details['parsed'], 2) self.assertEqual(details['added'], 1) self.assertEqual(details['updated'], 0) self.assertEqual(details['deleted'], 0) # Plays with translations details = client.update_project_language( project_id=self.new_project_id, language_code='fr', data=[ { "term": { "term": "Welcome to my new website", "context": "" }, "definition": { "forms": [ "first form", "second form", "and so on" ], "fuzzy": "1/0" } } ] ) self.assertEqual(details['parsed'], 1) self.assertEqual(details['added'], 1) self.assertEqual(details['updated'], 0) # Export file_url, self.file_path = client.export( project_id=self.new_project_id, language_code='fr', file_type='po' ) self.assertTrue( file_url.startswith('https://poeditor.com/api/download/file/')) self.assertTrue(os.path.isfile(self.file_path)) with open(self.file_path, 'r') as file_read: data = file_read.read() self.assertIn('Welcome to my new website', data) self.assertIn('first form', data) # Import # Just a quick update before: with open(self.file_path, "r") as sources: lines = sources.readlines() with open(self.file_path, "w") as sources: for line in lines: sources.write( re.sub(r'^msgstr "first form"', 'msgstr "Bienvenue"', line) ) details = client.update_terms_definitions( project_id=self.new_project_id, file_path=self.file_path, language_code='fr', overwrite=True, sync_terms=True ) expected_dict = { u'definitions': { u'added': 0, u'parsed': 1, u'updated': 1 }, u'terms': { u'added': 0, u'deleted': 0, u'parsed': 2 } } self.assertDictEqual(details, expected_dict) # Languages: languages = client.available_languages() self.assertTrue(isinstance(languages, dict)) self.assertIn('French', languages) # Contributors contributors = client.list_contributors( project_id=self.new_project_id) self.assertEqual(contributors, []) result = client.add_contributor( project_id=self.new_project_id, name="Peter", email="*****@*****.**", language_code='fr' ) self.assertTrue(result) result = client.add_administrator( project_id=self.new_project_id, name="John", email="*****@*****.**" ) self.assertTrue(result)