From 2e2b67bc528de96ac4c1edd0ed2560dca355f4fc Mon Sep 17 00:00:00 2001 From: Damien Cassou Date: Mon, 12 Apr 2021 10:50:28 +0200 Subject: [PATCH] pythonPackages.woob: init at 3.0 --- .../python-modules/woob/default.nix | 82 +++++++++++++++++++ .../woob/no-test-requiring-network.patch | 54 ++++++++++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 138 insertions(+) create mode 100644 pkgs/development/python-modules/woob/default.nix create mode 100644 pkgs/development/python-modules/woob/no-test-requiring-network.patch diff --git a/pkgs/development/python-modules/woob/default.nix b/pkgs/development/python-modules/woob/default.nix new file mode 100644 index 000000000000..15f2faa200ca --- /dev/null +++ b/pkgs/development/python-modules/woob/default.nix @@ -0,0 +1,82 @@ +{ lib +, buildPythonPackage +, fetchPypi +, isPy27 +, Babel +, colorama +, cssselect +, dateutil +, feedparser +, futures +, gdata +, gnupg +, google-api-python-client +, html2text +, libyaml +, lxml +, mechanize +, nose +, pdfminer +, pillow +, prettytable +, pyqt5 +, pyyaml +, requests +, simplejson +, termcolor +, unidecode +}: + +buildPythonPackage rec { + pname = "woob"; + version = "3.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "09hpxy5zhn2b8li0xjf3zd7s46lawb0315p5mdcsci3bj3s4v1j7"; + }; + + patches = [ + # Disable doctests that require networking: + ./no-test-requiring-network.patch + ]; + + checkInputs = [ nose ]; + + nativeBuildInputs = [ pyqt5 ]; + + propagatedBuildInputs = [ + Babel + colorama + cssselect + dateutil + feedparser + gdata + gnupg + google-api-python-client + html2text + libyaml + lxml + mechanize + pdfminer + pillow + prettytable + pyqt5 + pyyaml + requests + simplejson + termcolor + unidecode + ] ++ lib.optionals isPy27 [ futures ]; + + checkPhase = '' + nosetests + ''; + + meta = with lib; { + homepage = "https://woob.tech"; + description = "Collection of applications and APIs to interact with websites without requiring the user to open a browser"; + license = licenses.lgpl3Plus; + maintainers = [ maintainers.DamienCassou ]; + }; +} diff --git a/pkgs/development/python-modules/woob/no-test-requiring-network.patch b/pkgs/development/python-modules/woob/no-test-requiring-network.patch new file mode 100644 index 000000000000..7095019d0541 --- /dev/null +++ b/pkgs/development/python-modules/woob/no-test-requiring-network.patch @@ -0,0 +1,54 @@ +--- a/woob/browser/browsers.py ++++ b/woob/browser/browsers.py +@@ -930,23 +930,6 @@ + + :class:`NextPage` constructor can take an url or a Request object. + +- >>> from .pages import HTMLPage +- >>> class Page(HTMLPage): +- ... def iter_values(self): +- ... for el in self.doc.xpath('//li'): +- ... yield el.text +- ... for next in self.doc.xpath('//a'): +- ... raise NextPage(next.attrib['href']) +- ... +- >>> class Browser(PagesBrowser): +- ... BASEURL = 'https://woob.tech' +- ... list = URL('/tests/list-(?P\d+).html', Page) +- ... +- >>> b = Browser() +- >>> b.list.go(pagenum=1) # doctest: +ELLIPSIS +- +- >>> list(b.pagination(lambda: b.page.iter_values())) +- ['One', 'Two', 'Three', 'Four'] + """ + while True: + try: +--- a/woob/browser/pages.py ++++ b/woob/browser/pages.py +@@ -49,25 +49,6 @@ + + :class:`NextPage` constructor can take an url or a Request object. + +- >>> class Page(HTMLPage): +- ... @pagination +- ... def iter_values(self): +- ... for el in self.doc.xpath('//li'): +- ... yield el.text +- ... for next in self.doc.xpath('//a'): +- ... raise NextPage(next.attrib['href']) +- ... +- >>> from .browsers import PagesBrowser +- >>> from .url import URL +- >>> class Browser(PagesBrowser): +- ... BASEURL = 'https://woob.tech' +- ... list = URL('/tests/list-(?P\d+).html', Page) +- ... +- >>> b = Browser() +- >>> b.list.go(pagenum=1) # doctest: +ELLIPSIS +- +- >>> list(b.page.iter_values()) +- ['One', 'Two', 'Three', 'Four'] + """ + + @wraps(func) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 70e06433e920..fb8cfb39a5a5 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8987,6 +8987,8 @@ in { wled = callPackage ../development/python-modules/wled { }; + woob = callPackage ../development/python-modules/woob { }; + word2vec = callPackage ../development/python-modules/word2vec { }; wordcloud = callPackage ../development/python-modules/wordcloud { };