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()
 | 
						|
 |