def mirror_list(request): def pre_reqs(arch, repotype): for mirror in mirrors: if mirror.repo.arch != arch: text = 'Not all mirror architectures are the same,' text += ' cannot link to or create repos' messages.info(request, text) return render(request, 'repos/mirror_with_repo_list.html', {'page': page, 'checksum': checksum}, ) if mirror.repo.repotype != repotype: text = 'Not all mirror repotypes are the same,' text += ' cannot link to or create repos' messages.info(request, text) return render(request, 'repos/mirror_with_repo_list.html', {'page': page, 'checksum': checksum}, ) return True def move_mirrors(repo): for mirror in mirrors: oldrepo = mirror.repo for hostrepo in HostRepo.objects.filter(repo=oldrepo): try: hostrepo.repo = repo hostrepo.save() except IntegrityError: hostrepo.delete() mirror.repo = repo mirror.save() if oldrepo.mirror_set.count() == 0: oldrepo.delete() mirrors = Mirror.objects.select_related().order_by('file_checksum') checksum = None if 'checksum' in request.GET: checksum = request.GET['checksum'] if 'checksum' in request.POST: checksum = request.POST['checksum'] if checksum is not None: mirrors = mirrors.filter(file_checksum=checksum) if 'search' in request.GET: terms = request.GET['search'].lower() query = Q() for term in terms.split(' '): q = Q(url__icontains=term) query = query & q mirrors = mirrors.filter(query) else: terms = '' mirrors = mirrors.distinct() page_no = request.GET.get('page') paginator = Paginator(mirrors, 50) try: page = paginator.page(page_no) except PageNotAnInteger: page = paginator.page(1) except EmptyPage: page = paginator.page(paginator.num_pages) if request.method == 'POST': arch = mirrors[0].repo.arch repotype = mirrors[0].repo.repotype enabled = mirrors[0].repo.enabled security = mirrors[0].repo.security create_form = CreateRepoForm(request.POST, prefix='create', arch=arch, repotype=repotype) if create_form.is_valid(): repo = create_form.save(commit=False) repo.arch = create_form.arch repo.repotype = create_form.repotype repo.enabled = enabled repo.security = security repo.save() move_mirrors(repo) text = 'Mirrors linked to new Repository {0!s}'.format(repo) messages.info(request, text) return HttpResponseRedirect(repo.get_absolute_url()) link_form = LinkRepoForm(request.POST, prefix='link') if link_form.is_valid(): repo = link_form.cleaned_data['name'] move_mirrors(repo) text = 'Mirrors linked to Repository {0!s}'.format(repo) messages.info(request, text) return HttpResponseRedirect(repo.get_absolute_url()) else: if 'checksum' in request.GET and mirrors: arch = mirrors[0].repo.arch repotype = mirrors[0].repo.repotype prereqs = pre_reqs(arch, repotype) if not prereqs: return prereqs else: link_form = LinkRepoForm(prefix='link') create_form = CreateRepoForm(prefix='create') return render(request, 'repos/mirror_with_repo_list.html', {'page': page, 'link_form': link_form, 'create_form': create_form, 'checksum': checksum}, ) return render(request, 'repos/mirror_list.html', {'page': page}, )
def mirror_list(request): def pre_reqs(arch, repotype): for mirror in mirrors: if mirror.repo.arch != arch: text = 'Not all mirror architectures are the same,' text += ' cannot link to or create repos' messages.info(request, text) return render( request, 'repos/mirror_with_repo_list.html', { 'page': page, 'checksum': checksum }, ) if mirror.repo.repotype != repotype: text = 'Not all mirror repotypes are the same,' text += ' cannot link to or create repos' messages.info(request, text) return render( request, 'repos/mirror_with_repo_list.html', { 'page': page, 'checksum': checksum }, ) return True def move_mirrors(repo): for mirror in mirrors: oldrepo = mirror.repo for hostrepo in HostRepo.objects.filter(repo=oldrepo): try: hostrepo.repo = repo hostrepo.save() except IntegrityError: hostrepo.delete() mirror.repo = repo mirror.save() if oldrepo.mirror_set.count() == 0: oldrepo.delete() mirrors = Mirror.objects.select_related().order_by('file_checksum') checksum = None if 'checksum' in request.GET: checksum = request.GET['checksum'] if 'checksum' in request.POST: checksum = request.POST['checksum'] if checksum is not None: mirrors = mirrors.filter(file_checksum=checksum) if 'search' in request.GET: terms = request.GET['search'].lower() query = Q() for term in terms.split(' '): q = Q(url__icontains=term) query = query & q mirrors = mirrors.filter(query) else: terms = '' mirrors = mirrors.distinct() page_no = request.GET.get('page') paginator = Paginator(mirrors, 50) try: page = paginator.page(page_no) except PageNotAnInteger: page = paginator.page(1) except EmptyPage: page = paginator.page(paginator.num_pages) if request.method == 'POST': arch = mirrors[0].repo.arch repotype = mirrors[0].repo.repotype enabled = mirrors[0].repo.enabled security = mirrors[0].repo.security create_form = CreateRepoForm(request.POST, prefix='create', arch=arch, repotype=repotype) if create_form.is_valid(): repo = create_form.save(commit=False) repo.arch = create_form.arch repo.repotype = create_form.repotype repo.enabled = enabled repo.security = security repo.save() move_mirrors(repo) text = 'Mirrors linked to new Repository {0!s}'.format(repo) messages.info(request, text) return HttpResponseRedirect(repo.get_absolute_url()) link_form = LinkRepoForm(request.POST, prefix='link') if link_form.is_valid(): repo = link_form.cleaned_data['name'] move_mirrors(repo) text = 'Mirrors linked to Repository {0!s}'.format(repo) messages.info(request, text) return HttpResponseRedirect(repo.get_absolute_url()) else: if 'checksum' in request.GET and mirrors: arch = mirrors[0].repo.arch repotype = mirrors[0].repo.repotype prereqs = pre_reqs(arch, repotype) if not prereqs: return prereqs else: link_form = LinkRepoForm(prefix='link') create_form = CreateRepoForm(prefix='create') return render( request, 'repos/mirror_with_repo_list.html', { 'page': page, 'link_form': link_form, 'create_form': create_form, 'checksum': checksum }, ) return render( request, 'repos/mirror_list.html', {'page': page}, )
def mirror_list(request): mirrors = Mirror.objects.select_related().order_by('file_checksum') if 'checksum' in request.REQUEST: checksum = request.REQUEST['checksum'] mirrors = mirrors.filter(file_checksum=checksum) else: # only show mirrors with more than 0 packages # this is a hack but works, because a host with 0 packages has no packages with package_id > 0 mirrors = mirrors.filter(packages__gt=0) # this is the correct way to do it, but the SQL takes way longer # mirrors = mirrors.annotate(num_packages=Count('packages')).filter(num_packages__gt=0) mirrors = mirrors.distinct() def pre_reqs(arch, repotype): for mirror in mirrors: if mirror.repo.arch != arch: messages.info(request, 'Not all mirror architectures are the same, cannot link to or create repos.') return render_to_response('repos/mirror_with_repo_list.html', {'page': page, 'checksum': checksum}, context_instance=RequestContext(request)) if mirror.repo.repotype != repotype: messages.info(request, 'Not all mirror repotypes are the same, cannot link to or create repos.') return render_to_response('repos/mirror_with_repo_list.html', {'page': page, 'checksum': checksum}, context_instance=RequestContext(request)) return True def move_mirrors(repo): for mirror in mirrors: oldrepo = mirror.repo for hostrepo in HostRepo.objects.filter(repo=oldrepo): try: hostrepo.repo = repo hostrepo.save() except IntegrityError: hostrepo.delete() mirror.repo = repo mirror.save() if oldrepo.mirror_set.count() == 0: oldrepo.delete() try: page_no = int(request.GET.get('page', 1)) except ValueError: page_no = 1 p = Paginator(mirrors, 50) try: page = p.page(page_no) except (EmptyPage, InvalidPage): page = p.page(p.num_pages) if request.method == 'POST': arch = mirrors[0].repo.arch repotype = mirrors[0].repo.repotype enabled = mirrors[0].repo.enabled security = mirrors[0].repo.security create_form = CreateRepoForm(request.POST, prefix='create', arch=arch, repotype=repotype) if create_form.is_valid(): repo = create_form.save(commit=False) repo.arch = create_form.arch repo.repotype = create_form.repotype repo.enabled = enabled repo.security = security repo.save() move_mirrors(repo) messages.info(request, 'Mirrors linked to new Repository %s' % repo) return HttpResponseRedirect(repo.get_absolute_url()) link_form = LinkRepoForm(request.POST, prefix='link') if link_form.is_valid(): repo = link_form.cleaned_data['name'] move_mirrors(repo) messages.info(request, 'Mirrors linked to Repository %s' % repo) return HttpResponseRedirect(repo.get_absolute_url()) else: if 'checksum' in request.REQUEST: arch = mirrors[0].repo.arch repotype = mirrors[0].repo.repotype prereqs = pre_reqs(arch, repotype) if not prereqs: return prereqs else: link_form = LinkRepoForm(prefix='link') create_form = CreateRepoForm(prefix='create') return render_to_response('repos/mirror_with_repo_list.html', {'page': page, 'link_form': link_form, 'create_form': create_form, 'checksum': checksum}, context_instance=RequestContext(request)) return render_to_response('repos/mirror_list.html', {'page': page}, context_instance=RequestContext(request))