def set_project_resource(request, path_obj, dir_path, filename):
"""Loads :cls:`pootle_app.models.Directory` and
:cls:`pootle_store.models.Store` models and populates the
request object.
This is the same as `set_resource` but operates at the project level
across all languages.
:param path_obj: A :cls:`pootle_project.models.Project` object.
:param dir_path: Path relative to the root of `path_obj`.
:param filename: Optional filename.
"""
query_ctx_path = ''.join(['/%/', path_obj.code, '/'])
query_pootle_path = query_ctx_path + dir_path
obj_directory = getattr(path_obj, 'directory', path_obj)
ctx_path = obj_directory.pootle_path
resource_path = dir_path
pootle_path = ctx_path + dir_path
# List of TP paths available for user
user_tps = TranslationProject.objects.for_user(request.user)
user_tps = user_tps.filter(
project__code=path_obj.code,
).values_list('pootle_path', flat=True)
user_tps_regex = '^%s' % u'|'.join(list(user_tps))
sql_regex = 'REGEXP'
if connection.vendor == 'postgresql':
sql_regex = '~'
if filename:
query_pootle_path = query_pootle_path + filename
pootle_path = pootle_path + filename
resource_path = resource_path + filename
resources = Store.objects.live().extra(
where=[
'pootle_store_store.pootle_path LIKE %s',
'pootle_store_store.pootle_path ' + sql_regex + ' %s',
], params=[query_pootle_path, user_tps_regex]
).select_related('translation_project__language')
else:
resources = Directory.objects.live().extra(
where=[
'pootle_app_directory.pootle_path LIKE %s',
'pootle_app_directory.pootle_path ' + sql_regex + ' %s',
], params=[query_pootle_path, user_tps_regex]
).select_related('parent')
if not resources.exists():
raise Http404
request.store = None
request.directory = None
request.pootle_path = pootle_path
request.resource_obj = ProjectResource(resources, pootle_path)
request.resource_path = resource_path
request.ctx_obj = path_obj or request.resource_obj
request.ctx_path = ctx_path
评论列表
文章目录