Move to pyproject.toml, drop Python 2
This commit is contained in:
parent
929fb39782
commit
87e15913a5
10
README.rst
10
README.rst
@ -56,8 +56,7 @@ Install::
|
|||||||
|
|
||||||
$ python3 -m venv .venv
|
$ python3 -m venv .venv
|
||||||
$ . .venv/bin/activate
|
$ . .venv/bin/activate
|
||||||
(.venv)$ pip install -e .
|
(.venv)$ pip install -e .[test]
|
||||||
(.venv)$ pip install -r tests/test_requirements.txt
|
|
||||||
|
|
||||||
Run::
|
Run::
|
||||||
|
|
||||||
@ -75,6 +74,13 @@ Run::
|
|||||||
Change Log
|
Change Log
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
1.0.1
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
* officially remove Python 2 support that was broken since 1.0.0
|
||||||
|
anyway; now the package works with Python 3.8+ because of a few
|
||||||
|
features
|
||||||
|
|
||||||
1.0.0
|
1.0.0
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
34
pyproject.toml
Normal file
34
pyproject.toml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["setuptools", "setuptools-scm[toml]"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name = "bitrot"
|
||||||
|
authors = [
|
||||||
|
{name = "Łukasz Langa", email = "lukasz@langa.pl"},
|
||||||
|
]
|
||||||
|
description = "Detects bit rotten files on the hard drive to save your precious photo and music collection from slow decay."
|
||||||
|
readme = "README.rst"
|
||||||
|
requires-python = ">=3.8"
|
||||||
|
keywords = ["file", "checksum", "database"]
|
||||||
|
license = {text = "MIT"}
|
||||||
|
classifiers = [
|
||||||
|
"Development Status :: 5 - Production/Stable",
|
||||||
|
"Natural Language :: English",
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"Topic :: System :: Filesystems",
|
||||||
|
"Topic :: System :: Monitoring",
|
||||||
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||||
|
|
||||||
|
]
|
||||||
|
dependencies = []
|
||||||
|
dynamic = ["version"]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
test = ["pytest", "pytest-order"]
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
bitrot = "bitrot:run_from_command_line"
|
||||||
|
|
||||||
|
[tool.setuptools_scm]
|
||||||
|
tag_regex = "^(?P<version>v\\d+(?:\\.\\d+){0,2}[^\\+]*)(?:\\+.*)?$"
|
76
setup.py
76
setup.py
@ -1,76 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2013 by Łukasz Langa
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
# THE SOFTWARE.
|
|
||||||
|
|
||||||
import codecs
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from setuptools import setup, find_packages
|
|
||||||
|
|
||||||
current_dir = os.path.abspath(os.path.dirname(__file__))
|
|
||||||
ld_file = codecs.open(os.path.join(current_dir, 'README.rst'), encoding='utf8')
|
|
||||||
try:
|
|
||||||
long_description = ld_file.read()
|
|
||||||
finally:
|
|
||||||
ld_file.close()
|
|
||||||
# We let it die a horrible tracebacking death if reading the file fails.
|
|
||||||
# We couldn't sensibly recover anyway: we need the long description.
|
|
||||||
|
|
||||||
sys.path.insert(0, current_dir + os.sep + 'src')
|
|
||||||
from bitrot import VERSION
|
|
||||||
release = ".".join(str(num) for num in VERSION)
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name = 'bitrot',
|
|
||||||
version = release,
|
|
||||||
author = u'Łukasz Langa',
|
|
||||||
author_email = 'lukasz@langa.pl',
|
|
||||||
description = ("Detects bit rotten files on the hard drive to save your "
|
|
||||||
"precious photo and music collection from slow decay."),
|
|
||||||
long_description = long_description,
|
|
||||||
url = 'https://github.com/ambv/bitrot/',
|
|
||||||
keywords = 'file checksum database',
|
|
||||||
platforms = ['any'],
|
|
||||||
license = 'MIT',
|
|
||||||
package_dir = {'': 'src'},
|
|
||||||
packages = find_packages('src'),
|
|
||||||
py_modules = ['bitrot'],
|
|
||||||
scripts = ['bin/bitrot'],
|
|
||||||
include_package_data = True,
|
|
||||||
zip_safe = False, # if only because of the readme file
|
|
||||||
install_requires = [
|
|
||||||
'futures; python_version == "2.7"'
|
|
||||||
],
|
|
||||||
classifiers = [
|
|
||||||
'Development Status :: 4 - Beta',
|
|
||||||
'License :: OSI Approved :: MIT License',
|
|
||||||
'Natural Language :: English',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
|
||||||
'Programming Language :: Python :: 3',
|
|
||||||
'Programming Language :: Python :: 3.7',
|
|
||||||
'Programming Language :: Python :: 3.8',
|
|
||||||
'Programming Language :: Python',
|
|
||||||
'Topic :: System :: Filesystems',
|
|
||||||
'Topic :: System :: Monitoring',
|
|
||||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
||||||
]
|
|
||||||
)
|
|
@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2013 by Łukasz Langa
|
# Copyright (C) 2013 by Łukasz Langa
|
||||||
|
|
||||||
@ -21,10 +20,7 @@
|
|||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import annotations
|
||||||
from __future__ import division
|
|
||||||
from __future__ import print_function
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import atexit
|
import atexit
|
||||||
@ -41,18 +37,17 @@ import time
|
|||||||
import unicodedata
|
import unicodedata
|
||||||
|
|
||||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||||
|
from importlib.metadata import version, PackageNotFoundError
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_CHUNK_SIZE = 16384 # block size in HFS+; 4X the block size in ext4
|
DEFAULT_CHUNK_SIZE = 16384 # block size in HFS+; 4X the block size in ext4
|
||||||
DOT_THRESHOLD = 200
|
DOT_THRESHOLD = 200
|
||||||
VERSION = (1, 0, 0)
|
|
||||||
IGNORED_FILE_SYSTEM_ERRORS = {errno.ENOENT, errno.EACCES}
|
IGNORED_FILE_SYSTEM_ERRORS = {errno.ENOENT, errno.EACCES}
|
||||||
FSENCODING = sys.getfilesystemencoding()
|
FSENCODING = sys.getfilesystemencoding()
|
||||||
|
try:
|
||||||
|
VERSION = version("bitrot")
|
||||||
if sys.version[0] == '2':
|
except PackageNotFoundError:
|
||||||
str = type(u'text')
|
VERSION = "1.0.1"
|
||||||
# use `bytes` for bytestrings
|
|
||||||
|
|
||||||
|
|
||||||
def normalize_path(path):
|
def normalize_path(path):
|
||||||
@ -545,7 +540,7 @@ def run_from_command_line():
|
|||||||
help='just test against an existing database, don\'t update anything')
|
help='just test against an existing database, don\'t update anything')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--version', action='version',
|
'--version', action='version',
|
||||||
version='%(prog)s {}.{}.{}'.format(*VERSION))
|
version=f"%(prog)s {VERSION}")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--commit-interval', type=float, default=300,
|
'--commit-interval', type=float, default=300,
|
||||||
help='min time in seconds between commits '
|
help='min time in seconds between commits '
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
NOTE: those tests are ordered and require pytest-order to run correctly.
|
NOTE: those tests are ordered and require pytest-order to run correctly.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import getpass
|
import getpass
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
Loading…
x
Reference in New Issue
Block a user