42 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| import py
 | |
| import re
 | |
| from exception import *
 | |
| from post_multipart import post_multipart
 | |
| #import css_checker
 | |
| 
 | |
| def check_html(string):
 | |
|     """check an HTML string for wellformedness and validity"""
 | |
|     tempdir = py.test.ensuretemp('check_html')
 | |
|     filename = 'temp%s.html' % (hash(string), )
 | |
|     tempfile = tempdir.join(filename)
 | |
|     tempfile.write(string)
 | |
|     ret = post_multipart('validator.w3.org', '/check', [], 
 | |
|                 [('uploaded_file', 'somehtml.html', string)])
 | |
|     is_valid = get_validation_result_from_w3_html(ret)
 | |
|     return is_valid
 | |
| 
 | |
| reg_validation_result = re.compile('<td[^>]*class="(in)?valid"[^>]*>([^<]*)<',
 | |
|                                     re.M | re.S)
 | |
| def get_validation_result_from_w3_html(html):
 | |
|     match = reg_validation_result.search(html)
 | |
|     valid = match.group(1) is None
 | |
|     text = match.group(2).strip()
 | |
|     if not valid:
 | |
|         temp = py.test.ensuretemp('/w3_results_%s.html' % hash(html), dir=0)
 | |
|         temp.write(html)
 | |
|         raise HTMLError(
 | |
|             "The html is not valid. See the report file at '%s'" % temp)
 | |
|     return valid
 | |
| 
 | |
| #def check_css(string, basepath, htmlpath='/'):
 | |
| #    """check the CSS of an HTML string
 | |
| #    
 | |
| #        check whether an HTML string contains CSS rels, and if so check whether
 | |
| #        any classes defined in the HTML actually have a matching CSS selector 
 | |
| #    """
 | |
| #    c = css_checker.css_checker(string, basepath, htmlpath)
 | |
| #    # raises a CSSError when failing, this is done from the tester class to
 | |
| #    # allow being more verbose than just 'something went wrong'
 | |
| #    return c.check()
 | |
| 
 |