Skip to content
Snippets Groups Projects

Refactor update creation api

Merged Samuel GAIST requested to merge refactor_update_creation_api into master
All threads resolved!
1 file
+ 31
24
Compare changes
  • Side-by-side
  • Inline
  • 1802185d
    [common][utils] Pre-commit cleanup · 1802185d
    Samuel GAIST authored
    Also move all imports at the top, it's counter-productive
    to have try/except import clauses on a package that is
    mandatory for the code to work.
+ 31
24
@@ -32,21 +32,19 @@ from django.core.exceptions import ValidationError
from django.utils.encoding import force_text
from django.utils import six
from docutils import utils
from docutils.nodes import Element
from docutils.core import Publisher
from ..ui.templatetags.markup import restructuredtext
def validate_restructuredtext(value):
"""Validates a piece of restructuredtext for strict conformance"""
try:
from docutils import utils
from docutils.nodes import Element
from docutils.core import Publisher
except ImportError:
raise forms.ValidationError("Error in 'reStructuredText' validator: The Python docutils package isn't installed.")
# Generate a new parser (copying `rst2html.py` flow)
pub = Publisher(None, None, None, settings=None)
pub.set_components('standalone', 'restructuredtext', 'pseudoxml')
pub.set_components("standalone", "restructuredtext", "pseudoxml")
# Configure publisher
settings = pub.get_settings(halt_level=5)
@@ -63,12 +61,13 @@ def validate_restructuredtext(value):
# Collect errors via an observer
errors = []
def error_collector(data):
# Mutate the data since it was just generated
data.line = data['line']
data.source = data['source']
data.level = data['level']
data.type = data['type']
data.line = data["line"]
data.source = data["source"]
data.level = data["level"]
data.type = data["type"]
data.message = Element.astext(data.children[0])
data.full_message = Element.astext(data)
@@ -82,8 +81,8 @@ def validate_restructuredtext(value):
# Apply transforms (and more collect errors)
document.transformer.populate_from_components(
(pub.source, pub.reader, pub.reader.parser, pub.writer,
pub.destination))
(pub.source, pub.reader, pub.reader.parser, pub.writer, pub.destination)
)
transformer = document.transformer
while transformer.transforms:
if not transformer.sorted:
@@ -99,25 +98,33 @@ def validate_restructuredtext(value):
# errors should be ready
if errors:
validation_list = []
msg = 'Line %(line)d (severity %(level)d): %(message)s'
msg = "Line %(line)d (severity %(level)d): %(message)s"
for error in errors:
#from docutils.parsers.rst module:
#debug(0), info(1), warning(2), error(3), severe(4)
# from docutils.parsers.rst module:
# debug(0), info(1), warning(2), error(3), severe(4)
if error.level > 1:
validation_list.append(ValidationError(
msg, code=error.type.lower(),
params=dict(line=error.line, level=error.level, message=error.message)))
validation_list.append(
ValidationError(
msg,
code=error.type.lower(),
params=dict(
line=error.line, level=error.level, message=error.message
),
)
)
if validation_list:
raise ValidationError(validation_list)
def ensure_html(text):
try:
validate_restructuredtext(text)
except ValidationError as e:
return '<pre>{}</pre>'.format(text)
except ValidationError:
return "<pre>{}</pre>".format(text)
else:
return restructuredtext(text)
def ensure_string(data):
"""
Ensure that we have a str object from data which can be either a str in
@@ -125,6 +132,6 @@ def ensure_string(data):
"""
if data is not None:
if isinstance(data, six.binary_type):
return data.decode('utf-8')
return data.decode("utf-8")
return data
return ''
\ No newline at end of file
return ""
Loading