| LEFT | RIGHT |
| 1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
| 2 # Copyright (C) 2006-present eyeo GmbH | 2 # Copyright (C) 2006-present eyeo GmbH |
| 3 # | 3 # |
| 4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
| 5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
| 6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
| 7 # | 7 # |
| 8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 # GNU General Public License for more details. | 11 # GNU General Public License for more details. |
| 12 # | 12 # |
| 13 # You should have received a copy of the GNU General Public License | 13 # You should have received a copy of the GNU General Public License |
| 14 # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 14 # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| 15 | 15 |
| 16 from flask import Flask, request, jsonify, Response, send_file | 16 from flask import Flask, request, jsonify, Response, send_file |
| 17 | 17 |
| 18 import json | 18 import json |
| 19 | 19 |
| 20 from tests.utils import create_in_memory_zip | 20 from tests.utils import create_in_memory_zip |
| 21 from cms.bin.xtm_translations.constants import SUPPORTED_LOCALES | 21 from cms.translations.xtm.constants import SUPPORTED_LOCALES |
| 22 | 22 |
| 23 __all__ = [ | 23 __all__ = [ |
| 24 'xtm_mock', | 24 'xtm_mock', |
| 25 'get_configured_app', | 25 'get_configured_app', |
| 26 ] | 26 ] |
| 27 | 27 |
| 28 _CREDENTIALS = { | 28 _CREDENTIALS = { |
| 29 'token_gen_valid': {'client': 'admin', 'password': 'pass', 'userId': 20}, | 29 'token_gen_valid': {'client': 'admin', 'password': 'pass', 'userId': 20}, |
| 30 'token_gen_invalid': {'client': 'user', 'password': 'pass', 'userId': 50}, | 30 'token_gen_invalid': {'client': 'user', 'password': 'pass', 'userId': 50}, |
| 31 'token_valid': 'TheXTM-APIToken-VALID', | 31 'token_valid': 'TheXTM-APIToken-VALID', |
| (...skipping 18 matching lines...) Expand all Loading... |
| 50 def get_configured_app(**kwargs): | 50 def get_configured_app(**kwargs): |
| 51 xtm_mock.config['rootdir'] = kwargs.pop('rootdir', '') | 51 xtm_mock.config['rootdir'] = kwargs.pop('rootdir', '') |
| 52 xtm_mock.config['target_languages'] = kwargs.pop('target_langs', ['de_DE']) | 52 xtm_mock.config['target_languages'] = kwargs.pop('target_langs', ['de_DE']) |
| 53 xtm_mock.config['files'] = kwargs.pop('files', []) | 53 xtm_mock.config['files'] = kwargs.pop('files', []) |
| 54 xtm_mock.config['source_language'] = kwargs.pop('source_lang', 'en_US') | 54 xtm_mock.config['source_language'] = kwargs.pop('source_lang', 'en_US') |
| 55 return xtm_mock.wsgi_app | 55 return xtm_mock.wsgi_app |
| 56 | 56 |
| 57 | 57 |
| 58 def _check_auth(): | 58 def _check_auth(): |
| 59 try: | 59 try: |
| 60 auth = request.headers.get('Authorization') | 60 auth = request.headers['Authorization'] |
| 61 except Exception: | 61 except Exception: |
| 62 return False | 62 return False |
| 63 | 63 |
| 64 if auth != 'XTM-Basic ' + _CREDENTIALS['token_valid']: | 64 if auth != 'XTM-Basic ' + _CREDENTIALS['token_valid']: |
| 65 return False | 65 return False |
| 66 | 66 |
| 67 return True | 67 return True |
| 68 | 68 |
| 69 | 69 |
| 70 def _generate_jobs_list(): | 70 def _generate_jobs_list(): |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 return Response( | 155 return Response( |
| 156 status=401, | 156 status=401, |
| 157 response=json.dumps({'reason': 'Authentication failed.'}), | 157 response=json.dumps({'reason': 'Authentication failed.'}), |
| 158 ) | 158 ) |
| 159 | 159 |
| 160 reply = [{ | 160 reply = [{ |
| 161 'coreMetrics': {}, | 161 'coreMetrics': {}, |
| 162 'jobsMetrics': [], | 162 'jobsMetrics': [], |
| 163 'metricsProgress': {}, | 163 'metricsProgress': {}, |
| 164 'targetLanguage': tl, | 164 'targetLanguage': tl, |
| 165 }for tl in xtm_mock.config['target_languages']] | 165 } for tl in xtm_mock.config['target_languages']] |
| 166 | 166 |
| 167 if project_id == _PROJECT_IDS['valid']: | 167 if project_id == _PROJECT_IDS['valid']: |
| 168 return jsonify(reply) | 168 return jsonify(reply) |
| 169 | 169 |
| 170 return Response(status=404, response=json.dumps({'reason': 'Project not ' | 170 return Response(status=404, response=json.dumps({'reason': 'Project not ' |
| 171 'found!'})) | 171 'found!'})) |
| 172 | 172 |
| 173 | 173 |
| 174 @xtm_mock.route('/rest-api/projects/<int:project_id>/target-languages', | 174 @xtm_mock.route('/rest-api/projects/<int:project_id>/target-languages', |
| 175 methods=['POST']) | 175 methods=['POST']) |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 | 264 |
| 265 zip_file = create_in_memory_zip(names, data) | 265 zip_file = create_in_memory_zip(names, data) |
| 266 return send_file( | 266 return send_file( |
| 267 zip_file, | 267 zip_file, |
| 268 mimetype='application/zip', | 268 mimetype='application/zip', |
| 269 ) | 269 ) |
| 270 | 270 |
| 271 | 271 |
| 272 if __name__ == '__main__': | 272 if __name__ == '__main__': |
| 273 xtm_mock.run(debug=True) | 273 xtm_mock.run(debug=True) |
| LEFT | RIGHT |