[IMP] Gengo Fixes
bzr revid: fp@tinyerp.com-20140409214509-0ww46dnt3np66ncx
This commit is contained in:
parent
3705aa837f
commit
d5599de606
|
@ -22,5 +22,6 @@
|
||||||
import res_company
|
import res_company
|
||||||
import ir_translation
|
import ir_translation
|
||||||
import wizard
|
import wizard
|
||||||
|
import controller
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
import gengo_callback
|
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import openerp
|
||||||
|
from openerp.addons.web import http
|
||||||
|
from openerp.addons.web.http import request
|
||||||
|
|
||||||
|
class website_gengo(http.Controller):
|
||||||
|
@http.route('/website/gengo_callback', type='http', auth='none')
|
||||||
|
def gengo_callback(self,**post):
|
||||||
|
cr, uid, context = request.cr, openerp.SUPERUSER_ID, request.context
|
||||||
|
translation_pool = request.registry['ir.translation']
|
||||||
|
if post and post.get('job'):
|
||||||
|
job = json.loads(post['job'])
|
||||||
|
tid = job.get('custom_data', False)
|
||||||
|
if (job.get('status') == 'approved') and tid:
|
||||||
|
term = translation_pool.browse(cr, uid, int(tid), context=context)
|
||||||
|
if term.job_id <> job.get('job_id'):
|
||||||
|
raise 'Error'
|
||||||
|
vals = {'state': 'translated', 'value': job.get('body_tgt')}
|
||||||
|
translation_pool.write(cr, uid, [int(tid)], vals, context=context)
|
|
@ -33,10 +33,6 @@ try:
|
||||||
from mygengo import MyGengo
|
from mygengo import MyGengo
|
||||||
except ImportError:
|
except ImportError:
|
||||||
_logger.warning('Gengo library not found, Gengo features disabled. If you plan to use it, please install the mygengo library from http://pypi.python.org/pypi/mygengo')
|
_logger.warning('Gengo library not found, Gengo features disabled. If you plan to use it, please install the mygengo library from http://pypi.python.org/pypi/mygengo')
|
||||||
class MyGengo(object):
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
# no context for translations - so don't bother
|
|
||||||
raise ImportError('Gengo library not found, please install mygengo from http://pypi.python.org/pypi/mygengo')
|
|
||||||
|
|
||||||
GENGO_DEFAULT_LIMIT = 20
|
GENGO_DEFAULT_LIMIT = 20
|
||||||
|
|
||||||
|
@ -120,51 +116,45 @@ class base_gengo_translations(osv.osv_memory):
|
||||||
all_translation_ids = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('job_id', "!=", False)], context=context)
|
all_translation_ids = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('job_id', "!=", False)], context=context)
|
||||||
while True:
|
while True:
|
||||||
translation_ids = all_translation_ids[offset:offset + limit]
|
translation_ids = all_translation_ids[offset:offset + limit]
|
||||||
if translation_ids:
|
offset += limit
|
||||||
offset += limit
|
if not translation_ids:
|
||||||
translation_terms = translation_pool.browse(cr, uid, translation_ids, context=context)
|
|
||||||
gengo_job_id = [term.job_id for term in translation_terms]
|
|
||||||
if gengo_job_id:
|
|
||||||
gengo_ids = ','.join(gengo_job_id)
|
|
||||||
job_response = gengo.getTranslationJobBatch(id=gengo_ids)
|
|
||||||
if job_response['opstat'] == 'ok':
|
|
||||||
job_response_dict = dict([(job['job_id'], job) for job in job_response['response']['jobs']])
|
|
||||||
for term in translation_terms:
|
|
||||||
up_term = up_comment = 0
|
|
||||||
vals = {}
|
|
||||||
if job_response_dict[term.job_id]['status'] == 'approved':
|
|
||||||
vals.update({'state': 'translated',
|
|
||||||
'value': job_response_dict[term.job_id]['body_tgt']})
|
|
||||||
up_term += 1
|
|
||||||
job_comment = gengo.getTranslationJobComments(id=term.job_id)
|
|
||||||
if job_comment['opstat'] == 'ok':
|
|
||||||
gengo_comments = ""
|
|
||||||
for comment in job_comment['response']['thread']:
|
|
||||||
gengo_comments += _('%s\n-- Commented on %s by %s.\n\n') % (comment['body'], time.ctime(comment['ctime']), comment['author'])
|
|
||||||
vals.update({'gengo_comment': gengo_comments})
|
|
||||||
up_comment += 1
|
|
||||||
if vals:
|
|
||||||
translation_pool.write(cr, uid, term.id, vals)
|
|
||||||
_logger.info("Successfully Updated `%d` terms and %d Comments." % (up_term, up_comment))
|
|
||||||
if not len(translation_ids) == limit:
|
|
||||||
break
|
break
|
||||||
|
translation_terms = translation_pool.browse(cr, uid, translation_ids, context=context)
|
||||||
|
gengo_job_id = [term.job_id for term in translation_terms]
|
||||||
|
if gengo_job_id:
|
||||||
|
gengo_ids = ','.join(gengo_job_id)
|
||||||
|
try:
|
||||||
|
job_response = gengo.getTranslationJobBatch(id=gengo_ids)
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
if job_response['opstat'] == 'ok':
|
||||||
|
for job in job_response['response'].get('jobs', []):
|
||||||
|
self._update_terms_job(cr, uid, job, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _update_terms_job(self, cr, uid, job, context=None):
|
||||||
|
translation_pool = self.pool.get('ir.translation')
|
||||||
|
tid = int(job['custom_data'])
|
||||||
|
vals = {}
|
||||||
|
if job.get('job_id', False):
|
||||||
|
vals['job_id'] = job['job_id']
|
||||||
|
vals['state'] = 'inprogress'
|
||||||
|
if job.get('status', False) in ('queued','available','pending','reviewable'):
|
||||||
|
vals['state'] = 'inprogress'
|
||||||
|
if job.get('body_tgt', False) and job.get('status', False)=='approved':
|
||||||
|
vals['value'] = job['body_tgt']
|
||||||
|
if job.get('status', False) in ('approved', 'canceled'):
|
||||||
|
vals['state'] = 'translated'
|
||||||
|
if vals:
|
||||||
|
translation_pool.write(cr, uid, [tid], vals, context=context)
|
||||||
|
|
||||||
def _update_terms(self, cr, uid, response, context=None):
|
def _update_terms(self, cr, uid, response, context=None):
|
||||||
"""
|
"""
|
||||||
Update the terms after their translation were requested to Gengo
|
Update the terms after their translation were requested to Gengo
|
||||||
"""
|
"""
|
||||||
translation_pool = self.pool.get('ir.translation')
|
for jobs in response.get('jobs', []):
|
||||||
for jobs in response['jobs']:
|
|
||||||
for t_id, res in jobs.items():
|
for t_id, res in jobs.items():
|
||||||
vals = {}
|
self._update_terms_job(cr, uid, res, context=context)
|
||||||
t_id = int(t_id)
|
|
||||||
tier = translation_pool.read(cr, uid, [t_id], ['gengo_translation'], context=context)[0]['gengo_translation']
|
|
||||||
if tier == "machine":
|
|
||||||
vals.update({'value': res['body_tgt'], 'state': 'translated'})
|
|
||||||
else:
|
|
||||||
vals.update({'job_id': res['job_id'], 'state': 'inprogress'})
|
|
||||||
translation_pool.write(cr, uid, [t_id], vals, context=context)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def pack_jobs_request(self, cr, uid, term_ids, context=None):
|
def pack_jobs_request(self, cr, uid, term_ids, context=None):
|
||||||
|
@ -181,15 +171,20 @@ class base_gengo_translations(osv.osv_memory):
|
||||||
auto_approve = 1 if user.company_id.gengo_auto_approve else 0
|
auto_approve = 1 if user.company_id.gengo_auto_approve else 0
|
||||||
for term in translation_pool.browse(cr, uid, term_ids, context=context):
|
for term in translation_pool.browse(cr, uid, term_ids, context=context):
|
||||||
if re.search(r"\w", term.src or ""):
|
if re.search(r"\w", term.src or ""):
|
||||||
jobs[term.id] = {'type': 'text',
|
comment = user.company_id.gengo_comment or ''
|
||||||
'slug': 'single::English to ' + term.lang,
|
if term.gengo_comment:
|
||||||
'tier': tools.ustr(term.gengo_translation),
|
comment+='\n' + term.gengo_comment
|
||||||
'body_src': term.src,
|
jobs[time.strftime('%Y%m%d%H%M%S') + '-' + str(term.id)] = {
|
||||||
'lc_src': 'en',
|
'type': 'text',
|
||||||
'lc_tgt': translation_pool._get_gengo_corresponding_language(term.lang),
|
'slug': 'Single :: English to ' + term.lang,
|
||||||
'auto_approve': auto_approve,
|
'tier': tools.ustr(term.gengo_translation),
|
||||||
'comment': user.company_id.gengo_comment and "%s %s"%(user.company_id.gengo_comment,term.gengo_comment) or term.gengo_comment,
|
'custom_data': str(term.id),
|
||||||
'callback_url': self.pool.get('ir.config_parameter').get_param(cr, uid,'web.base.url') + '/website/gengo_callback/' + str(term.id)
|
'body_src': term.src,
|
||||||
|
'lc_src': 'en',
|
||||||
|
'lc_tgt': translation_pool._get_gengo_corresponding_language(term.lang),
|
||||||
|
'auto_approve': auto_approve,
|
||||||
|
'comment': comment,
|
||||||
|
'callback_url': self.pool.get('ir.config_parameter').get_param(cr, uid,'web.base.url') + '/website/gengo_callback'
|
||||||
}
|
}
|
||||||
return {'jobs': jobs}
|
return {'jobs': jobs}
|
||||||
|
|
||||||
|
@ -223,15 +218,14 @@ class base_gengo_translations(osv.osv_memory):
|
||||||
context = {}
|
context = {}
|
||||||
language_pool = self.pool.get('res.lang')
|
language_pool = self.pool.get('res.lang')
|
||||||
translation_pool = self.pool.get('ir.translation')
|
translation_pool = self.pool.get('ir.translation')
|
||||||
|
domain = [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('job_id', "=", False)]
|
||||||
|
if context.get('gengo_language', False):
|
||||||
|
lc = language_pool.browse(cr, uid, context['gengo_language'], context=context).code
|
||||||
|
domain.append( ('lang', '=', lc) )
|
||||||
|
|
||||||
|
all_term_ids = translation_pool.search(cr, uid, domain, context=context)
|
||||||
try:
|
try:
|
||||||
#by default, the request will be made for all terms that needs it, whatever the language
|
|
||||||
lang_ids = language_pool.search(cr, uid, [], context=context)
|
|
||||||
if context.get('gengo_language'):
|
|
||||||
#but if this specific key is given, then we restrict the request on terms of this language only
|
|
||||||
lang_ids = [context.get('gengo_language')]
|
|
||||||
langs = [lang.code for lang in language_pool.browse(cr, uid, lang_ids, context=context)]
|
|
||||||
offset = 0
|
offset = 0
|
||||||
all_term_ids = translation_pool.search(cr, uid, [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('lang', 'in', langs), ('job_id', "=", False)], context=context)
|
|
||||||
while True:
|
while True:
|
||||||
#search for the n first terms to translate
|
#search for the n first terms to translate
|
||||||
term_ids = all_term_ids[offset:offset + limit]
|
term_ids = all_term_ids[offset:offset + limit]
|
||||||
|
|
|
@ -40,21 +40,3 @@ class website_gengo(http.Controller):
|
||||||
def post_gengo_jobs(self):
|
def post_gengo_jobs(self):
|
||||||
request.registry['base.gengo.translations']._sync_request(request.cr, request.uid, limit=GENGO_DEFAULT_LIMIT, context=request.context)
|
request.registry['base.gengo.translations']._sync_request(request.cr, request.uid, limit=GENGO_DEFAULT_LIMIT, context=request.context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@http.route('/website/gengo_callback/<model("ir.translation"):term>', type='http', auth='none')
|
|
||||||
def gengo_callback(self,term,**post):
|
|
||||||
if post and post.get('job'):
|
|
||||||
translation_pool = request.registry['ir.translation']
|
|
||||||
base_gengo_pool = request.registry['base.gengo.translations']
|
|
||||||
job, vals = json.loads(post['job']), {}
|
|
||||||
if job.get('status') == 'approved':
|
|
||||||
vals.update({'state': 'translated', 'value': job.get('body_tgt')})
|
|
||||||
flag, gengo = base_gengo_pool.gengo_authentication(request.cr, openerp.SUPERUSER_ID, context=request.context)
|
|
||||||
job_comment = gengo.getTranslationJobComments(id=job.get('job_id'))
|
|
||||||
if job_comment['opstat']=='ok':
|
|
||||||
gengo_comments=""
|
|
||||||
for comment in job_comment['response']['thread']:
|
|
||||||
gengo_comments += _('%s\n-- Commented on %s by %s.\n\n') % (comment['body'], time.ctime(comment['ctime']), comment['author'])
|
|
||||||
vals.update({'gengo_comment': gengo_comments})
|
|
||||||
if vals:
|
|
||||||
translation_pool.write(request.cr, openerp.SUPERUSER_ID, term.id, vals)
|
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
new_content:self.getInitialContent(this),
|
new_content:self.getInitialContent(this),
|
||||||
translation_id: data.oeTranslationId || null,
|
translation_id: data.oeTranslationId || null,
|
||||||
gengo_translation: gengo_service_level,
|
gengo_translation: gengo_service_level,
|
||||||
gengo_comment:"Original page:" + document.URL
|
gengo_comment:"\nOriginal Page: " + document.URL
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
openerp.jsonRpc('/website/set_translations', 'call', {
|
openerp.jsonRpc('/website/set_translations', 'call', {
|
||||||
|
|
Loading…
Reference in New Issue