78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
# Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
|
|
# For licensing, see LICENSE.md or http://ckeditor.com/license
|
|
|
|
# Validates HTML files in a directory with W3C validator.
|
|
# To use this script simply call:
|
|
# python samplesvalidator.py
|
|
#
|
|
# By default this script validates samples directory ( 'project/samples' ).
|
|
# To validate some other directory an environmental variable must be set:
|
|
# export CKSAMPLESPATH=/home/me/some/path/to/be/validated
|
|
#
|
|
# To change validation service url you can also set an environmental variable:
|
|
# export CKSAMPLESURL='http://my.validation.servi.ce'
|
|
#
|
|
# To revert any kind of variable type:
|
|
# unset VARIABLE
|
|
|
|
import urllib, urllib2
|
|
import json
|
|
import os
|
|
import re
|
|
|
|
pathEnvVar = 'CKSAMPLESPATH'
|
|
urlEnvVar = 'CKSAMPLESURL'
|
|
scriptPath = os.path.dirname( os.path.realpath( __file__ ) )
|
|
|
|
# Let's move to the desired directory.
|
|
# \-> Look for ENV variable or use default samples path.
|
|
if pathEnvVar in os.environ:
|
|
path = os.environ[ pathEnvVar ]
|
|
else:
|
|
path = os.path.abspath( os.path.join( scriptPath, '../../samples/' ) )
|
|
|
|
os.chdir( path )
|
|
|
|
# Let's determine validator url.
|
|
# \-> Look for ENV variable or use default url.
|
|
url = os.environ[ urlEnvVar ] if urlEnvVar in os.environ else 'http://validator.w3.org/check'
|
|
|
|
# Find all HTML files in path.
|
|
directoryFiles = os.listdir( '.' )
|
|
htmlRegex = re.compile( '.html$', re.IGNORECASE )
|
|
htmlFiles = filter( htmlRegex.search, directoryFiles )
|
|
|
|
# Iterate over HTML files.
|
|
for index, fileName in enumerate( htmlFiles ):
|
|
# Determine the full path of the file.
|
|
filePath = os.path.join( path, fileName )
|
|
|
|
print '(%(index)s/%(total)s) Validating %(filePath)s...' % {
|
|
'filePath': filePath,
|
|
'total': len( htmlFiles ),
|
|
'index': index + 1
|
|
}
|
|
|
|
# Open the file.
|
|
fileHandler = open( filePath, 'r' )
|
|
|
|
# Prepare POST request.
|
|
postData = {
|
|
'fragment': fileHandler.read(),
|
|
'charset': 'utf-8',
|
|
'output': 'json'
|
|
}
|
|
|
|
# Close file.
|
|
fileHandler.close()
|
|
|
|
# Do the request. Keep the response.
|
|
data = urllib.urlencode( postData )
|
|
request = urllib2.Request( url, data )
|
|
response = json.loads( urllib2.urlopen( request ).read() )
|
|
|
|
# Print validation messages.
|
|
for message in response[ 'messages' ]:
|
|
message[ 'type' ] = message[ 'type' ].upper()
|
|
message[ 'message' ] = message[ 'message' ].title()
|
|
print '\t* %(type)s (Last line: %(lastLine)s, Last column: %(lastColumn)s): %(message)s' % message
|