def search(request, project=None, component=None, lang=None): """Perform site-wide search on units.""" if not check_rate_limit('search', request): search_form = SiteSearchForm() else: search_form = SiteSearchForm(request.GET) context = { 'search_form': search_form, } search_kwargs = {} if component: obj = get_component(request, project, component) context['component'] = obj context['project'] = obj.project search_kwargs = {'component': obj} elif project: obj = get_project(request, project) context['project'] = obj search_kwargs = {'project': obj} else: obj = None if lang: s_language = get_object_or_404(Language, code=lang) context['language'] = s_language search_kwargs = {'language': s_language} if search_form.is_valid(): # Filter results by ACL if component: units = Unit.objects.filter(translation__component=obj) elif project: units = Unit.objects.filter(translation__component__project=obj) else: allowed_projects = request.user.allowed_projects units = Unit.objects.filter( translation__component__project__in=allowed_projects) units = units.search(search_form.cleaned_data, **search_kwargs) if lang: units = units.filter(translation__language=context['language']) page, limit = get_page_limit(request, 50) paginator = Paginator(units, limit) try: units = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of # results. units = paginator.page(paginator.num_pages) context['page_obj'] = units context['title'] = _('Search for %s') % (search_form.cleaned_data['q']) context['query_string'] = search_form.urlencode() context['search_query'] = search_form.cleaned_data['q'] else: messages.error(request, _('Invalid search query!')) return render(request, 'search.html', context)
def review_source(request, project, component): """Listing of source strings to review.""" obj, source = get_source(request, project, component) # Grab search type and page number rqtype = request.GET.get('type', 'all') page, limit = get_page_limit(request, 50) try: id_hash = checksum_to_hash(request.GET.get('checksum', '')) except ValueError: id_hash = None ignored = 'ignored' in request.GET expand = False query_string = {'type': rqtype} if ignored: query_string['ignored'] = 'true' # Filter units: if id_hash: sources = source.unit_set.filter(id_hash=id_hash) expand = True else: sources = source.unit_set.filter_type( rqtype, source.component.project, source.language, ignored ) paginator = Paginator(sources, limit) try: sources = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. sources = paginator.page(paginator.num_pages) return render( request, 'source-review.html', { 'object': obj, 'project': obj.project, 'source': source, 'page_obj': sources, 'query_string': urlencode(query_string), 'ignored': ignored, 'expand': expand, 'title': _('Review source strings in %s') % force_text(obj), } )
def review_source(request, project, subproject): """Listing of source strings to review.""" obj, source = get_source(request, project, subproject) # Grab search type and page number rqtype = request.GET.get('type', 'all') page, limit = get_page_limit(request, 50) try: id_hash = checksum_to_hash(request.GET.get('checksum', '')) except ValueError: id_hash = None ignored = 'ignored' in request.GET expand = False query_string = {'type': rqtype} if ignored: query_string['ignored'] = 'true' # Filter units: if id_hash: sources = source.unit_set.filter(id_hash=id_hash) expand = True else: sources = source.unit_set.filter_type( rqtype, source.subproject.project, source.language, ignored ) paginator = Paginator(sources, limit) try: sources = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. sources = paginator.page(paginator.num_pages) return render( request, 'source-review.html', { 'object': obj, 'project': obj.project, 'source': source, 'page_obj': sources, 'query_string': urlencode(query_string), 'ignored': ignored, 'expand': expand, 'title': _('Review source strings in %s') % force_text(obj), } )
def test_valid(self): self.assertEqual((33, 66), get_page_limit(fake_request('33', '66'), 42))
def test_negative(self): self.assertEqual((1, 10), get_page_limit(fake_request('-1', '-1'), 42))
def test_defaults(self): self.assertEqual((1, 42), get_page_limit(fake_request('x', 'x'), 42))
def test_valid(self): self.assertEqual( (33, 66), get_page_limit(fake_request('33', '66'), 42) )
def test_negative(self): self.assertEqual( (1, 10), get_page_limit(fake_request('-1', '-1'), 42) )
def test_defaults(self): self.assertEqual( (1, 42), get_page_limit(fake_request('x', 'x'), 42) )
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST' and can_add_dictionary(request.user, prj): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create(request.user, project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target']) return redirect_next(request.POST.get('next'), request.get_full_path()) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter(project=prj, language=lang).order_by(Lower('source')) page, limit = get_page_limit(request, 25) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter']) letter = letterform.cleaned_data['letter'] else: letter = '' paginator = Paginator(words, limit) try: words = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) last_changes = Change.objects.last_changes(request.user).filter( dictionary__project=prj, dictionary__language=lang)[:10] return render( request, 'dictionary.html', { 'title': dict_title(prj, lang), 'project': prj, 'language': lang, 'page_obj': words, 'form': form, 'query_string': 'letter={}'.format(letter) if letter else '', 'uploadform': uploadform, 'letterform': letterform, 'letter': letter, 'limit': limit, 'page': page, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), })
def search(request, project=None, component=None, lang=None): """Perform site-wide search on units.""" search_form = SiteSearchForm(request.GET) context = { 'search_form': search_form, } search_kwargs = {} if component: obj = get_component(request, project, component) context['component'] = obj context['project'] = obj.project search_kwargs = {'component': obj} elif project: obj = get_project(request, project) context['project'] = obj search_kwargs = {'project': obj} else: obj = None if lang: s_language = get_object_or_404(Language, code=lang) context['language'] = s_language search_kwargs = {'language': s_language} if search_form.is_valid(): # Filter results by ACL if component: units = Unit.objects.filter(translation__component=obj) elif project: units = Unit.objects.filter(translation__component__project=obj) else: allowed_projects = request.user.allowed_projects units = Unit.objects.filter( translation__component__project__in=allowed_projects ) units = units.search( search_form.cleaned_data, **search_kwargs ) if lang: units = units.filter( translation__language=context['language'] ) page, limit = get_page_limit(request, 50) paginator = Paginator(units, limit) try: units = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of # results. units = paginator.page(paginator.num_pages) context['page_obj'] = units context['title'] = _('Search for %s') % ( search_form.cleaned_data['q'] ) context['query_string'] = search_form.urlencode() context['search_query'] = search_form.cleaned_data['q'] else: messages.error(request, _('Invalid search query!')) return render( request, 'search.html', context )
def search(request, project=None, subproject=None, lang=None): """Perform site-wide search on units.""" search_form = SiteSearchForm(request.GET) context = { 'search_form': search_form, } if subproject: obj = get_subproject(request, project, subproject) context['subproject'] = obj context['project'] = obj.project elif project: obj = get_project(request, project) context['project'] = obj else: obj = None if lang: context['language'] = get_object_or_404(Language, code=lang) if search_form.is_valid(): # Filter results by ACL if subproject: units = Unit.objects.filter(translation__subproject=obj) elif project: units = Unit.objects.filter(translation__subproject__project=obj) else: projects = Project.objects.get_acl_ids(request.user) units = Unit.objects.filter( translation__subproject__project_id__in=projects ) units = units.search( None, search_form.cleaned_data, ) if lang: units = units.filter( translation__language=context['language'] ) page, limit = get_page_limit(request, 50) paginator = Paginator(units, limit) try: units = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of # results. units = paginator.page(paginator.num_pages) context['page_obj'] = units context['title'] = _('Search for %s') % ( search_form.cleaned_data['q'] ) context['query_string'] = search_form.urlencode() context['search_query'] = search_form.cleaned_data['q'] else: messages.error(request, _('Invalid search query!')) return render( request, 'search.html', context )
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST' and request.user.has_perm('glossary.add', prj): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( request.user, project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target'] ) return redirect_next( request.POST.get('next'), request.get_full_path() ) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter( project=prj, language=lang ).order_by(Lower('source')) page, limit = get_page_limit(request, 25) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter'] ) letter = letterform.cleaned_data['letter'] else: letter = '' paginator = Paginator(words, limit) try: words = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) last_changes = Change.objects.last_changes(request.user).filter( dictionary__project=prj, dictionary__language=lang )[:10] return render( request, 'dictionary.html', { 'title': dict_title(prj, lang), 'project': prj, 'language': lang, 'page_obj': words, 'form': form, 'query_string': 'letter={}'.format(letter) if letter else '', 'uploadform': uploadform, 'letterform': letterform, 'letter': letter, 'limit': limit, 'page': page, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), } )
def search(request, project=None, component=None, lang=None): """Perform site-wide search on units.""" is_ratelimited = not check_rate_limit('search', request) search_form = SiteSearchForm(request.GET) context = { 'search_form': search_form, } search_kwargs = {} if component: obj = get_component(request, project, component) context['component'] = obj context['project'] = obj.project context['back_url'] = obj.get_absolute_url() search_kwargs = {'component': obj} elif project: obj = get_project(request, project) context['project'] = obj context['back_url'] = obj.get_absolute_url() search_kwargs = {'project': obj} else: obj = None context['back_url'] = None if lang: s_language = get_object_or_404(Language, code=lang) context['language'] = s_language search_kwargs = {'language': s_language} if obj: if component: context['back_url'] = obj.translation_set.get( language=s_language).get_absolute_url() else: context['back_url'] = reverse('project-language', kwargs={ 'project': project, 'lang': lang, }) else: context['back_url'] = s_language.get_absolute_url() if not is_ratelimited and request.GET and search_form.is_valid(): # Filter results by ACL if component: units = Unit.objects.filter(translation__component=obj) elif project: units = Unit.objects.filter(translation__component__project=obj) else: allowed_projects = request.user.allowed_projects units = Unit.objects.filter( translation__component__project__in=allowed_projects) units = units.search(search_form.cleaned_data, **search_kwargs) if lang: units = units.filter(translation__language=context['language']) page, limit = get_page_limit(request, 50) paginator = Paginator(units, limit) try: units = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of # results. units = paginator.page(paginator.num_pages) context['show_results'] = True context['page_obj'] = units context['title'] = _('Search for %s') % (search_form.cleaned_data['q']) context['query_string'] = search_form.urlencode() context['search_query'] = search_form.cleaned_data['q'] elif is_ratelimited: messages.error(request, _('Too many search queries, please try again later.')) elif request.GET: messages.error(request, _('Invalid search query!')) return render(request, 'search.html', context)
def test_valid(self): self.assertEqual((33, 66), get_page_limit(fake_request("33", "66"), 42))