diff --git a/docs/source/conf.py b/docs/source/conf.py index 4e33931a..ec8294da 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -4,7 +4,6 @@ # import datetime - # -- Project information ----------------------------------------------------- # ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information # diff --git a/repo2docker/__main__.py b/repo2docker/__main__.py index 2ca17f17..cca1616c 100644 --- a/repo2docker/__main__.py +++ b/repo2docker/__main__.py @@ -1,14 +1,15 @@ import argparse -import sys -import os import logging +import os +import sys + +from . import __version__ from .app import Repo2Docker from .engine import BuildError, ImageLoadError -from . import __version__ from .utils import ( - validate_and_generate_port_mapping, - is_valid_docker_image_name, R2dState, + is_valid_docker_image_name, + validate_and_generate_port_mapping, ) diff --git a/repo2docker/app.py b/repo2docker/app.py index 5bee81b4..c62a77d6 100755 --- a/repo2docker/app.py +++ b/repo2docker/app.py @@ -7,24 +7,23 @@ Usage: python -m repo2docker https://github.com/you/your-repo """ +import getpass import json -import sys import logging import os -import entrypoints -import getpass import shutil +import sys import tempfile import time from urllib.parse import urlparse +import entrypoints import escapism from pythonjsonlogger import jsonlogger - -from traitlets import Any, Dict, Int, List, Unicode, Bool, default +from traitlets import Any, Bool, Dict, Int, List, Unicode, default from traitlets.config import Application -from . import __version__ +from . import __version__, contentproviders from .buildpacks import ( CondaBuildPack, DockerBuildPack, @@ -36,9 +35,8 @@ from .buildpacks import ( PythonBuildPack, RBuildPack, ) -from . import contentproviders from .engine import BuildError, ContainerEngineException, ImageLoadError -from .utils import ByteSpecification, chdir, R2dState +from .utils import ByteSpecification, R2dState, chdir class Repo2Docker(Application): diff --git a/repo2docker/buildpacks/__init__.py b/repo2docker/buildpacks/__init__.py index 10fe89a4..7568000b 100644 --- a/repo2docker/buildpacks/__init__.py +++ b/repo2docker/buildpacks/__init__.py @@ -1,10 +1,9 @@ -from .base import BuildPack, BaseImage -from .python import PythonBuildPack -from .pipfile import PipfileBuildPack +from .base import BaseImage, BuildPack from .conda import CondaBuildPack -from .julia import JuliaProjectTomlBuildPack -from .julia import JuliaRequireBuildPack from .docker import DockerBuildPack +from .julia import JuliaProjectTomlBuildPack, JuliaRequireBuildPack from .legacy import LegacyBinderDockerBuildPack -from .r import RBuildPack from .nix import NixBuildPack +from .pipfile import PipfileBuildPack +from .python import PythonBuildPack +from .r import RBuildPack diff --git a/repo2docker/buildpacks/base.py b/repo2docker/buildpacks/base.py index 0758afc6..e7c9b537 100644 --- a/repo2docker/buildpacks/base.py +++ b/repo2docker/buildpacks/base.py @@ -1,14 +1,15 @@ -import textwrap -import jinja2 -import tarfile +import hashlib import io +import logging import os import re -import logging import string import sys -import hashlib +import tarfile +import textwrap + import escapism +import jinja2 # Only use syntax features supported by Docker 17.09 TEMPLATE = r""" diff --git a/repo2docker/buildpacks/conda/__init__.py b/repo2docker/buildpacks/conda/__init__.py index 8c4426dc..99653177 100644 --- a/repo2docker/buildpacks/conda/__init__.py +++ b/repo2docker/buildpacks/conda/__init__.py @@ -5,9 +5,9 @@ from collections.abc import Mapping from ruamel.yaml import YAML -from ..base import BaseImage -from .._r_base import rstudio_base_scripts from ...utils import is_local_pip_requirement +from .._r_base import rstudio_base_scripts +from ..base import BaseImage # pattern for parsing conda dependency line PYTHON_REGEX = re.compile(r"python\s*=+\s*([\d\.]*)") diff --git a/repo2docker/buildpacks/conda/freeze.py b/repo2docker/buildpacks/conda/freeze.py index 84475457..7bdb444e 100755 --- a/repo2docker/buildpacks/conda/freeze.py +++ b/repo2docker/buildpacks/conda/freeze.py @@ -9,17 +9,16 @@ Usage: python freeze.py [3.8] """ -from argparse import ArgumentParser -from datetime import datetime import os import pathlib import shutil -from subprocess import check_call import sys +from argparse import ArgumentParser +from datetime import datetime +from subprocess import check_call from ruamel.yaml import YAML - HERE = pathlib.Path(os.path.dirname(os.path.abspath(__file__))) ENV_FILE = HERE / "environment.yml" diff --git a/repo2docker/buildpacks/docker.py b/repo2docker/buildpacks/docker.py index 6d8bd469..6979b830 100644 --- a/repo2docker/buildpacks/docker.py +++ b/repo2docker/buildpacks/docker.py @@ -1,7 +1,9 @@ """Generates a variety of Dockerfiles based on an input matrix """ import os + import docker + from .base import BuildPack diff --git a/repo2docker/buildpacks/julia/julia_project.py b/repo2docker/buildpacks/julia/julia_project.py index e6e191dc..d61e65d1 100644 --- a/repo2docker/buildpacks/julia/julia_project.py +++ b/repo2docker/buildpacks/julia/julia_project.py @@ -6,8 +6,8 @@ import requests import semver import toml -from ..python import PythonBuildPack from ...semver import find_semver_match +from ..python import PythonBuildPack class JuliaProjectTomlBuildPack(PythonBuildPack): diff --git a/repo2docker/buildpacks/julia/julia_require.py b/repo2docker/buildpacks/julia/julia_require.py index 075b928e..b2acbcff 100644 --- a/repo2docker/buildpacks/julia/julia_require.py +++ b/repo2docker/buildpacks/julia/julia_require.py @@ -2,8 +2,8 @@ import os -from ..python import PythonBuildPack from ...semver import parse_version as V +from ..python import PythonBuildPack class JuliaRequireBuildPack(PythonBuildPack): diff --git a/repo2docker/buildpacks/nix/__init__.py b/repo2docker/buildpacks/nix/__init__.py index 4947b92e..73dd81af 100644 --- a/repo2docker/buildpacks/nix/__init__.py +++ b/repo2docker/buildpacks/nix/__init__.py @@ -1,7 +1,7 @@ """BuildPack for nixpkgs environments""" import os -from ..base import BuildPack, BaseImage +from ..base import BaseImage, BuildPack class NixBuildPack(BaseImage): diff --git a/repo2docker/buildpacks/python/__init__.py b/repo2docker/buildpacks/python/__init__.py index bdcaa520..7aa22564 100644 --- a/repo2docker/buildpacks/python/__init__.py +++ b/repo2docker/buildpacks/python/__init__.py @@ -1,8 +1,8 @@ """Generates Dockerfiles based on an input matrix based on Python.""" import os -from ..conda import CondaBuildPack from ...utils import is_local_pip_requirement, open_guess_encoding +from ..conda import CondaBuildPack class PythonBuildPack(CondaBuildPack): diff --git a/repo2docker/buildpacks/r.py b/repo2docker/buildpacks/r.py index 3156913f..200f472f 100644 --- a/repo2docker/buildpacks/r.py +++ b/repo2docker/buildpacks/r.py @@ -1,12 +1,12 @@ -import re -import os import datetime +import os +import re + import requests - from ..semver import parse_version as V -from .python import PythonBuildPack from ._r_base import rstudio_base_scripts +from .python import PythonBuildPack class RBuildPack(PythonBuildPack): diff --git a/repo2docker/contentproviders/__init__.py b/repo2docker/contentproviders/__init__.py index 6398c233..5c40476d 100755 --- a/repo2docker/contentproviders/__init__.py +++ b/repo2docker/contentproviders/__init__.py @@ -1,8 +1,8 @@ -from .git import Git from .base import Local -from .zenodo import Zenodo -from .figshare import Figshare from .dataverse import Dataverse +from .figshare import Figshare +from .git import Git from .hydroshare import Hydroshare from .mercurial import Mercurial from .swhid import Swhid +from .zenodo import Zenodo diff --git a/repo2docker/contentproviders/dataverse.py b/repo2docker/contentproviders/dataverse.py index e6e7da38..1998f6be 100644 --- a/repo2docker/contentproviders/dataverse.py +++ b/repo2docker/contentproviders/dataverse.py @@ -1,11 +1,10 @@ -import os import json +import os import shutil +from urllib.parse import parse_qs, urlparse, urlunparse -from urllib.parse import urlparse, urlunparse, parse_qs - -from .doi import DoiProvider from ..utils import copytree, deep_get +from .doi import DoiProvider class Dataverse(DoiProvider): diff --git a/repo2docker/contentproviders/doi.py b/repo2docker/contentproviders/doi.py index 01d048ec..03fa0171 100644 --- a/repo2docker/contentproviders/doi.py +++ b/repo2docker/contentproviders/doi.py @@ -1,18 +1,15 @@ -import os import json -import shutil import logging - -from os import makedirs -from os import path -from requests import Session, HTTPError - +import os +import shutil +from os import makedirs, path from zipfile import ZipFile, is_zipfile -from .base import ContentProvider -from ..utils import copytree, deep_get -from ..utils import normalize_doi, is_doi +from requests import HTTPError, Session + from .. import __version__ +from ..utils import copytree, deep_get, is_doi, normalize_doi +from .base import ContentProvider class DoiProvider(ContentProvider): diff --git a/repo2docker/contentproviders/figshare.py b/repo2docker/contentproviders/figshare.py index 0735e441..6c7b26c8 100644 --- a/repo2docker/contentproviders/figshare.py +++ b/repo2docker/contentproviders/figshare.py @@ -1,16 +1,14 @@ +import json import os import re -import json import shutil - -from os import makedirs -from os import path -from urllib.request import Request +from os import makedirs, path from urllib.error import HTTPError +from urllib.request import Request from zipfile import is_zipfile -from .doi import DoiProvider from ..utils import copytree, deep_get +from .doi import DoiProvider class Figshare(DoiProvider): diff --git a/repo2docker/contentproviders/git.py b/repo2docker/contentproviders/git.py index a3d330e6..f35e9a88 100644 --- a/repo2docker/contentproviders/git.py +++ b/repo2docker/contentproviders/git.py @@ -1,7 +1,7 @@ import subprocess +from ..utils import R2dState, check_ref, execute_cmd from .base import ContentProvider, ContentProviderException -from ..utils import execute_cmd, check_ref, R2dState class Git(ContentProvider): diff --git a/repo2docker/contentproviders/hydroshare.py b/repo2docker/contentproviders/hydroshare.py index 886a8f81..4104d97a 100755 --- a/repo2docker/contentproviders/hydroshare.py +++ b/repo2docker/contentproviders/hydroshare.py @@ -1,14 +1,13 @@ -import zipfile +import json import os import shutil import time -import json -from datetime import datetime, timezone, timedelta - +import zipfile +from datetime import datetime, timedelta, timezone from urllib.request import urlretrieve -from .doi import DoiProvider from .base import ContentProviderException +from .doi import DoiProvider class Hydroshare(DoiProvider): diff --git a/repo2docker/contentproviders/mercurial.py b/repo2docker/contentproviders/mercurial.py index 821f55f3..e427cc02 100644 --- a/repo2docker/contentproviders/mercurial.py +++ b/repo2docker/contentproviders/mercurial.py @@ -1,7 +1,7 @@ import subprocess +from ..utils import R2dState, execute_cmd from .base import ContentProvider, ContentProviderException -from ..utils import execute_cmd, R2dState args_enabling_topic = ["--config", "extensions.topic="] diff --git a/repo2docker/contentproviders/swhid.py b/repo2docker/contentproviders/swhid.py index 2a964e70..18dc78a9 100644 --- a/repo2docker/contentproviders/swhid.py +++ b/repo2docker/contentproviders/swhid.py @@ -1,17 +1,16 @@ import io import os +import re import shutil import tarfile import time -import re - from os import path import requests -from .base import ContentProvider -from ..utils import copytree from .. import __version__ +from ..utils import copytree +from .base import ContentProvider def parse_swhid(swhid): diff --git a/repo2docker/contentproviders/zenodo.py b/repo2docker/contentproviders/zenodo.py index 0a8d9108..5d02f723 100644 --- a/repo2docker/contentproviders/zenodo.py +++ b/repo2docker/contentproviders/zenodo.py @@ -1,14 +1,12 @@ -import os import json +import os import shutil - -from os import makedirs -from os import path -from urllib.request import Request +from os import makedirs, path from urllib.error import HTTPError +from urllib.request import Request -from .doi import DoiProvider from ..utils import copytree, deep_get +from .doi import DoiProvider class Zenodo(DoiProvider): diff --git a/repo2docker/docker.py b/repo2docker/docker.py index 686a70db..267c16cf 100644 --- a/repo2docker/docker.py +++ b/repo2docker/docker.py @@ -2,9 +2,10 @@ Docker container engine for repo2docker """ -import docker -from traitlets import Dict from iso8601 import parse_date +from traitlets import Dict + +import docker from .engine import Container, ContainerEngine, ContainerEngineException, Image diff --git a/repo2docker/engine.py b/repo2docker/engine.py index 459b2be8..73276a3a 100644 --- a/repo2docker/engine.py +++ b/repo2docker/engine.py @@ -3,8 +3,8 @@ Interface for a repo2docker container engine """ from abc import ABC, abstractmethod -from traitlets.config import LoggingConfigurable +from traitlets.config import LoggingConfigurable # Based on https://docker-py.readthedocs.io/en/4.2.0/containers.html diff --git a/repo2docker/utils.py b/repo2docker/utils.py index 852f21e2..cd345f4a 100644 --- a/repo2docker/utils.py +++ b/repo2docker/utils.py @@ -1,13 +1,12 @@ -from contextlib import contextmanager -from enum import Enum -from functools import partial import os import re import subprocess +from contextlib import contextmanager +from enum import Enum +from functools import partial +from shutil import copy2, copystat + import chardet - -from shutil import copystat, copy2 - from traitlets import Integer, TraitError diff --git a/setup.py b/setup.py index e4eb16a0..58abff7c 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,8 @@ -from distutils.cmd import Command -from setuptools import setup, find_packages import sys +from distutils.cmd import Command + +from setuptools import find_packages, setup + import versioneer if sys.version_info[0] < 3: @@ -23,8 +25,8 @@ class GenerateDataverseInstallationsFileCommand(Command): pass def run(self): - from urllib.request import urlopen import json + from urllib.request import urlopen resp = urlopen(self.url, timeout=5) resp_body = resp.read() diff --git a/tests/conda/r3.6-target-repo-dir-flag/verify.py b/tests/conda/r3.6-target-repo-dir-flag/verify.py index d284c28a..70127836 100755 --- a/tests/conda/r3.6-target-repo-dir-flag/verify.py +++ b/tests/conda/r3.6-target-repo-dir-flag/verify.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -import sys import os +import sys from glob import glob # conda should still be in /srv/conda diff --git a/tests/conftest.py b/tests/conftest.py index e2914801..13e62b40 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -19,14 +19,13 @@ Test lifecycle: import os import pipes import shlex -import requests import subprocess import time from tempfile import TemporaryDirectory - import escapism import pytest +import requests import yaml from repo2docker.__main__ import make_r2d diff --git a/tests/memlimit/dockerfile/postBuild b/tests/memlimit/dockerfile/postBuild index 4fe5360f..1d781924 100755 --- a/tests/memlimit/dockerfile/postBuild +++ b/tests/memlimit/dockerfile/postBuild @@ -10,8 +10,8 @@ NOTE: This file has to be duplicated & present in all the following locations: - tests/memlimit/dockerfile/postBuild See https://github.com/jupyterhub/repo2docker/issues/160 for reason """ -from ctypes import cdll, c_void_p, memset import os +from ctypes import c_void_p, cdll, memset libc = cdll.LoadLibrary("libc.so.6") libc.malloc.restype = c_void_p diff --git a/tests/memlimit/non-dockerfile/postBuild b/tests/memlimit/non-dockerfile/postBuild index 4fe5360f..1d781924 100755 --- a/tests/memlimit/non-dockerfile/postBuild +++ b/tests/memlimit/non-dockerfile/postBuild @@ -10,8 +10,8 @@ NOTE: This file has to be duplicated & present in all the following locations: - tests/memlimit/dockerfile/postBuild See https://github.com/jupyterhub/repo2docker/issues/160 for reason """ -from ctypes import cdll, c_void_p, memset import os +from ctypes import c_void_p, cdll, memset libc = cdll.LoadLibrary("libc.so.6") libc.malloc.restype = c_void_p diff --git a/tests/pipfile/py2-with-server-and-kernel-req/verify b/tests/pipfile/py2-with-server-and-kernel-req/verify index 7246be61..5ff8a889 100755 --- a/tests/pipfile/py2-with-server-and-kernel-req/verify +++ b/tests/pipfile/py2-with-server-and-kernel-req/verify @@ -2,7 +2,6 @@ import os import sys - # Verify - kernel's Python: use Python 2 print(sys.version_info) assert sys.version_info[:2] == (2, 7) diff --git a/tests/pipfile/setup-py-explicit-in-binder-dir/setup.py b/tests/pipfile/setup-py-explicit-in-binder-dir/setup.py index c67a722a..ca077f41 100644 --- a/tests/pipfile/setup-py-explicit-in-binder-dir/setup.py +++ b/tests/pipfile/setup-py-explicit-in-binder-dir/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup, find_packages +from setuptools import find_packages, setup setup( name="Dummy", diff --git a/tests/pipfile/setup-py-explicit-in-binder-dir/verify b/tests/pipfile/setup-py-explicit-in-binder-dir/verify index 4c6eaf1e..80f73003 100755 --- a/tests/pipfile/setup-py-explicit-in-binder-dir/verify +++ b/tests/pipfile/setup-py-explicit-in-binder-dir/verify @@ -1,6 +1,6 @@ #!/usr/bin/env python -import there import dummy # This package should be available, as it was a dependency for dummy import pypi_pkg_test +import there diff --git a/tests/pipfile/setup-py-explicit/setup.py b/tests/pipfile/setup-py-explicit/setup.py index c67a722a..ca077f41 100644 --- a/tests/pipfile/setup-py-explicit/setup.py +++ b/tests/pipfile/setup-py-explicit/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup, find_packages +from setuptools import find_packages, setup setup( name="Dummy", diff --git a/tests/pipfile/setup-py-explicit/verify b/tests/pipfile/setup-py-explicit/verify index 4c6eaf1e..80f73003 100755 --- a/tests/pipfile/setup-py-explicit/verify +++ b/tests/pipfile/setup-py-explicit/verify @@ -1,6 +1,6 @@ #!/usr/bin/env python -import there import dummy # This package should be available, as it was a dependency for dummy import pypi_pkg_test +import there diff --git a/tests/pipfile/setup-py-implicit/setup.py b/tests/pipfile/setup-py-implicit/setup.py index c67a722a..ca077f41 100644 --- a/tests/pipfile/setup-py-implicit/setup.py +++ b/tests/pipfile/setup-py-implicit/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup, find_packages +from setuptools import find_packages, setup setup( name="Dummy", diff --git a/tests/unit/contentproviders/test_dataverse.py b/tests/unit/contentproviders/test_dataverse.py index 63a58471..309a22d4 100644 --- a/tests/unit/contentproviders/test_dataverse.py +++ b/tests/unit/contentproviders/test_dataverse.py @@ -1,16 +1,15 @@ import json import os -import pytest import re - from io import BytesIO from tempfile import TemporaryDirectory from unittest.mock import patch -from urllib.request import urlopen, Request +from urllib.request import Request, urlopen + +import pytest from repo2docker.contentproviders import Dataverse - test_dv = Dataverse() harvard_dv = next(_ for _ in test_dv.hosts if _["name"] == "Harvard Dataverse") cimmyt_dv = next(_ for _ in test_dv.hosts if _["name"] == "CIMMYT Research Data") diff --git a/tests/unit/contentproviders/test_doi.py b/tests/unit/contentproviders/test_doi.py index ed2dcb73..dab3d7fc 100644 --- a/tests/unit/contentproviders/test_doi.py +++ b/tests/unit/contentproviders/test_doi.py @@ -1,17 +1,17 @@ import json +import logging import os import re -import urllib -import pytest import tempfile -import logging - -from unittest.mock import patch, MagicMock, mock_open +import urllib +from unittest.mock import MagicMock, mock_open, patch from zipfile import ZipFile -from repo2docker.contentproviders.doi import DoiProvider -from repo2docker.contentproviders.base import ContentProviderException +import pytest + from repo2docker import __version__ +from repo2docker.contentproviders.base import ContentProviderException +from repo2docker.contentproviders.doi import DoiProvider def test_content_id(): diff --git a/tests/unit/contentproviders/test_figshare.py b/tests/unit/contentproviders/test_figshare.py index 3de67e98..b4f42de3 100644 --- a/tests/unit/contentproviders/test_figshare.py +++ b/tests/unit/contentproviders/test_figshare.py @@ -1,18 +1,17 @@ import json import os import re -import pytest - from contextlib import contextmanager from io import BytesIO -from tempfile import TemporaryDirectory, NamedTemporaryFile +from tempfile import NamedTemporaryFile, TemporaryDirectory from unittest.mock import patch -from urllib.request import urlopen, Request +from urllib.request import Request, urlopen from zipfile import ZipFile -from repo2docker.contentproviders import Figshare -from repo2docker.__main__ import make_r2d +import pytest +from repo2docker.__main__ import make_r2d +from repo2docker.contentproviders import Figshare test_content_ids = [ ("https://figshare.com/articles/title/9782777", "9782777.v1"), diff --git a/tests/unit/contentproviders/test_git.py b/tests/unit/contentproviders/test_git.py index 65779bf6..fd63f968 100644 --- a/tests/unit/contentproviders/test_git.py +++ b/tests/unit/contentproviders/test_git.py @@ -1,7 +1,9 @@ import os -import pytest import subprocess from tempfile import TemporaryDirectory + +import pytest + from repo2docker.contentproviders import Git diff --git a/tests/unit/contentproviders/test_hydroshare.py b/tests/unit/contentproviders/test_hydroshare.py index b0211c52..cec541f6 100755 --- a/tests/unit/contentproviders/test_hydroshare.py +++ b/tests/unit/contentproviders/test_hydroshare.py @@ -1,16 +1,15 @@ import os -import pytest - +import re from contextlib import contextmanager -from tempfile import TemporaryDirectory, NamedTemporaryFile +from tempfile import NamedTemporaryFile, TemporaryDirectory from unittest.mock import patch from zipfile import ZipFile -import re + +import pytest from repo2docker.contentproviders import Hydroshare from repo2docker.contentproviders.base import ContentProviderException - doi_responses = { "https://doi.org/10.4211/hs.b8f6eae9d89241cf8b5904033460af61": ( "https://www.hydroshare.org/resource/b8f6eae9d89241cf8b5904033460af61" diff --git a/tests/unit/contentproviders/test_local.py b/tests/unit/contentproviders/test_local.py index fcb2a6a8..ef288aef 100644 --- a/tests/unit/contentproviders/test_local.py +++ b/tests/unit/contentproviders/test_local.py @@ -1,5 +1,5 @@ import os -from tempfile import TemporaryDirectory, NamedTemporaryFile +from tempfile import NamedTemporaryFile, TemporaryDirectory from repo2docker.contentproviders import Local diff --git a/tests/unit/contentproviders/test_mercurial.py b/tests/unit/contentproviders/test_mercurial.py index 4619ef86..0acb91d1 100644 --- a/tests/unit/contentproviders/test_mercurial.py +++ b/tests/unit/contentproviders/test_mercurial.py @@ -8,7 +8,6 @@ import pytest from repo2docker.contentproviders import Mercurial from repo2docker.contentproviders.mercurial import args_enabling_topic - SKIP_HG = os.environ.get("REPO2DOCKER_SKIP_HG_TESTS", "").lower() not in { "", "0", diff --git a/tests/unit/contentproviders/test_swhid.py b/tests/unit/contentproviders/test_swhid.py index 48c1fa31..56fee1df 100644 --- a/tests/unit/contentproviders/test_swhid.py +++ b/tests/unit/contentproviders/test_swhid.py @@ -1,22 +1,22 @@ -import json -import os import io -import tarfile -import shutil -import re -import urllib -import pytest -import tempfile +import json import logging -import requests_mock - +import os +import re +import shutil +import tarfile +import tempfile +import urllib from os import makedirs from os.path import join -from unittest.mock import patch, MagicMock, mock_open +from unittest.mock import MagicMock, mock_open, patch from zipfile import ZipFile -from repo2docker.contentproviders.swhid import Swhid, parse_swhid +import pytest +import requests_mock + from repo2docker.contentproviders.base import ContentProviderException +from repo2docker.contentproviders.swhid import Swhid, parse_swhid # this is a slightly stripped down copy of swh.model.cli.swhid_of_dir(). diff --git a/tests/unit/contentproviders/test_zenodo.py b/tests/unit/contentproviders/test_zenodo.py index 88e143c6..0755163d 100644 --- a/tests/unit/contentproviders/test_zenodo.py +++ b/tests/unit/contentproviders/test_zenodo.py @@ -1,15 +1,15 @@ import json import os -import pytest import re - from contextlib import contextmanager from io import BytesIO -from tempfile import TemporaryDirectory, NamedTemporaryFile +from tempfile import NamedTemporaryFile, TemporaryDirectory from unittest.mock import patch -from urllib.request import urlopen, Request +from urllib.request import Request, urlopen from zipfile import ZipFile +import pytest + from repo2docker.contentproviders import Zenodo doi_responses = { diff --git a/tests/unit/test_app.py b/tests/unit/test_app.py index 25b39cdb..d37103e6 100644 --- a/tests/unit/test_app.py +++ b/tests/unit/test_app.py @@ -1,13 +1,13 @@ import errno -import pytest from tempfile import TemporaryDirectory from unittest.mock import patch -import docker import escapism +import pytest -from repo2docker.app import Repo2Docker +import docker from repo2docker.__main__ import make_r2d +from repo2docker.app import Repo2Docker from repo2docker.utils import chdir diff --git a/tests/unit/test_args.py b/tests/unit/test_args.py index 404ee796..975604ea 100644 --- a/tests/unit/test_args.py +++ b/tests/unit/test_args.py @@ -2,9 +2,11 @@ Test argument parsing and r2d construction """ import os + import pytest -from repo2docker.__main__ import make_r2d + from repo2docker import __version__ +from repo2docker.__main__ import make_r2d def test_version(capsys): diff --git a/tests/unit/test_argumentvalidation.py b/tests/unit/test_argumentvalidation.py index d2475b89..33e7d69a 100644 --- a/tests/unit/test_argumentvalidation.py +++ b/tests/unit/test_argumentvalidation.py @@ -7,7 +7,6 @@ import subprocess import pytest - here = os.path.dirname(os.path.abspath(__file__)) test_dir = os.path.dirname(here) docker_simple = os.path.join(test_dir, "dockerfile", "simple") diff --git a/tests/unit/test_buildpack.py b/tests/unit/test_buildpack.py index eda7bb92..6a8147e3 100644 --- a/tests/unit/test_buildpack.py +++ b/tests/unit/test_buildpack.py @@ -1,7 +1,8 @@ from os.path import join as pjoin +from tempfile import TemporaryDirectory import pytest -from tempfile import TemporaryDirectory + from repo2docker.buildpacks import LegacyBinderDockerBuildPack, PythonBuildPack from repo2docker.utils import chdir diff --git a/tests/unit/test_cache_from.py b/tests/unit/test_cache_from.py index 77797b12..fd186dbc 100644 --- a/tests/unit/test_cache_from.py +++ b/tests/unit/test_cache_from.py @@ -5,7 +5,6 @@ Test that --cache-from is passed in to docker API properly. from unittest.mock import MagicMock import docker - from repo2docker.buildpacks import ( BaseImage, DockerBuildPack, diff --git a/tests/unit/test_clone_depth.py b/tests/unit/test_clone_depth.py index 7989b117..55102eac 100644 --- a/tests/unit/test_clone_depth.py +++ b/tests/unit/test_clone_depth.py @@ -8,12 +8,10 @@ and that is the only thing that is tested. """ import os import subprocess - from tempfile import TemporaryDirectory from repo2docker.app import Repo2Docker - URL = "https://github.com/binderhub-ci-repos/repo2docker-ci-clone-depth" diff --git a/tests/unit/test_connect_url.py b/tests/unit/test_connect_url.py index 7438b8aa..dbc0c260 100644 --- a/tests/unit/test_connect_url.py +++ b/tests/unit/test_connect_url.py @@ -1,10 +1,11 @@ """ Test if the explict hostname is supplied correctly to the container """ -import requests import time -from repo2docker.app import Repo2Docker +import requests + +from repo2docker.app import Repo2Docker # Minimal Dockerfile to make build as fast as possible DOCKER_FILE = """ diff --git a/tests/unit/test_editable.py b/tests/unit/test_editable.py index 6947b7d2..de4d6261 100644 --- a/tests/unit/test_editable.py +++ b/tests/unit/test_editable.py @@ -5,7 +5,6 @@ import time from repo2docker.__main__ import make_r2d - DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "dockerfile", "editable") diff --git a/tests/unit/test_env_yml.py b/tests/unit/test_env_yml.py index c744ccf3..dff14228 100644 --- a/tests/unit/test_env_yml.py +++ b/tests/unit/test_env_yml.py @@ -3,7 +3,9 @@ Test if the environment.yml is empty or it constains other data structure than a """ import os import sys + import pytest + from repo2docker import buildpacks diff --git a/tests/unit/test_external_scripts.py b/tests/unit/test_external_scripts.py index d03debe5..278707c8 100644 --- a/tests/unit/test_external_scripts.py +++ b/tests/unit/test_external_scripts.py @@ -1,5 +1,6 @@ """Test if assemble scripts from outside of r2d repo are accepted.""" import time + from repo2docker.app import Repo2Docker from repo2docker.buildpacks import PythonBuildPack diff --git a/tests/unit/test_freeze.py b/tests/unit/test_freeze.py index 66b0c3bb..ddcd29f3 100644 --- a/tests/unit/test_freeze.py +++ b/tests/unit/test_freeze.py @@ -2,12 +2,11 @@ import os from tempfile import TemporaryDirectory from unittest.mock import patch +import pytest from ruamel.yaml import YAML from repo2docker.buildpacks.conda.freeze import set_python -import pytest - V = "3.7" yaml = YAML(typ="rt") diff --git a/tests/unit/test_labels.py b/tests/unit/test_labels.py index c13cff4b..5520de4d 100644 --- a/tests/unit/test_labels.py +++ b/tests/unit/test_labels.py @@ -1,12 +1,13 @@ """ Test if labels are supplied correctly to the container """ -from repo2docker.app import Repo2Docker -from repo2docker.buildpacks import BuildPack -from repo2docker import __version__ -import pytest from unittest.mock import Mock +import pytest + +from repo2docker import __version__ +from repo2docker.app import Repo2Docker +from repo2docker.buildpacks import BuildPack URL = "https://github.com/binderhub-ci-repos/repo2docker-ci-clone-depth" diff --git a/tests/unit/test_memlimit.py b/tests/unit/test_memlimit.py index 1e708d4f..ee2f2b35 100644 --- a/tests/unit/test_memlimit.py +++ b/tests/unit/test_memlimit.py @@ -3,16 +3,13 @@ Test that build time memory limits are enforced """ import os - from unittest.mock import MagicMock -import docker - import pytest +import docker from repo2docker.buildpacks import BaseImage, DockerBuildPack - basedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) diff --git a/tests/unit/test_ports.py b/tests/unit/test_ports.py index 90148ba4..aaebcdab 100644 --- a/tests/unit/test_ports.py +++ b/tests/unit/test_ports.py @@ -2,18 +2,18 @@ Test Port mappings work on running non-jupyter workflows """ -import requests -import time import os -import tempfile import random +import tempfile +import time from getpass import getuser -import docker import pytest +import requests -from repo2docker.app import Repo2Docker +import docker from repo2docker.__main__ import make_r2d +from repo2docker.app import Repo2Docker def read_port_mapping_response( diff --git a/tests/unit/test_r.py b/tests/unit/test_r.py index 3d141cfc..a5d7db7c 100644 --- a/tests/unit/test_r.py +++ b/tests/unit/test_r.py @@ -1,8 +1,8 @@ from datetime import date +from unittest.mock import patch import pytest from requests.models import Response -from unittest.mock import patch from repo2docker import buildpacks diff --git a/tests/unit/test_semver.py b/tests/unit/test_semver.py index bbbf8ca5..b07272be 100644 --- a/tests/unit/test_semver.py +++ b/tests/unit/test_semver.py @@ -1,5 +1,6 @@ import pytest from semver import VersionInfo + from repo2docker import semver diff --git a/tests/unit/test_subdir.py b/tests/unit/test_subdir.py index 4b0cd47b..4e700731 100644 --- a/tests/unit/test_subdir.py +++ b/tests/unit/test_subdir.py @@ -4,8 +4,8 @@ Test if the subdirectory is correctly navigated to import os import escapism - import pytest + from repo2docker.app import Repo2Docker TEST_REPO = "https://github.com/binderhub-ci-repos/repo2docker-subdir-support" diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 28401e33..cec3dc8c 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -1,13 +1,15 @@ """ Tests for repo2docker/utils.py """ -import traitlets import os -from repo2docker import utils -import pytest import subprocess import tempfile +import pytest +import traitlets + +from repo2docker import utils + def test_capture_cmd_no_capture_success(): # This should succeed