Skip to content

Poll Form Session

Session util methods used during poll form creation process.

clean_session(request)

Clean current session from form data

Source code in apps/polls_management/classes/poll_form_utils/poll_form_session.py
34
35
36
37
38
39
40
41
def clean_session(request: HttpRequest) -> None: 
    """Clean current session from form data"""

    # iterate all keys used to store form data
    # to delete each of them
    for key in _ALL_SESSION_KEYS:
        if request.session.get(key) is not None:
            del request.session[key]

get_poll_form(request)

Factory method to get current form from session (or from POST request).

Source code in apps/polls_management/classes/poll_form_utils/poll_form_session.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
def get_poll_form(request: HttpRequest) -> PollForm:
    """Factory method to get current form 
    from session (or from POST request)."""

    # temp, TODO: fix in a seriuous way
    try:
        formdata = request.session.get(SESSION_FORMDATA)

        if formdata is not None:
            if isinstance(formdata, QueryDict):
                formdata = formdata.dict()
            # various book flags may be undefined 
            # --> perform the check and adjust
            for key in [VOTABLE_MJ, PRIVATE, RANDOMIZE_OPTIONS]:
                if formdata.get(key) == "undefined" :
                    formdata[key] = False
            # save again in session
            request.session[SESSION_FORMDATA] = PollForm(formdata).data
    except:
        print(":)")


    # build a form for creation (w most updated data)
    if request.session.get(SESSION_POLL_ID) is None:

        return PollForm(request.POST or request.session.get(SESSION_FORMDATA) or None)

    # build a form for editing an existing instance
    try:
        return PollForm(
            # fill form data w current most updated
            request.POST or request.session.get(SESSION_FORMDATA) or None, 

            # connect form to existing instance
            instance= PollService.get_poll_by_id(
                request.session.get(SESSION_POLL_ID))
        )
    except PollDoesNotExistException:
        raise Http404(f"Poll with id {request.session.get(SESSION_POLL_ID)} not found.")

init_session_for_edit(request, poll, override_data={}, error_message=None)

Init session for edit. Run this method to prepare the session for using the form to edit a poll.

Parameters:

Name Type Description Default
request HttpRequest

Request object.

required
poll PollModel

The poll you wanna edit.

required
override_data dict

Use this dict to override some params.

{}
error_message str

Use this field to show user an initial error message.

None
Source code in apps/polls_management/classes/poll_form_utils/poll_form_session.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
def init_session_for_edit(request: HttpRequest, poll: PollModel, 
                          override_data: dict = {}, 
                          error_message: str = None) -> None:
    """Init session for edit. Run this method to prepare the 
    session for using the form to edit a poll.

    Args:
        request (HttpRequest): Request object.
        poll (PollModel): The poll you wanna edit.
        override_data (dict): Use this dict to override some params.
        error_message (str): Use this field to show user an initial error message.    
    """

    # init form with poll instance that should be modified 
    form = PollForm({
        NAME: override_data.get(NAME, poll.name), 
        QUESTION: override_data.get(QUESTION, poll.question), 
        POLL_TYPE: override_data.get(POLL_TYPE, poll.poll_type), 
        OPEN_DATETIME: override_data.get(OPEN_DATETIME, poll.open_datetime),
        CLOSE_DATETIME: override_data.get(CLOSE_DATETIME, poll.close_datetime),  
        AUTHOR: override_data.get(AUTHOR, poll.author),
        VOTABLE_MJ: override_data.get(VOTABLE_MJ, poll.votable_mj),
        PRIVATE: override_data.get(PRIVATE, poll.private), 
        SHORT_ID: override_data.get(SHORT_ID, poll.short_id), 
        RANDOMIZE_OPTIONS: override_data.get(RANDOMIZE_OPTIONS, poll.randomize_options),
        PROTECTION: override_data.get(PROTECTION, poll.protection), 
        RESULTS_VISIBILITY: override_data.get(RESULTS_VISIBILITY, poll.results_visibility), 
    }, instance=poll)

    # init poll options with current ones
    options: dict = {}
    i: int = 1
    for o in poll.options():
        options[str(i)] = o.value
        i += 1

    # save everythingh in session, so form can be 
    # rendered with current data
    request.session[SESSION_FORMDATA] = form.data
    request.session[SESSION_POLL_ID] = poll.id
    request.session[SESSION_OPTIONS] = options
    request.session[SESSION_IS_EDIT] = True

    # write in session eventual error message
    if not error_message is None:
        request.session[SESSION_ERROR] = error_message