Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Jelle van der Waa
Archweb
Commits
15ceff77
Commit
15ceff77
authored
Dec 29, 2007
by
eliott
Browse files
Modified render_template and renamed it to render_response (consistent with
archweb_pub conventions). Moved pkgmaint_guide to a template.
parent
d1cc0f54
Changes
9
Hide whitespace changes
Inline
Side-by-side
devel/views.py
View file @
15ceff77
...
...
@@ -2,7 +2,7 @@
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.models
import
User
from
django.core
import
validators
from
archweb_dev.utils
import
render_
templat
e
from
archweb_dev.utils
import
render_
respons
e
from
archweb_dev.packages.models
import
Package
from
archweb_dev.todolists.models
import
Todolist
,
TodolistPkg
from
archweb_dev.settings
import
DATA_DIR
...
...
@@ -11,57 +11,58 @@
@
login_required
def
index
(
request
):
try
:
thismaint
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
# weird, we don't have a maintainer record for this logged-in user
thismaint
=
None
try
:
thismaint
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
# weird, we don't have a maintainer record for this logged-in user
thismaint
=
None
# get a list of incomplete package todo lists
todos
=
Todolist
.
objects
.
get_incomplete
()
# get flagged-package stats for all maintainers
stats
=
Package
.
objects
.
get_flag_stats
()
if
thismaint
:
# get list of flagged packages for this maintainer
pkgs
=
Package
.
objects
.
filter
(
maintainer
=
thismaint
.
id
).
filter
(
needupdate
=
True
).
order_by
(
'repo'
,
'pkgname'
)
else
:
pkgs
=
None
# get a list of incomplete package todo lists
todos
=
Todolist
.
objects
.
get_incomplete
()
# get flagged-package stats for all maintainers
stats
=
Package
.
objects
.
get_flag_stats
()
if
thismaint
:
# get list of flagged packages for this maintainer
pkgs
=
Package
.
objects
.
filter
(
maintainer
=
thismaint
.
id
).
filter
(
needupdate
=
True
).
order_by
(
'repo'
,
'pkgname'
)
else
:
pkgs
=
None
return
render_
template
(
'devel/index.html'
,
request
,
{
'stats'
:
stats
,
'pkgs'
:
pkgs
,
'todos'
:
todos
,
'maint'
:
thismaint
})
return
render_
response
(
request
,
'devel/index.html'
,
{
'stats'
:
stats
,
'pkgs'
:
pkgs
,
'todos'
:
todos
,
'maint'
:
thismaint
})
@
login_required
#@is_maintainer
def
change_notify
(
request
):
maint
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
notify
=
request
.
POST
.
get
(
'notify'
,
'no'
)
try
:
maint
.
get_profile
().
notify
=
notify
==
'yes'
except
UserProfile
.
DoesNotExist
:
UserProfile
(
user_id
=
maint
.
id
,
notify
=
notify
==
'yes'
).
save
()
maint
.
get_profile
().
save
()
return
HttpResponseRedirect
(
'/devel/'
)
maint
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
notify
=
request
.
POST
.
get
(
'notify'
,
'no'
)
try
:
maint
.
get_profile
().
notify
=
notify
==
'yes'
except
UserProfile
.
DoesNotExist
:
UserProfile
(
user_id
=
maint
.
id
,
notify
=
notify
==
'yes'
).
save
()
maint
.
get_profile
().
save
()
return
HttpResponseRedirect
(
'/devel/'
)
@
login_required
def
change_profile
(
request
):
errors
=
{}
if
request
.
POST
:
passwd1
,
passwd2
=
request
.
POST
[
'passwd'
],
request
.
POST
[
'passwd2'
]
email
=
request
.
POST
[
'email'
]
# validate
if
passwd1
!=
passwd2
:
errors
[
'password'
]
=
[
' Passwords do not match. '
]
validate
(
errors
,
'Email'
,
email
,
validators
.
isValidEmail
,
False
,
request
)
# apply changes
if
not
errors
:
request
.
user
.
email
=
email
if
passwd1
:
request
.
user
.
set_password
(
passwd1
)
request
.
user
.
save
()
return
HttpResponseRedirect
(
'/devel/'
)
return
render_
template
(
'devel/profile.html'
,
request
,
{
'errors'
:
errors
,
'email'
:
request
.
user
.
email
})
errors
=
{}
if
request
.
POST
:
passwd1
,
passwd2
=
request
.
POST
[
'passwd'
],
request
.
POST
[
'passwd2'
]
email
=
request
.
POST
[
'email'
]
# validate
if
passwd1
!=
passwd2
:
errors
[
'password'
]
=
[
' Passwords do not match. '
]
validate
(
errors
,
'Email'
,
email
,
validators
.
isValidEmail
,
False
,
request
)
# apply changes
if
not
errors
:
request
.
user
.
email
=
email
if
passwd1
:
request
.
user
.
set_password
(
passwd1
)
request
.
user
.
save
()
return
HttpResponseRedirect
(
'/devel/'
)
return
render_
response
(
request
,
'devel/profile.html'
,
{
'errors'
:
errors
,
'email'
:
request
.
user
.
email
})
@
login_required
def
guide
(
request
):
return
HttpResponse
(
file
(
DATA_DIR
+
'/pkgmaint_guide.txt'
).
read
(),
mimetype
=
'text/plain'
)
return
render_response
(
request
,
'devel/pkgmaint_guide.txt'
,
{
'errors'
:
errors
,
'email'
:
request
.
user
.
email
})
return
HttpResponse
(
file
(
DATA_DIR
+
'/pkgmaint_guide.txt'
).
read
(),
mimetype
=
'text/plain'
)
lib/utils.py
0 → 100644
View file @
15ceff77
from
django.core
import
validators
from
django.conf
import
settings
from
django.core.cache
import
cache
from
django.shortcuts
import
render_to_response
from
django.template
import
RequestContext
def
validate
(
errdict
,
fieldname
,
fieldval
,
validator
,
blankallowed
,
request
):
"""
A helper function that allows easy access to Django's validators without
going through a Manipulator object. Will return a dict of all triggered
errors.
"""
if
blankallowed
and
not
fieldval
:
return
alldata
=
' '
.
join
(
request
.
POST
.
values
())
+
' '
.
join
(
request
.
GET
.
values
())
try
:
validator
(
fieldval
,
alldata
)
except
validators
.
ValidationError
,
e
:
if
not
errdict
.
has_key
(
fieldname
):
errdict
[
fieldname
]
=
[]
errdict
[
fieldname
].
append
(
e
)
def
prune_cache
(
django_page_url
):
if
not
settings
.
CACHE
:
return
cache_prefix
=
'views.decorators.cache.cache_page.'
cache_prefix
+=
settings
.
CACHE_MIDDLEWARE_KEY_PREFIX
+
'.'
cache_postfix
=
'.d41d8cd98f00b204e9800998ecf8427e'
cache
.
delete
(
'%s%s%s'
%
(
cache_prefix
,
django_page_url
,
cache_postfix
))
def
render_response
(
req
,
*
args
,
**
kwargs
):
kwargs
[
'context_instance'
]
=
RequestContext
(
req
)
return
render_to_response
(
*
args
,
**
kwargs
)
news/views.py
View file @
15ceff77
...
...
@@ -3,80 +3,80 @@
from
django.contrib.auth.decorators
import
user_passes_test
from
django.contrib.auth.models
import
User
from
django
import
forms
from
archweb_dev.utils
import
render_
templat
e
from
archweb_dev.
lib.
utils
import
render_
respons
e
from
archweb_dev.news.models
import
News
from
datetime
import
date
def
view
(
request
,
newsid
):
news
=
get_object_or_404
(
News
,
id
=
newsid
)
return
render_
template
(
'news/view.html'
,
request
,
{
'news'
:
news
})
news
=
get_object_or_404
(
News
,
id
=
newsid
)
return
render_
response
(
request
,
'news/view.html'
,
{
'news'
:
news
})
def
list
(
request
):
news
=
News
.
objects
.
order_by
(
'-postdate'
,
'-id'
)
return
render_
template
(
'news/list.html'
,
request
,
{
'news'
:
news
})
news
=
News
.
objects
.
order_by
(
'-postdate'
,
'-id'
)
return
render_
response
(
request
,
'news/list.html'
,
{
'news'
:
news
})
@
user_passes_test
(
lambda
u
:
u
.
has_perm
(
'news.add_news'
))
def
add
(
request
):
try
:
m
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
return
render_
template
(
'error_page.html'
,
request
,
{
'errmsg'
:
'Cannot find a maintainer record for you! No posting allowed.'
})
try
:
m
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
return
render_
response
(
request
,
'error_page.html'
,
{
'errmsg'
:
'Cannot find a maintainer record for you! No posting allowed.'
})
manipulator
=
News
.
AddManipulator
()
if
request
.
POST
:
data
=
request
.
POST
.
copy
()
# add in the author ID
data
[
'author'
]
=
m
.
id
errors
=
manipulator
.
get_validation_errors
(
data
)
if
not
errors
:
manipulator
.
do_html2python
(
data
)
manipulator
.
save
(
data
)
return
HttpResponseRedirect
(
'/news/'
)
else
:
errors
=
{}
data
=
{}
manipulator
=
News
.
AddManipulator
()
if
request
.
POST
:
data
=
request
.
POST
.
copy
()
# add in the author ID
data
[
'author'
]
=
m
.
id
errors
=
manipulator
.
get_validation_errors
(
data
)
if
not
errors
:
manipulator
.
do_html2python
(
data
)
manipulator
.
save
(
data
)
return
HttpResponseRedirect
(
'/news/'
)
else
:
errors
=
{}
data
=
{}
form
=
forms
.
FormWrapper
(
manipulator
,
data
,
errors
)
return
render_
template
(
'news/add.html'
,
request
,
{
'form'
:
form
})
form
=
forms
.
FormWrapper
(
manipulator
,
data
,
errors
)
return
render_
response
(
request
,
'news/add.html'
,
{
'form'
:
form
})
@
user_passes_test
(
lambda
u
:
u
.
has_perm
(
'news.delete_news'
))
def
delete
(
request
,
newsid
):
news
=
get_object_or_404
(
News
,
id
=
newsid
)
#if news.author.id != request.user.id:
#
return render_
template(
'error_page.html',
request,
{'errmsg': 'You do not own this news item'})
if
request
.
POST
:
news
.
delete
()
return
HttpResponseRedirect
(
'/news/'
)
return
render_
template
(
'news/delete.html'
,
request
)
news
=
get_object_or_404
(
News
,
id
=
newsid
)
#if news.author.id != request.user.id:
#
return render_
response(request,
'error_page.html', {'errmsg': 'You do not own this news item'})
if
request
.
POST
:
news
.
delete
()
return
HttpResponseRedirect
(
'/news/'
)
return
render_
response
(
request
,
'news/delete.html'
)
@
user_passes_test
(
lambda
u
:
u
.
has_perm
(
'news.change_news'
))
def
edit
(
request
,
newsid
):
try
:
m
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
return
render_
template
(
'error_page.html'
,
request
,
{
'errmsg'
:
'Cannot find a maintainer record for you! No posting allowed.'
})
try
:
manipulator
=
News
.
ChangeManipulator
(
newsid
)
except
News
.
DoesNotExist
:
raise
Http404
try
:
m
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
return
render_
response
(
request
,
'error_page.html'
,
{
'errmsg'
:
'Cannot find a maintainer record for you! No posting allowed.'
})
try
:
manipulator
=
News
.
ChangeManipulator
(
newsid
)
except
News
.
DoesNotExist
:
raise
Http404
news
=
manipulator
.
original_object
#
if news.author != m:
#
return render_
template(
'error_page.html',
request,
{'errmsg': 'You do not own this news item'})
if
request
.
POST
:
data
=
request
.
POST
.
copy
()
# add in the author ID
data
[
'author'
]
=
news
.
author
.
id
errors
=
manipulator
.
get_validation_errors
(
data
)
if
not
errors
:
manipulator
.
do_html2python
(
data
)
manipulator
.
save
(
data
)
return
HttpResponseRedirect
(
'/news/'
)
else
:
errors
=
{}
data
=
news
.
__dict__
news
=
manipulator
.
original_object
#
if news.author != m:
#
return render_
response(request,
'error_page.html', {'errmsg': 'You do not own this news item'})
if
request
.
POST
:
data
=
request
.
POST
.
copy
()
# add in the author ID
data
[
'author'
]
=
news
.
author
.
id
errors
=
manipulator
.
get_validation_errors
(
data
)
if
not
errors
:
manipulator
.
do_html2python
(
data
)
manipulator
.
save
(
data
)
return
HttpResponseRedirect
(
'/news/'
)
else
:
errors
=
{}
data
=
news
.
__dict__
form
=
forms
.
FormWrapper
(
manipulator
,
data
,
errors
)
return
render_
template
(
'news/add.html'
,
request
,
{
'form'
:
form
,
'news'
:
news
})
form
=
forms
.
FormWrapper
(
manipulator
,
data
,
errors
)
return
render_
response
(
request
,
'news/add.html'
,
{
'form'
:
form
,
'news'
:
news
})
packages/views.py
View file @
15ceff77
...
...
@@ -5,168 +5,168 @@
from
django.core
import
validators
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.models
import
User
from
archweb_dev.utils
import
validate
,
render_
templat
e
from
archweb_dev.
lib.
utils
import
validate
,
render_
respons
e
from
datetime
import
datetime
from
archweb_dev.packages.models
import
Package
,
PackageFile
,
Repo
,
Category
def
update
(
request
):
if
request
.
POST
.
has_key
(
'adopt'
):
mode
=
'adopt'
message
=
'Adoption was successful'
if
request
.
POST
.
has_key
(
'disown'
):
mode
=
'disown'
message
=
'Disown was successful'
try
:
maint
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
return
render_
template
(
'error_page.html'
,
request
,
{
'errmsg'
:
'No maintainer record found! Are you a maintainer?'
})
ids
=
request
.
POST
.
getlist
(
'pkgid'
)
for
id
in
ids
:
pkg
=
Package
.
objects
.
get
(
id
=
id
)
if
mode
==
'adopt'
and
pkg
.
maintainer_id
==
0
:
pkg
.
maintainer
=
maint
elif
mode
==
'disown'
and
pkg
.
maintainer
==
maint
:
pkg
.
maintainer_id
=
0
else
:
message
=
"You are not the current maintainer"
pkg
.
save
()
return
render_
template
(
'status_page.html'
,
request
,
{
'message'
:
message
})
if
request
.
POST
.
has_key
(
'adopt'
):
mode
=
'adopt'
message
=
'Adoption was successful'
if
request
.
POST
.
has_key
(
'disown'
):
mode
=
'disown'
message
=
'Disown was successful'
try
:
maint
=
User
.
objects
.
get
(
username
=
request
.
user
.
username
)
except
User
.
DoesNotExist
:
return
render_
response
(
request
,
'error_page.html'
,
{
'errmsg'
:
'No maintainer record found! Are you a maintainer?'
})
ids
=
request
.
POST
.
getlist
(
'pkgid'
)
for
id
in
ids
:
pkg
=
Package
.
objects
.
get
(
id
=
id
)
if
mode
==
'adopt'
and
pkg
.
maintainer_id
==
0
:
pkg
.
maintainer
=
maint
elif
mode
==
'disown'
and
pkg
.
maintainer
==
maint
:
pkg
.
maintainer_id
=
0
else
:
message
=
"You are not the current maintainer"
pkg
.
save
()
return
render_
response
(
request
,
'status_page.html'
,
{
'message'
:
message
})
def
details
(
request
,
pkgid
=
0
,
name
=
''
,
repo
=
''
):
if
pkgid
==
0
:
p
=
Package
.
objects
.
filter
(
pkgname
=
name
)
if
repo
:
p
=
p
.
filter
(
repo__name__exact
=
repo
)
# if more then one result, send to the search view
if
len
(
p
)
>
1
:
return
search
(
request
,
name
)
if
len
(
p
)
<
1
:
return
render_
template
(
'error_page.html'
,
request
,
{
'errmsg'
:
'No matching packages.'
})
pkgid
=
p
[
0
].
id
pkg
=
get_object_or_404
(
Package
,
id
=
pkgid
)
return
render_
template
(
'packages/details.html'
,
request
,
{
'pkg'
:
pkg
})
if
pkgid
==
0
:
p
=
Package
.
objects
.
filter
(
pkgname
=
name
)
if
repo
:
p
=
p
.
filter
(
repo__name__exact
=
repo
)
# if more then one result, send to the search view
if
len
(
p
)
>
1
:
return
search
(
request
,
name
)
if
len
(
p
)
<
1
:
return
render_
response
(
request
,
'error_page.html'
,
{
'errmsg'
:
'No matching packages.'
})
pkgid
=
p
[
0
].
id
pkg
=
get_object_or_404
(
Package
,
id
=
pkgid
)
return
render_
response
(
request
,
'packages/details.html'
,
{
'pkg'
:
pkg
})
def
search
(
request
,
query
=
''
):
if
request
.
GET
.
has_key
(
'q'
):
# take the q GET var over the one passed on the URL
query
=
request
.
GET
[
'q'
].
strip
()
# fetch the form vars
repo
=
request
.
GET
.
get
(
'repo'
,
'all'
)
category
=
request
.
GET
.
get
(
'category'
,
'all'
)
lastupdate
=
request
.
GET
.
get
(
'lastupdate'
,
''
)
limit
=
int
(
request
.
GET
.
get
(
'limit'
,
'50'
))
skip
=
int
(
request
.
GET
.
get
(
'skip'
,
'0'
))
sort
=
request
.
GET
.
get
(
'sort'
,
''
)
maint
=
request
.
GET
.
get
(
'maint'
,
'all'
)
# build the form lists
repos
=
Repo
.
objects
.
order_by
(
'name'
)
cats
=
Category
.
objects
.
order_by
(
'category'
)
# copy GET data over and add the lists
c
=
request
.
GET
.
copy
()
c
[
'repos'
],
c
[
'categories'
]
=
repos
,
cats
c
[
'limit'
],
c
[
'skip'
]
=
limit
,
skip
c
[
'lastupdate'
]
=
lastupdate
c
[
'sort'
]
=
sort
# 'q' gets renamed to 'query', so it's not in GET
c
[
'query'
]
=
query
# validate
errors
=
{}
validate
(
errors
,
'Last Update'
,
lastupdate
,
validators
.
isValidANSIDate
,
True
,
request
)
validate
(
errors
,
'Page Limit'
,
str
(
limit
),
validators
.
isOnlyDigits
,
True
,
request
)
validate
(
errors
,
'Page Skip'
,
str
(
skip
),
validators
.
isOnlyDigits
,
True
,
request
)
if
errors
:
c
[
'errors'
]
=
errors
return
render_
template
(
'packages/search.html'
,
request
,
c
)
if
query
:
res1
=
Package
.
objects
.
filter
(
pkgname__icontains
=
query
)
res2
=
Package
.
objects
.
filter
(
pkgdesc__icontains
=
query
)
results
=
res1
|
res2
else
:
results
=
Package
.
objects
.
all
()
if
repo
!=
'all'
:
results
=
results
.
filter
(
repo__name__exact
=
repo
)
if
category
!=
'all'
:
results
=
results
.
filter
(
category__category__exact
=
category
)
if
maint
!=
'all'
:
results
=
results
.
filter
(
maintainer
=
maint
)
if
lastupdate
:
results
=
results
.
filter
(
last_update__gte
=
datetime
(
int
(
lastupdate
[
0
:
4
]),
int
(
lastupdate
[
5
:
7
]),
int
(
lastupdate
[
8
:
10
])))
# select_related() shouldn't be needed -- we're working around a Django bug
#results = results.select_related().order_by('repos.name', 'category', 'pkgname')
# sort results
if
sort
==
''
:
results
=
results
.
order_by
(
'repo'
,
'category'
,
'pkgname'
)
else
:
# duplicate sort fields shouldn't hurt anything
results
=
results
.
order_by
(
sort
,
'repo'
,
'category'
,
'pkgname'
)
qs
=
request
.
GET
.
copy
()
# build pagination urls
if
results
.
count
()
>
(
skip
+
limit
):
qs
[
'skip'
]
=
skip
+
limit
c
[
'nextpage'
]
=
'?'
+
qs
.
urlencode
()
if
skip
>
0
:
qs
[
'skip'
]
=
max
(
0
,
skip
-
limit
)
c
[
'prevpage'
]
=
'?'
+
qs
.
urlencode
()
# pass the querystring to the template so we can build sort queries
c
[
'querystring'
]
=
request
.
GET
# if only there's only one result, pass right to the package details view
if
results
.
count
()
==
1
:
return
details
(
request
,
results
[
0
].
id
)
# limit result set
if
limit
>
0
:
results
=
results
[
skip
:(
skip
+
limit
)]
c
[
'results'
]
=
results
return
render_
template
(
'packages/search.html'
,
request
,
c
)
if
request
.
GET
.
has_key
(
'q'
):
# take the q GET var over the one passed on the URL
query
=
request
.
GET
[
'q'
].
strip
()
# fetch the form vars
repo
=
request
.
GET
.
get
(
'repo'
,
'all'
)
category
=
request
.
GET
.
get
(
'category'
,
'all'
)
lastupdate
=
request
.
GET
.
get
(
'lastupdate'
,
''
)
limit
=
int
(
request
.
GET
.
get
(
'limit'
,
'50'
))
skip
=
int
(
request
.
GET
.
get
(
'skip'
,
'0'
))
sort
=
request
.
GET
.
get
(
'sort'
,
''
)
maint
=
request
.
GET
.
get
(
'maint'
,
'all'
)
# build the form lists
repos
=
Repo
.
objects
.
order_by
(
'name'
)
cats
=
Category
.
objects
.
order_by
(
'category'
)
# copy GET data over and add the lists
c
=
request
.
GET
.
copy
()
c
[
'repos'
],
c
[
'categories'
]
=
repos
,
cats
c
[
'limit'
],
c
[
'skip'
]
=
limit
,
skip
c
[
'lastupdate'
]
=
lastupdate
c
[
'sort'
]
=
sort
# 'q' gets renamed to 'query', so it's not in GET
c
[
'query'
]
=
query
# validate
errors
=
{}
validate
(
errors
,
'Last Update'
,
lastupdate
,
validators
.
isValidANSIDate
,
True
,
request
)
validate
(
errors
,
'Page Limit'
,
str
(
limit
),
validators
.
isOnlyDigits
,
True
,
request
)
validate
(
errors
,
'Page Skip'
,
str
(
skip
),
validators
.
isOnlyDigits
,
True
,
request
)
if
errors
:
c
[
'errors'
]
=
errors
return
render_
response
(
request
,
'packages/search.html'
,
c
)
if
query
:
res1
=
Package
.
objects
.
filter
(
pkgname__icontains
=
query
)
res2
=
Package
.
objects
.
filter
(
pkgdesc__icontains
=
query
)
results
=
res1
|
res2
else
:
results
=
Package
.
objects
.
all
()
if
repo
!=
'all'
:
results
=
results
.
filter
(
repo__name__exact
=
repo
)
if
category
!=
'all'
:
results
=
results
.
filter
(
category__category__exact
=
category
)
if
maint
!=
'all'
:
results
=
results
.
filter
(
maintainer
=
maint
)
if
lastupdate
:
results
=
results
.
filter
(
last_update__gte
=
datetime
(
int
(
lastupdate
[
0
:
4
]),
int
(
lastupdate
[
5
:
7
]),
int
(
lastupdate
[
8
:
10
])))
# select_related() shouldn't be needed -- we're working around a Django bug
#results = results.select_related().order_by('repos.name', 'category', 'pkgname')
# sort results
if
sort
==
''
:
results
=
results
.
order_by
(
'repo'
,
'category'
,
'pkgname'
)
else
:
# duplicate sort fields shouldn't hurt anything
results
=
results
.
order_by
(
sort
,
'repo'
,
'category'
,
'pkgname'
)
qs
=
request
.
GET
.
copy
()
# build pagination urls
if
results
.
count
()
>
(
skip
+
limit
):
qs
[
'skip'
]
=
skip
+
limit
c
[
'nextpage'
]
=
'?'
+
qs
.
urlencode
()
if
skip
>
0
:
qs
[
'skip'
]
=
max
(
0
,
skip
-
limit
)
c
[
'prevpage'
]
=
'?'
+
qs
.
urlencode
()
# pass the querystring to the template so we can build sort queries
c
[
'querystring'
]
=
request
.
GET
# if only there's only one result, pass right to the package details view
if
results
.
count
()
==
1
:
return
details
(
request
,
results
[
0
].
id
)
# limit result set
if
limit
>
0
:
results
=
results
[
skip
:(
skip
+
limit
)]
c
[
'results'
]
=
results
return
render_
response
(
request
,
'packages/search.html'
,
c
)
def
files
(
request
,
pkgid
):
pkg
=
get_object_or_404
(
Package
,
id
=
pkgid
)
files
=
PackageFile
.
objects
.
filter
(
pkg
=
pkgid
)
return
render_
template
(
'packages/files.html'
,
request
,
{
'pkg'
:
pkg
,
'files'
:
files
})
pkg
=
get_object_or_404
(
Package
,
id
=
pkgid
)
files
=
PackageFile
.
objects
.
filter
(
pkg
=
pkgid
)
return
render_
response
(
request
,
'packages/files.html'
,
{
'pkg'
:
pkg
,
'files'
:
files
})
def
flaghelp
(
request
):
return
render_
template
(
'packages/flaghelp.html'
,
request
)
return
render_
response
(
request
,
'packages/flaghelp.html'
)
def
flag
(
request
,
pkgid
):
pkg
=
get_object_or_404
(
Package
,
id
=
pkgid
)
context
=
{
'pkg'
:
pkg
}
if
request
.
POST
.
has_key
(
'confirmemail'
):
email
=
request
.
POST
[
'confirmemail'
]
if
request
.
POST
.
has_key
(
'usermessage'
):
message
=
request
.
POST
[
'usermessage'
]
else
:
message
=
None
# validate
errors
=
{}
validate
(
errors
,
'Email Address'
,
email
,
validators
.
isValidEmail
,
False
,
request
)
if
errors
:
context
[
'errors'
]
=
errors
return
render_
template
(
'packages/flag.html'
,
request
,
context
)
context
[
'confirmemail'
]
=
email
pkg
.
needupdate
=
1
pkg
.
save
()
if
pkg
.
maintainer_id
>
0
:
# send notification email to the maintainer
t
=
loader
.
get_template
(
'packages/outofdate.txt'
)
c
=
Context
({
'email'
:
request
.
POST
[
'confirmemail'
],
'message'
:
message
,
'pkgname'
:
pkg
.
pkgname
,
'weburl'
:
'http://www.archlinux.org/packages/'
+
str
(
pkg
.
id
)
+
'/'
})
send_mail
(
'arch: Package [%s] marked out-of-date'
%
pkg
.
pkgname
,
t
.
render
(
c
),
'Arch Website Notification <nobody@archlinux.org>'
,
[
pkg
.
maintainer
.
email
],
fail_silently
=
True
)
return
render_
template
(
'packages/flag.html'
,
request
,
context
)
pkg
=
get_object_or_404
(
Package
,
id
=
pkgid
)
context
=
{
'pkg'
:
pkg
}
if
request
.
POST
.
has_key
(
'confirmemail'
):
email
=
request
.
POST
[
'confirmemail'
]
if
request
.
POST
.
has_key
(
'usermessage'
):
message
=
request
.
POST
[
'usermessage'
]
else
:
message
=
None
# validate
errors
=
{}
validate
(
errors
,
'Email Address'
,
email
,
validators
.
isValidEmail
,
False
,
request
)
if
errors
:
context
[
'errors'
]
=
errors
return
render_
response
(
request
,
'packages/flag.html'
,
context
)
context
[
'confirmemail'
]
=
email
pkg
.
needupdate
=
1
pkg
.
save
()
if
pkg
.
maintainer_id
>
0
:
# send notification email to the maintainer
t
=
loader
.
get_template
(
'packages/outofdate.txt'
)
c
=
Context
({
'email'
:
request
.
POST
[
'confirmemail'
],
'message'
:
message
,
'pkgname'
:
pkg
.
pkgname
,
'weburl'
:
'http://www.archlinux.org/packages/'
+
str
(
pkg
.
id
)
+
'/'
})
send_mail
(
'arch: Package [%s] marked out-of-date'
%
pkg
.
pkgname
,