mirror of
https://github.com/certbot/certbot.git
synced 2025-08-09 15:02:48 +03:00
This PR implements the filesystem.chmod method from #6497. * Implement filesystem.chmod * Conditionally add pywin32 on setuptools versions that support environment markers. * Update apache plugin requirements * Use a try/except import approach similar to lock * Add comments about well-known SIDs * Add main command * Call filesystem.chmod in tests, remove one test * Add test for os module * Update environment marker * Ensure we are not building wheels using an old version of setuptools * Added a link to list of NTFS rights * Simplify sid comparison * Enable coverage * Sometimes, double-quote is the solution * Add entrypoint * Add unit tests to filesystem * Resolve recursively the link, add doc * Move imports to the top of the file * Remove string conversion of the ACL, fix setup * Ensure admins have all permissions * Simplify dacl comparison * Conditionally raise for windows temporary workaround * Add a test to check filesystem.chown is protected against symlink loops
170 lines
5.5 KiB
Python
170 lines
5.5 KiB
Python
import codecs
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
from distutils.version import StrictVersion
|
|
from setuptools import find_packages, setup, __version__ as setuptools_version
|
|
from setuptools.command.test import test as TestCommand
|
|
|
|
# Workaround for http://bugs.python.org/issue8876, see
|
|
# http://bugs.python.org/issue8876#msg208792
|
|
# This can be removed when using Python 2.7.9 or later:
|
|
# https://hg.python.org/cpython/raw-file/v2.7.9/Misc/NEWS
|
|
if os.path.abspath(__file__).split(os.path.sep)[1] == 'vagrant':
|
|
del os.link
|
|
|
|
|
|
def read_file(filename, encoding='utf8'):
|
|
"""Read unicode from given file."""
|
|
with codecs.open(filename, encoding=encoding) as fd:
|
|
return fd.read()
|
|
|
|
|
|
here = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
# read version number (and other metadata) from package init
|
|
init_fn = os.path.join(here, 'certbot', '__init__.py')
|
|
meta = dict(re.findall(r"""__([a-z]+)__ = '([^']+)""", read_file(init_fn)))
|
|
|
|
readme = read_file(os.path.join(here, 'README.rst'))
|
|
version = meta['version']
|
|
|
|
# This package relies on PyOpenSSL, requests, and six, however, it isn't
|
|
# specified here to avoid masking the more specific request requirements in
|
|
# acme. See https://github.com/pypa/pip/issues/988 for more info.
|
|
install_requires = [
|
|
'acme>=0.29.0',
|
|
# We technically need ConfigArgParse 0.10.0 for Python 2.6 support, but
|
|
# saying so here causes a runtime error against our temporary fork of 0.9.3
|
|
# in which we added 2.6 support (see #2243), so we relax the requirement.
|
|
'ConfigArgParse>=0.9.3',
|
|
'configobj',
|
|
'cryptography>=1.2.3', # load_pem_x509_certificate
|
|
# 1.1.0+ is required to avoid the warnings described at
|
|
# https://github.com/certbot/josepy/issues/13.
|
|
'josepy>=1.1.0',
|
|
'mock',
|
|
'parsedatetime>=1.3', # Calendar.parseDT
|
|
'pyrfc3339',
|
|
'pytz',
|
|
'setuptools',
|
|
'zope.component',
|
|
'zope.interface',
|
|
]
|
|
|
|
# Add pywin32 on Windows platforms to handle low-level system calls.
|
|
# This dependency needs to be added using environment markers to avoid its installation on Linux.
|
|
# However environment markers are supported only with setuptools >= 36.2.
|
|
# So this dependency is not added for old Linux distributions with old setuptools,
|
|
# in order to allow these systems to build certbot from sources.
|
|
if StrictVersion(setuptools_version) >= StrictVersion('36.2'):
|
|
install_requires.append("pywin32 ; sys_platform == 'win32'")
|
|
elif 'bdist_wheel' in sys.argv[1:]:
|
|
raise RuntimeError('Error, you are trying to build certbot wheels using an old version '
|
|
'of setuptools. Version 36.2+ of setuptools is required.')
|
|
|
|
dev_extras = [
|
|
'astroid==1.6.5',
|
|
'coverage',
|
|
'ipdb',
|
|
'pytest',
|
|
'pytest-cov',
|
|
'pytest-xdist',
|
|
'pylint==1.9.4',
|
|
'tox',
|
|
'twine',
|
|
'wheel',
|
|
]
|
|
|
|
dev3_extras = [
|
|
'mypy',
|
|
'typing', # for python3.4
|
|
]
|
|
|
|
docs_extras = [
|
|
# If you have Sphinx<1.5.1, you need docutils<0.13.1
|
|
# https://github.com/sphinx-doc/sphinx/issues/3212
|
|
'repoze.sphinx.autointerface',
|
|
'Sphinx>=1.2', # Annotation support
|
|
'sphinx_rtd_theme',
|
|
]
|
|
|
|
|
|
class PyTest(TestCommand):
|
|
user_options = []
|
|
|
|
def initialize_options(self):
|
|
TestCommand.initialize_options(self)
|
|
self.pytest_args = ''
|
|
|
|
def run_tests(self):
|
|
import shlex
|
|
# import here, cause outside the eggs aren't loaded
|
|
import pytest
|
|
errno = pytest.main(shlex.split(self.pytest_args))
|
|
sys.exit(errno)
|
|
|
|
|
|
setup(
|
|
name='certbot',
|
|
version=version,
|
|
description="ACME client",
|
|
long_description=readme,
|
|
url='https://github.com/letsencrypt/letsencrypt',
|
|
author="Certbot Project",
|
|
author_email='client-dev@letsencrypt.org',
|
|
license='Apache License 2.0',
|
|
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
|
|
classifiers=[
|
|
'Development Status :: 5 - Production/Stable',
|
|
'Environment :: Console',
|
|
'Environment :: Console :: Curses',
|
|
'Intended Audience :: System Administrators',
|
|
'License :: OSI Approved :: Apache Software License',
|
|
'Operating System :: POSIX :: Linux',
|
|
'Programming Language :: Python',
|
|
'Programming Language :: Python :: 2',
|
|
'Programming Language :: Python :: 2.7',
|
|
'Programming Language :: Python :: 3',
|
|
'Programming Language :: Python :: 3.4',
|
|
'Programming Language :: Python :: 3.5',
|
|
'Programming Language :: Python :: 3.6',
|
|
'Programming Language :: Python :: 3.7',
|
|
'Topic :: Internet :: WWW/HTTP',
|
|
'Topic :: Security',
|
|
'Topic :: System :: Installation/Setup',
|
|
'Topic :: System :: Networking',
|
|
'Topic :: System :: Systems Administration',
|
|
'Topic :: Utilities',
|
|
],
|
|
|
|
packages=find_packages(exclude=['docs', 'examples', 'tests', 'venv']),
|
|
include_package_data=True,
|
|
|
|
install_requires=install_requires,
|
|
extras_require={
|
|
'dev': dev_extras,
|
|
'dev3': dev3_extras,
|
|
'docs': docs_extras,
|
|
},
|
|
|
|
# to test all packages run "python setup.py test -s
|
|
# {acme,certbot_apache,certbot_nginx}"
|
|
test_suite='certbot',
|
|
tests_require=["pytest"],
|
|
cmdclass={"test": PyTest},
|
|
|
|
entry_points={
|
|
'console_scripts': [
|
|
'certbot = certbot.main:main',
|
|
],
|
|
'certbot.plugins': [
|
|
'manual = certbot.plugins.manual:Authenticator',
|
|
'null = certbot.plugins.null:Installer',
|
|
'standalone = certbot.plugins.standalone:Authenticator',
|
|
'webroot = certbot.plugins.webroot:Authenticator',
|
|
],
|
|
},
|
|
)
|