| | 159 | |
|---|
| | 160 | def isValidHTML(field_data, all_data): |
|---|
| | 161 | import urllib, urllib2 |
|---|
| | 162 | try: |
|---|
| | 163 | u = urllib2.urlopen('http://validator.w3.org/check', urllib.urlencode({'fragment': field_data, 'output': 'xml'})) |
|---|
| | 164 | except: |
|---|
| | 165 | # Validator or Internet connection is unavailable. Fail silently. |
|---|
| | 166 | return |
|---|
| | 167 | html_is_valid = (u.headers.get('x-w3c-validator-status', 'Invalid') == 'Valid') |
|---|
| | 168 | if html_is_valid: |
|---|
| | 169 | return |
|---|
| | 170 | from xml.dom.minidom import parseString |
|---|
| | 171 | error_messages = [e.firstChild.wholeText for e in parseString(u.read()).getElementsByTagName('messages')[0].getElementsByTagName('msg')] |
|---|
| | 172 | raise ValidationError, "Valid HTML is required. Specific errors are:\n%s" % "\n".join(error_messages) |
|---|