Compare commits

..

1 Commits

Author SHA1 Message Date
Mohammad Osama Khan 9f7384d6c6
Created a django project for transifex translation 2022-12-21 20:34:00 +05:30
5 changed files with 188 additions and 1 deletions

View File

@ -7,4 +7,4 @@ services:
# environment:
# - GREETING=hello
env_file:
- app/transifex.env
- transifex.env

View File

@ -0,0 +1,6 @@
FROM python:3
ADD /flask_app/flask_requirement.txt /
RUN pip install -r flask_requirement.txt
ADD /flask_app/app.py /
CMD [ "python", "app.py" ]

View File

@ -0,0 +1,12 @@
# docker-compose.yml
version: '2'
services:
service-name:
image: flask_docker
# environment:
# - GREETING=hello
env_file:
- ../transifex.env

View File

@ -0,0 +1,147 @@
# import main Flask class and request object
from base64 import b64encode
import fcntl
# from http.client import sha1
from hashlib import sha1
import hmac
from http import client # import httplib
import json
import os
import pprint
import requests
import shutil
from subprocess import call, Popen
import sys
import tempfile
import time
import traceback
from urllib.parse import urlparse
import os
from flask import Flask, request
from transifex.native import init, tx
from transifex.native.parsing import SourceString
# create the Flask app
app = Flask(__name__)
@app.route('/query-example')
def transifex_demo():
token = os.getenv('token')
secret = os.getenv('secret')
print("token value",token)
init(token=token, languages=['el', 'fr', 'en'], secret=secret)
# Add some strings to push
strings = [SourceString('My Addresses')]
response_content = tx.push_source_strings(strings)
tx.fetch_translations()
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)
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 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]
if __name__ == '__main__':
# run app in debug mode on port 5000
app.run(debug=True, port=5000)

View File

@ -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