Esempio n. 1
0
def init(config):
    """
    Initializes the project on POEditor based on the configuration file.
    """
    assert config
    client = POEditorAPI(api_token=_get_api_token(config))
    sections = config.sections()

    for s in sections:
        if s.startswith("project."):
            print(" - Project: {}".format(s))
            project_id = config.get(s, "project_id")

            # 1. Push terms
            terms = config.get(s, 'terms') if config.has_option(
                s, 'terms') else None
            if terms:
                project_id = config.get(s, "project_id")
                print(" - Terms: {0}".format(terms))
                client.update_terms(project_id, terms)

            # 2. Create/add languages
            options = config.options(s)
            for o in options:
                if o.startswith("trans."):
                    lang = o[6:]

                    try:
                        client.add_language_to_project(project_id, lang)
                    except POEditorException:
                        pass

                    client.update_definitions(project_id=project_id,
                                              file_path=config.get(s, o),
                                              language_code=lang,
                                              overwrite=True)
                    print(" - Language added: {}".format(lang))
Esempio n. 2
0
    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": "Welcome to my new website",
                    "context": "",
                    "translation": {
                        "content": "Bienvenue sur mon site",
                        "fuzzy": 1
                    }
                }
            ]
        )
        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://api.poeditor.com/v2/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('Bienvenue sur mon site', data)

        # Export with filters
        with self.assertRaises(POEditorArgsException) as context:
            client.export(
                project_id=self.new_project_id,
                language_code='fr',
                file_type='po',
                filters=["translated", "maybe_fuzzy"]
            )
        self.assertIn("filters - filter results by", context.exception.message)

        file_url, not_fuzzy_path = client.export(
            project_id=self.new_project_id,
            language_code='fr',
            file_type='po',
            filters=["translated", "not_fuzzy"]
        )

        with open(not_fuzzy_path, 'r') as file_read:
            data = file_read.read()
        self.assertNotIn('Welcome to my new website', data)
        self.assertNotIn('Bienvenue sur mon site', 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 "Bienvenue sur mon site"', 'msgstr "Bienvenue!"', line)
                )

        details = client.update_terms_translations(
            project_id=self.new_project_id,
            file_path=self.file_path,
            language_code='fr',
            overwrite=True,
            sync_terms=True
        )

        expected_dict = {
            'translations': {
                'added': 0,
                'parsed': 1,
                'updated': 1
            },
            'terms': {
                'added': 0,
                'deleted': 0,
                'parsed': 2
            }
        }
        self.assertDictEqual(details, expected_dict)

        # Languages:
        languages = client.available_languages()
        self.assertTrue(isinstance(languages, list))
        self.assertIn('French', [lang['name'] for lang in 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)
Esempio n. 3
0
    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": "Welcome to my new website",
                "context": "",
                "translation": {
                    "content": "Bienvenue sur mon site",
                    "fuzzy": 1
                }
            }])
        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://api.poeditor.com/v2/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('Bienvenue sur mon site', data)

        # Export with filters
        with self.assertRaises(POEditorArgsException) as context:
            client.export(project_id=self.new_project_id,
                          language_code='fr',
                          file_type='po',
                          filters=["translated", "maybe_fuzzy"])
        self.assertIn("filters - filter results by", context.exception.message)

        file_url, not_fuzzy_path = client.export(
            project_id=self.new_project_id,
            language_code='fr',
            file_type='po',
            filters=["translated", "not_fuzzy"])

        with open(not_fuzzy_path, 'r') as file_read:
            data = file_read.read()
        self.assertNotIn('Welcome to my new website', data)
        self.assertNotIn('Bienvenue sur mon site', 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 "Bienvenue sur mon site"',
                           'msgstr "Bienvenue!"', line))

        details = client.update_terms_translations(
            project_id=self.new_project_id,
            file_path=self.file_path,
            language_code='fr',
            overwrite=True,
            sync_terms=True)

        expected_dict = {
            'translations': {
                'added': 0,
                'parsed': 1,
                'updated': 1
            },
            'terms': {
                'added': 0,
                'deleted': 0,
                'parsed': 2
            }
        }
        self.assertDictEqual(details, expected_dict)

        # Languages:
        languages = client.available_languages()
        self.assertTrue(isinstance(languages, list))
        self.assertIn('French', [lang['name'] for lang in 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)