From 4f545af415ca272f36aec8f432648dab3b50f418 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Sun, 24 Mar 2019 00:54:22 -0400 Subject: [PATCH] autopep8 --- setup/plugins_mirror.py | 8 +-- src/calibre/customize/ui.py | 6 +-- src/calibre/debug.py | 2 +- src/calibre/devices/kobo/bookmark.py | 1 + src/calibre/ebooks/docx/fields.py | 3 ++ src/calibre/ebooks/docx/numbering.py | 1 + src/calibre/ebooks/docx/writer/container.py | 2 +- src/calibre/ebooks/lrf/pylrs/pylrf.py | 2 +- src/calibre/ebooks/metadata/html.py | 6 +-- src/calibre/ebooks/mobi/debug/headers.py | 2 +- src/calibre/ebooks/mobi/reader/index.py | 4 +- src/calibre/ebooks/oeb/polish/container.py | 2 +- src/calibre/ebooks/oeb/polish/import_book.py | 1 + src/calibre/ebooks/oeb/polish/tests/base.py | 1 + .../ebooks/oeb/polish/tests/parsing.py | 2 +- src/calibre/ebooks/txt/processor.py | 2 +- src/calibre/gui2/email.py | 2 +- src/calibre/gui2/library/alternate_views.py | 2 +- src/calibre/gui2/library/caches.py | 6 +-- src/calibre/gui2/preferences/coloring.py | 4 +- src/calibre/gui2/preferences/misc.py | 1 + src/calibre/gui2/tag_browser/model.py | 8 +-- src/calibre/gui2/tweak_book/diff/main.py | 2 +- .../gui2/tweak_book/editor/syntax/css.py | 1 + src/calibre/gui2/tweak_book/editor/themes.py | 1 + src/calibre/gui2/tweak_book/reports.py | 4 +- src/calibre/gui2/tweak_book/search.py | 3 +- src/calibre/gui2/viewer/javascript.py | 2 +- src/calibre/library/database2.py | 18 +++---- src/calibre/linux.py | 2 +- src/calibre/spell/import_from.py | 1 + src/calibre/srv/render_book.py | 1 + src/calibre/utils/dbus_service.py | 1 + src/calibre/utils/fonts/sfnt/cmap.py | 6 +-- src/calibre/utils/fonts/sfnt/container.py | 1 + src/calibre/utils/fonts/sfnt/gsub.py | 1 + src/calibre/utils/fonts/utils.py | 8 +-- src/calibre/utils/fonts/win_fonts.py | 9 ++-- src/calibre/utils/ipc/pool.py | 8 +-- src/calibre/utils/localization.py | 2 +- src/calibre/utils/localunzip.py | 1 + src/calibre/utils/resources.py | 2 +- src/calibre/utils/unicode_names.py | 2 + src/calibre/web/feeds/recipes/collection.py | 2 +- src/css_selectors/select.py | 54 +++++++++++++++++++ src/tinycss/__init__.py | 1 + src/tinycss/tests/fonts3.py | 1 + 47 files changed, 137 insertions(+), 65 deletions(-) diff --git a/setup/plugins_mirror.py b/setup/plugins_mirror.py index a1fccc4347..f2424384b5 100644 --- a/setup/plugins_mirror.py +++ b/setup/plugins_mirror.py @@ -374,10 +374,10 @@ def parallel_fetch(old_index, entry): def log(*args, **kwargs): - print (*args, **kwargs) + print(*args, **kwargs) with open('log', 'a') as f: kwargs['file'] = f - print (*args, **kwargs) + print(*args, **kwargs) def atomic_write(raw, name): @@ -682,7 +682,7 @@ def test_parse(): # {{{ new_entries = tuple(parse_index(raw)) for i, entry in enumerate(old_entries): if entry != new_entries[i]: - print ('The new entry: %s != %s' % (new_entries[i], entry)) + print('The new entry: %s != %s' % (new_entries[i], entry)) raise SystemExit(1) pool = ThreadPool(processes=20) urls = [e.url for e in new_entries] @@ -699,7 +699,7 @@ def test_parse(): # {{{ break new_url, aname = parse_plugin_zip_url(raw) if new_url != full_url: - print ('new url (%s): %s != %s for plugin at: %s' % (aname, new_url, full_url, url)) + print('new url (%s): %s != %s for plugin at: %s' % (aname, new_url, full_url, url)) raise SystemExit(1) # }}} diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py index ae5d8e254e..1229cbf712 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -196,7 +196,7 @@ def run_plugins_on_postimport(db, book_id, fmt): try: plugin.postimport(book_id, fmt, db) except: - print ('Running file type plugin %s failed with traceback:'% + print('Running file type plugin %s failed with traceback:'% plugin.name) traceback.print_exc() @@ -211,7 +211,7 @@ def run_plugins_on_postadd(db, book_id, fmt_map): try: plugin.postadd(book_id, fmt_map, db) except Exception: - print ('Running file type plugin %s failed with traceback:'% + print('Running file type plugin %s failed with traceback:'% plugin.name) traceback.print_exc() @@ -728,7 +728,7 @@ def initialize_plugins(perf=False): sys.stdout, sys.stderr = ostdout, ostderr if perf: for x in sorted(times, key=lambda x:times[x]): - print ('%50s: %.3f'%(x, times[x])) + print('%50s: %.3f'%(x, times[x])) _initialized_plugins.sort(cmp=lambda x,y:cmp(x.priority, y.priority), reverse=True) reread_filetype_plugins() reread_metadata_plugins() diff --git a/src/calibre/debug.py b/src/calibre/debug.py index ee2dd8fd35..6e67e19fce 100644 --- a/src/calibre/debug.py +++ b/src/calibre/debug.py @@ -347,7 +347,7 @@ def main(args=sys.argv): elif ext in {'mobi', 'azw', 'azw3'}: inspect_mobi(path) else: - print ('Cannot dump unknown filetype: %s' % path) + print('Cannot dump unknown filetype: %s' % path) elif len(args) >= 2 and os.path.exists(os.path.join(args[1], '__main__.py')): sys.path.insert(0, args[1]) run_script(os.path.join(args[1], '__main__.py'), args[2:]) diff --git a/src/calibre/devices/kobo/bookmark.py b/src/calibre/devices/kobo/bookmark.py index 9bc7c89c4c..8763915ff5 100644 --- a/src/calibre/devices/kobo/bookmark.py +++ b/src/calibre/devices/kobo/bookmark.py @@ -12,6 +12,7 @@ class Bookmark(): # {{{ A simple class fetching bookmark data kobo-specific ''' + def __init__(self, db_connection, contentid, path, id, book_format, bookmark_extension): self.book_format = book_format self.bookmark_extension = bookmark_extension diff --git a/src/calibre/ebooks/docx/fields.py b/src/calibre/ebooks/docx/fields.py index 038ded9cb3..286588371e 100644 --- a/src/calibre/ebooks/docx/fields.py +++ b/src/calibre/ebooks/docx/fields.py @@ -39,6 +39,7 @@ class Field(object): self.instructions = ''.join(self.buf) del self.buf + WORD, FLAG = 0, 1 scanner = re.Scanner([ (r'\\\S{1}', lambda s, t: (t, FLAG)), # A flag of the form \x @@ -77,6 +78,7 @@ def parser(name, field_map, default_field_name=None): return parse + parse_hyperlink = parser('hyperlink', 'l:anchor m:image-map n:target o:title t:target', 'url') @@ -257,5 +259,6 @@ def test_parse_fields(return_tests=False): return suite unittest.TextTestRunner(verbosity=4).run(suite) + if __name__ == '__main__': test_parse_fields() diff --git a/src/calibre/ebooks/docx/numbering.py b/src/calibre/ebooks/docx/numbering.py index caad53399d..f2956db261 100644 --- a/src/calibre/ebooks/docx/numbering.py +++ b/src/calibre/ebooks/docx/numbering.py @@ -37,6 +37,7 @@ def alphabet(val, lower=True): x = string.ascii_lowercase if lower else string.ascii_uppercase return x[(abs(val - 1)) % len(x)] + alphabet_map = { 'lower-alpha':alphabet, 'upper-alpha':partial(alphabet, lower=False), 'lower-roman':lambda x:roman(x).lower(), 'upper-roman':roman, diff --git a/src/calibre/ebooks/docx/writer/container.py b/src/calibre/ebooks/docx/writer/container.py index e51faed3fc..82ae0bd8f7 100644 --- a/src/calibre/ebooks/docx/writer/container.py +++ b/src/calibre/ebooks/docx/writer/container.py @@ -279,4 +279,4 @@ class DOCX(object): if __name__ == '__main__': d = DOCX(None, None) - print (d.websettings) + print(d.websettings) diff --git a/src/calibre/ebooks/lrf/pylrs/pylrf.py b/src/calibre/ebooks/lrf/pylrs/pylrf.py index 0529482017..a29c0139d0 100644 --- a/src/calibre/ebooks/lrf/pylrs/pylrf.py +++ b/src/calibre/ebooks/lrf/pylrs/pylrf.py @@ -652,7 +652,7 @@ class LrfWriter(object): return self.sourceEncoding def toUnicode(self, string): - if type(string) is str: + if isinstance(string, str): string = string.decode(self.sourceEncoding) return string diff --git a/src/calibre/ebooks/metadata/html.py b/src/calibre/ebooks/metadata/html.py index e8428d4393..9d866fac55 100644 --- a/src/calibre/ebooks/metadata/html.py +++ b/src/calibre/ebooks/metadata/html.py @@ -67,10 +67,10 @@ def parse_meta_tags(src): all_names = '|'.join(rmap) ans = {} npat = r'''name\s*=\s*['"]{0,1}(?P%s)['"]{0,1}''' % all_names - cpat = 'content\s*=\s*%s' % attr_pat + cpat = r'content\s*=\s*%s' % attr_pat for pat in ( - ' 0: @@ -230,8 +229,7 @@ class CmapTable(UnknownTable): def set_character_map(self, cmap): self.version, self.num_tables = 0, 1 fmt = b'>7H' - codes = list(iterkeys(cmap)) - codes.sort() + codes = sorted(iterkeys(cmap)) if not codes: start_code = [0xffff] diff --git a/src/calibre/utils/fonts/sfnt/container.py b/src/calibre/utils/fonts/sfnt/container.py index d4aab5a59e..d833ba023c 100644 --- a/src/calibre/utils/fonts/sfnt/container.py +++ b/src/calibre/utils/fonts/sfnt/container.py @@ -167,6 +167,7 @@ def test_roundtrip(ff=None): raise ValueError('Roundtripping failed, size different (%d vs. %d)'% (len(data), len(rd))) + if __name__ == '__main__': import sys test_roundtrip(sys.argv[-1]) diff --git a/src/calibre/utils/fonts/sfnt/gsub.py b/src/calibre/utils/fonts/sfnt/gsub.py index a23cab255e..c2fe802101 100644 --- a/src/calibre/utils/fonts/sfnt/gsub.py +++ b/src/calibre/utils/fonts/sfnt/gsub.py @@ -132,6 +132,7 @@ class ReverseChainSingleSubstitution(UnknownLookupSubTable): gid_index_map = self.coverage.coverage_indices(glyph_ids) return {self.substitutes[i] for i in itervalues(gid_index_map)} + subtable_map = { 1: SingleSubstitution, 2: MultipleSubstitution, diff --git a/src/calibre/utils/fonts/utils.py b/src/calibre/utils/fonts/utils.py index bb5aaa8862..4e6739bfb8 100644 --- a/src/calibre/utils/fonts/utils.py +++ b/src/calibre/utils/fonts/utils.py @@ -489,12 +489,12 @@ def test(): def main(): import sys, os for f in sys.argv[1:]: - print (os.path.basename(f)) + print(os.path.basename(f)) raw = open(f, 'rb').read() - print (get_font_names(raw)) + print(get_font_names(raw)) characs = get_font_characteristics(raw) - print (characs) - print (panose_to_css_generic_family(characs[5])) + print(characs) + print(panose_to_css_generic_family(characs[5])) verify_checksums(raw) remove_embed_restriction(raw) diff --git a/src/calibre/utils/fonts/win_fonts.py b/src/calibre/utils/fonts/win_fonts.py index 69faa791c8..9c78a8647b 100644 --- a/src/calibre/utils/fonts/win_fonts.py +++ b/src/calibre/utils/fonts/win_fonts.py @@ -150,7 +150,7 @@ def load_winfonts(): def test_ttf_reading(): for f in sys.argv[1:]: raw = open(f).read() - print (os.path.basename(f)) + print(os.path.basename(f)) get_font_characteristics(raw) print() @@ -166,15 +166,16 @@ def test(): else: w = load_winfonts() - print (w.w) + print(w.w) families = w.font_families() - print (families) + print(families) for family in families: prints(family + ':') for font, data in iteritems(w.fonts_for_family(family)): prints(' ', font, data[0], data[1], len(data[2])) - print () + print() + if __name__ == '__main__': test() diff --git a/src/calibre/utils/ipc/pool.py b/src/calibre/utils/ipc/pool.py index c11fa0785e..403818d48a 100644 --- a/src/calibre/utils/ipc/pool.py +++ b/src/calibre/utils/ipc/pool.py @@ -399,7 +399,7 @@ def run_main(func): def test_write(): - print ('Printing to stdout in worker') + print('Printing to stdout in worker') def test(): @@ -408,8 +408,8 @@ def test(): while not p.results.empty(): r = p.results.get() if not ignore_fail and r.is_terminal_failure: - print (r.result.err) - print (r.result.traceback) + print(r.result.err) + print(r.result.traceback) raise SystemExit(1) ans[r.id] = r.result return ans @@ -487,4 +487,4 @@ def test(): p(i, 'import time;\ndef x(i):\n time.sleep(10000)', 'x', i) p.shutdown(), p.join() - print ('Tests all passed!') + print('Tests all passed!') diff --git a/src/calibre/utils/localization.py b/src/calibre/utils/localization.py index 7a9d10cee1..b9eb0a15ac 100644 --- a/src/calibre/utils/localization.py +++ b/src/calibre/utils/localization.py @@ -189,7 +189,7 @@ def load_po(path): try: make(path, buf) except Exception: - print (('Failed to compile translations file: %s, ignoring') % path) + print(('Failed to compile translations file: %s, ignoring') % path) buf = None else: buf = io.BytesIO(buf.getvalue()) diff --git a/src/calibre/utils/localunzip.py b/src/calibre/utils/localunzip.py index baf8110d0a..eb1010663c 100644 --- a/src/calibre/utils/localunzip.py +++ b/src/calibre/utils/localunzip.py @@ -316,5 +316,6 @@ class LocalZipFile(object): shutil.copyfileobj(temp, zipstream) zipstream.flush() + if __name__ == '__main__': extractall(sys.argv[-1]) diff --git a/src/calibre/utils/resources.py b/src/calibre/utils/resources.py index 6b8642f0f1..2b380efc42 100644 --- a/src/calibre/utils/resources.py +++ b/src/calibre/utils/resources.py @@ -98,7 +98,7 @@ def _compile_coffeescript(name): cs, errors = compile_coffeescript(f.read(), src) if errors: for line in errors: - print (line) + print(line) raise Exception('Failed to compile coffeescript' ': %s'%src) return cs diff --git a/src/calibre/utils/unicode_names.py b/src/calibre/utils/unicode_names.py index 16dd8b5276..a95891dfdb 100644 --- a/src/calibre/utils/unicode_names.py +++ b/src/calibre/utils/unicode_names.py @@ -39,4 +39,6 @@ def points_for_word(w): ans = plugins['unicode_names'][0].codepoints_for_word(w.encode('utf-8')) | html_entities().get(w, set()) points_for_word.cache[w] = ans return ans + + points_for_word.cache = {} # noqa diff --git a/src/calibre/web/feeds/recipes/collection.py b/src/calibre/web/feeds/recipes/collection.py index 31ca79d411..d27b21af49 100644 --- a/src/calibre/web/feeds/recipes/collection.py +++ b/src/calibre/web/feeds/recipes/collection.py @@ -93,7 +93,7 @@ def serialize_builtin_recipes(): try: recipe_class = compile_recipe(stream.read()) except: - print ('Failed to compile: %s'%f) + print('Failed to compile: %s'%f) raise if recipe_class is not None: recipe_mapping['builtin:'+rid] = recipe_class diff --git a/src/css_selectors/select.py b/src/css_selectors/select.py index 07e7cfa80d..125e089ac9 100644 --- a/src/css_selectors/select.py +++ b/src/css_selectors/select.py @@ -27,6 +27,7 @@ xpath_cache = OrderedDict() # Test that the string is not empty and does not contain whitespace is_non_whitespace = re.compile(r'^[^ \t\r\n\f]+$').match + def get_parsed_selector(raw): try: return parse_cache[raw] @@ -36,6 +37,7 @@ def get_parsed_selector(raw): parse_cache.pop(next(iter(parse_cache))) return ans + def get_compiled_xpath(expr): try: return xpath_cache[expr] @@ -45,12 +47,16 @@ def get_compiled_xpath(expr): xpath_cache.pop(next(iter(xpath_cache))) return ans + class AlwaysIn(object): def __contains__(self, x): return True + + always_in = AlwaysIn() + def trace_wrapper(func): @wraps(func) def trace(*args, **kwargs): @@ -59,6 +65,7 @@ def trace_wrapper(func): return func(*args, **kwargs) return trace + def normalize_language_tag(tag): """Return a list of normalized combinations for a `BCP 47` language tag. @@ -80,9 +87,11 @@ def normalize_language_tag(tag): taglist.add('-'.join(base_tag + tags)) return taglist + INAPPROPRIATE_PSEUDO_CLASSES = frozenset([ 'active', 'after', 'disabled', 'visited', 'link', 'before', 'focus', 'first-letter', 'enabled', 'first-line', 'hover', 'checked', 'target']) + class Select(object): ''' @@ -325,6 +334,7 @@ class Select(object): # Combinators {{{ + def select_combinedselector(cache, combined): """Translate a combined selector.""" combinator = cache.combinator_mapping[combined.combinator] @@ -334,6 +344,7 @@ def select_combinedselector(cache, combined): for item in cache.dispatch_map[combinator](cache, cache.iterparsedselector(combined.selector), right): yield item + def select_descendant(cache, left, right): """right is a child, grand-child or further descendant of left""" right = always_in if right is None else frozenset(right) @@ -342,6 +353,7 @@ def select_descendant(cache, left, right): if descendant in right: yield descendant + def select_child(cache, left, right): """right is an immediate child of left""" right = always_in if right is None else frozenset(right) @@ -350,6 +362,7 @@ def select_child(cache, left, right): if child in right: yield child + def select_direct_adjacent(cache, left, right): """right is a sibling immediately after left""" right = always_in if right is None else frozenset(right) @@ -359,6 +372,7 @@ def select_direct_adjacent(cache, left, right): yield sibling break + def select_indirect_adjacent(cache, left, right): """right is a sibling after left, immediately or not""" right = always_in if right is None else frozenset(right) @@ -368,6 +382,7 @@ def select_indirect_adjacent(cache, left, right): yield sibling # }}} + def select_element(cache, selector): """A type or universal selector.""" element = selector.element @@ -378,6 +393,7 @@ def select_element(cache, selector): for elem in cache.element_map[ascii_lower(element)]: yield elem + def select_hash(cache, selector): 'An id selector' items = cache.id_map[ascii_lower(selector.id)] @@ -386,6 +402,7 @@ def select_hash(cache, selector): if elem in items: yield elem + def select_class(cache, selector): 'A class selector' items = cache.class_map[ascii_lower(selector.class_name)] @@ -394,6 +411,7 @@ def select_class(cache, selector): if elem in items: yield elem + def select_negation(cache, selector): 'Implement :not()' exclude = frozenset(cache.iterparsedselector(selector.subselector)) @@ -403,6 +421,7 @@ def select_negation(cache, selector): # Attribute selectors {{{ + def select_attrib(cache, selector): operator = cache.attribute_operator_mapping[selector.operator] items = frozenset(cache.dispatch_map[operator](cache, ascii_lower(selector.attrib), selector.value)) @@ -410,20 +429,24 @@ def select_attrib(cache, selector): if item in items: yield item + def select_exists(cache, attrib, value=None): for elem_set in itervalues(cache.attrib_map[attrib]): for elem in elem_set: yield elem + def select_equals(cache, attrib, value): for elem in cache.attrib_map[attrib][value]: yield elem + def select_includes(cache, attrib, value): if is_non_whitespace(value): for elem in cache.attrib_space_map[attrib][value]: yield elem + def select_dashmatch(cache, attrib, value): if value: for val, elem_set in iteritems(cache.attrib_map[attrib]): @@ -431,6 +454,7 @@ def select_dashmatch(cache, attrib, value): for elem in elem_set: yield elem + def select_prefixmatch(cache, attrib, value): if value: for val, elem_set in iteritems(cache.attrib_map[attrib]): @@ -438,6 +462,7 @@ def select_prefixmatch(cache, attrib, value): for elem in elem_set: yield elem + def select_suffixmatch(cache, attrib, value): if value: for val, elem_set in iteritems(cache.attrib_map[attrib]): @@ -445,6 +470,7 @@ def select_suffixmatch(cache, attrib, value): for elem in elem_set: yield elem + def select_substringmatch(cache, attrib, value): if value: for val, elem_set in iteritems(cache.attrib_map[attrib]): @@ -456,6 +482,7 @@ def select_substringmatch(cache, attrib, value): # Function selectors {{{ + def select_function(cache, function): """Select with a functional pseudo-class.""" fname = function.name.replace('-', '_') @@ -474,6 +501,7 @@ def select_function(cache, function): if func(cache, function, item): yield item + def select_lang(cache, function): ' Implement :lang() ' if function.argument_types() not in (['STRING'], ['IDENT']): @@ -487,6 +515,7 @@ def select_lang(cache, function): for elem in elem_set: yield elem + def select_nth_child(cache, function, elem): ' Implement :nth-child() ' a, b = function.parsed_arguments @@ -499,6 +528,7 @@ def select_nth_child(cache, function, elem): n = (num - b) / a return n.is_integer() and n > -1 + def select_nth_last_child(cache, function, elem): ' Implement :nth-last-child() ' a, b = function.parsed_arguments @@ -511,6 +541,7 @@ def select_nth_last_child(cache, function, elem): n = (num - b) / a return n.is_integer() and n > -1 + def select_nth_of_type(cache, function, elem): ' Implement :nth-of-type() ' a, b = function.parsed_arguments @@ -523,6 +554,7 @@ def select_nth_of_type(cache, function, elem): n = (num - b) / a return n.is_integer() and n > -1 + def select_nth_last_of_type(cache, function, elem): ' Implement :nth-last-of-type() ' a, b = function.parsed_arguments @@ -539,6 +571,7 @@ def select_nth_last_of_type(cache, function, elem): # Pseudo elements {{{ + def select_pseudo(cache, pseudo): try: func = cache.dispatch_map[pseudo.ident.replace('-', '_')] @@ -565,50 +598,71 @@ def select_pseudo(cache, pseudo): if func(cache, item): yield item + def select_first_child(cache, elem): try: return cache.sibling_count(elem) == 0 except ValueError: return False + + select_first_child.is_pseudo = True + def select_last_child(cache, elem): try: return cache.sibling_count(elem, before=False) == 0 except ValueError: return False + + select_last_child.is_pseudo = True + def select_only_child(cache, elem): try: return cache.all_sibling_count(elem) == 0 except ValueError: return False + + select_only_child.is_pseudo = True + def select_first_of_type(cache, elem): try: return cache.sibling_count(elem, same_type=True) == 0 except ValueError: return False + + select_first_of_type.is_pseudo = True + def select_last_of_type(cache, elem): try: return cache.sibling_count(elem, before=False, same_type=True) == 0 except ValueError: return False + + select_last_of_type.is_pseudo = True + def select_only_of_type(cache, elem): try: return cache.all_sibling_count(elem, same_type=True) == 0 except ValueError: return False + + select_only_of_type.is_pseudo = True + def select_empty(cache, elem): return cache.is_empty(elem) + + select_empty.is_pseudo = True # }}} diff --git a/src/tinycss/__init__.py b/src/tinycss/__init__.py index ffe3d3f078..10827136ea 100644 --- a/src/tinycss/__init__.py +++ b/src/tinycss/__init__.py @@ -47,6 +47,7 @@ def make_parser(*features, **kwargs): parser_class = CSS21Parser return parser_class(**kwargs) + def make_full_parser(**kwargs): ''' A parser that parses all supported CSS 3 modules in addition to CSS 2.1 ''' features = tuple(iterkeys(PARSER_MODULES)) diff --git a/src/tinycss/tests/fonts3.py b/src/tinycss/tests/fonts3.py index f336fb6401..4c3960221d 100644 --- a/src/tinycss/tests/fonts3.py +++ b/src/tinycss/tests/fonts3.py @@ -11,6 +11,7 @@ from tinycss.tests import BaseTest from polyglot.builtins import iteritems + class TestFonts3(BaseTest): def test_font_face(self):