def view(request, root_dir): request.permissions = get_matching_permissions(get_profile(request.user), root_dir) can_edit = request.user.is_superuser languages = getlanguages(request) languages_table_fields = ['language', 'progress', 'activity'] languages_table = { 'id': 'index-languages', 'proportional': False, 'fields': languages_table_fields, 'headings': get_table_headings(languages_table_fields), 'items': languages, } projects = getprojects(request) projects_table_fields = ['project', 'progress', 'activity'] projects_table = { 'id': 'index-projects', 'proportional': False, 'fields': projects_table_fields, 'headings': get_table_headings(projects_table_fields), 'items': projects, } siteconfig = load_site_config() ctx = { 'description': _(siteconfig.get('DESCRIPTION')), 'keywords': [ 'Pootle', 'translate', 'translation', 'localisation', 'localization', 'l10n', 'traduction', 'traduire', ], 'topstats': gentopstats_root(), 'permissions': request.permissions, 'can_edit': can_edit, 'languages_table': languages_table, 'projects_table': projects_table, 'resource_obj': request.resource_obj, 'moreprojects': (len(projects) > len(languages)) } if can_edit: from pootle_app.forms import GeneralSettingsForm ctx.update({ 'form': GeneralSettingsForm(siteconfig), 'form_action': reverse('pootle-admin-edit-settings'), }) return render_to_response('home/home.html', ctx, RequestContext(request))
def view(request, root_dir): request.permissions = get_matching_permissions(get_profile(request.user), root_dir) can_edit = request.user.is_superuser languages = getlanguages(request) languages_table_fields = ['language', 'progress', 'activity'] languages_table = { 'id': 'index-languages', 'proportional': False, 'fields': languages_table_fields, 'headings': get_table_headings(languages_table_fields), 'items': languages, } projects = getprojects(request) projects_table_fields = ['project', 'progress', 'activity'] projects_table = { 'id': 'index-projects', 'proportional': False, 'fields': projects_table_fields, 'headings': get_table_headings(projects_table_fields), 'items': projects, } templatevars = { 'description': _(settings.DESCRIPTION), 'keywords': [ 'Pootle', 'translate', 'translation', 'localisation', 'localization', 'l10n', 'traduction', 'traduire', ], 'topstats': gentopstats_root(), 'permissions': request.permissions, 'can_edit': can_edit, 'languages_table': languages_table, 'projects_table': projects_table, 'resource_obj': request.resource_obj, } templatevars['moreprojects'] = (len(projects) > len(languages)) if can_edit: from pootle_misc.siteconfig import load_site_config from pootle_app.forms import GeneralSettingsForm siteconfig = load_site_config() setting_form = GeneralSettingsForm(siteconfig) templatevars['form'] = setting_form return render_to_response('index/index.html', templatevars, RequestContext(request))
def GET(self, template_vars, request, translation_project, directory, store=None): can_edit = check_permission('administrate', request) project = translation_project.project language = translation_project.language path_obj = store or directory path_stats = get_raw_stats(path_obj, include_suggestions=True) path_summary = get_path_summary(path_obj, path_stats) actions = action_groups(request, path_obj, path_stats=path_stats) template_vars.update({ 'translation_project': translation_project, 'project': project, 'language': language, 'directory': directory, 'path_summary': path_summary, 'stats': path_stats, 'topstats': gentopstats_translation_project(translation_project), 'feed_path': directory.pootle_path[1:], 'action_groups': actions, 'can_edit': can_edit, }) if store is not None: template_vars.update({ 'store': store }) else: table_fields = ['name', 'progress', 'total', 'need-translation', 'suggestions'] template_vars.update({ 'table': { 'id': 'tp', 'proportional': True, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': get_children(translation_project, directory), } }) # If current directory is the TP root directory. if not directory.path: template_vars.update({ 'latest_action': translation_project.get_latest_submission() }) else: template_vars.update({ 'latest_action': Submission.get_latest_for_dir(path_obj) }) if can_edit: from pootle_translationproject.forms import DescriptionForm template_vars['form'] = DescriptionForm(instance=translation_project) return template_vars
def view(request, root_dir): request.permissions = get_matching_permissions(get_profile(request.user), root_dir) languages = getlanguages(request) languages_table_fields = ['language', 'progress', 'activity'] languages_table = { 'id': 'index-languages', 'proportional': False, 'fields': languages_table_fields, 'headings': get_table_headings(languages_table_fields), 'items': languages, } projects = getprojects(request) projects_table_fields = ['project', 'progress', 'activity'] projects_table = { 'id': 'index-projects', 'proportional': False, 'fields': projects_table_fields, 'headings': get_table_headings(projects_table_fields), 'items': projects, } siteconfig = load_site_config() ctx = { 'description': _(siteconfig.get('DESCRIPTION')), 'keywords': [ 'Pootle', 'translate', 'translation', 'localisation', 'localization', 'l10n', 'traduction', 'traduire', ], 'topstats': gentopstats_root(), 'permissions': request.permissions, 'languages_table': languages_table, 'projects_table': projects_table, 'resource_obj': request.resource_obj, 'moreprojects': (len(projects) > len(languages)) } return render_to_response('home/home.html', ctx, RequestContext(request))
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions( get_profile(request.user), project.directory ) if not check_permission('view', request): raise PermissionDenied can_edit = check_permission('administrate', request) translation_projects = project.translationproject_set.all() items = [make_language_item(request, translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) average = project_stats['translated']['percentage'] topstats = gentopstats_project(project) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity'] table = { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, } templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, {"languages": languagecount, "average": average}), }, 'topstats': topstats, 'can_edit': can_edit, 'table': table, } if can_edit: from pootle_project.forms import DescriptionForm templatevars['form'] = DescriptionForm(instance=project) return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() filters, tags_filter_form = handle_tags_filter_form( request, translation_projects) if filters is not None: for tag in filters: # This looks pretty scary, but couldn't manage to get it working # using Q objects in a single filter. translation_projects = translation_projects.filter(tags__in=[tag]) translation_projects = translation_projects.distinct() items = [make_language_item(request, translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) summary_dict = { "languages": languagecount, "average": project_stats['translated']['percentage'], } summary = ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, summary_dict) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'activity', 'tags' ] template_vars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, 'tags_filter_form': tags_filter_form, } return template_vars
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() filters, tags_filter_form = handle_tags_filter_form(request, translation_projects) if filters is not None: for tag in filters: # This looks pretty scary, but couldn't manage to get it working # using Q objects in a single filter. translation_projects = translation_projects.filter(tags__in=[tag]) translation_projects = translation_projects.distinct() items = [make_language_item(translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) summary_dict = { "languages": languagecount, "average": project_stats['translated']['percentage'], } summary = ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, summary_dict) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity', 'tags'] template_vars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, 'tags_filter_form': tags_filter_form, } return template_vars
def overview(request, language): can_edit = check_permission('administrate', request) projects = language.translationproject_set.order_by('project__fullname') projectcount = len(projects) items = (make_project_item(translate_project) for translate_project in projects.iterator()) totals = language.getquickstats() average = nice_percentage(totals['translatedsourcewords'] * 100.0 / max(totals['totalsourcewords'], 1)) topstats = gentopstats_language(language) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'activity' ] table = { 'id': 'language', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, } templatevars = { 'language': { 'code': language.code, 'name': tr_lang(language.fullname), 'description': language.description, 'summary': ungettext('%(projects)d project, %(average)d%% translated', '%(projects)d projects, %(average)d%% translated', projectcount, { "projects": projectcount, "average": average }), }, 'feed_path': '%s/' % language.code, 'topstats': topstats, 'can_edit': can_edit, 'table': table, } if can_edit: from pootle_language.forms import DescriptionForm templatevars['form'] = DescriptionForm(instance=language) return render_to_response("language/overview.html", templatevars, context_instance=RequestContext(request))
def language_index(request, language_code): language = get_object_or_404(Language, code=language_code) request.permissions = get_matching_permissions(get_profile(request.user), language.directory) if not check_permission("view", request): raise PermissionDenied can_edit = check_permission('administrate', request) projects = language.translationproject_set.order_by('project__fullname') projectcount = len(projects) items = (make_project_item(translate_project) for translate_project in projects.iterator()) totals = language.getquickstats() average = nice_percentage(totals['translatedsourcewords'] * 100.0 / max(totals['totalsourcewords'], 1)) topstats = gentopstats_language(language) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity'] table = { 'id': 'language', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, } templatevars = { 'language': { 'code': language.code, 'name': tr_lang(language.fullname), 'description_html': language.description_html, 'summary': ungettext('%(projects)d project, %(average)d%% translated', '%(projects)d projects, %(average)d%% translated', projectcount, { "projects": projectcount, "average": average}), }, 'feed_path': '%s/' % language.code, 'topstats': topstats, 'can_edit': can_edit, 'table': table, } if can_edit: from pootle_language.forms import DescriptionForm templatevars['form'] = DescriptionForm(instance=language) return render_to_response("language/language_index.html", templatevars, context_instance=RequestContext(request))
def overview(request, language): can_edit = check_permission('administrate', request) translation_projects = language.translationproject_set \ .order_by('project__fullname') user_tps = filter(lambda x: x.is_accessible_by(request.user), translation_projects) tp_count = len(user_tps) items = (make_project_item(tp) for tp in user_tps) topstats = gentopstats_language(language) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity'] table = { 'id': 'language', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, } templatevars = { 'resource_obj': request.resource_obj, 'language': { 'code': language.code, 'name': tr_lang(language.fullname), 'description': language.description, 'summary': ungettext('%(projects)d project', '%(projects)d projects', tp_count, {"projects": tp_count}), }, 'feed_path': '%s/' % language.code, 'topstats': topstats, 'can_edit': can_edit, 'table': table, } if can_edit: from pootle_language.forms import DescriptionForm templatevars.update({ 'form': DescriptionForm(instance=language), 'form_action': reverse('pootle-language-admin-settings', args=[language.code]), }) return render_to_response("languages/overview.html", templatevars, context_instance=RequestContext(request))
def projects_index(request, root): """page listing all projects""" table_fields = ['project', 'progress', 'activity'] templatevars = { 'table': { 'id': 'projects', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': getprojects(request), }, 'topstats': gentopstats_root(), } return render_to_response('project/projects.html', templatevars, RequestContext(request))
def projects_index(request, *args): #HACKISH: @get_path_obj needs *args here. """page listing all projects""" table_fields = ['project', 'progress', 'activity'] templatevars = { 'table': { 'id': 'projects', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': getprojects(request), }, 'topstats': gentopstats_root(), } return render_to_response('project/projects.html', templatevars, RequestContext(request))
def projects_index(request, root): """page listing all projects""" from pootle_app.views.index.index import getprojects fields = ['project', 'progress', 'activity'] ctx = { 'table': { 'id': 'projects', 'proportional': False, 'fields': fields, 'headings': get_table_headings(fields), 'items': getprojects(request), }, } return render(request, "projects/list.html", ctx)
def overview(request, language): can_edit = check_permission("administrate", request) translation_projects = language.translationproject_set.order_by("project__fullname") user_tps = filter(lambda x: x.is_accessible_by(request.user), translation_projects) tp_count = len(user_tps) items = (make_project_item(tp) for tp in user_tps) totals = language.getquickstats() average = nice_percentage(totals["translatedsourcewords"], totals["totalsourcewords"]) topstats = gentopstats_language(language) table_fields = ["name", "progress", "total", "need-translation", "activity"] table = { "id": "language", "proportional": False, "fields": table_fields, "headings": get_table_headings(table_fields), "items": items, } templatevars = { "language": { "code": language.code, "name": tr_lang(language.fullname), "description": language.description, "summary": ungettext( "%(projects)d project, %(average)d%% translated", "%(projects)d projects, %(average)d%% translated", tp_count, {"projects": tp_count, "average": average}, ), }, "feed_path": "%s/" % language.code, "topstats": topstats, "can_edit": can_edit, "table": table, } if can_edit: from pootle_language.forms import DescriptionForm templatevars["form"] = DescriptionForm(instance=language) return render_to_response("language/overview.html", templatevars, context_instance=RequestContext(request))
def projects_index(request, root): """page listing all projects""" from pootle_app.views.index.index import getprojects fields = ["project", "progress", "activity"] ctx = { "table": { "id": "projects", "proportional": False, "fields": fields, "headings": get_table_headings(fields), "items": getprojects(request), }, "topstats": gentopstats_root(), } return render(request, "projects/list.html", ctx)
def overview(request, language): can_edit = check_permission("administrate", request) translation_projects = language.translationproject_set.order_by("project__fullname") user_tps = filter(lambda x: x.is_accessible_by(request.user), translation_projects) tp_count = len(user_tps) items = (make_project_item(tp) for tp in user_tps) topstats = gentopstats_language(language) table_fields = ["name", "progress", "total", "need-translation", "activity"] table = { "id": "language", "proportional": False, "fields": table_fields, "headings": get_table_headings(table_fields), "items": items, } templatevars = { "resource_obj": request.resource_obj, "language": { "code": language.code, "name": tr_lang(language.fullname), "description": language.description, "summary": ungettext("%(projects)d project", "%(projects)d projects", tp_count, {"projects": tp_count}), }, "feed_path": "%s/" % language.code, "topstats": topstats, "can_edit": can_edit, "table": table, } if can_edit: from pootle_language.forms import DescriptionForm templatevars.update( { "form": DescriptionForm(instance=language), "form_action": reverse("pootle-language-admin-settings", args=[language.code]), } ) return render_to_response("languages/overview.html", templatevars, context_instance=RequestContext(request))
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() items = [make_language_item(translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) summary_dict = { "languages": languagecount, "average": project_stats['translated']['percentage'], } summary = ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, summary_dict) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity', 'tags'] template_vars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, } return template_vars
def projects_index(request): """page listing all projects""" request.permissions = get_matching_permissions(get_profile(request.user), Directory.objects.root) if not check_permission('view', request): raise PermissionDenied table_fields = ['project', 'progress', 'activity'] templatevars = { 'table': { 'id': 'projects', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': getprojects(request), }, 'topstats': gentopstats_root(), } return render_to_response('project/projects.html', templatevars, RequestContext(request))
def projects_index(request): """page listing all projects""" request.permissions = get_matching_permissions(get_profile(request.user), Directory.objects.root) if not check_permission('view', request): raise PermissionDenied table_fields = ['project', 'progress', 'activity'] table = { 'id': 'projects', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': getprojects(request), } templatevars = { 'table': table, 'topstats': gentopstats_root(), } return render_to_response('project/projects.html', templatevars, RequestContext(request))
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() items = [make_language_item(translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) summary = ungettext('%(languages)d language', '%(languages)d languages', languagecount, {"languages": languagecount}) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'activity', 'tags' ] template_vars = { 'resource_obj': request.resource_obj, 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, } return template_vars
def overview(request, translation_project, dir_path, filename=None, goal=None, in_goal_overview=False): current_path = translation_project.directory.pootle_path + dir_path if filename: current_path = current_path + filename store = get_object_or_404(Store, pootle_path=current_path) directory = store.parent ctx = { 'store_tags': store.tag_like_objects, } template_name = "translation_projects/store_overview.html" else: store = None directory = get_object_or_404(Directory, pootle_path=current_path) ctx = { 'tp_tags': translation_project.tag_like_objects, } template_name = "translation_projects/overview.html" if (check_permission('translate', request) or check_permission('suggest', request) or check_permission('overwrite', request)): ctx.update({ 'upload_form': _handle_upload_form(request, current_path, translation_project, directory), }) can_edit = check_permission('administrate', request) project = translation_project.project language = translation_project.language path_obj = store or directory #TODO enable again some actions when drilling down a goal. if goal is None: actions = action_groups(request, path_obj) else: actions = [] action_output = '' running = request.GET.get(EXTDIR, '') #TODO enable the following again when drilling down a goal. if running and goal is None: if store: act = StoreAction else: act = TranslationProjectAction try: action = act.lookup(running) except KeyError: messages.error( request, _("Unable to find '%(action)s' in '%(extdir)s'") % { 'action': act, 'extdir': running }) else: if not getattr(action, 'nosync', False): (store or translation_project).sync() if action.is_active(request): vcs_dir = settings.VCS_DIRECTORY po_dir = settings.PODIRECTORY tp_dir = directory.get_real_path() store_fn = '*' if store: tp_dir_slash = add_trailing_slash(tp_dir) if store.file.name.startswith(tp_dir_slash): # Note: store_f used below in reverse() call. store_f = store.file.name[len(tp_dir_slash):] store_fn = store_f.replace('/', os.sep) # Clear possibly stale output/error (even from other path_obj). action.set_output('') action.set_error('') try: action.run(path=path_obj, root=po_dir, tpdir=tp_dir, project=project.code, language=language.code, store=store_fn, style=translation_project.file_style, vc_root=vcs_dir) except StandardError: err = (_("Error while running '%s' extension action") % action.title) logging.exception(err) if (action.error): messages.error(request, action.error) else: messages.error(request, err) else: if (action.error): messages.warning(request, action.error) action_output = action.output if getattr(action, 'get_download', None): export_path = action.get_download(path_obj) if export_path: import mimetypes abs_path = absolute_real_path(export_path) filename = os.path.basename(export_path) mimetype, encoding = mimetypes.guess_type(filename) mimetype = mimetype or 'application/octet-stream' with open(abs_path, 'rb') as f: response = HttpResponse(f.read(), mimetype=mimetype) response['Content-Disposition'] = ( 'attachment; filename="%s"' % filename) return response if not action_output: if not store: rev_args = [language.code, project.code, ''] overview_url = reverse('pootle-tp-overview', args=rev_args) else: slash = store_f.rfind('/') store_d = '' if slash > 0: store_d = store_f[:slash] store_f = store_f[slash + 1:] elif slash == 0: store_f = store_f[1:] rev_args = [ language.code, project.code, store_d, store_f ] overview_url = reverse('pootle-tp-overview', args=rev_args) return HttpResponseRedirect(overview_url) if goal is None: description = translation_project.description else: description = goal.description ctx.update({ 'resource_obj': request.resource_obj, 'translation_project': translation_project, 'description': description, 'project': project, 'language': language, 'path_obj': path_obj, 'resource_path': request.resource_path, 'topstats': gentopstats_translation_project(translation_project), 'feed_path': directory.pootle_path[1:], 'action_groups': actions, 'action_output': action_output, 'can_edit': can_edit, }) tp_pootle_path = translation_project.pootle_path if store is None: path_obj_goals = Goal.get_goals_for_path(path_obj.pootle_path) path_obj_has_goals = len(path_obj_goals) > 0 if in_goal_overview and path_obj_has_goals: # Then show the goals tab. table_fields = [ 'name', 'progress', 'priority', 'total', 'need-translation', 'suggestions' ] items = [ make_goal_item(path_obj_goal, path_obj.pootle_path) for path_obj_goal in path_obj_goals ] ctx.update({ 'table': { 'id': 'tp-goals', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'parent': get_parent(directory), 'items': items, }, 'path_obj_has_goals': True, }) elif goal in path_obj_goals: # Then show the drill down view for the specified goal. table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions' ] ctx.update({ 'table': { 'id': 'tp-goals', 'proportional': True, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'parent': get_goal_parent(directory, goal), 'items': get_goal_children(directory, goal), }, 'goal': goal, 'goal_url': goal.get_drill_down_url_for_path(tp_pootle_path), 'path_obj_has_goals': True, }) else: # Then show the files tab. table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions' ] ctx.update({ 'table': { 'id': 'tp-files', 'proportional': True, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'parent': get_parent(directory), 'items': get_children(directory), }, 'path_obj_has_goals': path_obj_has_goals, }) elif goal is not None: ctx.update({ 'goal': goal, 'goal_url': goal.get_drill_down_url_for_path(tp_pootle_path), }) if can_edit: if store is None: url_kwargs = { 'language_code': language.code, 'project_code': project.code, } add_tag_action_url = reverse('pootle-xhr-tag-tp', kwargs=url_kwargs) else: add_tag_action_url = reverse('pootle-xhr-tag-store', args=[path_obj.pk]) if goal is None: edit_form = DescriptionForm(instance=translation_project) edit_form_action = reverse('pootle-tp-admin-settings', args=[language.code, project.code]) else: edit_form = GoalForm(instance=goal) edit_form_action = reverse('pootle-xhr-edit-goal', args=[goal.slug]) ctx.update({ 'form': edit_form, 'form_action': edit_form_action, 'add_tag_form': TagForm(), 'add_tag_action_url': add_tag_action_url, }) return render_to_response(template_name, ctx, context_instance=RequestContext(request))
def overview(request, project): """Page listing all languages added to project.""" from locale import strcoll from pootle.i18n.gettext import tr_lang def _make_lang_item(tp): href = tp.get_absolute_url() href_all = tp.get_translate_url() href_todo = tp.get_translate_url(state="incomplete") href_sugg = tp.get_translate_url(state='suggestions') info = { 'project': tp.project.code, 'code': tp.code, 'href': href, 'href_all': href_all, 'href_todo': href_todo, 'href_sugg': href_sugg, 'icon': 'language', 'title': tr_lang(tp.language.fullname), 'lastactivity': get_last_action(tp), 'tags': tp.tag_like_objects, 'pk': tp.pk, } return info translation_projects = project.translationproject_set.all() items = [_make_lang_item(tp) for tp in translation_projects.iterator()] items.sort(lambda x, y: strcoll(x['title'], y['title'])) langs = translation_projects.count() summary = ungettext("%(langs)d language", "%(langs)d languages", langs, {"langs": langs}) table_fields = ["name", "progress", "total", "need-translation", "suggestions", "activity", "tags"] ctx = { 'resource_obj': request.resource_obj, 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'can_edit': check_permission("administrate", request), 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, } if ctx['can_edit']: from pootle_project.forms import DescriptionForm tag_action_url = reverse('pootle-xhr-tag-tp-in-project', kwargs={'project_code': project.code}) ctx.update({ 'form': DescriptionForm(instance=project), 'form_action': reverse('pootle-project-admin-settings', args=[project.code]), 'add_tag_form': TranslationProjectTagForm(project=project), 'add_tag_action_url': tag_action_url, }) return render(request, "projects/overview.html", ctx)
def GET(self, template_vars, request, translation_project, directory, store=None): can_edit = check_permission('administrate', request) project = translation_project.project language = translation_project.language path_obj = store or directory path_stats = get_raw_stats(path_obj, include_suggestions=True) path_summary = get_path_summary(path_obj, path_stats) actions = action_groups(request, path_obj, path_stats=path_stats) template_vars.update({ 'translation_project': translation_project, 'project': project, 'language': language, 'directory': directory, 'path_summary': path_summary, 'stats': path_stats, 'topstats': gentopstats_translation_project(translation_project), 'feed_path': directory.pootle_path[1:], 'action_groups': actions, 'can_edit': can_edit, }) if store is not None: template_vars.update({'store': store}) else: table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions' ] template_vars.update({ 'table': { 'id': 'tp', 'proportional': True, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': get_children(translation_project, directory), } }) if can_edit: from pootle_translationproject.forms import DescriptionForm template_vars['form'] = DescriptionForm( instance=translation_project) return template_vars
def overview(request, translation_project, dir_path, filename=None): current_path = translation_project.directory.pootle_path + dir_path if filename: current_path = current_path + filename store = get_object_or_404(Store, pootle_path=current_path) directory = store.parent template_vars = { 'store_tags': store.tags.all().order_by('name'), } template = "translation_project/store_overview.html" else: store = None directory = get_object_or_404(Directory, pootle_path=current_path) template_vars = { 'tp_tags': translation_project.tags.all().order_by('name'), } template = "translation_project/overview.html" if (check_permission('translate', request) or check_permission('suggest', request) or check_permission('overwrite', request)): template_vars.update({ 'upload_form': _handle_upload_form(request, current_path, translation_project, directory), }) can_edit = check_permission('administrate', request) project = translation_project.project language = translation_project.language path_obj = store or directory latest_action = '' # If current directory is the TP root directory. if not directory.path: latest_action = translation_project.get_latest_submission() elif store is None: # If this is not a file. latest_action = Submission.get_latest_for_dir(path_obj) path_stats = get_raw_stats(path_obj, include_suggestions=True) path_summary = get_path_summary(path_obj, path_stats, latest_action) actions = action_groups(request, path_obj, path_stats=path_stats) action_output = '' running = request.GET.get(EXTDIR, '') if running: if store: act = StoreAction else: act = TranslationProjectAction try: action = act.lookup(running) except KeyError: messages.error(request, _("Unable to find %s %s") % (act, running)) else: if not getattr(action, 'nosync', False): (store or translation_project).sync() if action.is_active(request): vcs_dir = settings.VCS_DIRECTORY po_dir = settings.PODIRECTORY tp_dir = directory.get_real_path() store_fn = '*' if store: tp_dir_slash = add_trailing_slash(tp_dir) if store.file.name.startswith(tp_dir_slash): # Note: store_f used below in reverse() call. store_f = store.file.name[len(tp_dir_slash):] store_fn = store_f.replace('/', os.sep) # Clear possibly stale output/error (even from other path_obj). action.set_output('') action.set_error('') try: action.run(path=path_obj, root=po_dir, tpdir=tp_dir, project=project.code, language=language.code, store=store_fn, style=translation_project.file_style, vc_root=vcs_dir) except StandardError: err = (_("Exception while running '%s' extension action") % action.title) logging.exception(err) if (action.error): messages.error(request, action.error) else: messages.error(request, err) else: if (action.error): messages.warning(request, action.error) action_output = action.output if getattr(action, 'get_download', None): export_path = action.get_download(path_obj) if export_path: response = HttpResponse('/export/' + export_path) response['Content-Disposition'] = ( 'attachment; filename="%s"' % os.path.basename(export_path)) return response if not action_output: if not store: rev_args = [language.code, project.code, ''] overview_url = reverse('tp.overview', args=rev_args) else: slash = store_f.rfind('/') store_d = '' if slash > 0: store_d = store_f[:slash] store_f = store_f[slash + 1:] elif slash == 0: store_f = store_f[1:] rev_args = [language.code, project.code, store_d, store_f] overview_url = reverse('tp.overview', args=rev_args) return HttpResponseRedirect(overview_url) template_vars.update({ 'translation_project': translation_project, 'project': project, 'language': language, 'path_obj': path_obj, 'resource_path': request.resource_path, 'path_summary': path_summary, 'stats': path_stats, 'topstats': gentopstats_translation_project(translation_project), 'feed_path': directory.pootle_path[1:], 'action_groups': actions, 'action_output': action_output, 'can_edit': can_edit, }) if store is None: table_fields = ['name', 'progress', 'total', 'need-translation', 'suggestions'] template_vars.update({ 'table': { 'id': 'tp', 'proportional': True, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': get_children(translation_project, directory), } }) if can_edit: if store is None: url_kwargs = { 'language_code': language.code, 'project_code': project.code, } add_tag_action_url = reverse('tp.ajax_add_tag', kwargs=url_kwargs) else: add_tag_action_url = reverse('pootle-store-ajax-add-tag', args=[path_obj.pk]) template_vars.update({ 'form': DescriptionForm(instance=translation_project), 'add_tag_form': TagForm(), 'add_tag_action_url': add_tag_action_url, }) return render_to_response(template, template_vars, context_instance=RequestContext(request))
def view(request, root_dir): request.permissions = get_matching_permissions(get_profile(request.user), root_dir) can_edit = request.user.is_superuser languages = getlanguages(request) languages_table_fields = ['language', 'progress', 'activity'] languages_table = { 'id': 'index-languages', 'proportional': False, 'fields': languages_table_fields, 'headings': get_table_headings(languages_table_fields), 'items': filter(lambda x: x['stats']['total']['words'] != 0, languages), } projects = getprojects(request) projects_table_fields = ['project', 'progress', 'activity'] projects_table = { 'id': 'index-projects', 'proportional': False, 'fields': projects_table_fields, 'headings': get_table_headings(projects_table_fields), 'items': projects, } templatevars = { 'description': _(settings.DESCRIPTION), 'keywords': [ 'Pootle', 'translate', 'translation', 'localisation', 'localization', 'l10n', 'traduction', 'traduire', ], 'topstats': gentopstats_root(), 'permissions': request.permissions, 'can_edit': can_edit, 'languages_table': languages_table, 'projects_table': projects_table, } visible_langs = [l for l in languages if l['stats']['total']['words'] != 0] templatevars['moreprojects'] = (len(projects) > len(visible_langs)) if can_edit: from pootle_misc.siteconfig import load_site_config from pootle_app.forms import GeneralSettingsForm siteconfig = load_site_config() setting_form = GeneralSettingsForm(siteconfig) templatevars['form'] = setting_form return render_to_response('index/index.html', templatevars, RequestContext(request))
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), project.directory) if not check_permission('view', request): raise PermissionDenied can_edit = check_permission('administrate', request) translation_projects = project.translationproject_set.all() items = [make_language_item(request, translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) average = project_stats['translated']['percentage'] topstats = gentopstats_project(project) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'activity' ] table = { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, } templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, { "languages": languagecount, "average": average }), }, 'topstats': topstats, 'can_edit': can_edit, 'table': table, } if can_edit: from pootle_project.forms import DescriptionForm templatevars['form'] = DescriptionForm(instance=project) return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def overview(request, translation_project, dir_path, filename=None, goal=None, in_goal_overview=False): if filename: ctx = { 'store_tags': request.store.tag_like_objects, } template_name = "translation_projects/store_overview.html" else: ctx = { 'tp_tags': translation_project.tag_like_objects, } template_name = "browser/overview.html" if (check_permission('translate', request) or check_permission('suggest', request) or check_permission('overwrite', request)): ctx.update({ 'upload_form': _handle_upload_form(request, translation_project), }) can_edit = check_permission('administrate', request) project = translation_project.project language = translation_project.language resource_obj = request.store or request.directory #TODO enable again some actions when drilling down a goal. if goal is None: actions = action_groups(request, resource_obj) else: actions = [] action_output = '' running = request.GET.get(EXTDIR, '') #TODO enable the following again when drilling down a goal. if running and goal is None: if request.store: act = StoreAction else: act = TranslationProjectAction try: action = act.lookup(running) except KeyError: messages.error(request, _("Unable to find '%(action)s' in '%(extdir)s'") % {'action': act, 'extdir': running}) else: if not getattr(action, 'nosync', False): (request.store or translation_project).sync() if action.is_active(request): vcs_dir = settings.VCS_DIRECTORY po_dir = settings.PODIRECTORY tp_dir = request.directory.get_real_path() store_fn = '*' if request.store: tp_dir_slash = add_trailing_slash(tp_dir) if request.store.file.name.startswith(tp_dir_slash): # Note: store_f used below in reverse() call. store_f = request.store.file.name[len(tp_dir_slash):] store_fn = store_f.replace('/', os.sep) # Clear possibly stale output/error (even from other # resource_obj). action.set_output('') action.set_error('') try: action.run(path=resource_obj, root=po_dir, tpdir=tp_dir, project=project.code, language=language.code, store=store_fn, style=translation_project.file_style, vc_root=vcs_dir) except StandardError: err = (_("Error while running '%s' extension action") % action.title) logging.exception(err) if (action.error): messages.error(request, action.error) else: messages.error(request, err) else: if (action.error): messages.warning(request, action.error) action_output = action.output if getattr(action, 'get_download', None): export_path = action.get_download(resource_obj) if export_path: import mimetypes abs_path = absolute_real_path(export_path) filename = os.path.basename(export_path) mimetype, encoding = mimetypes.guess_type(filename) mimetype = mimetype or 'application/octet-stream' with open(abs_path, 'rb') as f: response = HttpResponse(f.read(), mimetype=mimetype) response['Content-Disposition'] = ( 'attachment; filename="%s"' % filename) return response if not action_output: if not request.store: rev_args = [language.code, project.code, ''] overview_url = reverse('pootle-tp-overview', args=rev_args) else: slash = store_f.rfind('/') store_d = '' if slash > 0: store_d = store_f[:slash] store_f = store_f[slash + 1:] elif slash == 0: store_f = store_f[1:] rev_args = [language.code, project.code, store_d, store_f] overview_url = reverse('pootle-tp-overview', args=rev_args) return HttpResponseRedirect(overview_url) if goal is None: description = translation_project.description else: description = goal.description ctx.update(get_overview_context(request)) ctx.update({ 'resource_obj': request.store or request.directory, # Dirty hack. 'translation_project': translation_project, 'description': description, 'project': project, 'language': language, 'feed_path': request.directory.pootle_path[1:], 'action_groups': actions, 'action_output': action_output, 'can_edit': can_edit, 'browser_extends': 'translation_projects/base.html', 'browser_body_id': 'tpoverview', }) tp_pootle_path = translation_project.pootle_path if request.store is None: resource_obj_goals = Goal.get_goals_for_path(resource_obj.pootle_path) resource_obj_has_goals = len(resource_obj_goals) > 0 if in_goal_overview and resource_obj_has_goals: # Then show the goals tab. table_fields = ['name', 'progress', 'priority', 'total', 'need-translation', 'suggestions'] items = [make_goal_item(resource_obj_goal, resource_obj.pootle_path) for resource_obj_goal in resource_obj_goals] ctx.update({ 'table': { 'id': 'tp-goals', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'parent': get_parent(request.directory), 'items': items, }, 'resource_obj_has_goals': True, }) elif goal in resource_obj_goals: # Then show the drill down view for the specified goal. table_fields = ['name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'activity'] ctx.update({ 'table': { 'id': 'tp-goals', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'parent': get_goal_parent(request.directory, goal), 'items': get_goal_children(request.directory, goal), }, 'goal': goal, 'goal_url': goal.get_drill_down_url_for_path(tp_pootle_path), 'resource_obj_has_goals': True, }) else: # Then show the files tab. table_fields = ['name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'activity'] ctx.update({ 'table': { 'id': 'tp-files', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'parent': get_parent(request.directory), 'items': get_children(request.directory), }, 'resource_obj_has_goals': resource_obj_has_goals, }) elif goal is not None: ctx.update({ 'goal': goal, 'goal_url': goal.get_drill_down_url_for_path(tp_pootle_path), }) if can_edit: if request.store is None: url_kwargs = { 'language_code': language.code, 'project_code': project.code, } add_tag_action_url = reverse('pootle-xhr-tag-tp', kwargs=url_kwargs) else: add_tag_action_url = reverse('pootle-xhr-tag-store', args=[resource_obj.pk]) if goal is None: edit_form = DescriptionForm(instance=translation_project) edit_form_action = reverse('pootle-tp-admin-settings', args=[language.code, project.code]) else: edit_form = GoalForm(instance=goal) edit_form_action = reverse('pootle-xhr-edit-goal', args=[goal.slug]) ctx.update({ 'form': edit_form, 'form_action': edit_form_action, 'add_tag_form': TagForm(), 'add_tag_action_url': add_tag_action_url, }) return render_to_response(template_name, ctx, context_instance=RequestContext(request))
def overview(request, translation_project, dir_path, filename=None): current_path = translation_project.directory.pootle_path + dir_path if filename: current_path = current_path + filename store = get_object_or_404(Store, pootle_path=current_path) directory = store.parent template_vars = { 'store_tags': store.tags.all().order_by('name'), } template = "translation_project/store_overview.html" else: store = None directory = get_object_or_404(Directory, pootle_path=current_path) template_vars = { 'tp_tags': translation_project.tags.all().order_by('name'), } template = "translation_project/overview.html" if (check_permission('translate', request) or check_permission('suggest', request) or check_permission('overwrite', request)): template_vars.update({ 'upload_form': _handle_upload_form(request, current_path, translation_project, directory), }) can_edit = check_permission('administrate', request) project = translation_project.project language = translation_project.language path_obj = store or directory latest_action = '' # If current directory is the TP root directory. if not directory.path: latest_action = translation_project.get_latest_submission() elif store is None: # If this is not a file. latest_action = Submission.get_latest_for_dir(path_obj) path_stats = get_raw_stats(path_obj, include_suggestions=True) path_summary = get_path_summary(path_obj, path_stats, latest_action) actions = action_groups(request, path_obj, path_stats=path_stats) action_output = '' running = request.GET.get(EXTDIR, '') if running: if store: act = StoreAction else: act = TranslationProjectAction try: action = act.lookup(running) except KeyError: messages.error(request, _("Unable to find %s %s") % (act, running)) else: if not getattr(action, 'nosync', False): (store or translation_project).sync() if action.is_active(request): vcs_dir = settings.VCS_DIRECTORY po_dir = settings.PODIRECTORY tp_dir = directory.get_real_path() store_fn = '*' if store: tp_dir_slash = add_trailing_slash(tp_dir) if store.file.name.startswith(tp_dir_slash): # Note: store_f used below in reverse() call. store_f = store.file.name[len(tp_dir_slash):] store_fn = store_f.replace('/', os.sep) # Clear possibly stale output/error (even from other path_obj). action.set_output('') action.set_error('') try: action.run(path=path_obj, root=po_dir, tpdir=tp_dir, project=project.code, language=language.code, store=store_fn, style=translation_project.file_style, vc_root=vcs_dir) except StandardError: err = (_("Exception while running '%s' extension action") % action.title) logging.exception(err) if (action.error): messages.error(request, action.error) else: messages.error(request, err) else: if (action.error): messages.warning(request, action.error) action_output = action.output if getattr(action, 'get_download', None): export_path = action.get_download(path_obj) if export_path: response = HttpResponse('/export/' + export_path) response['Content-Disposition'] = ( 'attachment; filename="%s"' % os.path.basename(export_path)) return response if not action_output: if not store: rev_args = [language.code, project.code, ''] overview_url = reverse('tp.overview', args=rev_args) else: slash = store_f.rfind('/') store_d = '' if slash > 0: store_d = store_f[:slash] store_f = store_f[slash + 1:] elif slash == 0: store_f = store_f[1:] rev_args = [ language.code, project.code, store_d, store_f ] overview_url = reverse('tp.overview', args=rev_args) return HttpResponseRedirect(overview_url) template_vars.update({ 'translation_project': translation_project, 'project': project, 'language': language, 'path_obj': path_obj, 'resource_path': request.resource_path, 'path_summary': path_summary, 'stats': path_stats, 'topstats': gentopstats_translation_project(translation_project), 'feed_path': directory.pootle_path[1:], 'action_groups': actions, 'action_output': action_output, 'can_edit': can_edit, }) if store is None: table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions' ] template_vars.update({ 'table': { 'id': 'tp', 'proportional': True, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': get_children(translation_project, directory), } }) if can_edit: if store is None: url_kwargs = { 'language_code': language.code, 'project_code': project.code, } add_tag_action_url = reverse('tp.ajax_add_tag', kwargs=url_kwargs) else: add_tag_action_url = reverse('pootle-store-ajax-add-tag', args=[path_obj.pk]) template_vars.update({ 'form': DescriptionForm(instance=translation_project), 'add_tag_form': TagForm(), 'add_tag_action_url': add_tag_action_url, }) return render_to_response(template, template_vars, context_instance=RequestContext(request))
def overview(request, project): """Page listing all languages added to project.""" from locale import strcoll from pootle.i18n.gettext import tr_lang def _make_lang_item(tp): href = tp.get_absolute_url() href_all = tp.get_translate_url() href_todo = tp.get_translate_url(state="incomplete") info = { "project": tp.project.code, "code": tp.code, "href": href, "href_all": href_all, "href_todo": href_todo, "title": tr_lang(tp.language.fullname), "lastactivity": get_last_action(tp), "tags": tp.tag_like_objects, "pk": tp.pk, } return info translation_projects = project.translationproject_set.all() items = [_make_lang_item(tp) for tp in translation_projects.iterator()] items.sort(lambda x, y: strcoll(x["title"], y["title"])) langs = translation_projects.count() summary = ungettext("%(langs)d language", "%(langs)d languages", langs, {"langs": langs}) fields = ["name", "progress", "total", "need-translation", "activity", "tags"] ctx = { "resource_obj": request.resource_obj, "project": { "code": project.code, "name": project.fullname, "description": project.description, "summary": summary, }, "topstats": gentopstats_project(project), "can_edit": check_permission("administrate", request), "table": { "id": "project", "proportional": False, "fields": fields, "headings": get_table_headings(fields), "items": items, }, } if ctx["can_edit"]: from pootle_project.forms import DescriptionForm tag_action_url = reverse("pootle-xhr-tag-tp-in-project", kwargs={"project_code": project.code}) ctx.update( { "form": DescriptionForm(instance=project), "form_action": reverse("pootle-project-admin-settings", args=[project.code]), "add_tag_form": TranslationProjectTagForm(project=project), "add_tag_action_url": tag_action_url, } ) return render(request, "projects/overview.html", ctx)