From 5c8823108104ee7d95331ea33a0604723171dc00 Mon Sep 17 00:00:00 2001 From: Mohammad Osama Khan Date: Tue, 27 Dec 2022 18:28:24 +0530 Subject: [PATCH] added transifex project basic settings --- app/messages.pot | 400 ++++++++++++++++++ flask_webhook/Dockerfile | 6 + flask_webhook/docker-compose.yml | 13 + .../flask_webhook_requirements.txt | 22 + flask_webhook/webhook_app/server.py | 15 + flask_webhook/webhook_app/webhook.py | 69 +++ transifex_flask/flask_app/app.py | 204 +++++---- 7 files changed, 638 insertions(+), 91 deletions(-) create mode 100644 app/messages.pot create mode 100644 flask_webhook/Dockerfile create mode 100644 flask_webhook/docker-compose.yml create mode 100644 flask_webhook/webhook_app/flask_webhook_requirements.txt create mode 100644 flask_webhook/webhook_app/server.py create mode 100644 flask_webhook/webhook_app/webhook.py diff --git a/app/messages.pot b/app/messages.pot new file mode 100644 index 0000000..f67af76 --- /dev/null +++ b/app/messages.pot @@ -0,0 +1,400 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-20 19:29+0530\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: main.kv:107 +msgid "Accounts" +msgstr "" + +#: main.kv:126 +msgid "Inbox" +msgstr "" + +#: main.kv:134 +msgid "Sent" +msgstr "" + +#: main.kv:141 +msgid "Draft" +msgstr "" + +#: main.kv:148 +msgid "Trash" +msgstr "" + +#: main.kv:156 +msgid "All Mails" +msgstr "" + +#: main.kv:164 +msgid "All labels" +msgstr "" + +#: main.kv:166 +msgid "Address Book" +msgstr "" + +#: main.kv:172 +msgid "Settings" +msgstr "" + +#: main.kv:178 +msgid "Purchase" +msgstr "" + +#: main.kv:184 +msgid "New address" +msgstr "" + +#: main.kv:191 +msgid "Network status" +msgstr "" + +#: main.kv:197 +msgid "My addresses" +msgstr "" + +#: kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" + +#: kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: kv/login.kv:57 +msgid "Pseudorandom Generator" +msgstr "" + +#: kv/login.kv:77 +msgid "Passphrase (deterministic) Generator" +msgstr "" + +#: kv/login.kv:81 kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: kv/msg_composer.kv:64 +msgid "Type or Scan QR code for recipients address" +msgstr "" + +#: kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: kv/network.kv:37 +msgid "Processes" +msgstr "" + +#: kv/network.kv:45 +msgid "person-to-person" +msgstr "" + +#: kv/network.kv:67 +msgid "Brodcast" +msgstr "" + +#: kv/network.kv:89 +msgid "publickeys" +msgstr "" + +#: kv/network.kv:111 +msgid "objects" +msgstr "" + +#: kv/popup.kv:28 kv/popup.kv:57 kv/popup.kv:109 +msgid "Label" +msgstr "" + +#: kv/popup.kv:38 kv/popup.kv:76 kv/popup.kv:121 +msgid "Address" +msgstr "" + +#: kv/popup.kv:149 +msgid "Send message from" +msgstr "" + +#: kv/popup.kv:160 +msgid "Show QR code" +msgstr "" + +#: kv/popup.kv:170 kv/popup.kv:231 kv/popup.kv:308 kv/settings.kv:598 +#: kv/settings.kv:693 kv/settings.kv:943 +msgid "Cancel" +msgstr "" + +#: kv/popup.kv:196 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: kv/popup.kv:210 +msgid "Yes" +msgstr "" + +#: kv/popup.kv:220 +msgid "No" +msgstr "" + +#: kv/popup.kv:255 +msgid "From :" +msgstr "" + +#: kv/popup.kv:269 +msgid "[b]" +msgstr "" + +#: kv/popup.kv:295 +msgid "Date : " +msgstr "" + +#: kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: kv/settings.kv:106 +msgid "Hide connection notifications" +msgstr "" + +#: kv/settings.kv:119 +msgid "Show notification when message received" +msgstr "" + +#: kv/settings.kv:127 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: kv/settings.kv:144 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: kv/settings.kv:158 +msgid "Use identicons" +msgstr "" + +#: kv/settings.kv:171 +msgid "Reply below Quote" +msgstr "" + +#: kv/settings.kv:187 +msgid "Interface Language" +msgstr "" + +#: kv/settings.kv:204 kv/settings.kv:449 kv/settings.kv:600 kv/settings.kv:771 +#: kv/settings.kv:945 +msgid "Apply" +msgstr "" + +#: kv/settings.kv:221 +msgid "Listening port" +msgstr "" + +#: kv/settings.kv:232 +msgid "Listen for connections on port:" +msgstr "" + +#: kv/settings.kv:239 +msgid "8444" +msgstr "" + +#: kv/settings.kv:254 +msgid "UPnP" +msgstr "" + +#: kv/settings.kv:262 +msgid "Proxy server / Tor" +msgstr "" + +#: kv/settings.kv:273 +msgid "Type:" +msgstr "" + +#: kv/settings.kv:292 +msgid "Server hostname:" +msgstr "" + +#: kv/settings.kv:297 kv/settings.kv:884 +msgid "localhost" +msgstr "" + +#: kv/settings.kv:304 kv/settings.kv:891 +msgid "Port:" +msgstr "" + +#: kv/settings.kv:317 kv/settings.kv:904 +msgid "9050" +msgstr "" + +#: kv/settings.kv:325 kv/settings.kv:912 +msgid "Username:" +msgstr "" + +#: kv/settings.kv:336 +msgid "Pass:" +msgstr "" + +#: kv/settings.kv:354 +msgid "Authentication" +msgstr "" + +#: kv/settings.kv:369 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: kv/settings.kv:384 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: kv/settings.kv:392 +msgid "Bandwidth limit" +msgstr "" + +#: kv/settings.kv:403 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: kv/settings.kv:408 kv/settings.kv:742 +msgid "0" +msgstr "" + +#: kv/settings.kv:419 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: kv/settings.kv:435 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: kv/settings.kv:494 +msgid "Total difficulty:" +msgstr "" + +#: kv/settings.kv:499 kv/settings.kv:527 kv/settings.kv:658 +msgid "00000.0" +msgstr "" + +#: kv/settings.kv:522 +msgid "Small message difficulty:" +msgstr "" + +#: kv/settings.kv:653 +msgid "Maximum acceptable total difficulty:" +msgstr "" + +#: kv/settings.kv:667 +msgid "Hardware GPU acceleration (OpenCL):" +msgstr "" + +#: kv/settings.kv:695 kv/settings.kv:947 +msgid "OK" +msgstr "" + +#: kv/settings.kv:725 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: kv/settings.kv:737 +msgid "Give up after" +msgstr "" + +#: kv/settings.kv:748 +msgid "days and" +msgstr "" + +#: kv/settings.kv:833 +msgid "Connect to:" +msgstr "" + +#: kv/settings.kv:849 +msgid "Namecoind" +msgstr "" + +#: kv/settings.kv:860 +msgid "NMControl" +msgstr "" + +#: kv/settings.kv:879 +msgid "hostname:" +msgstr "" + +#: kv/settings.kv:923 +msgid "Password:" +msgstr "" \ No newline at end of file diff --git a/flask_webhook/Dockerfile b/flask_webhook/Dockerfile new file mode 100644 index 0000000..5d2c246 --- /dev/null +++ b/flask_webhook/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3 + +ADD /webhook_app/flask_webhook_requirements.txt / +RUN pip install -r flask_webhook_requirements.txt +ADD /webhook_app/server.py / +CMD [ "python", "server.py" ] diff --git a/flask_webhook/docker-compose.yml b/flask_webhook/docker-compose.yml new file mode 100644 index 0000000..798a12b --- /dev/null +++ b/flask_webhook/docker-compose.yml @@ -0,0 +1,13 @@ +# docker-compose.yml +version: '2' +services: + + service-name: + image: demo_api + # environment: + # - GREETING=hello + + + + + \ No newline at end of file diff --git a/flask_webhook/webhook_app/flask_webhook_requirements.txt b/flask_webhook/webhook_app/flask_webhook_requirements.txt new file mode 100644 index 0000000..c51f277 --- /dev/null +++ b/flask_webhook/webhook_app/flask_webhook_requirements.txt @@ -0,0 +1,22 @@ +asttokens==2.2.1 +certifi==2022.12.7 +charset-normalizer==2.1.1 +click==8.1.3 +Flask==2.2.2 +future==0.18.2 +idna==3.4 +importlib-metadata==5.2.0 +itsdangerous==2.1.2 +Jinja2==3.1.2 +MarkupSafe==2.1.1 +parsimonious==0.10.0 +pyseeyou==1.0.2 +pytz==2022.7 +regex==2022.10.31 +requests==2.28.1 +six==1.16.0 +toolz==0.12.0 +transifex-python==3.0.3 +urllib3==1.26.13 +Werkzeug==2.2.2 +zipp==3.11.0 diff --git a/flask_webhook/webhook_app/server.py b/flask_webhook/webhook_app/server.py new file mode 100644 index 0000000..3b81f99 --- /dev/null +++ b/flask_webhook/webhook_app/server.py @@ -0,0 +1,15 @@ +from flask import Flask, request, abort + +app = Flask(__name__) + + +@app.route('/webhook', methods=['POST']) +def webhook(): + if request.method == 'POST': + print(request.json) + return 'success', 200 + else: + abort(400) + +if __name__ == '__main__': + app.run() diff --git a/flask_webhook/webhook_app/webhook.py b/flask_webhook/webhook_app/webhook.py new file mode 100644 index 0000000..8bbd0ff --- /dev/null +++ b/flask_webhook/webhook_app/webhook.py @@ -0,0 +1,69 @@ +# import requests +# import json + +# webhook_url = 'http://127.0.0.1:5000/webhook' + +# data = { 'name': 'Request three', +# 'Channel URL': 'test url3' } + +# r = requests.post(webhook_url, data=json.dumps(data), headers={'Content-Type': 'application/json'}) + +kv_strings1 = [ + "Accounts", "Inbox", "Sent", "Draft", "Trash", "All Mails", "All labels", "Address Book", "Settings", "Purchase", "New address", "Network status" + "My addresses", "Chats", "No Chat", "Contacts", "Send", "Available Credits", "+Add more credits", "Select method to make an address", + "Pseudorandom Generator", "Passphrase (deterministic) Generator", "Proceed Next", "Enter a label to generate address for", + "to ", "Type or Scan QR code for recipients address", "My Addresses", "Total connections", "Total Connections", "Processes", + "person-to-person", "Brodcast", "publickeys", "objects", "Label", "Address", "Send message from", "Show QR code", "Cancel", + "Yes", "No", "From ", "[b]", "Date ", "User Interface", "Start-on-login not yet supported on your OS", "Tray"] + +kv_strings2 = ["Start Bitmessage in the tray(don't show main window)", "Minimize to tray", "Close to tray", "Hide connection notifications", + "Show notification when message received", "Use identicons", "Reply below Quote", "Interface Language", "Apply", "Listening port", + "Listen for connections on port", "8444", "UPnP", "Proxy server / Tor", "Type", "Server hostname", "localhost", "Port", "9050", "Username", + "Pass", "Authentication", "Listen for incoming connections when using proxy", "Only connect to onion services(*.onion)", "Bandwidth limit"] + +kv_strings3 = ["Maximum download rate (kB/s):[0:unlimited]", "0", "Maximum upload rate (kB/s):[0:unlimited]", "Maximum outbound connections:[0:none]", + "Total difficulty", "00000.0", "Small message difficulty", "Maximum acceptable total difficulty", + "Hardware GPU acceleration (OpenCL)", "OK", "Leave these input fields blank for the default behavior.", + "Give up after", "days and", "Connect to", "Namecoind", "NMControl", "hostname", "Password"] + +demo_str = ['hello', 'this', 'is'] +translated_dict = {} + +from deep_translator import GoogleTranslator + +for string in kv_strings1: + try: + int(string) + except: + to_translate = string + translated = GoogleTranslator(source='auto', target='fr').translate(to_translate) + translated_dict[string] = translated + +# for string in kv_strings2: +# to_translate = string +# translated = GoogleTranslator(source='auto', target='fr').translate(to_translate) +# translated_dict[string] = translated + +# for string in kv_strings3: +# to_translate = string +# translated = GoogleTranslator(source='auto', target='fr').translate(to_translate) +# translated_dict[string] = translated + +print(translated_dict) + + +{ + 'Accounts': 'Comptes', 'Inbox': 'Boîte de réception', 'Sent': 'Envoyé', 'Draft': 'Brouillon', 'Trash': 'Déchets', 'All Mails': 'Tous les e-mails', +'All labels': 'Toutes les étiquettes', 'Address Book': "Carnet d'adresses", 'Settings': 'Réglages', 'Purchase': 'Acheter', 'New address': 'Nouvelle adresse', +'Network statusMy addresses': 'État du réseauMes adresses', 'Chats': 'Chats', 'No Chat': 'Pas de message texte', 'Contacts': 'Contacts', 'Send': 'Envoyer', + 'Available Credits': 'Crédits disponibles', '+Add more credits': '+Ajouter plus de crédits', + 'Select method to make an address': 'Sélectionnez la méthode pour créer une adresse', 'Pseudorandom Generator': 'Générateur pseudo-aléatoire', + 'Passphrase (deterministic) Generator': 'Générateur de phrase de passe (déterministe)', 'Proceed Next': 'Procéder ensuite', + 'Enter a label to generate address for': "Entrez une étiquette pour générer l'adresse pour", 'to ': 'à', + 'Type or Scan QR code for recipients address': "Tapez ou scannez le code QR pour l'adresse des destinataires", + 'My Addresses': 'Mes adresses', 'Total connections': 'Connexions totales', 'Total Connections': 'Connexions totales', + 'Processes': 'Processus', 'person-to-person': 'personne à personne', 'Brodcast': 'Diffusion', 'publickeys': 'clés publiques', + 'objects': 'objets', 'Label': 'Étiquette', 'Address': 'Adresse', 'Send message from': 'Envoyer un message de', 'Show QR code': 'Afficher le code QR', + 'Cancel': 'Annuler', 'Yes': 'Oui', 'No': 'Non', 'From ': 'De', '[b]': '[c]', 'Date ': 'Date', 'User Interface': 'Interface utilisateur', + 'Start-on-login not yet supported on your OS': "Start-on-login n'est pas encore pris en charge sur votre système d'exploitation", 'Tray': 'Plateau' + } \ No newline at end of file diff --git a/transifex_flask/flask_app/app.py b/transifex_flask/flask_app/app.py index ed7d565..65333ac 100644 --- a/transifex_flask/flask_app/app.py +++ b/transifex_flask/flask_app/app.py @@ -19,6 +19,7 @@ import traceback from urllib.parse import urlparse import os from flask import Flask, request +from transifex.api import transifex_api from transifex.native import init, tx from transifex.native.parsing import SourceString # create the Flask app @@ -37,104 +38,125 @@ def transifex_demo(): el_translation = tx.translate('My Addresses', 'fr') return print(el_translation) -@app.route('/commit-example') -def commitTranslatedLanguage(ts, lang): - call(["lrelease-qt4", "src/translations/bitmessage.pro"]) - call(["git", "add", "src/translations/bitmessage_" + lang + ".ts", "src/translations/bitmessage_" + lang + ".qm"]) - call(["git", "commit", "-q", "-S", "-m", "Auto-updated language %s from transifex" % (lang)]) - newbranch = "translate_" + lang + "_" + str(ts) - call(["git", "push", "-q", "translations", newbranch + ":" + newbranch]) - request = { - "title": "Translation update " + lang, - "body": "Auto-updated from transifex", - "head": "PyBitmessageTranslations:" + newbranch, - "base": branch - } - headers = {"Authorization": "token " + gitHubToken} - response = requests.post("https://api.github.com/repos/Bitmessage/PyBitmessage/pulls", - headers=headers, data=json.dumps(request)) - # TODO: save pull request number - return response -# print "JSON dumps request: %s" % (json.dumps(request)) -# print "Response from github for pull request: %i, %s" % (response.status_code, response.content) +# @app.route('/commit-example') +# def commitTranslatedLanguage(ts, lang): +# call(["lrelease-qt4", "src/translations/bitmessage.pro"]) +# call(["git", "add", "src/translations/bitmessage_" + lang + ".ts", "src/translations/bitmessage_" + lang + ".qm"]) +# call(["git", "commit", "-q", "-S", "-m", "Auto-updated language %s from transifex" % (lang)]) +# newbranch = "translate_" + lang + "_" + str(ts) +# call(["git", "push", "-q", "translations", newbranch + ":" + newbranch]) +# request = { +# "title": "Translation update " + lang, +# "body": "Auto-updated from transifex", +# "head": "PyBitmessageTranslations:" + newbranch, +# "base": branch +# } +# headers = {"Authorization": "token " + gitHubToken} +# response = requests.post("https://api.github.com/repos/Bitmessage/PyBitmessage/pulls", +# headers=headers, data=json.dumps(request)) +# # TODO: save pull request number +# return response +# # print "JSON dumps request: %s" % (json.dumps(request)) +# # print "Response from github for pull request: %i, %s" % (response.status_code, response.content) -def updateLocalTranslationSource(): - call(["git", "stash", "-q"]) - call(["git", "checkout", "-q", branch]) - call(["git", "pull", "-q"]) - call(["pylupdate4", "src/translations/bitmessage.pro"]) +# def updateLocalTranslationSource(): +# call(["git", "stash", "-q"]) +# call(["git", "checkout", "-q", branch]) +# call(["git", "pull", "-q"]) +# call(["pylupdate4", "src/translations/bitmessage.pro"]) -def uploadTranslationSource(): - headers = {"Authorization": "Basic " + b64encode(transifexUsername + ":" + transifexPassword)} - response = requests.put("https://www.transifex.com/api/2/project/pybitmessage/resource/pybitmessage/content/", - headers=headers, files={'bitmessage_en.ts': open("src/translations/bitmessage_en.ts", "rb")}) - return response +# def uploadTranslationSource(): +# headers = {"Authorization": "Basic " + b64encode(transifexUsername + ":" + transifexPassword)} +# response = requests.put("https://www.transifex.com/api/2/project/pybitmessage/resource/pybitmessage/content/", +# headers=headers, files={'bitmessage_en.ts': open("src/translations/bitmessage_en.ts", "rb")}) +# return response -def updateLocalTranslationDestination(ts, lang): - call(["git", "pull", "--all", "-q"]) - call(["git", "stash", "-q"]) - call(["git", "checkout", "-q", branch]) - call(["git", "checkout", "-q", "-b", "translate_" + lang + "_" + str(ts)]) - call(["git", "branch", "-q", "--set-upstream-to=origin/v0.6"]) +@app.route('/upload-source') +def upload_source(): + async_job(id) + return 'ok' -def downloadTranslatedLanguage(ts, lang): - headers = {"Authorization": "Basic " + b64encode(transifexUsername + ":" + transifexPassword)} - resname = "pybitmessage_" + lang + ".ts" - fname = "bitmessage_" + lang.lower() + ".ts" - with open("src/translations/" + fname, "wt") as handle: - response = requests.get("https://www.transifex.com/api/2/project/pybitmessage/resource/pybitmessage/translation/" + lang + "/", - headers=headers) - if response.ok: - content = json.loads(response.content)["content"] - handle.write(content.encode("utf-8")) -# print "Response from github for pull request: %i, %s" % (response.status_code, response.content) - return response +def async_job(id): + response = requests.get("http://www.transifex.com/bitmessage-project/pybitmessage/upload_source/$BUILDBOT_JOBID" + id +"/") + api_token = '1/95c69f7fd63425f673ba0037dcb1b2a98edf096c' + transifex_api.setup(auth=api_token) + # transifex_api.Organization.list() + organization = transifex_api.Organization.get(slug="bitmessage-project") + project = organization.fetch('projects').get(slug="pybitmessage-test") + language = transifex_api.Language.get(code="fr") + resource = project.fetch('resources').get(slug="messagespot") + content = "The new source file content" + transifex_api.ResourceStringsAsyncUpload.upload(resource, content) + while not response: + time.sleep(1) -def application(): - if "Transifex" in environ.get("HTTP_USER_AGENT"): -# debug(environ) -# debug(body) - pass - if not verifyTransifexSignature(environ, body): - debug ("Verify Transifex Signature fail, but fuck them") - else: - debug ("Verify Transifex Signature ok") -# output, responseHeaders = returnMessage(False, "Checksum bad") -# start_response(status, responseHeaders) -# unlock() -# return [output] - try: -# debug(body) - payload = parse_qs(body) -# debug(payload) - if 'pybitmessage' in payload['project'] and 'pybitmessage' in payload['resource']: - if 'translated' in payload and '100' in payload['translated']: - ts = int(time.time()) - updateLocalTranslationDestination(ts, payload['language'][0].lower()) - downloadTranslatedLanguage(ts, payload['language'][0]) - response = commitTranslatedLanguage(ts, payload['language'][0].lower()) - if response.ok: - output, responseHeaders = returnMessage(True, "Processed.") - else: - output, responseHeaders = returnMessage(False, "Error: %i." % (response.status_code)) - else: - output, responseHeaders = returnMessage(False, "Nothing to do") - else: - output, responseHeaders = returnMessage(False, "Nothing to do") - except: - output, responseHeaders = returnMessage(True, "Not processing") - else: - debug("Unknown command %s" % (environ.get("HTTP_X_GITHUB_EVENT"))) - output, responseHeaders = returnMessage(True, "Unknown command, ignoring") -# output = '' -# for k, v in environ.items(): -# output += '%.40s %s\n' % (k, v) - #responseHeaders = sendFile("ffb8c8eb-3d3b-4306-b65e-e0d1fa4f7ea0") - start_response(status, responseHeaders) - unlock() - return [output] + + +# def updateLocalTranslationDestination(ts, lang): +# call(["git", "pull", "--all", "-q"]) +# call(["git", "stash", "-q"]) +# call(["git", "checkout", "-q", branch]) +# call(["git", "checkout", "-q", "-b", "translate_" + lang + "_" + str(ts)]) +# call(["git", "branch", "-q", "--set-upstream-to=origin/v0.6"]) + +# def downloadTranslatedLanguage(ts, lang): +# headers = {"Authorization": "Basic " + b64encode(transifexUsername + ":" + transifexPassword)} +# resname = "pybitmessage_" + lang + ".ts" +# fname = "bitmessage_" + lang.lower() + ".ts" +# with open("src/translations/" + fname, "wt") as handle: +# response = requests.get("https://www.transifex.com/api/2/project/pybitmessage/resource/pybitmessage/translation/" + lang + "/", +# headers=headers) +# if response.ok: +# content = json.loads(response.content)["content"] +# handle.write(content.encode("utf-8")) +# # print "Response from github for pull request: %i, %s" % (response.status_code, response.content) +# return response + +# def application(): +# if "Transifex" in environ.get("HTTP_USER_AGENT"): +# # debug(environ) +# # debug(body) +# pass +# if not verifyTransifexSignature(environ, body): +# debug ("Verify Transifex Signature fail, but fuck them") +# else: +# debug ("Verify Transifex Signature ok") +# # output, responseHeaders = returnMessage(False, "Checksum bad") +# # start_response(status, responseHeaders) +# # unlock() +# # return [output] +# try: +# # debug(body) +# payload = parse_qs(body) +# # debug(payload) +# if 'pybitmessage' in payload['project'] and 'pybitmessage' in payload['resource']: +# if 'translated' in payload and '100' in payload['translated']: +# ts = int(time.time()) +# updateLocalTranslationDestination(ts, payload['language'][0].lower()) +# downloadTranslatedLanguage(ts, payload['language'][0]) +# response = commitTranslatedLanguage(ts, payload['language'][0].lower()) +# if response.ok: +# output, responseHeaders = returnMessage(True, "Processed.") +# else: +# output, responseHeaders = returnMessage(False, "Error: %i." % (response.status_code)) +# else: +# output, responseHeaders = returnMessage(False, "Nothing to do") +# else: +# output, responseHeaders = returnMessage(False, "Nothing to do") +# except: +# output, responseHeaders = returnMessage(True, "Not processing") +# else: +# debug("Unknown command %s" % (environ.get("HTTP_X_GITHUB_EVENT"))) +# output, responseHeaders = returnMessage(True, "Unknown command, ignoring") +# # output = '' +# # for k, v in environ.items(): +# # output += '%.40s %s\n' % (k, v) +# #responseHeaders = sendFile("ffb8c8eb-3d3b-4306-b65e-e0d1fa4f7ea0") +# start_response(status, responseHeaders) +# unlock() +# return [output]