from django.core.validators import ValidationError, ugettext_lazy
from templatetags.restructuredtext import restructuredparts
from pycon.core import safe_ascii_encode

class IsValidReST(object):
    def __init__(self, error_message=ugettext_lazy(
                            "This field has ReST Markup Errors."),
                 include_error=False, require_title=False):
        self.include_error = include_error
        self.error_message = error_message
        self.require_title = require_title
    def __call__(self, field_data, all_data):
        parts = {}
        try:
            parts = restructuredparts(field_data, halt_level=2, traceback=1)
        except Exception, e:
            msg = self.error_message
            if self.include_error: msg = msg + safe_ascii_encode(e)
            raise ValidationError(msg)
        if self.require_title and ('title' not in parts or not parts['title']):
            raise ValidationError(self.error_message + " A title is required.")
