Store Module#

The Store module is part of the Decide application, handling aspects related to data storage and management. Below is the Sphinx documentation for its components.

models.py#

class store.models.Vote[source]#

Bases: Model

A model representing a vote in a voting system.

voting_id#

The ID of the voting session this vote is associated with.

Type:

PositiveIntegerField

voter_id#

The ID of the voter who cast this vote.

Type:

PositiveIntegerField

a#

Encrypted data part A representing the vote.

Type:

BigBigField

b#

Encrypted data part B representing the vote.

Type:

BigBigField

voted#

The timestamp of when the vote was cast.

Type:

DateTimeField

exception DoesNotExist#

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

a#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

b#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

get_next_by_voted(*, field=<django.db.models.fields.DateTimeField: voted>, is_next=True, **kwargs)#
get_previous_by_voted(*, field=<django.db.models.fields.DateTimeField: voted>, is_next=False, **kwargs)#
id#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>#
voted#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

voter_id#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

voting_id#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

utils.py#

store.utils.choices_store(request)[source]#

Processes and stores votes for a voting of type ‘choices’.

Parameters:

request – Django HttpRequest object containing votes data.

The request should contain:
  • voting (int): The ID of the voting.

  • voter (int): The ID of the voter.

  • votes (list): A list of dictionaries, each containing the ‘a’ and ‘b’ keys representing individual encrypted votes.

  • voting_type (str): A string representing the type of voting (‘choices’).

Returns:

HTTP status code indicating the result of the operation.

Raises:
  • HTTP_401_UNAUTHORIZED – If the voting is not found, or has not started, or is closed.

  • HTTP_400_BAD_REQUEST – If the voting ID, voter ID, or votes data is missing or invalid.

store.utils.classic_store(request)[source]#

Processes and stores a classic type vote.

Parameters:

request – Django HttpRequest object containing vote data.

The request should contain:
  • voting (int): The ID of the voting.

  • voter (int): The ID of the voter.

  • vote (dict): A dictionary containing the ‘a’ and ‘b’ keys representing the encrypted vote.

  • voting_type (str): A string representing the type of voting (‘yesno’, ‘classic’, ‘comment’, ‘preference’).

Returns:

HTTP status code indicating the result of the operation.

Raises:
  • HTTP_401_UNAUTHORIZED – If the voting is not found, or has not started, or is closed.

  • HTTP_400_BAD_REQUEST – If the voting ID, voter ID, or vote data is missing or invalid.

views.py#

class store.views.StoreView[source]#

Bases: ListAPIView

API view for listing and creating votes.

Inherits from Django Rest Framework’s ListAPIView to provide a method for listing existing votes and a method for creating new votes based on the voting type.

queryset#

A queryset that includes all Vote objects.

serializer_class#

Serializer class used to serialize Vote objects.

filter_backends#

Set of filter backends to be used for the queryset.

filterset_fields#

Fields of the Vote model that can be filtered.

filter_backends = (<class 'django_filters.rest_framework.backends.DjangoFilterBackend'>,)#
filterset_fields = ('voting_id', 'voter_id')#
get(request)[source]#

Handles GET requests to retrieve a list of votes.

Parameters:

request – HttpRequest object.

Returns:

Response object containing serialized Vote data.

Raises:

PermissionDenied – If the user is not staff.

post(request)[source]#

Handles POST requests to create a new vote based on the voting type.

Parameters:

request – HttpRequest object containing voting_type and vote data.

Returns:

Response object with an HTTP status code.

Raises:

HTTP_400_BAD_REQUEST – If voting_type is not in the predefined voting types.

queryset#
serializer_class#

alias of VoteSerializer

tests.py#

class store.tests.StoreChoiceCase[source]#

Bases: BaseTestCase

Test case for storing votes with choices.

This class tests the functionality of storing votes for different types of voting, including classic, choices, text, yes/no, and preference types.

question#

A Question object for classic type voting.

Type:

Question

question_choices#

A Question object for multiple choices type voting.

Type:

Question

voting#

A Voting object for classic type voting.

Type:

Voting

voting_choices#

A Voting object for multiple choices type voting.

Type:

Voting

gen_votes()[source]#

Generate random votes for testing.

Returns:

A tuple containing lists of generated voting IDs and user IDs.

Return type:

tuple

gen_voting(pk)[source]#

Generate a voting object for testing.

Parameters:

pk (int) – Primary key for the voting object.

Creates a Voting object with specified primary key and saves it to the database.

get_or_create_user(pk)[source]#

Get an existing user or create a new one for testing.

Parameters:

pk (int) – Primary key of the user.

Returns:

The fetched or created User object.

Return type:

User

setUp()[source]#

Set up necessary objects for testing.

Creates Question and Voting objects for both classic and multiple choices type voting.

tearDown()[source]#

Clean up after tests.

Clears the created objects to ensure isolation of tests.

test_filter()[source]#

Test case for filtering votes.

This method generates votes and then tests filtering them by voting_id and voter_id via GET requests, verifying the response status codes and content.

test_gen_vote_invalid()[source]#

Test case for generating an invalid vote.

This method sends a POST request with invalid vote data and expects to receive a 401 Unauthorized status code.

data#

A dictionary containing the invalid vote data.

Type:

dict

test_hasvote()[source]#

Test case for checking if a specific vote exists.

This method tests the existence of a specific vote by voter_id and voting_id, verifying the response status codes and content.

test_store_vote()[source]#

Test case for storing a valid vote.

This method creates a voting instance and a user, then sends a POST request to store a vote and expects to receive a 200 OK status code. It also checks the count and content of the Vote objects in the database to ensure the vote is stored correctly.

VOTING_PK#

Primary key for the voting instance.

Type:

int

CTE_A#

Test constant for ‘a’ field in vote.

Type:

int

CTE_B#

Test constant for ‘b’ field in vote.

Type:

int

data#

A dictionary containing the vote data.

Type:

dict

test_store_vote_choices()[source]#

Test case for storing multiple choice votes.

This method tests the storage of multiple choice votes by creating relevant data, sending a POST request, and verifying the response and database records.

CTE_A#

Test constant for ‘a’ field in vote.

Type:

int

CTE_B#

Test constant for ‘b’ field in vote.

Type:

int

data#

A dictionary containing multiple votes data.

Type:

dict

test_store_vote_text()[source]#

Test case for storing a text vote.

This method tests storing a text-based vote by creating relevant data, sending a POST request, and verifying the response and database records.

CTE_A#

Test constant for ‘a’ field in vote.

Type:

int

CTE_B#

Test constant for ‘b’ field in vote.

Type:

int

data#

A dictionary containing the text vote data.

Type:

dict

test_vote()[source]#

Test case for retrieving stored votes.

This method generates votes and then tests retrieving them via GET requests, verifying the response status codes and content.

test_voting_invalid_type()[source]#

Test case for retrieving stored votes.

This method generates votes and then tests retrieving them via GET requests, verifying the response status codes and content.

test_voting_status()[source]#

Test case for verifying voting status during vote storage.

This method checks the response status code when attempting to store a vote based on the voting’s opening and closing status.

data#

A dictionary containing the vote data.

Type:

dict

class store.tests.StorePreferenceCase[source]#

Bases: BaseTestCase

Test case for storing preference-type votes.

question#

A classic question instance for the test.

Type:

Question

question_preference#

A preference-type question instance for the test.

Type:

Question

voting#

A voting instance associated with the classic question.

Type:

Voting

voting_preference#

A voting instance associated with the preference-type question.

Type:

Voting

get_or_create_user(pk)[source]#
setUp()[source]#

Set up method to initialize test data before each test is run.

tearDown()[source]#

Tear down method to clean up after each test is run.

test_store_vote_preference()[source]#

Tests the storage of a preference-type vote.

test_voting_invalid_type()[source]#

Tests the behavior when attempting to store a vote with an invalid voting type.

class store.tests.StoreTextCase[source]#

Bases: BaseTestCase

Test case for storing text-type votes.

question#

A classic question instance for the test.

Type:

Question

question_text#

A text-type question instance for the test.

Type:

Question

voting#

A voting instance associated with the classic question.

Type:

Voting

voting_text#

A voting instance associated with the text-type question.

Type:

Voting

get_or_create_user(pk)[source]#

Retrieves or creates a user for the given primary key.

Parameters:

pk (int) – The primary key of the user.

Returns:

The retrieved or created user.

Return type:

User

setUp()[source]#

Set up method to initialize test data before each test is run.

tearDown()[source]#

Tear down method to clean up after each test is run.

test_store_vote_text()[source]#

Tests the storage of a text-type vote.

class store.tests.StoreYesNoCase[source]#

Bases: BaseTestCase

Test case for storing yes/no-type votes.

question#

A classic question instance for the test.

Type:

Question

question_yesno#

A yes/no-type question instance for the test.

Type:

Question

voting#

A voting instance associated with the classic question.

Type:

Voting

voting_yesno#

A voting instance associated with the yes/no-type question.

Type:

Voting

get_or_create_user(pk)[source]#
setUp()[source]#

Set up method to initialize test data before each test is run.

tearDown()[source]#

Tear down method to clean up after each test is run.

test_store_vote_yesno()[source]#

Tests the storage of a yes/no-type vote.