users package

The app that handles users.

users.get_user_display(user)[source]

Display the name of the user.

Parameters

user (User) – A User model instance.

Return type

str

Returns

The user’s full name if available, otherwise the username.

Subpackages

Submodules

users.adapters module

Custom adapters for django-allauth.

class users.adapters.AccountAdapter(request=None)[source]

Bases: allauth.account.adapter.DefaultAccountAdapter

Adapter for user accounts.

get_login_redirect_url(request)[source]

Return the URL to redirect to after a successful login.

Parameters

request (HttpRequest) – The original request.

Return type

str

Returns

The URL of the redirect.

get_logout_redirect_url(request)[source]

Return the URL to redirect to after a successful logout.

Parameters

request (HttpRequest) – The original request.

Return type

str

Returns

The URL of the redirect.

class users.adapters.SocialAccountAdapter(request=None)[source]

Bases: allauth.socialaccount.adapter.DefaultSocialAccountAdapter

Adapter for OAuth accounts.

get_connect_redirect_url(request, social_account)[source]

Return the URL to redirect to after a successful connection.

Parameters
  • request (HttpRequest) – The original request.

  • social_account (SocialAccount) – The connected OAuth account.

Return type

str

Returns

The URL of the redirect.

users.admin module

Admin models for the users app.

class users.admin.UserTypeFilter(request, params, model, model_admin)[source]

Bases: django.contrib.admin.SimpleListFilter

Admin interface filter for user types.

title = 'type'

str – The title of the filter.

parameter_name = 'type'

str – The filter’s query parameter.

lookups(request, model_admin)[source]

Return a list of lookups for this filter.

The first element in each tuple is the value of the query parameter. The second element is the human-readable name for the option that will appear in the admin sidebar.

Parameters
Return type

List[Tuple[str, str]]

Returns

The following list of tuples:

[
    ('superuser', 'Superuser'),
    ('staff', 'Staff'),
    ('scanlator', 'Scanlator'),
    ('regular', 'Regular')
]

queryset(request, queryset)[source]

Return the filtered queryset based on the value provided in the query string.

Parameters
  • request (HttpRequest) – The original request.

  • queryset (QuerySet) – The original queryset.

Return type

QuerySet

Returns

A filtered queryset according to lookups().

class users.admin.User(*args, **kwargs)[source]

Bases: django.contrib.auth.models.User

django.contrib.auth.models.User proxy model.

property is_scanlator

bool – Get the scanlator status of the user.

exception DoesNotExist

Bases: django.contrib.auth.models.User.DoesNotExist

exception MultipleObjectsReturned

Bases: django.contrib.auth.models.User.MultipleObjectsReturned

class users.admin.UserForm(*args, **kwargs)[source]

Bases: django.forms.ModelForm

Admin form for User.

is_scanlator

object – Scanlator status.

save(commit=True)[source]

Save this form’s self.instance object if commit=True. Otherwise, add a save_m2m() method to the form which can be called after the instance is saved manually at a later time. Return the model instance.

Parameters

commit (bool) –

Return type

User

class Meta[source]

Bases: object

model

alias of User

fields = '__all__'
base_fields = {'date_joined': <django.forms.fields.DateTimeField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.CharField object>, 'groups': <django.forms.models.ModelMultipleChoiceField object>, 'is_active': <django.forms.fields.BooleanField object>, 'is_scanlator': <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.CharField object>, 'password': <django.forms.CharField object>, 'user_permissions': <django.forms.models.ModelMultipleChoiceField object>, 'username': <django.forms.CharField object>}
declared_fields = {'is_scanlator': <django.forms.fields.BooleanField object>}
class users.admin.UserAdmin(model, admin_site)[source]

Bases: django.contrib.admin.ModelAdmin

Admin model for User.

form

alias of UserForm

exclude = ('password', 'groups')
list_display = ('username', '_email', 'full_name', 'date_joined', 'is_active')
list_editable = ('is_active',)
search_fields = ('username', 'email', 'first_name', 'last_name')
list_filter = (<class 'MangAdventure.filters.boolean_filter.<locals>._BooleanFilter'>, <class 'users.admin.UserTypeFilter'>)
ordering = ('username',)
full_name(obj)[source]

Get the full name of the user.

Parameters

obj (User) – A User model instance.

Return type

str

Returns

The user’s full name.

has_add_permission(request)[source]

Return whether adding an User object is permitted.

Parameters

request (HttpRequest) – The original request.

Return type

bool

Returns

Always returns False.

class users.admin.OAuthApp(*args, **kwargs)[source]

Bases: allauth.socialaccount.models.SocialApp

allauth.socialaccount.models.SocialApp proxy model.

__str__()[source]

Return a string representing the object.

Return type

str

Returns

The name and provider of the app.

exception DoesNotExist

Bases: allauth.socialaccount.models.SocialApp.DoesNotExist

exception MultipleObjectsReturned

Bases: allauth.socialaccount.models.SocialApp.MultipleObjectsReturned

class users.admin.OAuthAppAdmin(model, admin_site)[source]

Bases: allauth.socialaccount.admin.SocialAppAdmin

Admin model for OAuthApp.

list_display = ('name', '_provider', 'client_id')
radio_fields = {'provider': 1}
get_form(*args, **kwargs)[source]

Return a Form class for use in the admin add view. This is used by add_view and change_view.

Return type

ModelForm

users.api module

API viewsets for the users app.

class users.api.BookmarkViewSet(**kwargs)[source]

Bases: rest_framework.mixins.ListModelMixin, rest_framework.mixins.CreateModelMixin, rest_framework.mixins.DestroyModelMixin, api.v2.mixins.CORSMixin, rest_framework.viewsets.GenericViewSet

API endpoints for bookmarks.

  • list: List your bookmarked series and the feed URLs.

  • create: Bookmark the given series.

  • delete: Unbookmark the given series.

schema

OpenAPISchema – Custom OpenAPI schema class.

permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>,)
serializer_class

alias of users.serializers.BookmarkSerializer

pagination_class

alias of users.serializers.BookmarkPagination

lookup_field = 'series__slug'
lookup_url_kwarg = 'slug'
get_permissions()[source]

Instantiates and returns the list of permissions that this view requires.

Return type

List

get_queryset()[source]

Get the list of items for this view. This must be an iterable, and may be a queryset. Defaults to using self.queryset.

This method should always be used rather than accessing self.queryset directly, as self.queryset gets evaluated only once, and those results are cached for all subsequent requests.

You may want to override this if you need to provide different querysets depending on the incoming request.

(Eg. return a list of items that is specific to the user)

Return type

QuerySet

list(request, *args, **kwargs)[source]
Parameters

request (Request) –

Return type

Response

basename = None
description = None
detail = None
name = None
suffix = None
class users.api.ApiKeyViewSet(**kwargs)[source]

Bases: rest_framework.mixins.CreateModelMixin, api.v2.mixins.CORSMixin, rest_framework.viewsets.GenericViewSet

API endpoints for API keys.

  • create: Create or retrieve your API key.

schema

OpenAPISchema – Custom OpenAPI schema class.

serializer_class

alias of rest_framework.authtoken.serializers.AuthTokenSerializer

permission_classes = ()
create(request, *args, **kwargs)[source]
Parameters

request (Request) –

Return type

Response

basename = None
description = None
detail = None
name = None
suffix = None

users.apps module

App configuration.

class users.apps.UsersConfig(app_name, app_module)[source]

Bases: django.apps.AppConfig

Configuration for the users app.

name = 'users'

str – The name of the app.

ready()[source]

Register the receivers when the app is ready.

users.backends module

Custom authentication backends.

class users.backends.ScanlationBackend[source]

Bases: django.contrib.auth.backends.ModelBackend

Authentication backend with scanlator permissions.

static is_scanlator(user_obj)[source]

Check whether the given user is a scanlator.

Parameters

user_obj (User) – A User model instance.

Return type

bool

Returns

True if the user is in the “Scanlator” group.

has_perm(user_obj, perm, obj=None)[source]
Parameters
Return type

bool

users.feeds module

RSS and Atom feeds for the users app.

class users.feeds.BookmarksRSS[source]

Bases: django.contrib.syndication.views.Feed

RSS feed for a user’s bookmarks.

ttl = 600
author_name = 'MangAdventure'
title = 'Bookmarks - MangAdventure'
description = 'Updates when a bookmarked series has a new release'
__call__(request, *args, **kwargs)[source]

Get the HTTP response of the feed.

Parameters

request (HttpRequest) – The original request.

Return type

HttpResponse

Returns

A 401 response if the token is missing.
A 403 response if the provided token is invalid.
A 200 response with the bookmarks feed otherwise.

feed_url(obj)[source]

Get the feed’s own URL.

Parameters

obj (User) – The object of the feed.

Return type

str

Returns

The feed’s URL.

items(obj)[source]

Get an iterable of the feed’s items.

Parameters

obj (User) – The object of the feed.

Return type

Iterable[Chapter]

Returns

An iterable of Chapter objects.

item_description(item)[source]

Get the description of the item.

Parameters

item (Chapter) – A Chapter object.

Return type

str

Returns

The Chapter object as a string.

item_pubdate(item)[source]

Get the publication date of the item.

Parameters

item (Chapter) – A Chapter object.

Return type

datetime

Returns

The date the chapter was published.

item_updateddate(item)[source]

Get the update date of the item.

Parameters

item (Chapter) – A Chapter object.

Return type

datetime

Returns

The date the chapter was modified.

class users.feeds.BookmarksAtom[source]

Bases: users.feeds.BookmarksRSS

Atom feed for a user’s bookmarks.

feed_type

alias of django.utils.feedgenerator.Atom1Feed

subtitle = 'Updates when a bookmarked series has a new release'
feed_url(obj)[source]

Get the feed’s own URL.

Parameters

obj (User) – The object of the feed.

Return type

str

Returns

The feed’s URL.

users.forms module

Form models for the users app.

class users.forms.UserProfileForm(*args, **kwargs)[source]

Bases: django.forms.ModelForm

Form used for editing a UserProfile model.

email

EmailField - The user’s e-mail address.

curr_password

CharField - The current password of the user.

new_password1

CharField - The new password of the user.

new_password2

CharField - The new password of the user again.

username

CharField - The username of the user.

first_name

CharField - The user’s first name.

last_name

CharField - The user’s last name.

bio

CharField - The user’s bio.

avatar

ImageField - The user’s avatar.

clean_username()[source]

CharField - Validate the chosen username.

Return type

str

Returns

The username if valid.

Raises

ValidationError – If the username is taken.

clean_new_password2()[source]

CharField - Validate the chosen password.

Return type

str

Returns

The new password if valid.

Raises

ValidationError – If the passwords don’t match.

clean_curr_password()[source]

CharField - Validate the current password.

Return type

str

Returns

The current password if valid.

Raises

ValidationError – If the password is wrong.

save(commit=True)[source]

CharField - Save the changes to the UserProfile.

Parameters

commit (bool) – Controls whether the changes should be committed to the database.

Return type

UserProfile

Returns

The updated UserProfile object.

class Meta[source]

Bases: object

model

alias of users.models.UserProfile

fields = ('email', 'new_password1', 'new_password2', 'username', 'first_name', 'last_name', 'bio', 'avatar', 'curr_password')
base_fields = {'avatar': <django.forms.fields.ImageField object>, 'bio': <django.forms.CharField object>, 'curr_password': <django.forms.CharField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.CharField object>, 'last_name': <django.forms.CharField object>, 'new_password1': <django.forms.CharField object>, 'new_password2': <django.forms.CharField object>, 'username': <django.forms.CharField object>}
declared_fields = {'avatar': <django.forms.fields.ImageField object>, 'bio': <django.forms.CharField object>, 'curr_password': <django.forms.CharField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.CharField object>, 'last_name': <django.forms.CharField object>, 'new_password1': <django.forms.CharField object>, 'new_password2': <django.forms.CharField object>, 'username': <django.forms.CharField object>}

users.models module

Database models for the users app.

class users.models.Bookmark(*args, **kwargs)[source]

Bases: django.db.models.Model

A model representing a bookmark.

series

ForeignKey – The series this bookmark belongs to.

user

ForeignKey – The user this bookmark belongs to.

exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

objects = <django.db.models.manager.Manager object>
class users.models.UserProfile(*args, **kwargs)[source]

Bases: django.db.models.Model

A model representing a user’s profile.

TODO

Add links and let users hide their e-mail.

user

OneToOneField – The user this profile belongs to.

bio

TextField – The bio of the user.

avatar

ImageField – The avatar of the user.

token

CharField – The token of the user. Used in the bookmarks feed.

save(*args, **kwargs)[source]

Save the current instance.

get_absolute_url()[source]

Get the absolute URL of the object.

Return type

str

Returns

The URL of users.views.profile().

get_directory()[source]

Get the storage directory of the object.

Return type

PurePath

Returns

A path relative to MEDIA_ROOT.

__str__()[source]

Return a string representing the object.

Return type

str

Returns

The user as a string.

__hash__()[source]

Return the hash of the object.

Return type

int

Returns

An integer hash value.

exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

objects = <django.db.models.manager.Manager object>
class users.models.ApiKey(*args, **kwargs)[source]

Bases: django.db.models.Model

A model that contains a user’s API key.

key

CharField – The API key of the user.

user

OneToOneField – The user this key belongs to.

created

DateTimeField – The creation date of the key.

__str__()[source]

Return a string representing the object.

Return type

str

Returns

The key as a string.

__hash__()[source]

Return the hash of the object.

Return type

int

Returns

An integer hash value.

exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

get_next_by_created(*, field=<django.db.models.fields.DateTimeField: created>, is_next=True, **kwargs)
get_previous_by_created(*, field=<django.db.models.fields.DateTimeField: created>, is_next=False, **kwargs)
objects = <django.db.models.manager.Manager object>

users.receivers module

Signal receivers for the users app.

users.receivers.update_user_email(sender, request, email_address, **kwargs)[source]

Receive a signal when an email address is updated and confirmed.

When the signal is received, the new email_address is made primary and the old email addresses are deleted.

Parameters
  • sender (Type[EmailAddress]) – The model class that sent the signal.

  • request (HttpRequest) – The original request.

  • email_address (EmailAddress) – The new email address.

users.serializers module

Serializers for the users app.

class users.serializers.BookmarkPagination[source]

Bases: rest_framework.pagination.BasePagination

Fake pagination class to adapt the bookmarks list schema.

to_html()[source]
Return type

str

get_paginated_response_schema(schema)[source]
Parameters

schema (Dict) –

Return type

Dict

class users.serializers.BookmarkSerializer(*args, **kwargs)[source]

Bases: rest_framework.serializers.ModelSerializer

Serializer for bookmarks.

get_validators()[source]

Determine the set of validators to use when instantiating serializer.

Return type

List

class Meta[source]

Bases: object

model

alias of users.models.Bookmark

fields = ('series', 'user')
class users.serializers.ProfileSerializer(*args, **kwargs)[source]

Bases: rest_framework.serializers.ModelSerializer

Serializer for user profiles.

validate_username(value)[source]
Parameters

value (str) –

Return type

str

class Meta[source]

Bases: object

model

alias of users.models.UserProfile

fields = ('username', 'first_name', 'last_name', 'email', 'bio', 'avatar', 'password', 'url')
extra_kwargs = {'avatar': {'allow_null': True, 'help_text': 'Your avatar image. (<2MBs)'}, 'bio': {'help_text': 'Some info about yourself.', 'label': None}}

users.urls module

The URLconf of the users app.

users.urls.urlpatterns = [<URLPattern '' [name='user_profile']>, <URLPattern 'edit/' [name='user_edit']>, <URLPattern 'logout/' [name='account_logout']>, <URLPattern 'bookmarks/' [name='user_bookmarks']>, <URLPattern 'bookmarks.atom' [name='user_bookmarks.atom']>, <URLPattern 'bookmarks.rss' [name='user_bookmarks.rss']>, <URLResolver <module 'allauth.account.urls' from '/home/docs/checkouts/readthedocs.org/user_builds/mangadventure/envs/v0.7.4/lib/python3.6/site-packages/allauth/account/urls.py'> (None:None) ''>, <URLResolver <module 'allauth.socialaccount.urls' from '/home/docs/checkouts/readthedocs.org/user_builds/mangadventure/envs/v0.7.4/lib/python3.6/site-packages/allauth/socialaccount/urls.py'> (None:None) 'social/'>, <URLResolver <URLPattern list> (None:None) 'reddit/'>, <URLResolver <URLPattern list> (None:None) 'twitter/'>, <URLResolver <URLPattern list> (None:None) 'google/'>, <URLResolver <URLPattern list> (None:None) 'discord/'>]

The URL patterns of the users app.

users.views module

The views of the users app.

users.views.profile(request)[source]

View that serves the profile page of a user. A UserProfile will be created if it doesn’t exist.

It serves the logged in user’s profile by default, but accepts an id query parameter to view an arbitrary user’s profile.

Parameters

request (HttpRequest) – The original request.

Return type

HttpResponse

Returns

A response with the rendered profile.html template.

Raises

Http404 – If there is no active user with the specified id.

class users.views.EditUser(**kwargs)[source]

Bases: django.views.generic.base.TemplateView

View that serves the edit form for a user’s profile.

template_name = 'edit_user.html'

str – The template that this view will render.

setup(request, *args, **kwargs)[source]

Initialize attributes shared by all view methods.

A UserProfile will be created if the request user does not yet have one.

Parameters

request (HttpRequest) – The original request.

get(request, *args, **kwargs)[source]

Handle GET requests.

Parameters

request (HttpRequest) – The original request.

Return type

HttpResponse

Returns

A response with the rendered template.

post(request, *args, **kwargs)[source]

Handle POST requests.

If the user has changed their e-mail, a confirmation mail will be sent.

Parameters

request (HttpRequest) – The original request.

Return type

HttpResponse

Returns

A response with the rendered template.

dispatch(request, *args, **kwargs)
class users.views.Bookmarks(**kwargs)[source]

Bases: django.views.generic.base.TemplateView

View that serves a user’s bookmarks page.

template_name = 'bookmarks.html'

str – The template that this view will render.

get(request, *args, **kwargs)[source]

Handle GET requests.

Parameters

request (HttpRequest) – The original request.

Return type

HttpResponse

Returns

A response with the rendered template.

post(request, *args, **kwargs)[source]

Handle POST requests.

If a bookmark exists, it will be deleted. If not, it will be created.

Parameters

request (HttpRequest) – The original request.

Return type

HttpResponse

Returns

An empty 201 response when creating a bookmark.
An empty 204 response when deleting a bookmark.

dispatch(request, *args, **kwargs)
class users.views.Logout(**kwargs)[source]

Bases: allauth.account.views.LogoutView

A LogoutView that disallows GET requests.

http_method_names = ('post', 'head', 'options')

tuple – The allowed HTTP methods.

dispatch(request, *args, **kwargs)