def get_context_data(self, *args, **kwargs): filters = {} can_translate = False can_translate_stats = False User = get_user_model() if self.has_vfolders: filters['sort'] = 'priority' if self.request.user.is_superuser or self.language: can_translate = True can_translate_stats = True url_action_continue = self.object.get_translate_url( state='incomplete', **filters) url_action_fixcritical = self.object.get_critical_url( **filters) url_action_review = self.object.get_translate_url( state='suggestions', **filters) url_action_view_all = self.object.get_translate_url(state='all') else: if self.project: can_translate = True url_action_continue = None url_action_fixcritical = None url_action_review = None url_action_view_all = None ctx, cookie_data_ = self.sidebar_announcements ctx.update( super(PootleBrowseView, self).get_context_data(*args, **kwargs)) lang_code, proj_code = split_pootle_path(self.pootle_path)[:2] top_scorers = User.top_scorers( project=proj_code, language=lang_code, limit=TOP_CONTRIBUTORS_CHUNK_SIZE + 1, ) ctx.update( {'page': 'browse', 'stats_refresh_attempts_count': settings.POOTLE_STATS_REFRESH_ATTEMPTS_COUNT, 'stats': self.stats, 'translation_states': get_translation_states(self.object), 'checks': get_qualitycheck_list(self.object), 'can_translate': can_translate, 'can_translate_stats': can_translate_stats, 'url_action_continue': url_action_continue, 'url_action_fixcritical': url_action_fixcritical, 'url_action_review': url_action_review, 'url_action_view_all': url_action_view_all, 'table': self.table, 'is_store': self.is_store, 'top_scorers': top_scorers, 'top_scorers_data': get_top_scorers_data( top_scorers, TOP_CONTRIBUTORS_CHUNK_SIZE), 'browser_extends': self.template_extends}) return ctx
def test_view_projects_browse(client, request_users): user = request_users["user"] client.login( username=user.username, password=request_users["password"]) response = client.get(reverse("pootle-projects-browse")) assert response.cookies["pootle-language"].value == "projects" ctx = response.context request = response.wsgi_request user_projects = Project.accessible_by_user(request.user) user_projects = ( Project.objects.for_user(request.user) .filter(code__in=user_projects)) obj = ProjectSet(user_projects) items = [ make_project_list_item(project) for project in obj.children] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'last-updated', 'activity'] table = { 'id': 'projects', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items} if request.user.is_superuser: url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 User = get_user_model() top_scorers = User.top_scorers(limit=10) assertions = dict( page="browse", pootle_path="/projects/", resource_path="", resource_path_parts=[], object=obj, table=table, browser_extends="projects/all/base.html", stats=obj.data_tool.get_stats(user=request.user), checks=get_qualitycheck_list(obj), top_scorers=top_scorers, top_scorers_data=get_top_scorers_data(top_scorers, 10), translation_states=get_translation_states(obj), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all) view_context_test(ctx, **assertions)
def test_view_projects_browse(client, request_users): user = request_users["user"] client.login(username=user.username, password=request_users["password"]) response = client.get(reverse("pootle-projects-browse")) assert response.cookies["pootle-language"].value == "projects" ctx = response.context request = response.wsgi_request user_projects = Project.accessible_by_user(request.user) user_projects = (Project.objects.for_user( request.user).filter(code__in=user_projects)) obj = ProjectSet(user_projects) items = [make_project_list_item(project) for project in obj.children] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'last-updated', 'activity' ] table = { 'id': 'projects', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items } if request.user.is_superuser: url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 User = get_user_model() top_scorers = User.top_scorers(limit=10) assertions = dict(page="browse", pootle_path="/projects/", resource_path="", resource_path_parts=[], object=obj, table=table, browser_extends="projects/all/base.html", stats=obj.get_stats(), checks=get_qualitycheck_list(obj), top_scorers=top_scorers, top_scorers_data=get_top_scorers_data(top_scorers, 10), translation_states=get_translation_states(obj), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all) view_context_test(ctx, **assertions)
def get_context_data(self, *args, **kwargs): filters = {} can_translate = False can_translate_stats = False User = get_user_model() if self.has_vfolders: filters['sort'] = 'priority' if self.request.user.is_superuser or self.language: can_translate = True can_translate_stats = True url_action_continue = self.object.get_translate_url( state='incomplete', **filters) url_action_fixcritical = self.object.get_critical_url( **filters) url_action_review = self.object.get_translate_url( state='suggestions', **filters) url_action_view_all = self.object.get_translate_url(state='all') else: if self.project: can_translate = True url_action_continue = None url_action_fixcritical = None url_action_review = None url_action_view_all = None ctx, cookie_data = self.sidebar_announcements ctx.update( super(PootleBrowseView, self).get_context_data(*args, **kwargs)) language_code, project_code = split_pootle_path(self.pootle_path)[:2] ctx.update( {'page': 'browse', 'stats': jsonify(self.stats), 'translation_states': get_translation_states(self.object), 'checks': get_qualitycheck_list(self.object), 'can_translate': can_translate, 'can_translate_stats': can_translate_stats, 'url_action_continue': url_action_continue, 'url_action_fixcritical': url_action_fixcritical, 'url_action_review': url_action_review, 'url_action_view_all': url_action_view_all, 'table': self.table, 'is_store': self.is_store, 'top_scorers': User.top_scorers(project=project_code, language=language_code, limit=10), 'browser_extends': self.template_extends}) return ctx
def test_get_qualitycheck_list(tp0): result = [] checks = get_qualitychecks() for check, cat in checks.items(): result.append({ 'code': check, 'is_critical': cat == Category.CRITICAL, 'title': u"%s" % check_names.get(check, check), 'url': tp0.get_translate_url(check=check) }) def alphabetical_critical_first(item): sort_prefix = 0 if item['is_critical'] else 1 return "%d%s" % (sort_prefix, item['title'].lower()) result = sorted(result, key=alphabetical_critical_first) assert result == get_qualitycheck_list(tp0)
def check_schema(self): return get_qualitycheck_list(self.context)
def _test_browse_view(project, request, response, kwargs): cookie_data = json.loads( unquote(response.cookies[SIDEBAR_COOKIE_NAME].value)) assert cookie_data["foo"] == "bar" assert "announcements_projects_%s" % project.code in cookie_data ctx = response.context kwargs["project_code"] = project.code resource_path = ( "%(dir_path)s%(filename)s" % kwargs) project_path = ( "%s/%s" % (kwargs["project_code"], resource_path)) if not (kwargs["dir_path"] or kwargs["filename"]): obj = project elif not kwargs["filename"]: obj = ProjectResource( Directory.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) else: obj = ProjectResource( Store.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) item_func = ( make_xlanguage_item if (kwargs["dir_path"] or kwargs["filename"]) else make_language_item) items = [ item_func(item) for item in obj.get_children_for_user(request.user) ] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) table_fields = ['name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'last-updated', 'activity'] table = { 'id': 'project', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items} if request.user.is_superuser or kwargs.get("language_code"): url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 User = get_user_model() top_scorers = User.top_scorers(project=project.code, limit=10) assertions = dict( page="browse", project=project, browser_extends="projects/base.html", pootle_path="/projects/%s" % project_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all, translation_states=get_translation_states(obj), checks=get_qualitycheck_list(obj), table=table, top_scorers=top_scorers, top_scorers_data=get_top_scorers_data(top_scorers, 10), stats=obj.data_tool.get_stats(user=request.user), ) sidebar = get_sidebar_announcements_context( request, (project, )) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[0][k] view_context_test(ctx, **assertions)
def _test_browse_view(project, request, response, kwargs): cookie_data = json.loads( unquote(response.cookies[SIDEBAR_COOKIE_NAME].value)) assert cookie_data["foo"] == "bar" assert "announcements_projects_%s" % project.code in cookie_data ctx = response.context kwargs["project_code"] = project.code resource_path = ("%(dir_path)s%(filename)s" % kwargs) project_path = ("%s/%s" % (kwargs["project_code"], resource_path)) if not (kwargs["dir_path"] or kwargs["filename"]): obj = project elif not kwargs["filename"]: obj = ProjectResource(Directory.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) else: obj = ProjectResource(Store.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) item_func = (make_xlanguage_item if (kwargs["dir_path"] or kwargs["filename"]) else make_language_item) items = [ item_func(item) for item in obj.get_children_for_user(request.user) ] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'last-updated', 'activity' ] table = { 'id': 'project', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items } if request.user.is_superuser or kwargs.get("language_code"): url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 User = get_user_model() top_scorers = User.top_scorers(project=project.code, limit=10) assertions = dict( page="browse", project=project, browser_extends="projects/base.html", pootle_path="/projects/%s" % project_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all, translation_states=get_translation_states(obj), checks=get_qualitycheck_list(obj), table=table, top_scorers=top_scorers, top_scorers_data=get_top_scorers_data(top_scorers, 10), stats=obj.get_stats(), ) sidebar = get_sidebar_announcements_context(request, (project, )) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[0][k] view_context_test(ctx, **assertions)
def _test_browse_view(tp, request, response, kwargs): cookie_data = json.loads( unquote(response.cookies[SIDEBAR_COOKIE_NAME].value)) assert cookie_data["foo"] == "bar" assert "announcements_projects_%s" % tp.project.code in cookie_data assert "announcements_%s" % tp.language.code in cookie_data assert ("announcements_%s_%s" % (tp.language.code, tp.project.code) in cookie_data) ctx = response.context kwargs["project_code"] = tp.project.code kwargs["language_code"] = tp.language.code resource_path = "%(dir_path)s%(filename)s" % kwargs pootle_path = "%s%s" % (tp.pootle_path, resource_path) if not (kwargs["dir_path"] or kwargs.get("filename")): obj = tp.directory elif not kwargs.get("filename"): obj = Directory.objects.get(pootle_path=pootle_path) else: obj = Store.objects.get(pootle_path=pootle_path) if not kwargs.get("filename"): vf_view = vfolders_data_view.get(obj.__class__)(obj, request.user) stats = vf_view.stats vfolders = stats["vfolders"] stats.update(obj.data_tool.get_stats(user=request.user)) else: stats = obj.data_tool.get_stats(user=request.user) vfolders = None filters = {} if vfolders: filters['sort'] = 'priority' dirs_with_vfolders = set( split_pootle_path(path)[2].split("/")[0] for path in tp.stores.filter( vfolders__isnull=False).values_list("pootle_path", flat=True)) directories = [ make_directory_item( child, **(dict( sort="priority") if child.name in dirs_with_vfolders else {})) for child in obj.get_children() if isinstance(child, Directory) ] stores = [ make_store_item(child) for child in obj.get_children() if isinstance(child, Store) ] if not kwargs.get("filename"): table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'last-updated', 'activity' ] table = { 'id': 'tp', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': directories + stores } else: table = None User = get_user_model() top_scorers = User.top_scorers(language=tp.language.code, project=tp.project.code, limit=11) assertions = dict( page="browse", object=obj, translation_project=tp, language=tp.language, project=tp.project, has_admin_access=check_permission('administrate', request), is_store=(kwargs.get("filename") and True or False), browser_extends="translation_projects/base.html", pootle_path=pootle_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), translation_states=get_translation_states(obj), checks=get_qualitycheck_list(obj), top_scorers=top_scorers, top_scorers_data=get_top_scorers_data(top_scorers, 10), url_action_continue=obj.get_translate_url(state='incomplete', **filters), url_action_fixcritical=obj.get_critical_url(**filters), url_action_review=obj.get_translate_url(state='suggestions', **filters), url_action_view_all=obj.get_translate_url(state='all'), stats=stats, parent=get_parent(obj)) if table: assertions["table"] = table sidebar = get_sidebar_announcements_context(request, (tp.project, tp.language, tp)) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[0][k] view_context_test(ctx, **assertions) if vfolders: for vfolder in ctx["vfolders"]["items"]: assert (vfolder["is_grayed"] and not ctx["has_admin_access"]) is False assert ctx["vfolders"]["items"] == vf_view.table_items assert (('display_download' in ctx and ctx['display_download']) == (request.user.is_authenticated() and check_permission( 'translate', request)))
def _test_browse_view(tp, request, response, kwargs): cookie_data = json.loads( unquote(response.cookies[SIDEBAR_COOKIE_NAME].value)) assert cookie_data["foo"] == "bar" assert "announcements_projects_%s" % tp.project.code in cookie_data assert "announcements_%s" % tp.language.code in cookie_data assert ( "announcements_%s_%s" % (tp.language.code, tp.project.code) in cookie_data) ctx = response.context kwargs["project_code"] = tp.project.code kwargs["language_code"] = tp.language.code resource_path = "%(dir_path)s%(filename)s" % kwargs pootle_path = "%s%s" % (tp.pootle_path, resource_path) if not (kwargs["dir_path"] or kwargs.get("filename")): obj = tp.directory elif not kwargs.get("filename"): obj = Directory.objects.get( pootle_path=pootle_path) else: obj = Store.objects.get( pootle_path=pootle_path) if not kwargs.get("filename"): vf_view = vfolders_data_view.get(obj.__class__)(obj, request.user) stats = vf_view.stats vfolders = stats["vfolders"] stats.update(obj.data_tool.get_stats(user=request.user)) else: stats = obj.data_tool.get_stats(user=request.user) vfolders = None filters = {} if vfolders: filters['sort'] = 'priority' dirs_with_vfolders = set( split_pootle_path(path)[2].split("/")[0] for path in tp.stores.filter( vfolders__isnull=False).values_list( "pootle_path", flat=True)) directories = [ make_directory_item( child, **(dict(sort="priority") if child.name in dirs_with_vfolders else {})) for child in obj.get_children() if isinstance(child, Directory)] stores = [ make_store_item(child) for child in obj.get_children() if isinstance(child, Store)] if not kwargs.get("filename"): table_fields = [ 'name', 'progress', 'total', 'need-translation', 'suggestions', 'critical', 'last-updated', 'activity'] table = { 'id': 'tp', 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': directories + stores} else: table = None User = get_user_model() top_scorers = User.top_scorers(language=tp.language.code, project=tp.project.code, limit=11) assertions = dict( page="browse", object=obj, translation_project=tp, language=tp.language, project=tp.project, has_admin_access=check_permission('administrate', request), is_store=(kwargs.get("filename") and True or False), browser_extends="translation_projects/base.html", pootle_path=pootle_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), translation_states=get_translation_states(obj), checks=get_qualitycheck_list(obj), top_scorers=top_scorers, top_scorers_data=get_top_scorers_data(top_scorers, 10), url_action_continue=obj.get_translate_url( state='incomplete', **filters), url_action_fixcritical=obj.get_critical_url(**filters), url_action_review=obj.get_translate_url( state='suggestions', **filters), url_action_view_all=obj.get_translate_url(state='all'), stats=stats, parent=get_parent(obj)) if table: assertions["table"] = table sidebar = get_sidebar_announcements_context( request, (tp.project, tp.language, tp)) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[0][k] view_context_test(ctx, **assertions) if vfolders: for vfolder in ctx["vfolders"]["items"]: assert (vfolder["is_grayed"] and not ctx["has_admin_access"]) is False assert ctx["vfolders"]["items"] == vf_view.table_items assert (('display_download' in ctx and ctx['display_download']) == (request.user.is_authenticated() and check_permission('translate', request)))
def get_context_data(self, *args, **kwargs): filters = {} can_translate = False can_translate_stats = False User = get_user_model() if self.has_vfolders: filters['sort'] = 'priority' if self.request.user.is_superuser or self.language: can_translate = True can_translate_stats = True url_action_continue = self.object.get_translate_url( state='incomplete', **filters) url_action_fixcritical = self.object.get_critical_url(**filters) url_action_review = self.object.get_translate_url( state='suggestions', **filters) url_action_view_all = self.object.get_translate_url(state='all') else: if self.project: can_translate = True url_action_continue = None url_action_fixcritical = None url_action_review = None url_action_view_all = None ctx, cookie_data = self.sidebar_announcements ctx.update( super(PootleBrowseView, self).get_context_data(*args, **kwargs)) language_code, project_code = split_pootle_path(self.pootle_path)[:2] ctx.update({ 'page': 'browse', 'stats': jsonify(self.stats), 'translation_states': get_translation_states(self.object), 'checks': get_qualitycheck_list(self.object), 'can_translate': can_translate, 'can_translate_stats': can_translate_stats, 'url_action_continue': url_action_continue, 'url_action_fixcritical': url_action_fixcritical, 'url_action_review': url_action_review, 'url_action_view_all': url_action_view_all, 'table': self.table, 'is_store': self.is_store, 'top_scorers': User.top_scorers(project=project_code, language=language_code, limit=10), 'browser_extends': self.template_extends }) return ctx