| Index: cms/bin/xtm_translations/translate_xtm_cloud.py |
| diff --git a/cms/bin/xtm_translations/translate_xtm_cloud.py b/cms/bin/xtm_translations/translate_xtm_cloud.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..93e78462b94f13b56e44e77437b97fe175260dd2 |
| --- /dev/null |
| +++ b/cms/bin/xtm_translations/translate_xtm_cloud.py |
| @@ -0,0 +1,158 @@ |
| +# This file is part of the Adblock Plus web scripts, |
| +# Copyright (C) 2006-present eyeo GmbH |
| +# |
| +# Adblock Plus is free software: you can redistribute it and/or modify |
| +# it under the terms of the GNU General Public License version 3 as |
| +# published by the Free Software Foundation. |
| +# |
| +# Adblock Plus is distributed in the hope that it will be useful, |
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| +# GNU General Public License for more details. |
| +# |
| +# You should have received a copy of the GNU General Public License |
| +# along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| +"""Script handling interaction with the XTM Cloud REST API.""" |
|
Vasily Kuznetsov
2018/09/24 16:32:11
This part would be more readable if we separate th
Tudor Avram
2018/09/25 12:26:25
Done.
|
| +import argparse |
| +import logging |
| +import sys |
| +import getpass |
| +import os |
| + |
| +from cms.bin.xtm_translations.xtm_api import ( |
| + XTMCloudException, get_token, |
| +) |
| +import cms.bin.xtm_translations.constants as cnts |
| +from cms.bin.xtm_translations.projects_handler import ( |
| + main as handle_projects, |
| + create_project, upload_files, download_files, |
| +) |
| + |
| +input = cnts.input_fn |
|
Vasily Kuznetsov
2018/09/24 16:32:11
Again, we can just call `cnts.input_fn` (or maybe
Tudor Avram
2018/09/25 12:26:25
Done.
|
| + |
| + |
| +def generate_token(args): |
| + """Generate an API token from username and password.""" |
| + username = input('Username: ') |
| + user_id = input('User ID: ') |
| + password = getpass.getpass(prompt='Pasword: ') |
| + |
| + logging.info(cnts.InfoMessages.GENERATING_TOKEN.format(username, user_id)) |
| + try: |
| + token = get_token(username, password, int(user_id)) |
| + logging.info(cnts.InfoMessages.TOKEN_GENERATED.format(token)) |
| + |
| + cmd = cnts.TOKEN['save_cmd'].format(cnts.TOKEN['env_var'], token) |
| + sys.stdout.write(cnts.InfoMessages.TOKEN_SAVE_TO_ENV_VAR.format(cmd)) |
| + except XTMCloudException as err: |
| + sys.exit(err) |
| + except Exception as err: |
| + sys.exit(err) |
| + |
| + |
| +def parse_args(): |
| + parser = argparse.ArgumentParser() |
| + subparsers = parser.add_subparsers() |
| + |
| + # Universal arguments |
| + parser.add_argument('-v', '--verbose', action='store_true', |
| + help=cnts.ARGUMENTS_HELP['verbose']) |
| + |
| + # Subparser for generating token |
| + token_parser = subparsers.add_parser('login', |
| + help=cnts.ARGUMENTS_HELP['login']) |
| + token_parser.set_defaults(func=generate_token) |
| + |
| + # Subparser for project creation. |
| + project_create_parser = subparsers.add_parser( |
| + 'create', |
| + help=cnts.ARGUMENTS_HELP['project_create']['main'], |
| + ) |
| + project_create_parser.set_defaults(func=handle_projects) |
| + project_create_parser.set_defaults(projects_func=create_project) |
| + |
| + project_create_parser.add_argument( |
| + 'source_dir', help=cnts.ARGUMENTS_HELP['project_source-dir'], |
| + default=os.getcwd(), nargs='?', |
| + ) |
| + |
| + project_create_parser.add_argument( |
| + '--name', required=True, |
| + help=cnts.ARGUMENTS_HELP['project_create']['name'], |
| + ) |
| + project_create_parser.add_argument( |
| + '--desc', required=True, |
| + help=cnts.ARGUMENTS_HELP['project_create']['desc'], |
| + ) |
| + # TODO: Decide what the description field means right now. It doesn't |
| + # TODO: make sense to still have it as the URL to the GitLab issue, as |
| + # TODO: a project is associated to a website, not an issue. Maybe url to |
| + # TODO: website repo? |
| + project_create_parser.add_argument( |
| + '--client-id', required=True, type=int, |
| + help=cnts.ARGUMENTS_HELP['project_create']['client_id'], |
| + ) |
| + # TODO: Decide what the clientId would signify on our end (if anything) |
| + project_create_parser.add_argument( |
| + '--ref-id', required=True, |
| + help=cnts.ARGUMENTS_HELP['project_create']['ref_id'], |
| + ) |
| + # TODO: Decide what the referenceId would mean on our end |
| + project_create_parser.add_argument( |
| + '--workflow-id', required=True, type=int, |
| + help=cnts.ARGUMENTS_HELP['project_create']['workflow_id'], |
| + ) |
| + # TODO: Decide what the workflowId would mean on our end |
| + project_create_parser.add_argument( |
| + '--source-lang', default='en_US', |
| + help=cnts.ARGUMENTS_HELP['project_create']['source'], |
| + ) |
| + project_create_parser.add_argument( |
| + '--save-id', action='store_true', default=False, |
| + help=cnts.ARGUMENTS_HELP['project_create']['save-id'], |
| + ) |
| + |
| + # Subparser for uploading files to project |
| + project_upload_parser = subparsers.add_parser( |
| + 'upload', help=cnts.ARGUMENTS_HELP['project_upload']['main'], |
| + ) |
| + project_upload_parser.set_defaults(func=handle_projects) |
| + project_upload_parser.set_defaults(projects_func=upload_files) |
| + |
| + project_upload_parser.add_argument( |
| + 'source_dir', help=cnts.ARGUMENTS_HELP['project_source-dir'], |
| + default=os.getcwd(), nargs='?', |
| + ) |
| + |
| + project_upload_parser.add_argument( |
| + '--no-overwrite', action='store_true', default=False, |
| + help=cnts.ARGUMENTS_HELP['project_upload']['no-overwrite'], |
| + ) |
| + |
| + # Subparser for downloading files from project |
| + download_parser = subparsers.add_parser( |
| + 'download', help=cnts.ARGUMENTS_HELP['project_download'], |
| + ) |
| + download_parser.set_defaults(func=handle_projects) |
| + download_parser.set_defaults(projects_func=download_files) |
| + |
| + download_parser.add_argument( |
| + 'source_dir', help=cnts.ARGUMENTS_HELP['project_source-dir'], |
| + default=os.getcwd(), nargs='?', |
| + ) |
| + |
| + return parser.parse_args() |
| + |
| + |
| +def main(): |
| + """Run XTM integration script.""" |
| + args = parse_args() |
| + |
| + if args.verbose: |
| + logging.basicConfig(level=logging.INFO) |
| + |
| + args.func(args) |
| + |
| + |
| +if __name__ == '__main__': |
| + main() |