Created a django project for transifex translation

This commit is contained in:
Mohammad Osama Khan 2022-12-20 20:15:02 +05:30
parent 3628348322
commit 9f7384d6c6
No known key found for this signature in database
GPG Key ID: 15F978BEFADAB9E1
8 changed files with 193 additions and 8 deletions

View File

@ -1,5 +1,5 @@
FROM python:3
ADD requirements.txt /
ADD /app/requirements.txt /
RUN pip install -r requirements.txt
ADD transifex_demo.py /
CMD [ "python", "./transifex_demo.py" ]
ADD /app/transifex_demo.py /
CMD [ "python", "transifex_demo.py" ]

View File

@ -1,13 +1,11 @@
"""Transifex basic implementation using python native sdk """
import os
from dotenv import load_dotenv
from transifex.native import init, tx
from transifex.native.parsing import SourceString
env_path=os.path.join(os.getcwd(),'transifex.env')
load_dotenv(env_path)
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')]

View File

@ -3,8 +3,8 @@ version: '2'
services:
service-name:
image: transifex-docker
image: transifex-api-docker
# environment:
# - GREETING=hello
env_file:
- ./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