summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/pythonpackage.yml32
-rw-r--r--.gitignore8
-rw-r--r--MANIFEST.in1
-rw-r--r--PKG-INFO50
-rw-r--r--debian/changelog6
-rw-r--r--disperse.conf8
-rw-r--r--fastbencode.egg-info/PKG-INFO50
-rw-r--r--fastbencode.egg-info/SOURCES.txt27
-rw-r--r--fastbencode.egg-info/dependency_links.txt1
-rw-r--r--fastbencode.egg-info/requires.txt3
-rw-r--r--fastbencode.egg-info/top_level.txt1
-rw-r--r--fastbencode/__init__.py3
-rw-r--r--fastbencode/tests/test_bencode.py9
-rw-r--r--pyproject.toml3
-rw-r--r--releaser.conf10
-rw-r--r--setup.cfg35
-rwxr-xr-xsetup.py80
17 files changed, 202 insertions, 125 deletions
diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml
deleted file mode 100644
index 0a557a9..0000000
--- a/.github/workflows/pythonpackage.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Python package
-
-on: [push, pull_request]
-
-jobs:
- build:
-
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- os: [ubuntu-latest, macos-latest, windows-latest]
- python-version: [3.6, 3.7, 3.8, 3.9, '3.10']
- fail-fast: false
-
- steps:
- - uses: actions/checkout@v2
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
- with:
- python-version: ${{ matrix.python-version }}
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -U pip flake8
- - name: Style checks
- run: |
- python -m flake8
- - name: Test suite run
- run: |
- python -m unittest fastbencode.tests.test_suite
- env:
- PYTHONHASHSEED: random
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index a76001e..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-*.so
-build
-fastbencode/_bencode_pyx.c
-fastbencode/_bencode_pyx.h
-__pycache__
-fastbencode.egg-info
-*.pyc
-dist
diff --git a/MANIFEST.in b/MANIFEST.in
index 9988031..bfc6ad4 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,4 @@
include README.md
include COPYING
+include fastbencode/py.typed
recursive-include fastbencode *.py *.pyx *.pxd *.h *.c
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..6e6965b
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,50 @@
+Metadata-Version: 2.1
+Name: fastbencode
+Version: 0.2
+Summary: Implementation of bencode with optional fast C extensions
+Home-page: https://github.com/breezy-team/fastbencode
+Maintainer: Breezy Developers
+Maintainer-email: breezy-core@googlegroups.com
+License: GPLv2 or later
+Project-URL: GitHub, https://github.com/breezy-team/fastbencode
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Classifier: Operating System :: POSIX
+Classifier: Operating System :: Microsoft :: Windows
+Requires-Python: >=3.7
+Provides-Extra: cext
+License-File: COPYING
+
+fastbencode
+===========
+
+fastbencode is an implementation of the bencode serialization format originally
+used by BitTorrent.
+
+The package includes both a pure-Python version and an optional C extension
+based on Cython. Both provide the same functionality, but the C extension
+provides significantly better performance.
+
+Example:
+
+ >>> from fastbencode import bencode, bdecode
+ >>> bencode([1, 2, b'a', {b'd': 3}])
+ b'li1ei2e1:ad1:di3eee'
+ >>> bdecode(bencode([1, 2, b'a', {b'd': 3}]))
+ [1, 2, b'a', {b'd': 3}]
+
+License
+=======
+fastbencode is available under the GNU GPL, version 2 or later.
+
+Copyright
+=========
+
+* Original Pure-Python bencoder (c) Petru Paler
+* Cython version and modifications (c) Canonical Ltd
+* Split out from Bazaar/Breezy by Jelmer Vernooij
diff --git a/debian/changelog b/debian/changelog
index f374ea9..1a5b348 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+python-fastbencode (0.2-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Jelmer Vernooij <jelmer@debian.org> Sat, 11 Feb 2023 14:03:04 +0000
+
python-fastbencode (0.0.12-1) unstable; urgency=low
* New upstream release.
diff --git a/disperse.conf b/disperse.conf
new file mode 100644
index 0000000..8c162eb
--- /dev/null
+++ b/disperse.conf
@@ -0,0 +1,8 @@
+# See https://github.com/jelmer/disperse
+timeout_days: 5
+tag_name: "v$VERSION"
+verify_command: "python3 -m unittest fastbencode.tests.test_suite"
+update_version {
+ path: "fastbencode/__init__.py"
+ new_line: '__version__ = $TUPLED_VERSION'
+}
diff --git a/fastbencode.egg-info/PKG-INFO b/fastbencode.egg-info/PKG-INFO
new file mode 100644
index 0000000..6e6965b
--- /dev/null
+++ b/fastbencode.egg-info/PKG-INFO
@@ -0,0 +1,50 @@
+Metadata-Version: 2.1
+Name: fastbencode
+Version: 0.2
+Summary: Implementation of bencode with optional fast C extensions
+Home-page: https://github.com/breezy-team/fastbencode
+Maintainer: Breezy Developers
+Maintainer-email: breezy-core@googlegroups.com
+License: GPLv2 or later
+Project-URL: GitHub, https://github.com/breezy-team/fastbencode
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Classifier: Operating System :: POSIX
+Classifier: Operating System :: Microsoft :: Windows
+Requires-Python: >=3.7
+Provides-Extra: cext
+License-File: COPYING
+
+fastbencode
+===========
+
+fastbencode is an implementation of the bencode serialization format originally
+used by BitTorrent.
+
+The package includes both a pure-Python version and an optional C extension
+based on Cython. Both provide the same functionality, but the C extension
+provides significantly better performance.
+
+Example:
+
+ >>> from fastbencode import bencode, bdecode
+ >>> bencode([1, 2, b'a', {b'd': 3}])
+ b'li1ei2e1:ad1:di3eee'
+ >>> bdecode(bencode([1, 2, b'a', {b'd': 3}]))
+ [1, 2, b'a', {b'd': 3}]
+
+License
+=======
+fastbencode is available under the GNU GPL, version 2 or later.
+
+Copyright
+=========
+
+* Original Pure-Python bencoder (c) Petru Paler
+* Cython version and modifications (c) Canonical Ltd
+* Split out from Bazaar/Breezy by Jelmer Vernooij
diff --git a/fastbencode.egg-info/SOURCES.txt b/fastbencode.egg-info/SOURCES.txt
new file mode 100644
index 0000000..83857de
--- /dev/null
+++ b/fastbencode.egg-info/SOURCES.txt
@@ -0,0 +1,27 @@
+.gitignore
+CODE_OF_CONDUCT.md
+COPYING
+MANIFEST.in
+README.md
+SECURITY.md
+disperse.conf
+pyproject.toml
+setup.cfg
+setup.py
+.github/workflows/disperse.yml
+.github/workflows/pythonpackage.yml
+.github/workflows/pythonpublish.yml
+fastbencode/__init__.py
+fastbencode/_bencode_py.py
+fastbencode/_bencode_pyx.h
+fastbencode/_bencode_pyx.pyi
+fastbencode/_bencode_pyx.pyx
+fastbencode/py.typed
+fastbencode/python-compat.h
+fastbencode.egg-info/PKG-INFO
+fastbencode.egg-info/SOURCES.txt
+fastbencode.egg-info/dependency_links.txt
+fastbencode.egg-info/requires.txt
+fastbencode.egg-info/top_level.txt
+fastbencode/tests/__init__.py
+fastbencode/tests/test_bencode.py \ No newline at end of file
diff --git a/fastbencode.egg-info/dependency_links.txt b/fastbencode.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/fastbencode.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/fastbencode.egg-info/requires.txt b/fastbencode.egg-info/requires.txt
new file mode 100644
index 0000000..6f35e50
--- /dev/null
+++ b/fastbencode.egg-info/requires.txt
@@ -0,0 +1,3 @@
+
+[cext]
+cython>=0.29
diff --git a/fastbencode.egg-info/top_level.txt b/fastbencode.egg-info/top_level.txt
new file mode 100644
index 0000000..fc7ff1e
--- /dev/null
+++ b/fastbencode.egg-info/top_level.txt
@@ -0,0 +1 @@
+fastbencode
diff --git a/fastbencode/__init__.py b/fastbencode/__init__.py
index 205b7dd..6b5f757 100644
--- a/fastbencode/__init__.py
+++ b/fastbencode/__init__.py
@@ -19,6 +19,9 @@
from typing import Type
+__version__ = (0, 2)
+
+
_extension_load_failures = []
diff --git a/fastbencode/tests/test_bencode.py b/fastbencode/tests/test_bencode.py
index 267d02b..65fe9b7 100644
--- a/fastbencode/tests/test_bencode.py
+++ b/fastbencode/tests/test_bencode.py
@@ -67,8 +67,7 @@ def iter_suite_tests(suite):
yield suite
elif isinstance(suite, TestSuite):
for item in suite:
- for r in iter_suite_tests(item):
- yield r
+ yield from iter_suite_tests(item)
else:
raise Exception('unknown type %r for object %r'
% (type(suite), suite))
@@ -108,7 +107,7 @@ def apply_scenario(test, scenario):
test.
:return: The adapted test.
"""
- new_id = "%s(%s)" % (test.id(), scenario[0])
+ new_id = "{}({})".format(test.id(), scenario[0])
new_test = clone_test(test, new_id)
for name, value in scenario[1].items():
setattr(new_test, name, value)
@@ -211,7 +210,7 @@ def load_tests(loader, standard_tests, pattern):
'fastbencode._bencode_pyx')
-class RecursionLimit(object):
+class RecursionLimit:
"""Context manager that lowers recursion limit for testing."""
def __init__(self, limit=100):
@@ -343,7 +342,7 @@ class TestBencodeDecode(TestCase):
self._run_check_error(TypeError, None)
self._run_check_error(TypeError, lambda x: x)
self._run_check_error(TypeError, object)
- self._run_check_error(TypeError, u"ie")
+ self._run_check_error(TypeError, "ie")
def test_decoder_type_error(self):
self.assertRaises(TypeError, self.module.bdecode, 1)
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..6385495
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools", "cython>=0.29", "packaging"]
+build-backend = "setuptools.build_meta"
diff --git a/releaser.conf b/releaser.conf
deleted file mode 100644
index 6a3b73d..0000000
--- a/releaser.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-# See https://github.com/jelmer/releaser
-timeout_days: 5
-tag_name: "v$VERSION"
-verify_command: "python3 setup.py test"
-github_url: "https://github.com/breezy-team/fastbencode"
-update_version {
- path: "setup.py"
- match: "^ version=\"(.*)\",$"
- new_line: ' version="$VERSION",'
-}
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..2fe1666
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,35 @@
+[metadata]
+name = fastbencode
+description = Implementation of bencode with optional fast C extensions
+maintainer = Breezy Developers
+maintainer_email = breezy-core@googlegroups.com
+url = https://github.com/breezy-team/fastbencode
+long_description = file:README.md
+license = GPLv2 or later
+version = attr:fastbencode.__version__
+project_urls =
+ GitHub = https://github.com/breezy-team/fastbencode
+classifiers =
+ Programming Language :: Python :: 3.7
+ Programming Language :: Python :: 3.8
+ Programming Language :: Python :: 3.9
+ Programming Language :: Python :: 3.10
+ Programming Language :: Python :: 3.11
+ Programming Language :: Python :: Implementation :: CPython
+ Programming Language :: Python :: Implementation :: PyPy
+ Operating System :: POSIX
+ Operating System :: Microsoft :: Windows
+
+[options]
+python_requires = >=3.7
+packages = fastbencode
+setup_requires =
+ cython>=0.29
+
+[options.extras_require]
+cext = cython>=0.29
+
+[egg_info]
+tag_build =
+tag_date = 0
+
diff --git a/setup.py b/setup.py
index 06c5b83..7a049df 100755
--- a/setup.py
+++ b/setup.py
@@ -2,8 +2,11 @@
import os
import sys
-from setuptools import setup
-from distutils.version import LooseVersion
+from setuptools import setup, Extension
+try:
+ from packaging.version import Version
+except ImportError:
+ from distutils.version import LooseVersion as Version
try:
from Cython.Distutils import build_ext
@@ -20,8 +23,8 @@ except ImportError:
from distutils.command.build_ext import build_ext
else:
minimum_cython_version = '0.29'
- cython_version_info = LooseVersion(cython_version)
- if cython_version_info < LooseVersion(minimum_cython_version):
+ cython_version_info = Version(cython_version)
+ if cython_version_info < Version(minimum_cython_version):
print("Version of Cython is too old. "
"Current is %s, need at least %s."
% (cython_version, minimum_cython_version))
@@ -32,54 +35,6 @@ else:
have_cython = True
-from distutils import log
-from distutils.errors import CCompilerError, DistutilsPlatformError
-from distutils.extension import Extension
-
-
-class build_ext_if_possible(build_ext):
-
- user_options = build_ext.user_options + [
- ('allow-python-fallback', None,
- "When an extension cannot be built, allow falling"
- " back to the pure-python implementation.")
- ]
-
- def initialize_options(self):
- build_ext.initialize_options(self)
- self.allow_python_fallback = False
-
- def run(self):
- try:
- build_ext.run(self)
- except DistutilsPlatformError:
- e = sys.exc_info()[1]
- if not self.allow_python_fallback:
- log.warn('\n Cannot build extensions.\n'
- ' Use "build_ext --allow-python-fallback" to use'
- ' slower python implementations instead.\n')
- raise
- log.warn(str(e))
- log.warn('\n Extensions cannot be built.\n'
- ' Using the slower Python implementations instead.\n')
-
- def build_extension(self, ext):
- try:
- build_ext.build_extension(self, ext)
- except CCompilerError:
- if not self.allow_python_fallback:
- log.warn('\n Cannot build extension "%s".\n'
- ' Use "build_ext --allow-python-fallback" to use'
- ' slower python implementations instead.\n'
- % (ext.name,))
- raise
- log.warn('\n Building of "%s" extension failed.\n'
- ' Using the slower Python implementation instead.'
- % (ext.name,))
-
-
-# Override the build_ext if we have Cython available
-
ext_modules = []
@@ -117,26 +72,11 @@ def add_cython_extension(module_name, libraries=None, extra_source=[]):
ext_modules.append(
Extension(
module_name, source, define_macros=define_macros,
- libraries=libraries, include_dirs=include_dirs))
+ libraries=libraries, include_dirs=include_dirs,
+ optional=os.environ.get('CIBUILDWHEEL', '0') != '1'))
add_cython_extension('fastbencode._bencode_pyx')
-with open('README.md', 'r') as f:
- long_description = f.read()
-
-setup(
- name="fastbencode",
- description="Implementation of bencode with optional fast C extensions",
- version="0.0.12",
- long_description=long_description,
- maintainer="Breezy Developers",
- maintainer_email="breezy-core@googlegroups.com",
- url="https://github.com/breezy-team/fastbencode",
- ext_modules=ext_modules,
- extras_require={'cext': ['cython>=0.29']},
- cmdclass={'build_ext': build_ext_if_possible},
- license="GPLv2 or later",
- test_suite="fastbencode.tests.test_suite",
- packages=["fastbencode"])
+setup(ext_modules=ext_modules, cmdclass={'build_ext': build_ext})