From 58f73c3d79f48794522c41d53b723cc2ca67f198 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Thu, 26 Jul 2018 13:42:57 +0200 Subject: [PATCH 1/9] Package pytest --- packages/pytest/meta.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/pytest/meta.yaml diff --git a/packages/pytest/meta.yaml b/packages/pytest/meta.yaml new file mode 100644 index 000000000..ce5c5ecf4 --- /dev/null +++ b/packages/pytest/meta.yaml @@ -0,0 +1,7 @@ +package: + name: pytest + version: 3.6.3 + +source: + url: https://files.pythonhosted.org/packages/55/50/399419c03c39bf41faa7cbd5a8976c076037b2d76adf2535610919806d67/pytest-3.6.3.tar.gz + md5: 8ca6124a3a80f9555c50f5c09056ea02 From 42bdef2306ea182bb785b8bee993d33b2b59d302 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Tue, 21 Aug 2018 17:50:25 +0300 Subject: [PATCH 2/9] Package pytest dependencies --- packages/atomicwrites/meta.yaml | 12 ++++++++++++ packages/attrs/meta.yaml | 15 +++++++++++++++ packages/attrs/patches/use-dummy-threading.patch | 16 ++++++++++++++++ packages/more-itertools/meta.yaml | 12 ++++++++++++ packages/pluggy/meta.yaml | 12 ++++++++++++ packages/py/meta.yaml | 13 +++++++++++++ packages/pytest/meta.yaml | 12 ++++++++++++ packages/six/meta.yaml | 12 ++++++++++++ 8 files changed, 104 insertions(+) create mode 100644 packages/atomicwrites/meta.yaml create mode 100644 packages/attrs/meta.yaml create mode 100644 packages/attrs/patches/use-dummy-threading.patch create mode 100644 packages/more-itertools/meta.yaml create mode 100644 packages/pluggy/meta.yaml create mode 100644 packages/py/meta.yaml create mode 100644 packages/six/meta.yaml diff --git a/packages/atomicwrites/meta.yaml b/packages/atomicwrites/meta.yaml new file mode 100644 index 000000000..a759c9cd0 --- /dev/null +++ b/packages/atomicwrites/meta.yaml @@ -0,0 +1,12 @@ +package: + name: atomicwrites + version: 1.1.5 + +source: + url: https://pypi.io/packages/source/a/atomicwrites/atomicwrites-1.1.5.tar.gz + sha256: 240831ea22da9ab882b551b31d4225591e5e447a68c5e188db5b89ca1d487585 + + +test: + imports: + - atomicwrites diff --git a/packages/attrs/meta.yaml b/packages/attrs/meta.yaml new file mode 100644 index 000000000..22c48b2f7 --- /dev/null +++ b/packages/attrs/meta.yaml @@ -0,0 +1,15 @@ +package: + name: attrs + version: 18.1.0 + +source: + url: https://pypi.io/packages/source/a/attrs/attrs-18.1.0.tar.gz + sha256: e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b + + patches: + - patches/use-dummy-threading.patch + + +test: + imports: + - attr diff --git a/packages/attrs/patches/use-dummy-threading.patch b/packages/attrs/patches/use-dummy-threading.patch new file mode 100644 index 000000000..ef5dc1ddc --- /dev/null +++ b/packages/attrs/patches/use-dummy-threading.patch @@ -0,0 +1,16 @@ +diff --git a/src/attr/_make.py b/src/attr/_make.py +index fc44611..f60016e 100644 +--- a/src/attr/_make.py ++++ b/src/attr/_make.py +@@ -3,7 +3,10 @@ from __future__ import absolute_import, division, print_function + import hashlib + import linecache + import sys +-import threading ++try: ++ import threading ++except ImportError: ++ import dummy_threading as threading + import warnings + + from operator import itemgetter diff --git a/packages/more-itertools/meta.yaml b/packages/more-itertools/meta.yaml new file mode 100644 index 000000000..c9462a3a8 --- /dev/null +++ b/packages/more-itertools/meta.yaml @@ -0,0 +1,12 @@ +package: + name: more-itertools + version: 4.3.0 + +source: + url: https://pypi.io/packages/source/m/more-itertools/more-itertools-4.3.0.tar.gz + sha256: c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e + + +test: + imports: + - more_itertools diff --git a/packages/pluggy/meta.yaml b/packages/pluggy/meta.yaml new file mode 100644 index 000000000..0e81a65a4 --- /dev/null +++ b/packages/pluggy/meta.yaml @@ -0,0 +1,12 @@ +package: + name: pluggy + version: 0.7.1 + +source: + url: https://pypi.io/packages/source/p/pluggy/pluggy-0.7.1.tar.gz + sha256: 95eb8364a4708392bae89035f45341871286a333f749c3141c20573d2b3876e1 + + +test: + imports: + - pluggy diff --git a/packages/py/meta.yaml b/packages/py/meta.yaml new file mode 100644 index 000000000..2002bd77f --- /dev/null +++ b/packages/py/meta.yaml @@ -0,0 +1,13 @@ +package: + name: py + version: 1.5.4 + +source: + url: https://pypi.io/packages/source/p/py/py-1.5.4.tar.gz + sha256: 3fd59af7435864e1a243790d322d763925431213b6b8529c6ca71081ace3bbf7 + + +test: + imports: + - py + - py.code diff --git a/packages/pytest/meta.yaml b/packages/pytest/meta.yaml index ce5c5ecf4..955c6975d 100644 --- a/packages/pytest/meta.yaml +++ b/packages/pytest/meta.yaml @@ -5,3 +5,15 @@ package: source: url: https://files.pythonhosted.org/packages/55/50/399419c03c39bf41faa7cbd5a8976c076037b2d76adf2535610919806d67/pytest-3.6.3.tar.gz md5: 8ca6124a3a80f9555c50f5c09056ea02 + +requirements: + run: + - atomicwrites + - attrs + - more-itertools + - pluggy + - py + +test: + imports: + - pytest diff --git a/packages/six/meta.yaml b/packages/six/meta.yaml new file mode 100644 index 000000000..bdd1f3043 --- /dev/null +++ b/packages/six/meta.yaml @@ -0,0 +1,12 @@ +package: + name: six + version: 1.11.0 + +source: + url: https://pypi.io/packages/source/s/six/six-1.11.0.tar.gz + sha256: 70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 + + +test: + imports: + - six From c512d8237dd445d1fbee0f31dfc5445a3aa6e09a Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Tue, 21 Aug 2018 18:10:31 +0300 Subject: [PATCH 3/9] Package setuptools --- packages/pytest/meta.yaml | 1 + packages/setuptools/meta.yaml | 20 ++++++++++ .../setuptools/patches/remove-ctypes.patch | 37 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 packages/setuptools/meta.yaml create mode 100644 packages/setuptools/patches/remove-ctypes.patch diff --git a/packages/pytest/meta.yaml b/packages/pytest/meta.yaml index 955c6975d..5fd3916ff 100644 --- a/packages/pytest/meta.yaml +++ b/packages/pytest/meta.yaml @@ -13,6 +13,7 @@ requirements: - more-itertools - pluggy - py + - setuptools test: imports: diff --git a/packages/setuptools/meta.yaml b/packages/setuptools/meta.yaml new file mode 100644 index 000000000..4113aac0b --- /dev/null +++ b/packages/setuptools/meta.yaml @@ -0,0 +1,20 @@ +package: + name: setuptools + version: 40.0.0 + +source: + url: https://pypi.io/packages/source/s/setuptools/setuptools-40.0.0.zip + sha256: 012adb8e25fbfd64c652e99e7bab58799a3aaf05d39ab38561f69190a909015f + + patches: + - patches/remove-ctypes.patch + +requirements: + run: + - pyparsing + +test: + imports: + - setuptools + - easy_install + - pkg_resources diff --git a/packages/setuptools/patches/remove-ctypes.patch b/packages/setuptools/patches/remove-ctypes.patch new file mode 100644 index 000000000..f009a7d91 --- /dev/null +++ b/packages/setuptools/patches/remove-ctypes.patch @@ -0,0 +1,37 @@ +diff --git a/setuptools/glibc.py b/setuptools/glibc.py +index a134591c..c31fc78a 100644 +--- a/setuptools/glibc.py ++++ b/setuptools/glibc.py +@@ -2,13 +2,13 @@ + # https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/utils/glibc.py + from __future__ import absolute_import + +-import ctypes + import re + import warnings + + + def glibc_version_string(): + "Returns glibc version string, or None if not using glibc." ++ import ctypes + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the +diff --git a/setuptools/windows_support.py b/setuptools/windows_support.py +index cb977cff..1ca64fbb 100644 +--- a/setuptools/windows_support.py ++++ b/setuptools/windows_support.py +@@ -1,5 +1,4 @@ + import platform +-import ctypes + + + def windows_only(func): +@@ -17,6 +16,7 @@ def hide_file(path): + + `path` must be text. + """ ++ import ctypes + __import__('ctypes.wintypes') + SetFileAttributes = ctypes.windll.kernel32.SetFileAttributesW + SetFileAttributes.argtypes = ctypes.wintypes.LPWSTR, ctypes.wintypes.DWORD From 5761705326a2449d351e316b21c5aeb65a2fc3b2 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Wed, 22 Aug 2018 21:41:10 +0300 Subject: [PATCH 4/9] Remove six --- packages/six/meta.yaml | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 packages/six/meta.yaml diff --git a/packages/six/meta.yaml b/packages/six/meta.yaml deleted file mode 100644 index bdd1f3043..000000000 --- a/packages/six/meta.yaml +++ /dev/null @@ -1,12 +0,0 @@ -package: - name: six - version: 1.11.0 - -source: - url: https://pypi.io/packages/source/s/six/six-1.11.0.tar.gz - sha256: 70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 - - -test: - imports: - - six From 56597e2d5a0d4d64cdef658de080ec66f180dab6 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Thu, 23 Aug 2018 13:08:51 +0300 Subject: [PATCH 5/9] Use NamedTemporaryFile in pytest --- packages/pytest/meta.yaml | 3 +++ .../patches/use-named-temporary-file.patch | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 packages/pytest/patches/use-named-temporary-file.patch diff --git a/packages/pytest/meta.yaml b/packages/pytest/meta.yaml index 5fd3916ff..c60db6544 100644 --- a/packages/pytest/meta.yaml +++ b/packages/pytest/meta.yaml @@ -6,6 +6,9 @@ source: url: https://files.pythonhosted.org/packages/55/50/399419c03c39bf41faa7cbd5a8976c076037b2d76adf2535610919806d67/pytest-3.6.3.tar.gz md5: 8ca6124a3a80f9555c50f5c09056ea02 + patches: + - patches/use-named-temporary-file.patch + requirements: run: - atomicwrites diff --git a/packages/pytest/patches/use-named-temporary-file.patch b/packages/pytest/patches/use-named-temporary-file.patch new file mode 100644 index 000000000..27858560f --- /dev/null +++ b/packages/pytest/patches/use-named-temporary-file.patch @@ -0,0 +1,26 @@ +diff --git a/src/_pytest/capture.py b/src/_pytest/capture.py +index faa767a8..23298939 100644 +--- a/src/_pytest/capture.py ++++ b/src/_pytest/capture.py +@@ -10,7 +10,7 @@ import sys + import os + import io + from io import UnsupportedOperation +-from tempfile import TemporaryFile ++from tempfile import NamedTemporaryFile as TemporaryFile + + import six + import pytest +diff --git a/src/_pytest/pastebin.py b/src/_pytest/pastebin.py +index 6af202d1..9b192918 100644 +--- a/src/_pytest/pastebin.py ++++ b/src/_pytest/pastebin.py +@@ -29,7 +29,7 @@ def pytest_configure(config): + # when using pytest-xdist, for example + if tr is not None: + # pastebin file will be utf-8 encoded binary file +- config._pastebinfile = tempfile.TemporaryFile("w+b") ++ config._pastebinfile = tempfile.NamedTemporaryFile("w+b") + oldwrite = tr._tw.write + + def tee_write(s, **kwargs): From 4dd93ca99af4685e19daff7f41b7031190f0a527 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Thu, 23 Aug 2018 16:59:16 +0300 Subject: [PATCH 6/9] Testing pytest --- test/test_packaging.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 test/test_packaging.py diff --git a/test/test_packaging.py b/test/test_packaging.py new file mode 100644 index 000000000..5de6debe2 --- /dev/null +++ b/test/test_packaging.py @@ -0,0 +1,11 @@ +def test_pytest(selenium): + selenium.load_package('pytest') + selenium.load_package('pandas') + selenium.run('from pathlib import Path') + selenium.run('import os') + selenium.run('import pandas as pd') + selenium.run('base_dir = Path(pd.__file__).parent / "tests" / "frame"') + selenium.run('print(base_dir)') + selenium.run('print(list(sorted(os.listdir(base_dir))))') + selenium.run("import pytest;" + "pytest.main([base_dir / 'test_sorting.py'])") From 4404274eefad3daf6c2d54e0fc3e8bed48ae8185 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Thu, 23 Aug 2018 17:48:57 +0300 Subject: [PATCH 7/9] Package nose --- packages/nose/meta.yaml | 15 +++++++++ .../patches/use-named-temporary-file.patch | 33 ++++++++++++++++++- test/test_packaging.py | 11 ------- test/test_testing.py | 14 ++++++++ 4 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 packages/nose/meta.yaml delete mode 100644 test/test_packaging.py create mode 100644 test/test_testing.py diff --git a/packages/nose/meta.yaml b/packages/nose/meta.yaml new file mode 100644 index 000000000..508a28b96 --- /dev/null +++ b/packages/nose/meta.yaml @@ -0,0 +1,15 @@ +package: + name: nose + version: 1.3.7 + +source: + url: https://pypi.io/packages/source/n/nose/nose-1.3.7.tar.gz + sha256: f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98 + +requirements: + run: + - setuptools + +test: + imports: + - nose diff --git a/packages/pytest/patches/use-named-temporary-file.patch b/packages/pytest/patches/use-named-temporary-file.patch index 27858560f..9aceeec68 100644 --- a/packages/pytest/patches/use-named-temporary-file.patch +++ b/packages/pytest/patches/use-named-temporary-file.patch @@ -1,5 +1,5 @@ diff --git a/src/_pytest/capture.py b/src/_pytest/capture.py -index faa767a8..23298939 100644 +index faa767a8..551484b0 100644 --- a/src/_pytest/capture.py +++ b/src/_pytest/capture.py @@ -10,7 +10,7 @@ import sys @@ -11,6 +11,37 @@ index faa767a8..23298939 100644 import six import pytest +@@ -482,7 +482,7 @@ class FDCaptureBinary(object): + os.fstat(self.targetfd_save) + except (AttributeError, OSError): + raise ValueError("saved filedescriptor not valid anymore") +- os.dup2(self.tmpfile_fd, self.targetfd) ++ self.tmpfile_fd = os.dup(self.targetfd) + self.syscapture.start() + + def snap(self): +@@ -496,18 +496,18 @@ class FDCaptureBinary(object): + """ stop capturing, restore streams, return original capture file, + seeked to position zero. """ + targetfd_save = self.__dict__.pop("targetfd_save") +- os.dup2(targetfd_save, self.targetfd) ++ targetfd_save = os.dup(self.targetfd) + os.close(targetfd_save) + self.syscapture.done() + _attempt_to_close_capture_file(self.tmpfile) + + def suspend(self): + self.syscapture.suspend() +- os.dup2(self.targetfd_save, self.targetfd) ++ self.targetfd_save = os.dup(self.targetfd) + + def resume(self): + self.syscapture.resume() +- os.dup2(self.tmpfile_fd, self.targetfd) ++ self.tmpfile_fd = os.dup(self.targetfd) + + def writeorg(self, data): + """ write to original file descriptor. """ diff --git a/src/_pytest/pastebin.py b/src/_pytest/pastebin.py index 6af202d1..9b192918 100644 --- a/src/_pytest/pastebin.py diff --git a/test/test_packaging.py b/test/test_packaging.py deleted file mode 100644 index 5de6debe2..000000000 --- a/test/test_packaging.py +++ /dev/null @@ -1,11 +0,0 @@ -def test_pytest(selenium): - selenium.load_package('pytest') - selenium.load_package('pandas') - selenium.run('from pathlib import Path') - selenium.run('import os') - selenium.run('import pandas as pd') - selenium.run('base_dir = Path(pd.__file__).parent / "tests" / "frame"') - selenium.run('print(base_dir)') - selenium.run('print(list(sorted(os.listdir(base_dir))))') - selenium.run("import pytest;" - "pytest.main([base_dir / 'test_sorting.py'])") diff --git a/test/test_testing.py b/test/test_testing.py new file mode 100644 index 000000000..a2f22b764 --- /dev/null +++ b/test/test_testing.py @@ -0,0 +1,14 @@ +def test_pytest(selenium): + selenium.load_package('pytest') + selenium.load_package('numpy') + selenium.load_package('nose') + selenium.run('from pathlib import Path') + selenium.run('import os') + selenium.run('import numpy') + selenium.run('base_dir = Path(numpy.__file__).parent / "core" / "tests"') + selenium.run('print(base_dir)') + selenium.run('print(list(sorted(os.listdir(base_dir))))') + selenium.run("import pytest;" + "pytest.main([base_dir / 'test_api.py'])") + logs = '\n'.join(selenium.logs) + assert 'INTERNALERROR' not in logs From 86497e981827e04cf1fa3a3d9492cb00a36a32b8 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Wed, 29 Aug 2018 20:44:10 +0200 Subject: [PATCH 8/9] Remove prints used for debugging --- test/test_testing.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/test_testing.py b/test/test_testing.py index a2f22b764..0808403f7 100644 --- a/test/test_testing.py +++ b/test/test_testing.py @@ -6,8 +6,6 @@ def test_pytest(selenium): selenium.run('import os') selenium.run('import numpy') selenium.run('base_dir = Path(numpy.__file__).parent / "core" / "tests"') - selenium.run('print(base_dir)') - selenium.run('print(list(sorted(os.listdir(base_dir))))') selenium.run("import pytest;" "pytest.main([base_dir / 'test_api.py'])") logs = '\n'.join(selenium.logs) From c9bc2f447320345d9349cc2f9418ef000734c048 Mon Sep 17 00:00:00 2001 From: Roman Yurchak Date: Thu, 30 Aug 2018 14:59:46 +0200 Subject: [PATCH 9/9] Remove os.dup2 calls altogether --- packages/pytest/meta.yaml | 2 +- ...file.patch => named-tmp-and-rm-dup2.patch} | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) rename packages/pytest/patches/{use-named-temporary-file.patch => named-tmp-and-rm-dup2.patch} (78%) diff --git a/packages/pytest/meta.yaml b/packages/pytest/meta.yaml index c60db6544..032fa4f65 100644 --- a/packages/pytest/meta.yaml +++ b/packages/pytest/meta.yaml @@ -7,7 +7,7 @@ source: md5: 8ca6124a3a80f9555c50f5c09056ea02 patches: - - patches/use-named-temporary-file.patch + - patches/named-tmp-and-rm-dup2.patch requirements: run: diff --git a/packages/pytest/patches/use-named-temporary-file.patch b/packages/pytest/patches/named-tmp-and-rm-dup2.patch similarity index 78% rename from packages/pytest/patches/use-named-temporary-file.patch rename to packages/pytest/patches/named-tmp-and-rm-dup2.patch index 9aceeec68..d9f3cf1ce 100644 --- a/packages/pytest/patches/use-named-temporary-file.patch +++ b/packages/pytest/patches/named-tmp-and-rm-dup2.patch @@ -1,5 +1,5 @@ diff --git a/src/_pytest/capture.py b/src/_pytest/capture.py -index faa767a8..551484b0 100644 +index faa767a8..518f5c8b 100644 --- a/src/_pytest/capture.py +++ b/src/_pytest/capture.py @@ -10,7 +10,7 @@ import sys @@ -11,34 +11,38 @@ index faa767a8..551484b0 100644 import six import pytest -@@ -482,7 +482,7 @@ class FDCaptureBinary(object): +@@ -471,7 +471,6 @@ class FDCaptureBinary(object): + else: + self.syscapture = NoCapture() + self.tmpfile = tmpfile +- self.tmpfile_fd = tmpfile.fileno() + + def __repr__(self): + return "" % (self.targetfd, self.targetfd_save) +@@ -482,7 +481,6 @@ class FDCaptureBinary(object): os.fstat(self.targetfd_save) except (AttributeError, OSError): raise ValueError("saved filedescriptor not valid anymore") - os.dup2(self.tmpfile_fd, self.targetfd) -+ self.tmpfile_fd = os.dup(self.targetfd) self.syscapture.start() def snap(self): -@@ -496,18 +496,18 @@ class FDCaptureBinary(object): +@@ -496,18 +494,14 @@ class FDCaptureBinary(object): """ stop capturing, restore streams, return original capture file, seeked to position zero. """ targetfd_save = self.__dict__.pop("targetfd_save") - os.dup2(targetfd_save, self.targetfd) -+ targetfd_save = os.dup(self.targetfd) - os.close(targetfd_save) +- os.close(targetfd_save) self.syscapture.done() _attempt_to_close_capture_file(self.tmpfile) def suspend(self): self.syscapture.suspend() - os.dup2(self.targetfd_save, self.targetfd) -+ self.targetfd_save = os.dup(self.targetfd) def resume(self): self.syscapture.resume() - os.dup2(self.tmpfile_fd, self.targetfd) -+ self.tmpfile_fd = os.dup(self.targetfd) def writeorg(self, data): """ write to original file descriptor. """