diff --git a/MANIFEST.in b/MANIFEST.in index 561b388..c17123c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,4 @@ include COPYING -include fastentrypoints.py graft contrib global-exclude .* diff --git a/Makefile b/Makefile index 4613476..04cb9b6 100644 --- a/Makefile +++ b/Makefile @@ -7,20 +7,22 @@ PYTHON_QA_ENV=$(PYTHON_ENV_ROOT)/$(PYTHON)-qa-env # packaging environment ####################################################### .PHONY: packaging-env build _release -$(PYTHON_PACKAGING_VENV)/.created: REQUIREMENTS.packaging.txt +$(PYTHON_PACKAGING_VENV)/.created: rm -rf $(PYTHON_PACKAGING_VENV) && \ $(PYTHON) -m venv $(PYTHON_PACKAGING_VENV) && \ . $(PYTHON_PACKAGING_VENV)/bin/activate && \ $(PYTHON) -m pip install --upgrade pip && \ - $(PYTHON) -m pip install -r REQUIREMENTS.packaging.txt + $(PYTHON) -m pip install build twine date > $(PYTHON_PACKAGING_VENV)/.created +.PHONY: packaging-env build _release + packaging-env: $(PYTHON_PACKAGING_VENV)/.created build: packaging-env . $(PYTHON_PACKAGING_VENV)/bin/activate && \ rm -rf dist *.egg-info && \ - ./setup.py sdist + $(PYTHON) -m build _release: build . $(PYTHON_PACKAGING_VENV)/bin/activate && \ @@ -37,12 +39,12 @@ envs: packaging-env qa-env # testing ##################################################################### .PHONY: qa qa-env qa-codespell qa-pytest qa-ruff -$(PYTHON_QA_ENV)/.created: REQUIREMENTS.qa.txt +$(PYTHON_QA_ENV)/.created: rm -rf $(PYTHON_QA_ENV) && \ $(PYTHON) -m venv $(PYTHON_QA_ENV) && \ . $(PYTHON_QA_ENV)/bin/activate && \ $(PYTHON) -m pip install pip --upgrade && \ - $(PYTHON) -m pip install -r ./REQUIREMENTS.qa.txt && \ + $(PYTHON) -m pip install codespell ruff pytest pytest-mock && \ date > $(PYTHON_QA_ENV)/.created qa-env: $(PYTHON_QA_ENV)/.created diff --git a/README.rst b/README.rst index f065f12..fe32ca8 100644 --- a/README.rst +++ b/README.rst @@ -217,9 +217,20 @@ MQTT Statistics --------------- This tool can be configured to send certain statistics to a MQTT broker. -To enable this function create a config file at ``/etc/usbsdmux.config`` or use ``--config`` specify a file location. +To use this feature the `usbsdmux` util has to be installed with some +additional dependencies: -See example config file `usbsdmux.config `_. +.. code-block:: bash + + $ python3 -m venv venv + $ source venv/bin/activate + $ python3 -m pip install "usbsdmux[mqtt]" + +To enable this feature create a config file at ``/etc/usbsdmux.config`` +or use ``--config`` to specify a file location. + +See the example config file `usbsdmux.config `_ +for available configuration options. Troubleshooting diff --git a/REQUIREMENTS.mqtt.txt b/REQUIREMENTS.mqtt.txt deleted file mode 100644 index 8579e8b..0000000 --- a/REQUIREMENTS.mqtt.txt +++ /dev/null @@ -1 +0,0 @@ -paho-mqtt diff --git a/REQUIREMENTS.packaging.txt b/REQUIREMENTS.packaging.txt deleted file mode 100644 index 69c408a..0000000 --- a/REQUIREMENTS.packaging.txt +++ /dev/null @@ -1,2 +0,0 @@ -setuptools>=36.5.0 -twine diff --git a/fastentrypoints.py b/fastentrypoints.py deleted file mode 100644 index 3e9cb8e..0000000 --- a/fastentrypoints.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright (c) 2016, Aaron Christianson -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" -Monkey patch setuptools to write faster console_scripts with this format: - - import sys - from mymodule import entry_function - sys.exit(entry_function()) - -This is better. - -(c) 2016, Aaron Christianson -http://github.com/ninjaaron/fast-entry_points -""" - -import re - -from setuptools.command import easy_install - -TEMPLATE = """\ -# -*- coding: utf-8 -*- -import re -import sys - -from {0} import {1} - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit({2}())""" - - -@classmethod -def get_args(cls, dist, header=None): - """ - Yield write_script() argument tuples for a distribution's - console_scripts and gui_scripts entry points. - """ - if header is None: - header = cls.get_header() - spec = str(dist.as_requirement()) # noqa: F841 - for type_ in "console", "gui": - group = type_ + "_scripts" - for name, ep in dist.get_entry_map(group).items(): - # ensure_safe_name - if re.search(r"[\\/]", name): - raise ValueError("Path separators not allowed in script names") - script_text = TEMPLATE.format(ep.module_name, ep.attrs[0], ".".join(ep.attrs)) - args = cls._get_script_args(type_, name, header, script_text) - for res in args: - yield res - - -easy_install.ScriptWriter.get_args = get_args - - -def main(): - import os - import re - import shutil - import sys - - dests = sys.argv[1:] or ["."] - filename = re.sub("\.pyc$", ".py", __file__) - - for dst in dests: - shutil.copy(filename, dst) - manifest_path = os.path.join(dst, "MANIFEST.in") - setup_path = os.path.join(dst, "setup.py") - - # Insert the include statement to MANIFEST.in if not present - with open(manifest_path, "a+") as manifest: - manifest.seek(0) - manifest_content = manifest.read() - if "include fastentrypoints.py" not in manifest_content: - manifest.write(("\n" if manifest_content else "") + "include fastentrypoints.py") - - # Insert the import statement to setup.py if not present - with open(setup_path, "a+") as setup: - setup.seek(0) - setup_content = setup.read() - if "import fastentrypoints" not in setup_content: - setup.seek(0) - setup.truncate() - setup.write("import fastentrypoints\n" + setup_content) - - -print(__name__) diff --git a/pyproject.toml b/pyproject.toml index 4d7c365..e0b475e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,42 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "usbsdmux" +description = "Tool to control an USB-SD-Mux from the command line" +version = "24.01.1" +authors = [ + { name = "Chris Fiege", email = "python@pengutronix.de" }, +] +readme = "README.rst" +license = { "text" = "LGPL-2.1-or-later" } +dependencies = [] +classifiers = [ + "Environment :: Console", + "Natural Language :: English", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", +] + +[project.optional-dependencies] +mqtt = ["paho-mqtt"] + +[project.urls] +homepage="https://github.com/linux-automation/usbsdmux" +documentation="https://www.linux-automation.com/usbsdmux-M01/" + +[project.scripts] +usbsdmux = "usbsdmux.__main__:main" +usbsdmux-configure = "usbsdmux.usb2642eeprom:main" +usbsdmux-service = "usbsdmux.service:main" + +[tool.setuptools] +packages = [ + "usbsdmux", +] +include-package-data = true + [tool.ruff] line-length = 119 exclude = [ diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 00f8daf..0000000 --- a/setup.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[metadata] -long_description = file: README.rst -classifiers = - Environment :: Console - Natural Language :: English - Operating System :: Unix - Programming Language :: Python :: 3 :: Only diff --git a/setup.py b/setup.py deleted file mode 100755 index 2026187..0000000 --- a/setup.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 - -from setuptools import setup - -import fastentrypoints # noqa: F401 - -setup( - name="usbsdmux", - version="24.01.1", - author="Chris Fiege", - author_email="python@pengutronix.de", - license="LGPL-2.1-or-later", - url="https://github.com/pengutronix/usbsdmux", - description="Tool to control an usb-sd-mux from the command line", - packages=["usbsdmux"], - entry_points={ - "console_scripts": [ - "usbsdmux = usbsdmux.__main__:main", - "usbsdmux-configure = usbsdmux.usb2642eeprom:main", - "usbsdmux-service = usbsdmux.service:main", - ], - }, - classifiers=["License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)"], -)