Index: tests/crowdin_mock_api.py |
=================================================================== |
--- a/tests/crowdin_mock_api.py |
+++ b/tests/crowdin_mock_api.py |
@@ -1,97 +1,35 @@ |
+import os |
+ |
+from collections import namedtuple |
+ |
from flask import Flask, send_from_directory, jsonify, request |
-app = Flask(__name__) |
-app.request_log = [] |
+app = Flask('mock_api') |
@app.before_request |
def log_request_info(): |
- log = (request.url, str(request.get_data())) |
- app.request_log.append(log) |
+ app.request_log.append((request.url, str(request.get_data()))) |
@app.route('/api/project/test/info', methods=['GET']) |
def info(): |
- return jsonify( |
- { |
- 'languages': [ |
- { |
- 'name': 'German', |
- 'code': 'de', |
- 'can_translate': 1, |
- 'can_approve': 1, |
+ return jsonify(app.config['info']) |
- }, |
- { |
- 'name': 'English', |
- 'code': 'en', |
- 'can_translate': 1, |
- 'can_approve': 1, |
- |
- }, |
- ], |
- 'files': [ |
- { |
- 'node_type': 'directory', |
- 'name': 'en', |
- 'files': [ |
- { |
- 'node_type': 'file', |
- 'name': 'translate.json', |
- 'created': '2016-09-26 08:30:07', |
- 'last_updated': '2016-09-26 08:30:08', |
- 'last_accessed': None, |
- 'last_revision': '1' |
- }, |
- ] |
- }, |
- { |
- 'node_type': 'directory', |
- 'name': 'de', |
- 'files': [ |
- { |
- 'node_type': 'file', |
- 'name': 'translate.json', |
- 'created': '2016-09-26 08:30:07', |
- 'last_updated': '2016-09-26 08:30:08', |
- 'last_accessed': None, |
- 'last_revision': '1' |
- } |
- ] |
- } |
- ] |
- } |
- ) |
+@app.route('/api/project/test/edit-project', methods=['POST']) |
+def edit(): |
+ return jsonify() |
@app.route('/api/project/test/supported-languages', methods=['GET']) |
def supported_langs(): |
- return jsonify( |
- [ |
- { |
- 'name': 'German', |
- 'crowdin_code': 'de', |
- 'editor_code': 'de', |
- 'iso_639_1': 'de', |
- 'iso_639_3': 'deu', |
- 'locale': 'de-DE' |
- }, |
- { |
- 'name': 'English', |
- 'crowdin_code': 'en', |
- 'editor_code': 'en', |
- 'iso_639_1': 'en', |
- 'iso_639_3': 'eng', |
- 'locale': 'en-US' |
- }, |
- ] |
- ) |
+ return jsonify(app.config['languages']) |
@app.route('/api/project/test/add-file', methods=['POST']) |
def add_file(): |
app.string = request.get_data() |
return jsonify() |
@@ -113,8 +51,41 @@ |
@app.route('/api/project/test/export', methods=['GET']) |
def export(): |
return jsonify({'success': {'status': 'skipped'}}) |
@app.route('/api/project/test/download/all.zip', methods=['GET']) |
def get_zip(): |
return send_from_directory('', 'all.zip') |
+ |
+ |
+Locale = namedtuple('Locale', ['name', 'node_type', 'files']) |
+File = namedtuple('File', ['name', 'node_type']) |
+Language = namedtuple('Language', ['code', 'can_approve', 'can_translate']) |
+Supported = namedtuple('Supported', ['crowdin_code']) |
Vasily Kuznetsov
2018/03/05 17:21:32
Maybe rename this to `SupportedLanguage`? Otherwis
|
+ |
+ |
+class CrowdinMock: |
+ def __init__(self, locales_root): |
+ self.info = {'files': [], 'languages': []} |
+ self.languages = [] |
+ self.load(locales_root) |
+ |
+ def load(self, filepath): |
+ for root, locales, files in os.walk(filepath): |
+ for locale in locales: |
+ files = [] |
+ self.info['languages'].append(Language(locale, 1, 1)) |
+ self.languages.append(Supported(locale)) |
+ for translations in os.listdir(os.path.join(root, locale)): |
+ filenode = File(translations, 'file') |
+ files.append(filenode._asdict()) |
+ localenode = Locale(locale, 'directory', tuple(files)) |
Vasily Kuznetsov
2018/03/05 17:21:32
Why are you converting it to tuple here? Seems lik
Jon Sonesen
2018/03/06 02:30:18
Acknowledged.
|
+ self.info['files'].append(localenode) |
+ |
+ def run(self): |
+ app.request_log = [] |
+ self.info['files'] = [i._asdict() for i in self.info['files']] |
Vasily Kuznetsov
2018/03/05 17:21:32
It seems like this conversion is basically part of
Jon Sonesen
2018/03/06 02:30:18
Acknowledged.
|
+ self.info['languages'] = [i._asdict() for i in self.info['languages']] |
+ app.config['info'] = self.info |
+ app.config['languages'] = [i._asdict() for i in self.languages] |
+ self.app = app |