members package¶
Subpackages¶
Submodules¶
members.admin module¶
This module registers admin pages for the models
-
class
members.admin.
AgeListFilter
(request, params, model, model_admin)[source]¶ Bases:
django.contrib.admin.filters.SimpleListFilter
-
lookups
(request, model_admin)[source]¶ Must be overridden to return a list of tuples (value, verbose value)
-
parameter_name
= 'birthday'¶
-
title
= 'Age'¶
-
-
class
members.admin.
HasPermissionsFilter
(request, params, model, model_admin)[source]¶ Bases:
django.contrib.admin.filters.SimpleListFilter
-
lookups
(request, model_admin)[source]¶ Must be overridden to return a list of tuples (value, verbose value)
-
parameter_name
= 'permissions'¶
-
title
= 'Has individual permissions'¶
-
-
class
members.admin.
MemberAdmin
(model, admin_site)[source]¶ Bases:
members.admin.UserAdmin
-
has_module_permission
(reuqest)[source]¶ Return True if the given request has any permission in the given app label.
Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to view the module on the admin index page and access the module’s index page. Overriding it does not restrict access to the add, change or delete views. Use ModelAdmin.has_(add|change|delete)_permission for that.
-
property
media
¶
-
-
class
members.admin.
MembershipInline
(parent_model, admin_site)[source]¶ Bases:
django.contrib.admin.options.StackedInline
-
classes
= ['collapse']¶
-
extra
= 0¶
-
property
media
¶
-
model
¶ alias of
members.models.membership.Membership
-
-
class
members.admin.
MembershipTypeListFilter
(request, params, model, model_admin)[source]¶ Bases:
django.contrib.admin.filters.SimpleListFilter
-
lookups
(request, model_admin)[source]¶ Must be overridden to return a list of tuples (value, verbose value)
-
parameter_name
= 'membership'¶
-
title
= 'current membership type'¶
-
-
class
members.admin.
ProfileInline
(parent_model, admin_site)[source]¶ Bases:
django.contrib.admin.options.StackedInline
-
can_delete
= False¶
-
classes
= ['collapse']¶
-
fields
= ['starting_year', 'programme', 'address_street', 'address_street2', 'address_postal_code', 'address_city', 'address_country', 'student_number', 'phone_number', 'receive_optin', 'receive_newsletter', 'receive_magazine', 'birthday', 'show_birthday', 'auto_renew', 'initials', 'nickname', 'display_name_preference', 'profile_description', 'website', 'photo', 'emergency_contact', 'emergency_contact_phone_number', 'language', 'event_permissions']¶
-
property
media
¶
-
model
¶ alias of
members.models.profile.Profile
-
-
class
members.admin.
UserAdmin
(model, admin_site)[source]¶ Bases:
django.contrib.auth.admin.UserAdmin
-
actions
= ['address_csv_export', 'student_number_csv_export', 'email_csv_export', 'minimise_data']¶
-
add_form
¶ alias of
members.forms.UserCreationForm
-
change_list_template
= 'admin/members/change_list.html'¶
-
fieldsets
= (('Personal', {'fields': ('first_name', 'last_name', 'email', 'username', 'password')}), ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions', 'date_joined', 'last_login'), 'classes': ('collapse',)}))¶
-
form
¶ alias of
members.forms.UserChangeForm
-
inlines
= (<class 'members.admin.ProfileInline'>, <class 'members.admin.MembershipInline'>)¶
-
list_filter
= (<class 'members.admin.MembershipTypeListFilter'>, 'is_superuser', <class 'members.admin.HasPermissionsFilter'>, 'groups', <class 'members.admin.AgeListFilter'>, 'profile__event_permissions', 'profile__auto_renew', 'profile__receive_optin', 'profile__receive_newsletter', 'profile__receive_magazine', 'profile__starting_year')¶
-
property
media
¶
-
members.admin_views module¶
Admin views provided by the members package
members.apps module¶
Configuration for the members package
members.decorators module¶
Decorators provided by the members package
members.emails module¶
The emails defined by the members package
-
members.emails.
send_email_change_completion_message
(change_request)[source]¶ Sends email to the member to confirm the email change
:param change_request the email change request entered by the user
-
members.emails.
send_email_change_confirmation_messages
(change_request)[source]¶ Sends emails to the old and new email address of a member to confirm the email change
:param change_request the email change request entered by the user
-
members.emails.
send_expiration_announcement
(dry_run=False)[source]¶ Sends an email to all members whose membership will end in the next 31 days to warn them about this
- Parameters
dry_run – does not really send emails if True
-
members.emails.
send_information_request
(dry_run=False)[source]¶ Sends an email to all members to have them check their personal information
- Parameters
dry_run – does not really send emails if True
members.forms module¶
Forms defined by the members package
-
class
members.forms.
ProfileForm
(*args, **kwargs)[source]¶ Bases:
django.forms.models.ModelForm
Form with all the user editable fields of a Profile model
-
class
Meta
[source]¶ Bases:
object
-
fields
= ['show_birthday', 'address_street', 'address_street2', 'address_postal_code', 'address_city', 'address_country', 'phone_number', 'emergency_contact', 'emergency_contact_phone_number', 'website', 'profile_description', 'nickname', 'initials', 'display_name_preference', 'photo', 'language', 'receive_optin', 'receive_newsletter', 'receive_magazine', 'email_gsuite_only']¶
-
model
¶ alias of
members.models.profile.Profile
-
-
base_fields
= {'address_city': <django.forms.fields.CharField object>, 'address_country': <django.forms.fields.TypedChoiceField object>, 'address_postal_code': <django.forms.fields.CharField object>, 'address_street': <django.forms.fields.CharField object>, 'address_street2': <django.forms.fields.CharField object>, 'display_name_preference': <django.forms.fields.TypedChoiceField object>, 'email_gsuite_only': <django.forms.fields.BooleanField object>, 'emergency_contact': <django.forms.fields.CharField object>, 'emergency_contact_phone_number': <django.forms.fields.CharField object>, 'initials': <django.forms.fields.CharField object>, 'language': <django.forms.fields.TypedChoiceField object>, 'nickname': <django.forms.fields.CharField object>, 'phone_number': <django.forms.fields.CharField object>, 'photo': <django.forms.fields.ImageField object>, 'profile_description': <django.forms.fields.CharField object>, 'receive_magazine': <django.forms.fields.BooleanField object>, 'receive_newsletter': <django.forms.fields.BooleanField object>, 'receive_optin': <django.forms.fields.BooleanField object>, 'show_birthday': <django.forms.fields.BooleanField object>, 'website': <django.forms.fields.URLField object>}¶
-
declared_fields
= {}¶
-
property
media
¶ Return all media required to render the widgets on this form.
-
class
-
class
members.forms.
UserChangeForm
(*args, **kwargs)[source]¶ Bases:
django.contrib.auth.forms.UserChangeForm
Custom user edit form that adds fields for first/last name and email It also force-lowercases the username on save
-
base_fields
= {'date_joined': <django.forms.fields.DateTimeField object>, 'email': <django.forms.fields.CharField object>, 'first_name': <django.forms.fields.CharField object>, 'groups': <django.forms.models.ModelMultipleChoiceField object>, 'is_active': <django.forms.fields.BooleanField object>, 'is_staff': <django.forms.fields.BooleanField object>, 'is_superuser': <django.forms.fields.BooleanField object>, 'last_login': <django.forms.fields.DateTimeField object>, 'last_name': <django.forms.fields.CharField object>, 'password': <django.contrib.auth.forms.ReadOnlyPasswordHashField object>, 'user_permissions': <django.forms.models.ModelMultipleChoiceField object>, 'username': <django.forms.fields.CharField object>}¶
-
clean
()[source]¶ Hook for doing any extra form-wide cleaning after Field.clean() has been called on every field. Any ValidationError raised by this method will not be associated with a particular field; it will have a special-case association with the field named ‘__all__’.
-
declared_fields
= {'email': <django.forms.fields.CharField object>, 'first_name': <django.forms.fields.CharField object>, 'last_name': <django.forms.fields.CharField object>, 'password': <django.contrib.auth.forms.ReadOnlyPasswordHashField object>, 'username': <django.forms.fields.CharField object>}¶
-
property
media
¶ Return all media required to render the widgets on this form.
-
-
class
members.forms.
UserCreationForm
(*args, **kwargs)[source]¶ Bases:
django.contrib.auth.forms.UserCreationForm
Custom Form that removes the password fields from user creation and sends a welcome message when a user is created
-
class
Meta
[source]¶ Bases:
object
-
fields
= ('username', 'first_name', 'last_name', 'send_welcome_email')¶
-
-
base_fields
= {'send_welcome_email': <django.forms.fields.BooleanField object>}¶
-
clean
()[source]¶ Hook for doing any extra form-wide cleaning after Field.clean() has been called on every field. Any ValidationError raised by this method will not be associated with a particular field; it will have a special-case association with the field named ‘__all__’.
-
declared_fields
= {'send_welcome_email': <django.forms.fields.BooleanField object>}¶
-
property
media
¶ Return all media required to render the widgets on this form.
-
password1
= None¶
-
password2
= None¶
-
class
members.middleware module¶
Middleware provided by the members package
members.services module¶
Services defined in the members package
-
members.services.
confirm_email_change
(change_request) → None[source]¶ Mark the email change request as verified
- Parameters
change_request – the email change request
-
members.services.
execute_data_minimisation
(dry_run=False, members=None) → List[members.models.member.Member][source]¶ Clean the profiles of members/users of whom the last membership ended at least 31 days ago
- Parameters
dry_run – does not really remove data if True
members – queryset of members to process, optional
- Returns
list of processed members
-
members.services.
gen_stats_member_type
() → Dict[str, int][source]¶ Generate a dictionary where every key is a member type with the value being the number of current members of that type
-
members.services.
gen_stats_year
() → Dict[str, Dict[str, int]][source]¶ Generate list with 6 entries, where each entry represents the total amount of Thalia members in a year. The sixth element contains all the multi-year students.
-
members.services.
member_achievements
(member) → List[source]¶ Derives a list of achievements of a member Committee and board memberships + mentorships
-
members.services.
member_societies
(member) → List[source]¶ Derives a list of societies a member was part of
members.sitemaps module¶
Sitemaps defined by the members package
members.urls module¶
The routes defined by the members package
members.views module¶
Views provided by the members package
-
class
members.views.
EmailChangeConfirmView
(**kwargs)[source]¶ Bases:
django.views.generic.base.View
,django.views.generic.base.TemplateResponseMixin
View that renders an HTML template and confirms the old email address
-
dispatch
(request, *args, **kwargs)¶
-
template_name
= 'members/user/email_change_confirmed.html'¶
-
-
class
members.views.
EmailChangeFormView
(**kwargs)[source]¶ Bases:
django.views.generic.edit.CreateView
View that renders the email change form
-
dispatch
(request, *args, **kwargs)¶
-
fields
= ['email', 'member']¶
-
form_valid
(form) → django.http.response.HttpResponse[source]¶ If the form is valid, save the associated model.
-
model
¶
-
post
(request, *args, **kwargs) → django.http.response.HttpResponse[source]¶ Handle POST requests: instantiate a form instance with the passed POST variables and then check if it’s valid.
-
template_name
= 'members/user/email_change.html'¶
-
-
class
members.views.
EmailChangeVerifyView
(**kwargs)[source]¶ Bases:
django.views.generic.base.View
,django.views.generic.base.TemplateResponseMixin
View that renders an HTML template and verifies the new email address
-
dispatch
(request, *args, **kwargs)¶
-
template_name
= 'members/user/email_change_verified.html'¶
-
-
class
members.views.
MembersIndex
(**kwargs)[source]¶ Bases:
django.views.generic.list.ListView
View that renders the members overview
-
context_object_name
= 'members'¶
-
dispatch
(request, *args, **kwargs)¶
-
get_queryset
() → django.db.models.query.QuerySet[source]¶ Return the list of items for this view.
The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.
-
keywords
= None¶
-
model
¶ alias of
members.models.member.Member
-
paginate_by
= 28¶
-
query_filter
= ''¶
-
template_name
= 'members/index.html'¶
-
year_range
= []¶
-
-
class
members.views.
ObtainThaliaAuthToken
(**kwargs)[source]¶ Bases:
rest_framework.authtoken.views.ObtainAuthToken
Custom override of the AuthToken view to force lowercase the username
-
class
members.views.
ProfileDetailView
(**kwargs)[source]¶ Bases:
django.views.generic.detail.DetailView
View that renders a member’s profile
-
context_object_name
= 'member'¶
-
dispatch
(request, *args, **kwargs)¶
-
model
¶ alias of
members.models.member.Member
-
template_name
= 'members/user/profile.html'¶
-
-
class
members.views.
StatisticsView
(**kwargs)[source]¶ Bases:
django.views.generic.base.TemplateView
View that renders the statistics page
-
dispatch
(request, *args, **kwargs)¶
-
template_name
= 'members/statistics.html'¶
-
-
class
members.views.
UserProfileUpdateView
(**kwargs)[source]¶ Bases:
django.contrib.messages.views.SuccessMessageMixin
,django.views.generic.edit.UpdateView
View that allows a user to update their profile
-
dispatch
(request, *args, **kwargs)¶
-
form_class
¶ alias of
members.forms.ProfileForm
-
get_object
(queryset=None) → members.models.profile.Profile[source]¶ Return the object the view is displaying.
Require self.queryset and a pk or slug argument in the URLconf. Subclasses can override this to return any object.
-
model
¶ alias of
members.models.profile.Profile
-
success_message
= 'Your profile has been updated successfully.'¶
-
success_url
= '/user/edit-profile/'¶
-
template_name
= 'members/user/edit_profile.html'¶
-