diff --git a/CHANGELOG.md b/CHANGELOG.md index 4722677..e466769 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Note: Breaking changes between versions are indicated by "💥". ## Unreleased +- [Bugfix] Fix dependency error during `pip install tutor` due to urllib3 incompatibility - [Bugfix] Fix user ID checking under Windows. - [Bugfix] Fix template rendering for Windows users. - [Improvement] Switch to `bcrypt` for htpasswd password generation, for better portability on Windows. diff --git a/requirements/base.in b/requirements/base.in index 2e841d8..63afad5 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -5,3 +5,6 @@ pycryptodome jinja2>=2.9 kubernetes pyyaml>=4.2b1 + +# Installing urllib3==1.26.0 causes compatibility errors with requests==2.24.0 +urllib3<1.26.0 \ No newline at end of file diff --git a/requirements/base.txt b/requirements/base.txt index 0d7aa5d..452c9d0 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -6,11 +6,11 @@ # appdirs==1.4.4 # via -r requirements/base.in cachetools==4.1.1 # via google-auth -certifi==2020.6.20 # via kubernetes, requests +certifi==2020.11.8 # via kubernetes, requests chardet==3.0.4 # via requests click-repl==0.1.6 # via -r requirements/base.in click==7.1.2 # via -r requirements/base.in, click-repl -google-auth==1.22.1 # via kubernetes +google-auth==1.23.0 # via kubernetes idna==2.10 # via requests jinja2==2.11.2 # via -r requirements/base.in kubernetes==12.0.0 # via -r requirements/base.in @@ -19,14 +19,14 @@ oauthlib==3.1.0 # via requests-oauthlib prompt-toolkit==3.0.8 # via click-repl pyasn1-modules==0.2.8 # via google-auth pyasn1==0.4.8 # via pyasn1-modules, rsa -pycryptodome==3.9.8 # via -r requirements/base.in +pycryptodome==3.9.9 # via -r requirements/base.in python-dateutil==2.8.1 # via kubernetes pyyaml==5.3.1 # via -r requirements/base.in, kubernetes requests-oauthlib==1.3.0 # via kubernetes requests==2.24.0 # via kubernetes, requests-oauthlib rsa==4.6 # via google-auth six==1.15.0 # via click-repl, google-auth, kubernetes, python-dateutil, websocket-client -urllib3==1.25.11 # via kubernetes, requests +urllib3==1.25.11 # via -r requirements/base.in, kubernetes, requests wcwidth==0.2.5 # via prompt-toolkit websocket-client==0.57.0 # via kubernetes diff --git a/requirements/dev.txt b/requirements/dev.txt index b74ac9a..1f91335 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -10,21 +10,21 @@ astroid==2.4.2 # via pylint black==20.8b1 # via -r requirements/dev.in bleach==3.2.1 # via readme-renderer cachetools==4.1.1 # via -r requirements/base.txt, google-auth -certifi==2020.6.20 # via -r requirements/base.txt, kubernetes, requests +certifi==2020.11.8 # via -r requirements/base.txt, kubernetes, requests cffi==1.14.3 # via cryptography chardet==3.0.4 # via -r requirements/base.txt, requests click-repl==0.1.6 # via -r requirements/base.txt click==7.1.2 # via -r requirements/base.txt, black, click-repl, pip-tools colorama==0.4.4 # via twine -cryptography==3.2 # via secretstorage +cryptography==3.2.1 # via secretstorage docutils==0.16 # via readme-renderer -google-auth==1.22.1 # via -r requirements/base.txt, kubernetes +google-auth==1.23.0 # via -r requirements/base.txt, kubernetes idna==2.10 # via -r requirements/base.txt, requests importlib-metadata==2.0.0 # via keyring, twine isort==5.6.4 # via pylint -jeepney==0.4.3 # via keyring, secretstorage +jeepney==0.5.0 # via keyring, secretstorage jinja2==2.11.2 # via -r requirements/base.txt -keyring==21.4.0 # via twine +keyring==21.5.0 # via twine kubernetes==12.0.0 # via -r requirements/base.txt lazy-object-proxy==1.4.3 # via astroid markupsafe==1.1.1 # via -r requirements/base.txt, jinja2 @@ -32,31 +32,31 @@ mccabe==0.6.1 # via pylint mypy-extensions==0.4.3 # via black oauthlib==3.1.0 # via -r requirements/base.txt, requests-oauthlib packaging==20.4 # via bleach -pathspec==0.8.0 # via black +pathspec==0.8.1 # via black pip-tools==5.3.1 # via -r requirements/dev.in pkginfo==1.6.1 # via twine prompt-toolkit==3.0.8 # via -r requirements/base.txt, click-repl pyasn1-modules==0.2.8 # via -r requirements/base.txt, google-auth pyasn1==0.4.8 # via -r requirements/base.txt, pyasn1-modules, rsa pycparser==2.20 # via cffi -pycryptodome==3.9.8 # via -r requirements/base.txt +pycryptodome==3.9.9 # via -r requirements/base.txt pygments==2.7.2 # via readme-renderer -pyinstaller-hooks-contrib==2020.9 # via pyinstaller +pyinstaller-hooks-contrib==2020.10 # via pyinstaller pyinstaller==4.0 # via -r requirements/dev.in pylint==2.6.0 # via -r requirements/dev.in pyparsing==2.4.7 # via packaging python-dateutil==2.8.1 # via -r requirements/base.txt, kubernetes pyyaml==5.3.1 # via -r requirements/base.txt, kubernetes readme-renderer==28.0 # via twine -regex==2020.10.23 # via black +regex==2020.10.28 # via black requests-oauthlib==1.3.0 # via -r requirements/base.txt, kubernetes requests-toolbelt==0.9.1 # via twine requests==2.24.0 # via -r requirements/base.txt, kubernetes, requests-oauthlib, requests-toolbelt, twine rfc3986==1.4.0 # via twine rsa==4.6 # via -r requirements/base.txt, google-auth -secretstorage==3.1.2 # via keyring +secretstorage==3.2.0 # via keyring six==1.15.0 # via -r requirements/base.txt, astroid, bleach, click-repl, cryptography, google-auth, kubernetes, packaging, pip-tools, python-dateutil, readme-renderer, websocket-client -toml==0.10.1 # via black, pylint +toml==0.10.2 # via black, pylint tqdm==4.51.0 # via twine twine==3.2.0 # via -r requirements/dev.in typed-ast==1.4.1 # via astroid, black diff --git a/requirements/docs.txt b/requirements/docs.txt index 82d20a6..2bbcd12 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -8,12 +8,12 @@ alabaster==0.7.12 # via sphinx appdirs==1.4.4 # via -r requirements/base.txt babel==2.8.0 # via sphinx cachetools==4.1.1 # via -r requirements/base.txt, google-auth -certifi==2020.6.20 # via -r requirements/base.txt, kubernetes, requests +certifi==2020.11.8 # via -r requirements/base.txt, kubernetes, requests chardet==3.0.4 # via -r requirements/base.txt, requests click-repl==0.1.6 # via -r requirements/base.txt click==7.1.2 # via -r requirements/base.txt, click-repl docutils==0.16 # via sphinx -google-auth==1.22.1 # via -r requirements/base.txt, kubernetes +google-auth==1.23.0 # via -r requirements/base.txt, kubernetes idna==2.10 # via -r requirements/base.txt, requests imagesize==1.2.0 # via sphinx jinja2==2.11.2 # via -r requirements/base.txt, sphinx @@ -24,11 +24,11 @@ packaging==20.4 # via sphinx prompt-toolkit==3.0.8 # via -r requirements/base.txt, click-repl pyasn1-modules==0.2.8 # via -r requirements/base.txt, google-auth pyasn1==0.4.8 # via -r requirements/base.txt, pyasn1-modules, rsa -pycryptodome==3.9.8 # via -r requirements/base.txt +pycryptodome==3.9.9 # via -r requirements/base.txt pygments==2.7.2 # via sphinx pyparsing==2.4.7 # via packaging python-dateutil==2.8.1 # via -r requirements/base.txt, kubernetes -pytz==2020.1 # via babel +pytz==2020.4 # via babel pyyaml==5.3.1 # via -r requirements/base.txt, kubernetes requests-oauthlib==1.3.0 # via -r requirements/base.txt, kubernetes requests==2.24.0 # via -r requirements/base.txt, kubernetes, requests-oauthlib, sphinx @@ -36,7 +36,7 @@ rsa==4.6 # via -r requirements/base.txt, google-auth six==1.15.0 # via -r requirements/base.txt, click-repl, google-auth, kubernetes, packaging, python-dateutil, websocket-client snowballstemmer==2.0.0 # via sphinx sphinx-rtd-theme==0.5.0 # via -r requirements/docs.in -sphinx==3.2.1 # via -r requirements/docs.in, sphinx-rtd-theme +sphinx==3.3.0 # via -r requirements/docs.in, sphinx-rtd-theme sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==1.0.3 # via sphinx diff --git a/setup.py b/setup.py index 5fb961a..073d3c9 100644 --- a/setup.py +++ b/setup.py @@ -2,23 +2,39 @@ import io import os from setuptools import find_packages, setup -here = os.path.abspath(os.path.dirname(__file__)) +HERE = os.path.abspath(os.path.dirname(__file__)) -with io.open(os.path.join(here, "README.rst"), "rt", encoding="utf8") as f: - readme = f.read() -about = {} -with io.open(os.path.join(here, "tutor", "__about__.py"), "rt", encoding="utf-8") as f: - exec(f.read(), about) -requirements = [] -with io.open( - os.path.join(here, "requirements", "base.in"), "rt", encoding="utf-8" -) as f: - requirements = [line.strip() for line in f] +def load_readme(): + with io.open(os.path.join(HERE, "README.rst"), "rt", encoding="utf8") as f: + return f.read() + + +def load_about(): + about = {} + with io.open( + os.path.join(HERE, "tutor", "__about__.py"), "rt", encoding="utf-8" + ) as f: + exec(f.read(), about) # pylint: disable=exec-used + return about + + +def load_requirements(): + with io.open( + os.path.join(HERE, "requirements", "base.in"), "rt", encoding="utf-8" + ) as f: + return [line.strip() for line in f if is_requirement(line)] + + +def is_requirement(line): + return not (line.strip() == "" or line.startswith("#")) + + +ABOUT = load_about() setup( name="tutor-openedx", - version=about["__version__"], + version=ABOUT["__version__"], url="https://docs.tutor.overhang.io/", project_urls={ "Documentation": "https://docs.tutor.overhang.io/", @@ -30,12 +46,12 @@ setup( author="Overhang.io", author_email="contact@overhang.io", description="The docker-based Open edX distribution designed for peace of mind", - long_description=readme, + long_description=load_readme(), long_description_content_type="text/x-rst", packages=find_packages(exclude=["tests*"]), include_package_data=True, python_requires=">=3.5", - install_requires=requirements, + install_requires=load_requirements(), entry_points={"console_scripts": ["tutor=tutor.commands.cli:main"]}, classifiers=[ "Development Status :: 5 - Production/Stable",