From 27f00ea23c923924e11800467081c607a3f4fb45 Mon Sep 17 00:00:00 2001 From: Elias Dorneles Date: Mon, 14 Nov 2016 13:36:36 -0200 Subject: [PATCH] propose a css2xpath util function --- parsel/__init__.py | 1 + parsel/csstranslator.py | 8 ++++++++ tests/test_selector_csstranslator.py | 8 ++++++++ 3 files changed, 17 insertions(+) diff --git a/parsel/__init__.py b/parsel/__init__.py index 0dab114c..8bd2bb42 100644 --- a/parsel/__init__.py +++ b/parsel/__init__.py @@ -8,3 +8,4 @@ __version__ = '1.0.3' from parsel.selector import Selector, SelectorList # NOQA +from parsel.csstranslator import css2xpath # NOQA diff --git a/parsel/csstranslator.py b/parsel/csstranslator.py index e49a2e8c..f752f2bf 100644 --- a/parsel/csstranslator.py +++ b/parsel/csstranslator.py @@ -96,3 +96,11 @@ class GenericTranslator(TranslatorMixin, OriginalGenericTranslator): class HTMLTranslator(TranslatorMixin, OriginalHTMLTranslator): pass + + +_translator = HTMLTranslator() + + +def css2xpath(query): + "Return translated XPath version of a given CSS query" + return _translator.css_to_xpath(query) diff --git a/tests/test_selector_csstranslator.py b/tests/test_selector_csstranslator.py index 1dcae7d2..83d81b60 100644 --- a/tests/test_selector_csstranslator.py +++ b/tests/test_selector_csstranslator.py @@ -113,6 +113,14 @@ def test_unknown_pseudo_class(self): self.assertRaises(exc, self.c2x, css) +class UtilCss2XPathTest(unittest.TestCase): + def test_css2xpath(self): + from parsel import css2xpath + expected_xpath = (u"descendant-or-self::*[@class and contains(" + "concat(' ', normalize-space(@class), ' '), ' some-class ')]") + self.assertEqual(css2xpath('.some-class'), expected_xpath) + + class CSSSelectorTest(unittest.TestCase): sscls = Selector