parsing CSS#

Options to parse a given stylesheet: Get an instance of cssutils.CSSParser and use the provided parse* methods or for simpler parsing use the parse* convienience functions.

Convienience Functions#

Shortcuts for initializing a new cssutils.CSSParser and use its parse* methods. Parsing a stylesheet this way does not raise any exceptions if an error occurs but parses CSS as defined in the specifications. If you need advanced parser handline use cssutils.CSSParser directly.

parseString#

cssutils.parseString(cssText, encoding=None, href=None, media=None, title=None, validate=None)#

Parse cssText as CSSStyleSheet. Errors may be raised (e.g. UnicodeDecodeError).

Parameters:
  • cssText – CSS string to parse

  • encoding – If None the encoding will be read from BOM or an @charset rule or defaults to UTF-8. If given overrides any found encoding including the ones for imported sheets. It also will be used to decode cssText if given as a (byte) string.

  • href – The href attribute to assign to the parsed style sheet. Used to resolve other urls in the parsed sheet like @import hrefs.

  • media – The media attribute to assign to the parsed style sheet (may be a MediaList, list or a string).

  • title – The title attribute to assign to the parsed style sheet.

  • validate – If given defines if validation is used. Uses CSSParser settings as fallback

Returns:

CSSStyleSheet.

parseFile#

cssutils.parseFile(filename, encoding=None, href=None, media=None, title=None, validate=None)#

Retrieve content from filename and parse it. Errors may be raised (e.g. IOError).

Parameters:
  • filename – of the CSS file to parse, if no href is given filename is converted to a (file:) URL and set as href of resulting stylesheet. If href is given it is set as sheet.href. Either way sheet.href is used to resolve e.g. stylesheet imports via @import rules.

  • encoding – Value None defaults to encoding detection via BOM or an @charset rule. Other values override detected encoding for the sheet at filename including any imported sheets.

Returns:

CSSStyleSheet.

parseUrl#

cssutils.parseUrl(href, encoding=None, media=None, title=None, validate=None)#

Retrieve content from URL href and parse it. Errors may be raised (e.g. URLError).

Parameters:
  • href – URL of the CSS file to parse, will also be set as href of resulting stylesheet

  • encoding – Value None defaults to encoding detection via HTTP, BOM or an @charset rule. A value overrides detected encoding for the sheet at href including any imported sheets.

Returns:

CSSStyleSheet.

Working with inline styles#

parseStyle#

cssutils.parseStyle(cssText, encoding='utf-8')#

Parse given cssText which is assumed to be the content of a HTML style attribute.

Parameters:
  • cssText – CSS string to parse

  • encoding – It will be used to decode cssText if given as a (byte) string.

  • validate – If given defines if validation is used. Uses CSSParser settings as fallback

Returns:

CSSStyleDeclaration

CSSParser#

The parser is reusable.

class cssutils.CSSParser(log=None, loglevel=None, raiseExceptions=None, fetcher=None, parseComments=True, validate=True)#

Parse a CSS StyleSheet from URL, string or file and return a DOM Level 2 CSS StyleSheet object.

Usage:

parser = CSSParser()
# optionally
parser.setFetcher(fetcher)
sheet = parser.parseFile('test1.css', 'ascii')
print sheet.cssText
parseFile(filename, encoding=None, href=None, media=None, title=None, validate=None)#

Retrieve content from filename and parse it. Errors may be raised (e.g. IOError).

Parameters:
  • filename – of the CSS file to parse, if no href is given filename is converted to a (file:) URL and set as href of resulting stylesheet. If href is given it is set as sheet.href. Either way sheet.href is used to resolve e.g. stylesheet imports via @import rules.

  • encoding – Value None defaults to encoding detection via BOM or an @charset rule. Other values override detected encoding for the sheet at filename including any imported sheets.

Returns:

CSSStyleSheet.

parseString(cssText, encoding=None, href=None, media=None, title=None, validate=None)#

Parse cssText as CSSStyleSheet. Errors may be raised (e.g. UnicodeDecodeError).

Parameters:
  • cssText – CSS string to parse

  • encoding – If None the encoding will be read from BOM or an @charset rule or defaults to UTF-8. If given overrides any found encoding including the ones for imported sheets. It also will be used to decode cssText if given as a (byte) string.

  • href – The href attribute to assign to the parsed style sheet. Used to resolve other urls in the parsed sheet like @import hrefs.

  • media – The media attribute to assign to the parsed style sheet (may be a MediaList, list or a string).

  • title – The title attribute to assign to the parsed style sheet.

  • validate – If given defines if validation is used. Uses CSSParser settings as fallback

Returns:

CSSStyleSheet.

parseStyle(cssText, encoding='utf-8', validate=None)#

Parse given cssText which is assumed to be the content of a HTML style attribute.

Parameters:
  • cssText – CSS string to parse

  • encoding – It will be used to decode cssText if given as a (byte) string.

  • validate – If given defines if validation is used. Uses CSSParser settings as fallback

Returns:

CSSStyleDeclaration

parseUrl(href, encoding=None, media=None, title=None, validate=None)#

Retrieve content from URL href and parse it. Errors may be raised (e.g. URLError).

Parameters:
  • href – URL of the CSS file to parse, will also be set as href of resulting stylesheet

  • encoding – Value None defaults to encoding detection via HTTP, BOM or an @charset rule. A value overrides detected encoding for the sheet at href including any imported sheets.

Returns:

CSSStyleSheet.

setFetcher(fetcher=None)#

Replace the default URL fetch function with a custom one.

Parameters:

fetcher

A function which gets a single parameter

url

the URL to read

and must return (encoding, content) where encoding is the HTTP charset normally given via the Content-Type header (which may simply omit the charset in which case encoding would be None) and content being the string (or unicode) content.

The Mimetype should be ‘text/css’ but this has to be checked by the fetcher itself (the default fetcher emits a warning if encountering a different mimetype).

Calling setFetcher with fetcher=None resets cssutils to use its default function.

The URL Fetcher#

If you want to control how imported stylesheets are read you may define a custom URL fetcher (e.g. would be needed on Google AppEngine as urllib2, which is normally used, is not available. A GAE specific fetcher is included in cssutils from 0.9.5a1 though.)

A custom URL fetcher may be used during parsing via CSSParser.setFetcher(fetcher) (or as an init parameter). The so customized parser is reusable. The fetcher is called when an @import rule is found and the referenced stylesheet is about to be retrieved.

Example:

def fetcher(url):
    return 'ascii', '/*test*/'

parser = cssutils.CSSParser(fetcher=fetcher)
parser.parse...

Example 2 with a fetcher returning a unicode string:

def fetcher(url):
    return None, u'/*test*/'

parser = cssutils.CSSParser(fetcher=fetcher)
parser.parse...

To omit parsing of imported sheets just define a fetcher like lambda url: None (A single None is sufficient but returning None, None would be clearer).

You may also define a fetcher which overrides the internal encoding for imported sheets with a fetcher that returns a (normally HTTP) encoding depending e.g on the URL.