Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Neutrinet
carnet_rose
Commits
e6c4ddd0
Commit
e6c4ddd0
authored
Dec 18, 2015
by
Laurent Peuch
Browse files
[enh] start to display diff of modifieds members in a command
parent
23cc923e
Changes
5
Hide whitespace changes
Inline
Side-by-side
carnet_rose/templatetags/__init__.py
0 → 100644
View file @
e6c4ddd0
carnet_rose/templatetags/getattribute.py
0 → 100644
View file @
e6c4ddd0
import
re
from
django
import
template
from
django.conf
import
settings
numeric_test
=
re
.
compile
(
"^\d+$"
)
register
=
template
.
Library
()
@
register
.
filter
def
get_field
(
entry
,
field
):
"""Gets an attribute of an object dynamically from a string name"""
if
field
.
name
in
entry
.
field_dict
:
if
field
.
choices
:
return
getattr
(
entry
.
object
,
"get_%s_display"
%
field
.
name
)()
return
entry
.
field_dict
[
field
.
name
]
else
:
return
settings
.
TEMPLATE_STRING_IF_INVALID
@
register
.
filter
def
only_existing
(
fields_list
,
entry
):
for
i
in
fields_list
:
if
entry
.
field_dict
[
i
.
name
]:
yield
i
members/management/__init__.py
0 → 100644
View file @
e6c4ddd0
members/management/commands/__init__.py
0 → 100644
View file @
e6c4ddd0
members/management/commands/notify_modified_members.py
0 → 100644
View file @
e6c4ddd0
import
reversion
from
datetime
import
date
,
timedelta
from
django.core.mail
import
send_mail
from
django.core.management.base
import
BaseCommand
from
django.template
import
Context
,
Template
from
members.models
import
Member
email_template
=
"""
\
{% load getattribute %}
Hello everyone,
Here are the modified and created user entries from yesterday :
{% for entry, users in data.created %}
'{{ entry.object }}' created by {{ users }}:
{% for field in fields|only_existing:entry %}* {% if field.verbose_name %}{{ field.verbose_name }}{% else %}{{ field.name }}{% endif %}: {{ entry|get_field:field }}
{% endfor %}{% endfor %}
{% for new, old, users in data.modified %}
{% endfor %}
Thanks for your work <3
"""
class
Command
(
BaseCommand
):
args
=
'<poll_id poll_id ...>'
help
=
'Closes the specified poll for voting'
def
handle
(
self
,
*
args
,
**
options
):
data
=
{
"created"
:
[],
"modified"
:
[],
}
today
=
date
.
today
()
yesterday
=
today
-
timedelta
(
days
=
1
)
# modified_yesterday_members = Member.objects.filter(last_modified__lt=date.today(), last_modified__gt=yesterday)
modified_yesterday_members
=
Member
.
objects
.
filter
(
last_modified__gt
=
date
.
today
())
for
member_revisions
in
map
(
reversion
.
get_for_object
,
modified_yesterday_members
):
member_revisions
=
list
(
member_revisions
.
get_unique
())
# yesterday_modifications = filter(lambda x: x.field_dict["last_modified"].date() == yesterday, member_revisions)
yesterday_modifications
=
filter
(
lambda
x
:
x
.
field_dict
[
"last_modified"
].
date
()
==
today
,
member_revisions
)
users_that_has_modified_the_documented
=
u
", "
.
join
(
set
(
map
(
lambda
x
:
unicode
(
x
.
revision
.
user
),
yesterday_modifications
)))
# older_modifications = filter(lambda x: x.field_dict["last_modified"].date() < yesterday, member_revisions)
older_modifications
=
filter
(
lambda
x
:
x
.
field_dict
[
"last_modified"
].
date
()
<
today
,
member_revisions
)
if
not
older_modifications
:
data
[
"created"
].
append
([
yesterday_modifications
[
0
],
users_that_has_modified_the_documented
])
else
:
data
[
"modified"
].
append
([
yesterday_modifications
[
0
],
older_modifications
[
0
],
users_that_has_modified_the_documented
])
fields
=
filter
(
lambda
x
:
x
.
name
not
in
(
'added_on'
,
'last_modified'
,
'id'
,
'pk'
),
Member
.
_meta
.
fields
)
email_content
=
Template
(
email_template
).
render
(
Context
({
"data"
:
data
,
"fields"
:
fields
,
}))
send_mail
(
'[NeutrinetMembersManangement] modifications of %s'
%
yesterday
.
strftime
(
"%F"
),
email_content
,
'noreply@neutrinet.be'
,
[
'administration@neutrinet.be'
],
fail_silently
=
False
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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