Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. def WysiwygDecorator(*args, **kwargs):
  2.     """
  3.    Decorator for form classes which is using CKEditor
  4.    Cleans all wysiwyg junk, and validates characters number
  5.    Configuration through kwargs, eg. fieldname={'chars':300}
  6.    You can ommit all or one configuration constraint
  7.    """
  8.     cleaner = Cleaner(page_structure=False, add_nofollow=True, allow_tags=['p', 'b', 'u', 'i', 'br', 'a'],
  9.                       remove_unknown_tags=False)
  10.     def decorator(form):
  11.         for field, constraints in kwargs.iteritems():
  12.             name = 'clean_%s' % field
  13.             def clean(self):
  14.                 name = _whoami()
  15.                 oldfuncname = '%sold' % name
  16.                 if hasattr(self, oldfuncname):
  17.                     data = getattr(self, oldfuncname)()
  18.                 else:
  19.                     data = self.cleaned_data[field]
  20.                 data = json.loads(data)
  21.                 for k,v in data.iteritems():
  22.                     if not v:
  23.                         data[k] = ''
  24.                         continue
  25.                     if 'chars' in constraints.keys():
  26.                         if len(lxml.html.fromstring(v).text_content()) > constraints['chars']:
  27.                             raise ValidationError(__(u'Wprowadzona treść jest za długa, '
  28.                                                      u'maksymalnie może mieć %s znaków')  % constraints['chars'])
  29.                     cln  = lambda x: cleaner.clean_html(v).strip()[5:-6] if '<div>' in v else cleaner.clean_html(v).strip()
  30.                     data[k] = cln(v)#slicing to remove <div></div> No fucking idea why its added
  31.                 return json.dumps(data)
  32.  
  33.             if hasattr(form, name):
  34.                 setattr(form, '%sold'%(name,), getattr(form, name))
  35.             clean.__name__ = name
  36.             setattr(form, name, clean)
  37.  
  38.         return form
  39.     return decorator
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement