def change_password(request): if request.method == 'POST': form = PasswordChangeForm(request.POST) form.setUser(request.user) if form.is_valid(): request.user.set_password(form.cleaned_data["new_pass"]) request.user.save() return render_response(request, "profile/password-change.html", {"form": form, "password_updated": True}) else: return render_response(request, "profile/password-change.html", {"form": form}) else: form = PasswordChangeForm() return render_response(request, "profile/password-change.html", {"form": form})
def repository_index(request): distributions = Distribution.objects.all() context = { 'distributions': distributions, } return render_response(request, 'repository/index.html', context)
def user_profile(request): # form is posted if request.method == 'POST': form = ProfileEditForm(request.POST) if form.is_valid(): u = request.user u.first_name = form.cleaned_data["firstname"] u.last_name = form.cleaned_data["lastname"] u.save() return render_response(request, "profile/user-profile-edit.html", {"profile_updated": True}) else: return render_response(request, "profile/user-profile-edit.html", {"form": form}) else: unbound_form = ProfileEditForm({"firstname": request.user.first_name, "lastname": request.user.last_name}) return render_response(request, "profile/user-profile-edit.html", {"form": unbound_form})
def change_password(request): if request.method == 'POST': form = PasswordChangeForm(request.POST) form.setUser(request.user) if form.is_valid(): request.user.set_password(form.cleaned_data["new_pass"]) request.user.save() return render_response(request, "profile/password-change.html", { "form": form, "password_updated": True }) else: return render_response(request, "profile/password-change.html", {"form": form}) else: form = PasswordChangeForm() return render_response(request, "profile/password-change.html", {"form": form})
def view_user_detail(request, userName): # FIXME: Developers and users/testers should be different developer = User.objects.get(username=userName) pending = Binary.objects.filter(resolution='pending', update__updated_by=developer) context = { 'developer': developer, 'pending': pending, } return render_response(request, 'profile/user-detail.html', context)
def view_source_detail(request, distName, distRelease, sourceName): """ sourceName: <Source> section in pspec.xml """ source = Source.objects.get(name=sourceName, distribution__name=distName, distribution__release=distRelease) LANGUAGE_CODE = request.LANGUAGE_CODE context = { 'source': source, 'LANGUAGE_CODE': LANGUAGE_CODE, } return render_response(request, 'repository/source.html', context)
def view_package_detail(request, distName, distRelease, sourceName, packageName): """ sourceName: <Source> section in pspec.xml packageName: <Package> section in pspec.xml """ package = Package.objects.get(name=packageName, source__name=sourceName, source__distribution__name=distName, source__distribution__release=distRelease) LANGUAGE_CODE = request.LANGUAGE_CODE context = { 'package': package, 'LANGUAGE_CODE': LANGUAGE_CODE, } return render_response(request, 'repository/package.html', context)
def user_profile(request): # form is posted if request.method == 'POST': form = ProfileEditForm(request.POST) if form.is_valid(): u = request.user u.first_name = form.cleaned_data["firstname"] u.last_name = form.cleaned_data["lastname"] u.save() return render_response(request, "profile/user-profile-edit.html", {"profile_updated": True}) else: return render_response(request, "profile/user-profile-edit.html", {"form": form}) else: unbound_form = ProfileEditForm({ "firstname": request.user.first_name, "lastname": request.user.last_name }) return render_response(request, "profile/user-profile-edit.html", {"form": unbound_form})
def search(request): if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): keyword = request.POST.get('keyword', '') #source = request.POST.get('source', False) #binary = request.POST.get('binary', False) in_package = request.POST.get('in_package', 'Binary') summary = request.POST.get('summary', False) description = request.POST.get('description', False) dist_name = request.POST.get('dist_name', 'Pardus') dist_release = request.POST.get('dist_release', '2008') exact = request.POST.get('exact', '') unified_sources = None unified_binaries = None if in_package == 'Source': if exact: sources = Source.objects.filter(name__exact=keyword) unified_sources = sources else: sources = Source.objects.filter(name__icontains=keyword) summaries = Source.objects.filter(info__summary__id = -1) descriptions = Source.objects.filter(info__description__id = -1) if summary: summaries = Source.objects.filter(info__summary__text__icontains=keyword) if description: descriptions = Source.objects.filter(info__description__text__icontains=keyword) unified_sources = sources | summaries | descriptions # i need to find a better way here like using set #s1 = set(sources).union(set(summaries).union(set(descriptions)) unified_sources = unified_sources.filter(distribution__name__exact=dist_name) unified_sources = unified_sources.filter(distribution__release__exact=dist_release) unified_sources = unified_sources.distinct() if in_package == 'Binary': if exact: binaries = Package.objects.filter(name__exact=keyword) unified_binaries = binaries else: binaries = Package.objects.filter(name__icontains=keyword) summaries = Package.objects.filter(source__info__summary__id = -1) descriptions = Package.objects.filter(source__info__description__id = -1) if summary: summaries = Package.objects.filter(source__info__summary__text__icontains=keyword) if description: descriptions = Package.objects.filter(source__info__description__text__icontains=keyword) unified_binaries = binaries | summaries | descriptions unified_binaries = unified_binaries.distinct() unified_binaries = unified_binaries.filter(source__distribution__name__exact=dist_name) unified_binaries = unified_binaries.filter(source__distribution__release__exact=dist_release) if unified_sources and not unified_binaries: result = unified_sources sources_len = unified_sources.count() binary_len = 0 elif unified_binaries and not unified_sources: result = unified_binaries binary_len = unified_binaries.count() sources_len = 0 else: # create an empty result result = Source.objects.filter(id=-1) sources_len = result.count() binary_len = 0 sources_len = str(sources_len) binary_len = str(binary_len) # create unique ids for the cache query result values = str(result.values()) result_id = hashlib.md5(values).hexdigest() request.session['result_id'] = result_id sources_len_id = hashlib.md5(sources_len).hexdigest() request.session['sources_len_id'] = sources_len_id binary_len_id = hashlib.md5(binary_len).hexdigest() request.session['binary_len_id'] = binary_len_id # set the result to the db, pagination will use results from cache when the GET request is called # saving the result at the dictionary is a workaround, it is nto possible to save the queryset object directly at the db rslt = dict() rslt['tmp'] = result cache.set(result_id, rslt) cache.set(sources_len_id, sources_len) cache.set(binary_len_id, binary_len) LANGUAGE_CODE = request.LANGUAGE_CODE # - generate dict to use in object_list # - django appends _list suffix to template_object_name, see: http://docs.djangoproject.com/en/1.0/ref/generic-views/ object_dict = { 'queryset': result, 'paginate_by': SOURCE_PACKAGES_PER_PAGE, 'template_name': 'repository/search_result.html', 'template_object_name': 'packages', 'extra_context': {'LANGUAGE_CODE': LANGUAGE_CODE, 'sources_len': sources_len, 'binary_len': binary_len} } return object_list(request, **object_dict) elif request.method == 'GET' and request.GET.get('page'): result_id = request.session.get('result_id') try: result = cache.get(result_id)['tmp'] # default timeout is 3600 sec, if the timeout is passed, return to the form page except TypeError: return HttpResponseRedirect('./') sources_len_id = request.session.get('sources_len_id') binary_len_id = request.session.get('binary_len_id') sources_len = cache.get(sources_len_id) binary_len = cache.get(binary_len_id) LANGUAGE_CODE = request.LANGUAGE_CODE # - generate dict to use in object_list # - django appends _list suffix to template_object_name, see: http://docs.djangoproject.com/en/1.0/ref/generic-views/ object_dict = { 'queryset': result, 'paginate_by': SOURCE_PACKAGES_PER_PAGE, 'template_name': 'repository/search_result.html', 'template_object_name': 'packages', 'extra_context': {'LANGUAGE_CODE': LANGUAGE_CODE, 'sources_len': sources_len, 'binary_len': binary_len} } return object_list(request, **object_dict) else: form = SearchForm() context = { 'form': form, } return render_response(request, 'repository/search.html', context)
def view_binary_detail(request, distName, distRelease, sourceName, packageName, binaryNo): """ sourceName: <Source> section in pspec.xml packageName: <Package> section in pspec.xml """ binary = Binary.objects.get(no=binaryNo, package__name=packageName, package__source__name=sourceName, package__source__distribution__name=distName, package__source__distribution__release=distRelease) # FIXME: We also handle sending ACK/NACK info. Maybe it can be done in different view? if request.method == "POST" and request.user and request.user.is_authenticated(): # if this package is not updated by the latest updater, give error: #if binary.update.updated_by != request.user: # return HttpResponse("Sorry, you can not change another developer's package. Only the developer who changed the package can give ACK.") if request.POST['result'] == "unknown": TestResult.objects.filter(binary=binary, created_by=request.user).delete() elif request.POST['result'] in ("yes", "no"): result, created = TestResult.objects.get_or_create(binary=binary, created_by=request.user) result.result = request.POST.get('result', 'unknown') result.comment = request.POST.get('comment', '') result.save() user_result = None if request.user and request.user.is_authenticated(): results = binary.testresult_set.filter(created_by=request.user) if len(results): user_result = results[0] # get the files of the pisi package # it is better to download the package from a local machine, it will be faster base_path = 'http://packages.pardus.org.tr' if binary.package.source.distribution.type == 'corporate': distro = 'corporate' release = '2' suffix = distro + release else: distro = binary.package.source.distribution.name.lower() release = binary.package.source.distribution.release suffix = "-".join([distro, release]) if binary.resolution == 'pending': suffix += '-test' path = os.path.join(base_path, suffix) pisi_package = binary.get_filename() pisi_url = os.path.join(path, pisi_package) tmp_path = os.path.join('/tmp', pisi_package) url = urllib.URLopener() if os.path.exists(tmp_path): os.unlink(tmp_path) try: url.retrieve(pisi_url, tmp_path) except IOError: context = { 'msg': _('The file you requested is not at the server. There may be an update.'), } return render_response(request, 'repository/404.html', context) package = pisi.package.Package(tmp_path) files = package.get_files() os.unlink(tmp_path) context = { 'binary': binary, 'user_result': user_result, 'files': files, } return render_response(request, 'repository/binary.html', context)