2020-10-08 03:45:51 +02:00
|
|
|
#! /usr/bin/env python3
|
2011-07-29 02:02:28 +02:00
|
|
|
|
Use argparse config throughout app (#349)
This PR is a pretty substantial refactor of the entrypoints of pypiserver (`__main__` and `__init__`) to use the argparse-based config added in #339.
- Updated `RunConfig` and `UpdateConfig` classes to have exclusive init kwargs, instead of taking an namespace. This turned out to be much easier when working with the library-style app initialization in `__init__`, both for direct instantiation and via paste config
- Added an `iter_packages()` method to the `RunConfig` to iterate over packages specified by the configuration (note @elfjes, I think that replacing this with e.g. a `backend` reference will be a nice way to tie in #348)
- Added a general-purpose method to map legacy keyword arguments to the `app()` and `paste_app_factory()` functions to updated forms
- Refactored the `paste_app_factory()` to not mutate the incoming dictionary
- Removed all argument-parsing and config-related code from `__main__` and `core`
- Moved `_logwrite` from `__init__` to `__main__`, since that was the only place it was being used after the updates to `core`
- Updated `digest_file` to use `hashlib.new(algo)` instead of `getattr(hashlib, algo)`, because the former supports more algorithms
- Updated `setup.py` to, instead of calling `eval()` on the entirety of `__init__`, to instead just evaluate the line that defines the version
- Assigned the config to a `._pypiserver_config` attribute on the `Bottle` instance to reduce hacky test workarounds
- Fixed the tox config, which I broke in #339
* Config: add auth & absolute path resolution
* Config: check pkg dirs on config creation
* Instantiate config with kwargs, not namespace
* WIP: still pulling the threads
* Init seems to be working
* tests passing locally, still need to update cache
* Fix tox command
* unused import
* Fix typing
* Be more selective in exec() in setup.py
* Require accurate casing for hash algos
* Remove old comment
* Comments, minor updates and simplifications
* move _logwrite to a more reasonable place
* Update config to work with cache
* Type cachemanager listdir in core
* Update config module docstring, rename method
* Add more comments re: paste config
* Add comments to main, remove unneded check
* Remove commented code
* Use {posargs} instead of [] for clarity in tox
* Add dupe check for kwarg updater
* Remove unused references on app instance
* Fix typo
* Remove redundancy in log level parsing
2020-10-26 00:48:28 +01:00
|
|
|
import re
|
2020-10-08 03:45:51 +02:00
|
|
|
from pathlib import Path
|
2011-11-08 00:10:45 +01:00
|
|
|
|
2015-09-16 22:05:47 +02:00
|
|
|
from setuptools import setup
|
2011-11-08 00:10:45 +01:00
|
|
|
|
2019-09-18 03:51:48 +02:00
|
|
|
tests_require = [
|
|
|
|
"pytest>=2.3",
|
|
|
|
"tox",
|
|
|
|
"twine",
|
|
|
|
"passlib>=1.6",
|
|
|
|
"webtest",
|
|
|
|
]
|
2011-07-29 02:02:28 +02:00
|
|
|
|
2020-10-08 03:45:51 +02:00
|
|
|
setup_requires = ["setuptools", "setuptools-git >= 0.3", "wheel >= 0.25.0"]
|
2023-06-26 10:07:10 +02:00
|
|
|
install_requires = ["pip>=7"]
|
2020-10-08 03:45:51 +02:00
|
|
|
|
|
|
|
|
|
|
|
def read_file(rel_path: str):
|
|
|
|
return Path(__file__).parent.joinpath(rel_path).read_text()
|
2016-01-20 21:18:22 +01:00
|
|
|
|
2011-07-29 02:41:27 +02:00
|
|
|
|
2011-07-29 02:02:28 +02:00
|
|
|
def get_version():
|
2020-10-08 03:45:51 +02:00
|
|
|
locals_ = {}
|
Use argparse config throughout app (#349)
This PR is a pretty substantial refactor of the entrypoints of pypiserver (`__main__` and `__init__`) to use the argparse-based config added in #339.
- Updated `RunConfig` and `UpdateConfig` classes to have exclusive init kwargs, instead of taking an namespace. This turned out to be much easier when working with the library-style app initialization in `__init__`, both for direct instantiation and via paste config
- Added an `iter_packages()` method to the `RunConfig` to iterate over packages specified by the configuration (note @elfjes, I think that replacing this with e.g. a `backend` reference will be a nice way to tie in #348)
- Added a general-purpose method to map legacy keyword arguments to the `app()` and `paste_app_factory()` functions to updated forms
- Refactored the `paste_app_factory()` to not mutate the incoming dictionary
- Removed all argument-parsing and config-related code from `__main__` and `core`
- Moved `_logwrite` from `__init__` to `__main__`, since that was the only place it was being used after the updates to `core`
- Updated `digest_file` to use `hashlib.new(algo)` instead of `getattr(hashlib, algo)`, because the former supports more algorithms
- Updated `setup.py` to, instead of calling `eval()` on the entirety of `__init__`, to instead just evaluate the line that defines the version
- Assigned the config to a `._pypiserver_config` attribute on the `Bottle` instance to reduce hacky test workarounds
- Fixed the tox config, which I broke in #339
* Config: add auth & absolute path resolution
* Config: check pkg dirs on config creation
* Instantiate config with kwargs, not namespace
* WIP: still pulling the threads
* Init seems to be working
* tests passing locally, still need to update cache
* Fix tox command
* unused import
* Fix typing
* Be more selective in exec() in setup.py
* Require accurate casing for hash algos
* Remove old comment
* Comments, minor updates and simplifications
* move _logwrite to a more reasonable place
* Update config to work with cache
* Type cachemanager listdir in core
* Update config module docstring, rename method
* Add more comments re: paste config
* Add comments to main, remove unneded check
* Remove commented code
* Use {posargs} instead of [] for clarity in tox
* Add dupe check for kwarg updater
* Remove unused references on app instance
* Fix typo
* Remove redundancy in log level parsing
2020-10-26 00:48:28 +01:00
|
|
|
version_line = re.compile(
|
|
|
|
r'^[\w =]*__version__ = "\d+\.\d+\.\d+\.?\w*\d*"$'
|
|
|
|
)
|
2011-07-29 02:02:28 +02:00
|
|
|
try:
|
Use argparse config throughout app (#349)
This PR is a pretty substantial refactor of the entrypoints of pypiserver (`__main__` and `__init__`) to use the argparse-based config added in #339.
- Updated `RunConfig` and `UpdateConfig` classes to have exclusive init kwargs, instead of taking an namespace. This turned out to be much easier when working with the library-style app initialization in `__init__`, both for direct instantiation and via paste config
- Added an `iter_packages()` method to the `RunConfig` to iterate over packages specified by the configuration (note @elfjes, I think that replacing this with e.g. a `backend` reference will be a nice way to tie in #348)
- Added a general-purpose method to map legacy keyword arguments to the `app()` and `paste_app_factory()` functions to updated forms
- Refactored the `paste_app_factory()` to not mutate the incoming dictionary
- Removed all argument-parsing and config-related code from `__main__` and `core`
- Moved `_logwrite` from `__init__` to `__main__`, since that was the only place it was being used after the updates to `core`
- Updated `digest_file` to use `hashlib.new(algo)` instead of `getattr(hashlib, algo)`, because the former supports more algorithms
- Updated `setup.py` to, instead of calling `eval()` on the entirety of `__init__`, to instead just evaluate the line that defines the version
- Assigned the config to a `._pypiserver_config` attribute on the `Bottle` instance to reduce hacky test workarounds
- Fixed the tox config, which I broke in #339
* Config: add auth & absolute path resolution
* Config: check pkg dirs on config creation
* Instantiate config with kwargs, not namespace
* WIP: still pulling the threads
* Init seems to be working
* tests passing locally, still need to update cache
* Fix tox command
* unused import
* Fix typing
* Be more selective in exec() in setup.py
* Require accurate casing for hash algos
* Remove old comment
* Comments, minor updates and simplifications
* move _logwrite to a more reasonable place
* Update config to work with cache
* Type cachemanager listdir in core
* Update config module docstring, rename method
* Add more comments re: paste config
* Add comments to main, remove unneded check
* Remove commented code
* Use {posargs} instead of [] for clarity in tox
* Add dupe check for kwarg updater
* Remove unused references on app instance
* Fix typo
* Remove redundancy in log level parsing
2020-10-26 00:48:28 +01:00
|
|
|
for ln in filter(
|
|
|
|
version_line.match,
|
|
|
|
read_file("pypiserver/__init__.py").splitlines(),
|
|
|
|
):
|
|
|
|
exec(ln, locals_)
|
2011-07-29 02:02:28 +02:00
|
|
|
except (ImportError, RuntimeError):
|
|
|
|
pass
|
2020-10-08 03:45:51 +02:00
|
|
|
return locals_["__version__"]
|
2011-07-29 02:02:28 +02:00
|
|
|
|
|
|
|
|
2019-09-18 03:51:48 +02:00
|
|
|
setup(
|
|
|
|
name="pypiserver",
|
|
|
|
description="A minimal PyPI server for use with pip/easy_install.",
|
2023-08-15 11:16:30 +02:00
|
|
|
long_description=read_file("README.md"),
|
2023-10-01 15:19:32 +02:00
|
|
|
long_description_content_type="text/markdown",
|
2019-09-18 03:51:48 +02:00
|
|
|
version=get_version(),
|
|
|
|
packages=["pypiserver"],
|
|
|
|
package_data={"pypiserver": ["welcome.html"]},
|
2020-10-08 03:45:51 +02:00
|
|
|
python_requires=">=3.6",
|
2023-06-26 10:07:10 +02:00
|
|
|
install_requires=install_requires,
|
2019-09-18 03:51:48 +02:00
|
|
|
setup_requires=setup_requires,
|
|
|
|
extras_require={"passlib": ["passlib>=1.6"], "cache": ["watchdog"]},
|
|
|
|
tests_require=tests_require,
|
|
|
|
url="https://github.com/pypiserver/pypiserver",
|
|
|
|
maintainer=(
|
|
|
|
"Kostis Anagnostopoulos <ankostis@gmail.com>"
|
|
|
|
"Matthew Planchard <mplanchard@gmail.com>"
|
|
|
|
),
|
|
|
|
maintainer_email="ankostis@gmail.com",
|
|
|
|
classifiers=[
|
|
|
|
"Development Status :: 5 - Production/Stable",
|
|
|
|
"Environment :: Web Environment",
|
|
|
|
"Intended Audience :: Developers",
|
|
|
|
"Intended Audience :: System Administrators",
|
|
|
|
"License :: OSI Approved :: BSD License",
|
|
|
|
"License :: OSI Approved :: zlib/libpng License",
|
|
|
|
"Operating System :: MacOS :: MacOS X",
|
|
|
|
"Operating System :: Microsoft :: Windows",
|
|
|
|
"Operating System :: POSIX",
|
|
|
|
"Operating System :: OS Independent",
|
|
|
|
"Programming Language :: Python :: 3",
|
|
|
|
"Programming Language :: Python :: 3.6",
|
|
|
|
"Programming Language :: Python :: 3.7",
|
2020-01-12 06:53:13 +01:00
|
|
|
"Programming Language :: Python :: 3.8",
|
2022-10-21 11:23:49 +02:00
|
|
|
"Programming Language :: Python :: 3.9",
|
|
|
|
"Programming Language :: Python :: 3.10",
|
2019-09-18 03:51:48 +02:00
|
|
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
|
|
"Programming Language :: Python :: Implementation :: PyPy",
|
|
|
|
"Topic :: Software Development :: Build Tools",
|
|
|
|
"Topic :: System :: Software Distribution",
|
|
|
|
],
|
|
|
|
zip_safe=True,
|
|
|
|
entry_points={
|
|
|
|
"paste.app_factory": ["main=pypiserver:paste_app_factory"],
|
|
|
|
"console_scripts": ["pypi-server=pypiserver.__main__:main"],
|
|
|
|
},
|
|
|
|
options={"bdist_wheel": {"universal": True}},
|
|
|
|
platforms=["any"],
|
|
|
|
)
|