# HG changeset patch
# User Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr>
# Date 1671120378 -3600
#      Thu Dec 15 17:06:18 2022 +0100
# Node ID d6dc8810721e453025e4224f9ec76ac7ea29bc47
# Parent  ca586c1c865ef153e3f5486903f5d91cfa682732
📝 Update to use only pyproject.toml and remove setup.py
Extract version with setuptools-scm

diff --git a/.bumpversion.cfg b/.bumpversion.cfg
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -9,8 +9,6 @@
 
 [bumpversion:file:create_documentation]
 
-[bumpversion:file:doc/conf.py]
-
 [bumpversion:file:do_tests]
 
 [bumpversion:file:run_tests]
@@ -18,10 +16,3 @@
 [bumpversion:file:start]
 
 [bumpversion:file:odoo_scripts/__init__.py]
-
-[bumpversion:file:pyproject.toml]
-
-[bumpversion:file:setup.py]
-
-[flake8]
-max-line-length = 88
diff --git a/.dockerignore b/.dockerignore
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,2 +1,1 @@
-.hg
-tests
\ No newline at end of file
+tests
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -53,11 +53,19 @@
 unittest-py310:
   extends: unittest
   image: python:3.10-alpine
+  before_script:
+    # mercurial is needed so setuptools-scm does not crash when running hg to get the version number
+    - apk add git mercurial
+    - python3 -m pip install tox
   script:
-    - apk add git
-    - python3 -m pip install tox
     - tox --workdir=.cache/tox -e py310,coverage-report,coverage-xml
 
+unittest-py311:
+  extends: unittest-py310
+  image: python:3.11-alpine
+  script:
+    - tox --workdir=.cache/tox -e py311,coverage-report,coverage-xml
+
 import_jsonrpc_odoo11_test:
   stage: test
   needs: []
@@ -73,12 +81,13 @@
     POSTGRES_HOST_AUTH_METHOD: trust
     ODOO_ADDONS_PATH: ""
     ODOO_TYPE: odoo11
-    __PIP_EXTRA_OPTS: "--system"
   before_script:
+    - python3 -m pip show pip setuptools
+    - python3 -m pip install pip>10
     # install modules
     - $CI_PROJECT_DIR/start --db_host=db -d test_setup --max-cron-threads=0 --without-demo=all --data-dir /var/lib/odoo --init base --stop-after-init
     # install current version as this is the one tested, not the one in the image
-    - python3 -m pip install --disable-pip-version-check --no-cache-dir $__PIP_EXTRA_OPTS --upgrade $CI_PROJECT_DIR
+    - python3 -m pip install --disable-pip-version-check --no-cache-dir --upgrade $CI_PROJECT_DIR
   script:
     # restart odoo with installed modules and use it in background
     - $CI_PROJECT_DIR/start --db_host=db -d test_setup --max-cron-threads=0 --data-dir /var/lib/odoo &
@@ -92,6 +101,11 @@
     - pkill --echo --full /usr/bin/python3
     - pkill --echo --full zsh
 
+import_jsonrpc_odoo11_test-focal:
+  extends: import_jsonrpc_odoo11_test
+  image:
+    name: quay.orus.io/odoo/odoo:11.0-focal
+
 import_base_import_odoo11_test:
   extends: import_jsonrpc_odoo11_test
   script:
@@ -120,7 +134,6 @@
     entrypoint: [""]
   variables:
     ODOO_TYPE: odoo15
-    __PIP_EXTRA_OPTS: ""
 
 docker_build_copy_test:
   needs:
@@ -143,8 +156,8 @@
     expire_in: 10m
   script:
   - apk add make
+  - pip3 install hg-evolve .[doc]
   - cd doc
-  - pip3 install -r requirements hg-evolve
   - for language in en fr ; do make LANGUAGE=$language BUILDDIRSUFFIX=/$CI_COMMIT_HG_BRANCH html ; done
 
 publish_documentation:
diff --git a/Dockerfile b/Dockerfile
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,9 +10,8 @@
 LABEL org.opencontainers.image.source=$VCS_URL
 ADD . /usr/src/odoo_scripts
 RUN set -x ;\
-    apk add --no-cache --update zsh rsync postgresql-libs && \
+    apk add --no-cache --update zsh rsync postgresql-libs mercurial && \
     apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev git && \
-    python3 -m pip install -r /usr/src/odoo_scripts/requirements && \
     python3 -m pip install /usr/src/odoo_scripts[import_sql,conf2reST,source_control] && \
     apk --purge del .build-deps && \
     rm -rf /usr/src/odoo_scripts
diff --git a/NEWS.rst b/NEWS.rst
--- a/NEWS.rst
+++ b/NEWS.rst
@@ -9,6 +9,12 @@
 
 Compatibility with longpolling.
 
+Extract version number with setuptools-scm.
+
+Update to use only pyproject.toml and remove setup.py.
+
+Add tests for python 3.11.
+
 16.10.0
 -------
 
diff --git a/doc/conf.py b/doc/conf.py
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -4,6 +4,8 @@
 # list see the documentation:
 # https://www.sphinx-doc.org/en/master/usage/configuration.html
 
+import odoo_scripts
+
 # -- Path setup --------------------------------------------------------------
 
 # If extensions (or modules to document with autodoc) are in another directory,
@@ -22,7 +24,7 @@
 author = "Vincent Hatakeyama"
 
 # The full version, including alpha/beta/rc tags
-release = "16.10.0"
+release = odoo_scripts.__version__
 
 
 # -- General configuration ---------------------------------------------------
diff --git a/doc/requirements b/doc/requirements
deleted file mode 100644
--- a/doc/requirements
+++ /dev/null
@@ -1,3 +0,0 @@
-sphinx
-# used when updating translation files
-sphinx-intl
diff --git a/odoo_scripts/__init__.py b/odoo_scripts/__init__.py
--- a/odoo_scripts/__init__.py
+++ b/odoo_scripts/__init__.py
@@ -1,5 +1,16 @@
 """Odoo Scripts"""
-__version__ = "16.10.0"
+try:
+    # python 3.8+
+    from importlib.metadata import PackageNotFoundError, version
+except ModuleNotFoundError:
+    from importlib_metadata import PackageNotFoundError, version
+
+try:
+    __version__ = version("odoo-scripts")
+except PackageNotFoundError:
+    # package is not installed, default to something
+    __version__ = "16.10.0"
+
 __author__ = "XCG Consulting"
 
 # expose some useful functions
diff --git a/pyproject.toml b/pyproject.toml
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "odoo_scripts"
-version = "16.10.0"
+dynamic = ["version"]
 description = "Collection of scripts for Odoo"
 readme = "README.rst"
 requires-python = ">=3.6"
@@ -15,11 +15,68 @@
   "Environment :: Console",
 ]
 keywords = ["odoo"]
+dependencies = [
+  "odoorpc>=0.8.0",
+  "requests_toolbelt==0.8.0",
+  "python-dateutil>=2.7.0",
+  "coloredlogs",
+  "PyYAML",
+  "importlib_metadata; python_version<'3.8'"
+]
+
+[project.optional-dependencies]
+doc = [
+  "sphinx",
+  # used when updating translation files
+  "sphinx-intl"
+]
+conf2reST = []
+docker = [
+  "docker >=3.4",
+  "dockerpty",
+  # used in docker_rednerd
+  "requests_unixsocket",
+  "requests",
+]
+import_sql = ["psycopg2"]
+source_control = [
+  # Only mercurial 5.2 support Python 3.5+
+  "mercurial >=5.2",
+  "python-hglib",
+]
+
+[project.scripts]
+import_base_import = "odoo_scripts.import_base_import:main"
+import_jsonrpc= "odoo_scripts.import_jsonrpc:main"
+import_sql="odoo_scripts.import_sql:main [import_sql]"
+docker_dev_start="odoo_scripts.docker_dev_start:main [docker]"
+do_tests="odoo_scripts.do_tests:main"
+docker_black="odoo_scripts.docker_black:main [docker]"
+docker_build="odoo_scripts.docker_build:main [docker]"
+docker_build_doc="odoo_scripts.docker_build_doc:main [docker]"
+docker_build_clean="odoo_scripts.docker_build_clean:main"
+docker_build_copy="odoo_scripts.docker_build_copy:main"
+docker_flake8="odoo_scripts.docker_flake8:main [docker]"
+docker_isort="odoo_scripts.docker_isort:main [docker]"
+docker_pg="odoo_scripts.docker_postgresql:main [docker]"
+docker_prettier="odoo_scripts.docker_prettier:main [docker]"
+docker_pylint="odoo_scripts.docker_pylint:main [docker]"
+docker_rednerd="odoo_scripts.docker_rednerd:main [docker]"
+conf2reST="odoo_scripts.conf2reST:main [conf2reST]"
+odoo_conf_inject_env_var="odoo_scripts.odoo_conf_inject_env_var:main"
+list_modules="odoo_scripts.list_modules:main"
+update_duplicate_sources="odoo_scripts.update_duplicate_sources:main [source_control]"
+
+[project.urls]
+repository = "https://orus.io/xcg/odoo_scripts"
+changelog = "https://orus.io/xcg/odoo_scripts/-/blob/branch/default/NEWS.rst"
 
 [build-system]
-requires = ["setuptools >= 40.6.0", "wheel"]
+requires = ["setuptools >= 45", "wheel", "setuptools_scm[toml] >= 6.2"]
 build-backend = "setuptools.build_meta"
 
+[tool.setuptools_scm]
+
 [tool.black]
 target = 3.6
 
@@ -37,11 +94,11 @@
 legacy_tox_ini = """
 [tox]
 minversion = 3.15
-envlist = py36,py37,py38,py39,py310,coverage-report
+envlist = py36,py37,py38,py39,py310,py311,coverage-report
 skip_missing_interpreters = true
 isolated_build = True
 
-[testenv:py{36,37,38,39,310}]
+[testenv:py{36,37,38,39,310,311}]
 setenv =
     COVERAGE_FILE = .coverage.{envname}
 deps =
@@ -53,7 +110,7 @@
 [testenv:coverage-report]
 skip_install = true
 deps = coverage[toml]
-depends = py36,py37,py38,py39,py310
+depends = py36,py37,py38,py39,py310,py311
 commands =
     coverage combine
     coverage report
diff --git a/requirements b/requirements
deleted file mode 100644
--- a/requirements
+++ /dev/null
@@ -1,12 +0,0 @@
-# This includes the requirements for all extras
-git+https://github.com/oca/odoorpc@master#egg=odoorpc
-requests_toolbelt==0.8.0
-python-dateutil>=2.7.0
-PyYAML
-coloredlogs
-docker
-dockerpty
-psycopg2
-mercurial >=5.2
-python-hglib
-requests-unixsocket
diff --git a/setup.py b/setup.py
deleted file mode 100644
--- a/setup.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from setuptools import find_packages, setup
-
-with open("README.rst", "r") as fh:
-    long_description = fh.read()
-
-setup(
-    name="odoo_scripts",
-    description="Collection of scripts for Odoo",
-    version="16.10.0",
-    long_description=long_description,
-    long_description_content_type="text/x-rst",
-    author="XCG Consulting",
-    license="MIT",
-    packages=find_packages(),
-    install_requires=[
-        "odoorpc>=0.8.0",
-        "requests_toolbelt==0.8.0",
-        "python-dateutil>=2.7.0",
-        "coloredlogs",
-        "PyYAML",
-    ],
-    extras_require={
-        # used to require PyYAML but it is used in import scripts too
-        "conf2reST": [],
-        "docker": [
-            "docker >=3.4",
-            "dockerpty",
-            # used in docker_rednerd
-            "requests_unixsocket",
-            "requests",
-        ],
-        "import_sql": ["psycopg2"],
-        "source_control": [
-            # Only mercurial 5.2 support Python 3.5+
-            "mercurial >=5.2",
-            "python-hglib",
-        ],
-    },
-    entry_points={
-        "console_scripts": [
-            "import_base_import=odoo_scripts.import_base_import:main",
-            "import_jsonrpc=odoo_scripts.import_jsonrpc:main",
-            "import_sql=odoo_scripts.import_sql:main [import_sql]",
-            "docker_dev_start=odoo_scripts.docker_dev_start:main [docker]",
-            "do_tests=odoo_scripts.do_tests:main",
-            "docker_black=odoo_scripts.docker_black:main [docker]",
-            "docker_build=odoo_scripts.docker_build:main [docker]",
-            "docker_build_doc=odoo_scripts.docker_build_doc:main [docker]",
-            "docker_build_clean=odoo_scripts.docker_build_clean:main",
-            "docker_build_copy=odoo_scripts.docker_build_copy:main",
-            "docker_flake8=odoo_scripts.docker_flake8:main [docker]",
-            "docker_isort=odoo_scripts.docker_isort:main [docker]",
-            "docker_pg=odoo_scripts.docker_postgresql:main [docker]",
-            "docker_prettier=odoo_scripts.docker_prettier:main [docker]",
-            "docker_pylint=odoo_scripts.docker_pylint:main [docker]",
-            "docker_rednerd=odoo_scripts.docker_rednerd:main [docker]",
-            "conf2reST=odoo_scripts.conf2reST:main [conf2reST]",
-            "odoo_conf_inject_env_var=odoo_scripts.odoo_conf_inject_env_var:main",
-            "list_modules=odoo_scripts.list_modules:main",
-            "update_duplicate_sources="
-            "odoo_scripts.update_duplicate_sources:main [source_control]",
-        ]
-    },
-    scripts=[],
-    python_requires=">=3.6",
-    url="https://orus.io/xcg/odoo_scripts/",
-    classifiers=[
-        "Development Status :: 5 - Production/Stable",
-        "Programming Language :: Python :: 3",
-        "License :: OSI Approved :: MIT License",
-        "Environment :: Console",
-    ],
-)