From f6f95d25c1e379fbc87a530cc15f6bcf3a3e6704 Mon Sep 17 00:00:00 2001
From: Christoph Ladurner <christoph.ladurner@tugraz.at>
Date: Sat, 18 Feb 2023 23:13:28 +0100
Subject: [PATCH] migrate setup.py to setup.cfg

---
 .github/workflows/pypi-publish.yml |   2 +-
 .github/workflows/tests.yml        |   2 +-
 docs/conf.py                       |  13 +---
 invenio_previewer/__init__.py      |   3 +-
 pyproject.toml                     |   4 +
 setup.cfg                          |  68 ++++++++++++++++-
 setup.py                           | 118 +----------------------------
 7 files changed, 79 insertions(+), 131 deletions(-)
 create mode 100644 pyproject.toml

diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml
index 556367a..2657cbc 100644
--- a/.github/workflows/pypi-publish.yml
+++ b/.github/workflows/pypi-publish.yml
@@ -20,7 +20,7 @@ jobs:
       - name: Install dependencies
         run: |
           python -m pip install --upgrade pip
-          pip install setuptools wheel
+          pip install setuptools wheel babel
 
       - name: Build package
         # Remove `compile_catalog` if the package has no translations.
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 9af31ac..e5c71db 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -38,7 +38,7 @@ jobs:
 
       - name: Generate dependencies
         run: |
-          python -m pip install --upgrade pip setuptools py wheel requirements-builder
+          pip install wheel requirements-builder
           requirements-builder -e ${{ matrix.EXTRAS }} --level=${{ matrix.REQUIREMENTS_LEVEL }} setup.py > .${{ matrix.REQUIREMENTS_LEVEL }}-${{ matrix.python-version }}-requirements.txt
 
       - name: Cache pip
diff --git a/docs/conf.py b/docs/conf.py
index 65c66bc..68a75b7 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -8,7 +8,7 @@
 
 from __future__ import print_function
 
-import os
+from invenio_previewer import __version__
 
 import sphinx.environment
 
@@ -56,17 +56,8 @@ author = u'CERN'
 #
 # The short X.Y version.
 
-# Get the version string. Cannot be done with import!
-g = {}
-g = {}
-with open(os.path.join(os.path.dirname(__file__), '..',
-                       'invenio_previewer', 'version.py'),
-          'rt') as fp:
-    exec(fp.read(), g)
-    version = g['__version__']
-
 # The full version, including alpha/beta/rc tags.
-release = version
+release = __version__
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/invenio_previewer/__init__.py b/invenio_previewer/__init__.py
index 8dd99ff..9487c04 100644
--- a/invenio_previewer/__init__.py
+++ b/invenio_previewer/__init__.py
@@ -319,6 +319,7 @@ from __future__ import absolute_import, print_function
 
 from .ext import InvenioPreviewer
 from .proxies import current_previewer
-from .version import __version__
+
+__version__ = "1.3.9"
 
 __all__ = ('__version__', 'current_previewer', 'InvenioPreviewer')
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..f00e778
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,4 @@
+[build-system]
+requires = ["setuptools", "wheel", "babel>2.8"]
+build-backend = "setuptools.build_meta"
+
diff --git a/setup.cfg b/setup.cfg
index 2358924..7a2d773 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -2,13 +2,77 @@
 #
 # This file is part of Invenio.
 # Copyright (C) 2016-2020 CERN.
+# Copyright (C) 2022 Graz University of Technology.
 #
 # Invenio is free software; you can redistribute it and/or modify it
 # under the terms of the MIT License; see LICENSE file for more details.
 
+[metadata]
+name = invenio-previewer
+version = attr: invenio_previewer.__version__
+description = "Invenio module for previewing files."
+long_description = file: README.rst, CHANGES.rst
+keywords = invenio previewer
+license = MIT
+author = CERN
+author_email = info@inveniosoftware.org
+platforms = any
+url = https://github.com/inveniosoftware/invenio-previewer
+classifiers =
+    Development Status :: 5 - Production/Stable
 
-[aliases]
-test = pytest
+[options]
+include_package_data = True
+packages = find:
+python_requires = >=3.6
+zip_safe = False
+install_requires =
+    cchardet>=1.0.0
+    invenio-assets>=1.2.7
+    invenio-base>=1.2.10
+    invenio-formatter>=1.1.3
+    invenio-i18n>=1.3.1
+    invenio-pidstore>=1.2.3
+    invenio-records-ui>=1.2.0
+    ipython>=4.1.0
+    mistune>=0.8.1
+    nbconvert>=6.0,<7.0
+    nbclient>=0.5,<1.0
+    nbformat>=5.1,<6.0
+    tornado>=6.1,<7.0
+
+[options.extras_require]
+tests =
+    invenio-config>=1.0.3
+    invenio-theme>=1.3.20
+    invenio-db[versioning]>=1.0.14
+    mock>=1.3.0
+    pytest-invenio>=1.4.5
+    Sphinx>=4.2.0,<5.0.0
+    invenio-files-rest>=1.3.2
+    invenio-records-files>=1.2.1
+# Kept for backwards compatibility
+docs =
+files =
+
+[options.entry_points]
+invenio_base.apps =
+    invenio_previewer = invenio_previewer:InvenioPreviewer
+invenio_i18n.translations =
+    messages = invenio_previewer
+invenio_assets.webpack =
+    invenio_previewer_theme = invenio_previewer.webpack:previewer
+invenio_previewer.previewers =
+    csv_dthreejs = invenio_previewer.extensions.csv_dthreejs
+    json_prismjs = invenio_previewer.extensions.json_prismjs
+    simple_image = invenio_previewer.extensions.simple_image
+    xml_prismjs = invenio_previewer.extensions.xml_prismjs
+    mistune = invenio_previewer.extensions.mistune
+    txt = invenio_previewer.extensions.txt
+    pdfjs = invenio_previewer.extensions.pdfjs
+    zip = invenio_previewer.extensions.zip
+    ipynb = invenio_previewer.extensions.ipynb
+    default = invenio_previewer.extensions.default
 
 [build_sphinx]
 source-dir = docs/
diff --git a/setup.py b/setup.py
index bdbbd90..a4562d0 100644
--- a/setup.py
+++ b/setup.py
@@ -2,125 +2,13 @@
 #
 # This file is part of Invenio.
 # Copyright (C) 2016-2020 CERN.
+# Copyright (C) 2022 Graz University of Technology.
 #
 # Invenio is free software; you can redistribute it and/or modify it
 # under the terms of the MIT License; see LICENSE file for more details.
 
 """Invenio module for previewing files."""
 
-import os
+from setuptools import setup
 
-from setuptools import find_packages, setup
-from setuptools.command.test import test as TestCommand  # noqa
-
-readme = open('README.rst').read()
-history = open('CHANGES.rst').read()
-
-tests_require = [
-    'invenio-config>=1.0.3',
-    'invenio-theme>=1.3.20',
-    'invenio-db[versioning]>=1.0.14',
-    'mock>=1.3.0',
-    'pytest-invenio>=1.4.5',
-]
-
-extras_require = {
-    'docs': [
-        'Sphinx>=4.2.0,<5.0.0',
-    ],
-    'files': [
-        'invenio-files-rest>=1.3.2',
-        'invenio-records-files>=1.2.1',
-    ],
-    'tests': tests_require,
-}
-
-extras_require['all'] = []
-for reqs in extras_require.values():
-    extras_require['all'].extend(reqs)
-
-setup_requires = [
-    'Babel>=2.8',
-]
-
-install_requires = [
-    'cchardet>=1.0.0',
-    'invenio-assets>=1.2.7',
-    'invenio-base>=1.2.11',
-    'invenio-formatter>=1.1.3',
-    'invenio-i18n>=2.0.0',
-    'invenio-pidstore>=1.2.3',
-    'invenio-records-ui>=1.2.0',
-    'ipython>=4.1.0',
-    'mistune>=0.8.1',
-    # NOTE: nbclient package provides execute in nbconvert >= 6.X
-    'nbconvert>=6.0,<7.0',
-    'nbclient>=0.5,<1.0',
-    'nbformat>=5.1,<6.0',
-    'tornado>=6.1,<7.0',  # required by nbconvert -> jupyter-client
-]
-
-packages = find_packages()
-
-# Get the version string. Cannot be done with import!
-g = {}
-with open(os.path.join('invenio_previewer', 'version.py'), 'rt') as fp:
-    exec(fp.read(), g)
-    version = g['__version__']
-
-setup(
-    name='invenio-previewer',
-    version=version,
-    description=__doc__,
-    long_description=readme + '\n\n' + history,
-    keywords='invenio previewer',
-    license='MIT',
-    author='CERN',
-    author_email='info@inveniosoftware.org',
-    url='https://github.com/inveniosoftware/invenio-previewer',
-    packages=packages,
-    zip_safe=False,
-    include_package_data=True,
-    platforms='any',
-    entry_points={
-        'invenio_base.apps': [
-            'invenio_previewer = invenio_previewer:InvenioPreviewer',
-        ],
-        'invenio_i18n.translations': [
-            'messages = invenio_previewer',
-        ],
-        'invenio_assets.webpack': {
-            'invenio_previewer_theme = invenio_previewer.webpack:previewer'
-        },
-        'invenio_previewer.previewers': [
-            'csv_dthreejs = invenio_previewer.extensions.csv_dthreejs',
-            'json_prismjs = invenio_previewer.extensions.json_prismjs',
-            'simple_image = invenio_previewer.extensions.simple_image',
-            'xml_prismjs = invenio_previewer.extensions.xml_prismjs',
-            'mistune = invenio_previewer.extensions.mistune',
-            'txt = invenio_previewer.extensions.txt',
-            'pdfjs = invenio_previewer.extensions.pdfjs',
-            'zip = invenio_previewer.extensions.zip',
-            'ipynb = invenio_previewer.extensions.ipynb',
-            'default = invenio_previewer.extensions.default',
-        ],
-    },
-    extras_require=extras_require,
-    install_requires=install_requires,
-    setup_requires=setup_requires,
-    tests_require=tests_require,
-    classifiers=[
-        'Environment :: Web Environment',
-        'Intended Audience :: Developers',
-        'License :: OSI Approved :: MIT License',
-        'Operating System :: OS Independent',
-        'Programming Language :: Python',
-        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
-        'Topic :: Software Development :: Libraries :: Python Modules',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.6',
-        'Programming Language :: Python :: 3.7',
-        'Programming Language :: Python :: Implementation :: CPython',
-        'Development Status :: 5 - Production/Stable',
-    ],
-)
+setup()
-- 
GitLab