Skip to content
This repository has been archived by the owner on Jan 20, 2022. It is now read-only.

Commit

Permalink
fix fields caching that was corrupting pages (#167)
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor Yunenko committed May 27, 2020
1 parent b3766b3 commit 00388b2
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 40 deletions.
47 changes: 29 additions & 18 deletions aldryn_forms/cms_plugins.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# -*- coding: utf-8 -*-
from typing import Dict

from PIL import Image
from aldryn_forms.models import FormPlugin
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from django import forms
from django.contrib import messages
from django.contrib.admin import TabularInline
Expand All @@ -9,29 +14,35 @@
from django.utils.six import text_type
from django.utils.translation import ugettext
from django.utils.translation import ugettext_lazy as _

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

from emailit.api import send_mail
from filer.models import filemodels, imagemodels
from PIL import Image
from filer.models import filemodels
from filer.models import imagemodels

from . import models
from .forms import (
BooleanFieldForm, CaptchaFieldForm, EmailFieldForm, FileFieldForm,
FormPluginForm, FormSubmissionBaseForm, HiddenFieldForm, ImageFieldForm,
MultipleSelectFieldForm, RadioFieldForm, RestrictedFileField,
RestrictedImageField, SelectFieldForm, TextAreaFieldForm, TextFieldForm,
)
from .forms import BooleanFieldForm
from .forms import CaptchaFieldForm
from .forms import EmailFieldForm
from .forms import FileFieldForm
from .forms import FormPluginForm
from .forms import FormSubmissionBaseForm
from .forms import HiddenFieldForm
from .forms import ImageFieldForm
from .forms import MultipleSelectFieldForm
from .forms import RadioFieldForm
from .forms import RestrictedFileField
from .forms import RestrictedImageField
from .forms import SelectFieldForm
from .forms import TextAreaFieldForm
from .forms import TextFieldForm
from .helpers import get_user_name
from .models import SerializedFormField
from .signals import form_post_save, form_pre_save
from .signals import form_post_save
from .signals import form_pre_save
from .sizefield.utils import filesizeformat
from .utils import get_action_backends
from .validators import (
MaxChoicesValidator, MinChoicesValidator, is_valid_recipient,
)
from .validators import MaxChoicesValidator
from .validators import MinChoicesValidator
from .validators import is_valid_recipient


class FormElement(CMSPluginBase):
Expand Down Expand Up @@ -154,7 +165,7 @@ def get_form_class(self, instance):
)
return formClass

def get_form_fields(self, instance):
def get_form_fields(self, instance: models.FormPlugin) -> Dict:
form_fields = {}
fields = instance.get_form_fields()

Expand Down
38 changes: 16 additions & 22 deletions aldryn_forms/models.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
# -*- coding: utf-8 -*-
import json
import warnings
from collections import OrderedDict, defaultdict, namedtuple
from collections import defaultdict
from collections import namedtuple
from functools import partial
from typing import List

from cms.models.fields import PageField
from cms.models.pluginmodel import CMSPlugin
from cms.utils.plugins import downcast_plugins
from django.conf import settings
from django.db import models
from django.db.models.functions import Coalesce
from django.utils.encoding import python_2_unicode_compatible
from django.utils.functional import cached_property
from django.utils.six import text_type
from django.utils.translation import ugettext_lazy as _

from cms.models.fields import PageField
from cms.models.pluginmodel import CMSPlugin
from cms.utils.plugins import downcast_plugins

from djangocms_attributes_field.fields import AttributesField
from filer.fields.folder import FilerFolderField

from .compat import build_plugin_tree
from .helpers import is_form_element
from .sizefield.models import FileSizeField
from .utils import (
ALDRYN_FORMS_ACTION_BACKEND_KEY_MAX_SIZE, action_backend_choices,
)
from .utils import ALDRYN_FORMS_ACTION_BACKEND_KEY_MAX_SIZE
from .utils import action_backend_choices


AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
Expand Down Expand Up @@ -228,7 +226,7 @@ def get_submit_button(self):
return element
return

def get_form_fields(self):
def get_form_fields(self) -> List[FormField]:
from .cms_plugins import Field

fields = []
Expand Down Expand Up @@ -281,15 +279,16 @@ def get_form_fields(self):
fields.append(field)
return fields

def get_form_field_name(self, field):
def get_form_field_name(self, field: 'FieldPluginBase') -> str:
if self._form_field_key_cache is None:
self._form_field_key_cache = {}

if field.pk not in self._form_field_key_cache:
fields_by_key = self.get_form_fields_by_name()
is_cache_needs_update = field.pk not in self._form_field_key_cache
if is_cache_needs_update:
form_fields: List[FormField] = self.get_form_fields()
for form_field in form_fields:
self._form_field_key_cache[form_field.plugin_instance.pk] = form_field.name

for name, _field in fields_by_key.items():
self._form_field_key_cache[_field.plugin_instance.pk] = name
return self._form_field_key_cache[field.pk]

def get_form_fields_as_choices(self):
Expand All @@ -298,11 +297,6 @@ def get_form_fields_as_choices(self):
for field in fields:
yield (field.name, field.label)

def get_form_fields_by_name(self):
fields = self.get_form_fields()
fields_by_name = OrderedDict((field.name, field) for field in fields)
return fields_by_name

def get_form_elements(self):
from .utils import get_nested_plugins

Expand Down Expand Up @@ -421,7 +415,7 @@ class Meta:
abstract = True

def __init__(self, *args, **kwargs):
super(FieldPluginBase, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if self.plugin_type:
attribute = 'is_%s' % self.field_type
setattr(self, attribute, True)
Expand Down

0 comments on commit 00388b2

Please sign in to comment.