Skip to content

Commit cb92103

Browse files
committed
Allow lines to be a bit longer
1 parent 9d60aed commit cb92103

5 files changed

Lines changed: 23 additions & 47 deletions

File tree

cssselect2/__init__.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,17 @@ def add_selector(self, selector, payload):
4747
return
4848

4949
entry = (
50-
selector.test, selector.specificity, self.order,
51-
selector.pseudo_element, payload)
50+
selector.test, selector.specificity, self.order, selector.pseudo_element,
51+
payload)
5252
if selector.id is not None:
5353
self.id_selectors.setdefault(selector.id, []).append(entry)
5454
elif selector.class_name is not None:
55-
self.class_selectors.setdefault(
56-
selector.class_name, []).append(entry)
55+
self.class_selectors.setdefault(selector.class_name, []).append(entry)
5756
elif selector.local_name is not None:
5857
self.lower_local_name_selectors.setdefault(
5958
selector.lower_local_name, []).append(entry)
6059
elif selector.namespace is not None:
61-
self.namespace_selectors.setdefault(
62-
selector.namespace, []).append(entry)
60+
self.namespace_selectors.setdefault(selector.namespace, []).append(entry)
6361
elif selector.requires_lang_attr:
6462
self.lang_attr_selectors.append(entry)
6563
else:
@@ -87,8 +85,7 @@ def match(self, element):
8785
for class_name in element.classes:
8886
if class_name in self.class_selectors:
8987
self.add_relevant_selectors(
90-
element, self.class_selectors[class_name],
91-
relevant_selectors)
88+
element, self.class_selectors[class_name], relevant_selectors)
9289

9390
lower_name = ascii_lower(element.local_name)
9491
if lower_name in self.lower_local_name_selectors:
@@ -104,8 +101,7 @@ def match(self, element):
104101
self.add_relevant_selectors(
105102
element, self.lang_attr_selectors, relevant_selectors)
106103

107-
self.add_relevant_selectors(
108-
element, self.other_selectors, relevant_selectors)
104+
self.add_relevant_selectors(element, self.other_selectors, relevant_selectors)
109105

110106
relevant_selectors.sort()
111107
return relevant_selectors
@@ -114,5 +110,4 @@ def match(self, element):
114110
def add_relevant_selectors(element, selectors, relevant_selectors):
115111
for test, specificity, order, pseudo, payload in selectors:
116112
if test(element):
117-
relevant_selectors.append(
118-
(specificity, order, pseudo, payload))
113+
relevant_selectors.append((specificity, order, pseudo, payload))

cssselect2/compiler.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ def compile_selector_list(input, namespaces=None):
2828
A list of opaque :class:`compiler.CompiledSelector` objects.
2929
3030
"""
31-
return [
32-
CompiledSelector(selector)
33-
for selector in parser.parse(input, namespaces)]
31+
return [CompiledSelector(selector) for selector in parser.parse(input, namespaces)]
3432

3533

3634
class CompiledSelector:
@@ -239,8 +237,7 @@ def _compile_node(selector):
239237
elif selector.operator == '*=':
240238
return f'{value!r} in {attribute_value}' if value else '0'
241239
else:
242-
raise SelectorError(
243-
'Unknown attribute operator', selector.operator)
240+
raise SelectorError('Unknown attribute operator', selector.operator)
244241
else: # In any namespace
245242
raise NotImplementedError # TODO
246243

cssselect2/parser.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,7 @@ def parse_simple_selector(tokens, namespaces):
136136
if next == ':':
137137
next = tokens.next()
138138
if next is None or next.type != 'ident':
139-
raise SelectorError(
140-
next, f'Expected a pseudo-element name, got {next}')
139+
raise SelectorError(next, f'Expected a pseudo-element name, got {next}')
141140
value = next.lower_value
142141
if value not in SUPPORTED_PSEUDO_ELEMENTS:
143142
raise SelectorError(
@@ -154,8 +153,7 @@ def parse_simple_selector(tokens, namespaces):
154153
if name in ('is', 'where', 'not', 'has'):
155154
return parse_logical_combination(next, namespaces, name), None
156155
else:
157-
return (
158-
FunctionalPseudoClassSelector(name, next.arguments), None)
156+
return (FunctionalPseudoClassSelector(name, next.arguments), None)
159157
else:
160158
raise SelectorError(next, f'unexpected {next} token.')
161159
else:
@@ -185,8 +183,7 @@ def parse_logical_combination(matches_any_token, namespaces, name):
185183

186184
def parse_attribute_selector(tokens, namespaces):
187185
tokens.skip_whitespace()
188-
qualified_name = parse_qualified_name(
189-
tokens, namespaces, is_attribute=True)
186+
qualified_name = parse_qualified_name(tokens, namespaces, is_attribute=True)
190187
if qualified_name is None:
191188
next = tokens.next()
192189
raise SelectorError(next, f'expected attribute name, got {next}')
@@ -204,12 +201,10 @@ def parse_attribute_selector(tokens, namespaces):
204201
next = tokens.next()
205202
if next is None or next.type not in ('ident', 'string'):
206203
next_type = 'None' if next is None else next.type
207-
raise SelectorError(
208-
next, f'expected attribute value, got {next_type}')
204+
raise SelectorError(next, f'expected attribute value, got {next_type}')
209205
value = next.value
210206
else:
211-
raise SelectorError(
212-
peek, f'expected attribute selector operator, got {peek}')
207+
raise SelectorError(peek, f'expected attribute selector operator, got {peek}')
213208

214209
tokens.skip_whitespace()
215210
next = tokens.next()
@@ -221,8 +216,7 @@ def parse_attribute_selector(tokens, namespaces):
221216
case_sensitive = True
222217
else:
223218
raise SelectorError(next, f'expected ], got {next.type}')
224-
return AttributeSelector(
225-
namespace, local_name, operator, value, case_sensitive)
219+
return AttributeSelector(namespace, local_name, operator, value, case_sensitive)
226220

227221

228222
def parse_qualified_name(tokens, namespaces, is_attribute=False):
@@ -246,15 +240,13 @@ def parse_qualified_name(tokens, namespaces, is_attribute=False):
246240
namespace = namespaces.get(first_ident.value)
247241
if namespace is None:
248242
raise SelectorError(
249-
first_ident,
250-
f'undefined namespace prefix: {first_ident.value}')
243+
first_ident, f'undefined namespace prefix: {first_ident.value}')
251244
elif peek == '*':
252245
next = tokens.next()
253246
peek = tokens.peek()
254247
if peek != '|':
255248
if is_attribute:
256-
raise SelectorError(
257-
next, f'expected local name, got {next.type}')
249+
raise SelectorError(next, f'expected local name, got {next.type}')
258250
return namespaces.get(None, None), None
259251
tokens.next()
260252
namespace = None
@@ -405,10 +397,7 @@ def __init__(self, namespace):
405397
self.namespace = namespace
406398

407399
def __repr__(self):
408-
if self.namespace == '':
409-
return '|'
410-
else:
411-
return f'{{{self.namespace}}}|'
400+
return '|' if self.namespace == '' else f'{{{self.namespace}}}|'
412401

413402

414403
class IDSelector:

cssselect2/tree.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ def _from_root(cls, root, content_language, in_html_document=True):
5353
root = root.getroot()
5454
return cls(
5555
root, parent=None, index=0, previous=None,
56-
in_html_document=in_html_document,
57-
content_language=content_language)
56+
in_html_document=in_html_document, content_language=content_language)
5857

5958
def __init__(self, etree_element, parent, index, previous,
6059
in_html_document, content_language=None):
@@ -330,8 +329,7 @@ def classes(self):
330329
def lang(self):
331330
"""The language of this element, as a string."""
332331
# http://whatwg.org/C#language
333-
xml_lang = self.etree_element.get(
334-
'{http://www.w3.org/XML/1998/namespace}lang')
332+
xml_lang = self.etree_element.get('{http://www.w3.org/XML/1998/namespace}lang')
335333
if xml_lang is not None:
336334
return ascii_lower(xml_lang)
337335
is_html = (
@@ -346,13 +344,11 @@ def lang(self):
346344
# Root elememnt
347345
if is_html:
348346
content_language = None
349-
iterator = self.etree_element.iter(
350-
'{http://www.w3.org/1999/xhtml}meta')
347+
iterator = self.etree_element.iter('{http://www.w3.org/1999/xhtml}meta')
351348
for meta in iterator:
352349
http_equiv = meta.get('http-equiv', '')
353350
if ascii_lower(http_equiv) == 'content-language':
354-
content_language = _parse_content_language(
355-
meta.get('content'))
351+
content_language = _parse_content_language(meta.get('content'))
356352
if content_language is not None:
357353
return ascii_lower(content_language)
358354
# Empty string means unknown

tests/test_cssselect2.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ def test_valid_selectors(test):
7575
result = [element.id for element in root.query_all(test['selector'])]
7676
if result != test['expect']: # pragma: no cover
7777
raise AssertionError(
78-
f'{test["selector"]!r}: {result} != {test["expect"]} '
79-
f'({test["name"]})')
78+
f'{test["selector"]!r}: {result} != {test["expect"]} ({test["name"]})')
8079

8180

8281
def test_lang():

0 commit comments

Comments
 (0)