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
5f688572
Unverified
Commit
5f688572
authored
Jul 29, 2018
by
Jelle van der Waa
🚧
Committed by
GitHub
Jul 29, 2018
Browse files
Merge pull request #130 from jelly/cleanup
Cleanup
parents
559b8bc7
d7bac1cf
Changes
2
Hide whitespace changes
Inline
Side-by-side
devel/tests/test_devel.py
0 → 100644
View file @
5f688572
from
django.test
import
TransactionTestCase
from
django.contrib.auth.models
import
User
class
DevelView
(
TransactionTestCase
):
fixtures
=
[
'main/fixtures/arches.json'
,
'main/fixtures/repos.json'
,
'main/fixtures/package.json'
]
def
setUp
(
self
):
password
=
'test'
self
.
user
=
User
.
objects
.
create_superuser
(
'admin'
,
'admin@archlinux.org'
,
password
)
self
.
client
.
post
(
'/login/'
,
{
'username'
:
self
.
user
.
username
,
'password'
:
password
})
def
tearDown
(
self
):
self
.
user
.
delete
()
def
test_clock
(
self
):
response
=
self
.
client
.
get
(
'/devel/clock/'
)
self
.
assertEqual
(
response
.
status_code
,
200
)
def
test_profile
(
self
):
response
=
self
.
client
.
get
(
'/devel/profile/'
)
self
.
assertEqual
(
response
.
status_code
,
200
)
# Test changing
def
test_stats
(
self
):
response
=
self
.
client
.
get
(
'/devel/stats/'
)
self
.
assertEqual
(
response
.
status_code
,
200
)
packages/management/commands/signoff_report.py
deleted
100644 → 0
View file @
559b8bc7
# -*- coding: utf-8 -*-
"""
signoff_report command
Send an email summarizing the state of outstanding signoffs for the given
repository.
Usage: ./manage.py signoff_report <email> <repository>
"""
from
django.core.mail
import
send_mail
from
django.core.urlresolvers
import
reverse
from
django.core.management.base
import
BaseCommand
,
CommandError
from
django.contrib.auth.models
import
User
from
django.contrib.sites.models
import
Site
from
django.db.models
import
Count
from
django.template
import
loader
from
django.utils.timezone
import
now
from
collections
import
namedtuple
from
datetime
import
timedelta
import
logging
from
operator
import
attrgetter
import
sys
from
main.models
import
Repo
from
packages.models
import
Signoff
from
packages.utils
import
get_signoff_groups
logging
.
basicConfig
(
level
=
logging
.
INFO
,
format
=
'%(asctime)s -> %(levelname)s: %(message)s'
,
datefmt
=
'%Y-%m-%d %H:%M:%S'
,
stream
=
sys
.
stderr
)
logger
=
logging
.
getLogger
()
class
Command
(
BaseCommand
):
args
=
"<email> <repository>"
help
=
"Send a signoff report for the given repository."
def
handle
(
self
,
*
args
,
**
options
):
v
=
int
(
options
.
get
(
'verbosity'
,
None
))
if
v
==
0
:
logger
.
level
=
logging
.
ERROR
elif
v
==
1
:
logger
.
level
=
logging
.
INFO
elif
v
>=
2
:
logger
.
level
=
logging
.
DEBUG
if
len
(
args
)
!=
2
:
raise
CommandError
(
"email and repository must be provided"
)
return
generate_report
(
args
[
0
],
args
[
1
])
def
generate_report
(
email
,
repo_name
):
repo
=
Repo
.
objects
.
get
(
name__iexact
=
repo_name
)
# Collect all existing signoffs for these packages
signoff_groups
=
sorted
(
get_signoff_groups
([
repo
]),
key
=
attrgetter
(
'target_repo'
,
'arch'
,
'pkgbase'
))
disabled
=
[]
bad
=
[]
complete
=
[]
incomplete
=
[]
new
=
[]
old
=
[]
new_hours
=
24
old_days
=
14
current_time
=
now
()
new_cutoff
=
current_time
-
timedelta
(
hours
=
new_hours
)
old_cutoff
=
current_time
-
timedelta
(
days
=
old_days
)
if
len
(
signoff_groups
)
==
0
:
# no need to send an email at all
return
for
group
in
signoff_groups
:
spec
=
group
.
specification
if
spec
.
known_bad
:
bad
.
append
(
group
)
elif
not
spec
.
enabled
:
disabled
.
append
(
group
)
elif
group
.
approved
():
complete
.
append
(
group
)
else
:
incomplete
.
append
(
group
)
if
group
.
package
.
last_update
>
new_cutoff
:
new
.
append
(
group
)
if
group
.
package
.
last_update
<
old_cutoff
:
old
.
append
(
group
)
old
.
sort
(
key
=
attrgetter
(
'last_update'
))
proto
=
'https'
domain
=
Site
.
objects
.
get_current
().
domain
signoffs_url
=
'%s://%s%s'
%
(
proto
,
domain
,
reverse
(
'package-signoffs'
))
# and the fun bit
Leader
=
namedtuple
(
'Leader'
,
[
'user'
,
'count'
])
leaders
=
Signoff
.
objects
.
filter
(
created__gt
=
new_cutoff
,
revoked__isnull
=
True
).
values_list
(
'user'
).
annotate
(
signoff_count
=
Count
(
'pk'
)).
order_by
(
'-signoff_count'
)[:
5
]
users
=
User
.
objects
.
in_bulk
([
l
[
0
]
for
l
in
leaders
])
leaders
=
(
Leader
(
users
[
l
[
0
]],
l
[
1
])
for
l
in
leaders
)
subject
=
'Signoff report for [%s]'
%
repo
.
name
.
lower
()
t
=
loader
.
get_template
(
'packages/signoff_report.txt'
)
c
=
{
'repo'
:
repo
,
'signoffs_url'
:
signoffs_url
,
'disabled'
:
disabled
,
'bad'
:
bad
,
'all'
:
signoff_groups
,
'incomplete'
:
incomplete
,
'complete'
:
complete
,
'new'
:
new
,
'new_hours'
:
new_hours
,
'old'
:
old
,
'old_days'
:
old_days
,
'leaders'
:
leaders
,
}
from_addr
=
'Arch Website Notification <nobody@archlinux.org>'
send_mail
(
subject
,
t
.
render
(
c
),
from_addr
,
[
email
])
# vim: set ts=4 sw=4 et:
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment