mirror of
https://github.com/inventree/InvenTree.git
synced 2026-07-04 06:00:38 +00:00
!feat(backend): bump minimum python version (#12223)
* bump ci versions * bump installer version * bump tooling version ref * bump doc refs * bump / refactor code refs * bump debug ref * remove now unneeded deps * bump release version * remove distutils * fix finder call * remove old compat code * add changelog entry * lower cov target for now
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
# In contrast with the "production" image (which is based on an Alpine image)
|
# In contrast with the "production" image (which is based on an Alpine image)
|
||||||
# we use a Debian-based image for the devcontainer
|
# we use a Debian-based image for the devcontainer
|
||||||
|
|
||||||
FROM mcr.microsoft.com/devcontainers/python:3.11-bookworm@sha256:e754c29c4e3ffcf6c794c1020e36a0812341d88ec9569a34704b975fa89e8848
|
FROM mcr.microsoft.com/devcontainers/python:3.12-trixie@sha256:5440cb68898d190ad6c6e8a4634ce89d0645bea47f9c8beb75612bb8e3983711
|
||||||
|
|
||||||
# InvenTree paths
|
# InvenTree paths
|
||||||
ENV INVENTREE_HOME="/home/inventree"
|
ENV INVENTREE_HOME="/home/inventree"
|
||||||
@@ -25,7 +25,7 @@ RUN chmod +x init.sh
|
|||||||
|
|
||||||
# Install required base packages
|
# Install required base packages
|
||||||
RUN apt update && apt install -y \
|
RUN apt update && apt install -y \
|
||||||
python3.11-dev python3.11-venv \
|
python3.12-dev python3.12-venv \
|
||||||
postgresql-client \
|
postgresql-client \
|
||||||
libldap2-dev libsasl2-dev \
|
libldap2-dev libsasl2-dev \
|
||||||
libpango1.0-0 libcairo2 \
|
libpango1.0-0 libcairo2 \
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ pool:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
Python39:
|
Python39:
|
||||||
PYTHON_VERSION: '3.11'
|
PYTHON_VERSION: 3.12
|
||||||
maxParallel: 3
|
maxParallel: 3
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ on:
|
|||||||
- l10
|
- l10
|
||||||
|
|
||||||
env:
|
env:
|
||||||
python_version: 3.11
|
python_version: 3.12
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
python_version: "3.11"
|
python_version: 3.12
|
||||||
runs-on: ubuntu-latest # in the future we can try to use alternative runners here
|
runs-on: ubuntu-latest # in the future we can try to use alternative runners here
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -134,7 +134,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
python_version: "3.11"
|
python_version: 3.12
|
||||||
runs-on: ubuntu-latest # in the future we can try to use alternative runners here
|
runs-on: ubuntu-latest # in the future we can try to use alternative runners here
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -158,7 +158,7 @@ jobs:
|
|||||||
id-token: write
|
id-token: write
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
python_version: "3.11"
|
python_version: 3.12
|
||||||
runs-on: ubuntu-latest # in the future we can try to use alternative runners here
|
runs-on: ubuntu-latest # in the future we can try to use alternative runners here
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ on:
|
|||||||
branches-ignore: ["l10*"]
|
branches-ignore: ["l10*"]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
python_version: 3.11
|
python_version: 3.12
|
||||||
node_version: 24
|
node_version: 24
|
||||||
# The OS version must be set per job
|
# The OS version must be set per job
|
||||||
server_start_sleep: 60
|
server_start_sleep: 60
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
env:
|
env:
|
||||||
python_version: 3.11
|
python_version: 3.12
|
||||||
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ on:
|
|||||||
branches-ignore: ["l10*"]
|
branches-ignore: ["l10*"]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
python_version: 3.11
|
python_version: 3.12
|
||||||
node_version: 24
|
node_version: 24
|
||||||
# The OS version must be set per job
|
# The OS version must be set per job
|
||||||
server_start_sleep: 60
|
server_start_sleep: 60
|
||||||
@@ -379,7 +379,7 @@ jobs:
|
|||||||
continue-on-error: true # continue if a step fails so that coverage gets pushed
|
continue-on-error: true # continue if a step fails so that coverage gets pushed
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python_version: [3.11, 3.14]
|
python_version: [3.12, 3.14]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
INVENTREE_DB_NAME: ./inventree.sqlite
|
INVENTREE_DB_NAME: ./inventree.sqlite
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
env:
|
env:
|
||||||
python_version: 3.11
|
python_version: 3.12
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
stable:
|
stable:
|
||||||
@@ -151,9 +151,9 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
target:
|
target:
|
||||||
- ubuntu:22.04
|
|
||||||
- ubuntu:24.04
|
- ubuntu:24.04
|
||||||
- debian:12
|
- ubuntu:26.04
|
||||||
|
- debian:13
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # pin@v6.0.3
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # pin@v6.0.3
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
- master
|
- master
|
||||||
|
|
||||||
env:
|
env:
|
||||||
python_version: 3.11
|
python_version: 3.12
|
||||||
node_version: 24
|
node_version: 24
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ before:
|
|||||||
dependencies:
|
dependencies:
|
||||||
- curl
|
- curl
|
||||||
- poppler-utils
|
- poppler-utils
|
||||||
- "python3.11 | python3.12 | python3.13 | python3.14"
|
- "python3.12 | python3.13 | python3.14"
|
||||||
- "python3.11-venv | python3.12-venv | python3.13-venv | python3.14-venv"
|
- "python3.12-venv | python3.13-venv | python3.14-venv"
|
||||||
- "python3.11-dev | python3.12-dev | python3.13-dev | python3.14-dev"
|
- "python3.12-dev | python3.13-dev | python3.14-dev"
|
||||||
- python3-pip
|
- python3-pip
|
||||||
- python3-cffi
|
- python3-cffi
|
||||||
- python3-brotli
|
- python3-brotli
|
||||||
@@ -36,6 +36,6 @@ dependencies:
|
|||||||
- jq
|
- jq
|
||||||
- "libffi7 | libffi8"
|
- "libffi7 | libffi8"
|
||||||
targets:
|
targets:
|
||||||
ubuntu-22.04: true
|
|
||||||
ubuntu-24.04: true
|
ubuntu-24.04: true
|
||||||
debian-12: true
|
ubuntu-26.04: true
|
||||||
|
debian-13: true
|
||||||
|
|||||||
@@ -97,4 +97,4 @@ repos:
|
|||||||
rev: 0.4.3
|
rev: 0.4.3
|
||||||
hooks:
|
hooks:
|
||||||
- id: teyit
|
- id: teyit
|
||||||
language_version: python3.11
|
language_version: python3.12
|
||||||
|
|||||||
Vendored
+1
-1
@@ -47,7 +47,7 @@
|
|||||||
"name": "InvenTree invoke schema",
|
"name": "InvenTree invoke schema",
|
||||||
"type": "debugpy",
|
"type": "debugpy",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"program": "${workspaceFolder}/.venv/lib/python3.11/site-packages/invoke/__main__.py",
|
"program": "${workspaceFolder}/.venv/lib/python3.12/site-packages/invoke/__main__.py",
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"args": [
|
"args": [
|
||||||
"dev.schema","--ignore-warnings"
|
"dev.schema","--ignore-warnings"
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
|
||||||
|
- [#12223](https://github.com/inventree/InvenTree/pull/12223) removes support for python 3.11 and stops providing packages for Debian 11 and Ubuntu 20.04.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ flag_management:
|
|||||||
carryforward: true
|
carryforward: true
|
||||||
statuses:
|
statuses:
|
||||||
- type: project
|
- type: project
|
||||||
target: 40%
|
target: 38%
|
||||||
- name: web
|
- name: web
|
||||||
carryforward: true
|
carryforward: true
|
||||||
statuses:
|
statuses:
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ function detect_python() {
|
|||||||
echo "${On_Red}"
|
echo "${On_Red}"
|
||||||
echo "# POI07| Python ${SETUP_PYTHON} not found - aborting!"
|
echo "# POI07| Python ${SETUP_PYTHON} not found - aborting!"
|
||||||
echo "# POI07| Please ensure python can be executed with the command '$SETUP_PYTHON' by the current user '$USER'."
|
echo "# POI07| Please ensure python can be executed with the command '$SETUP_PYTHON' by the current user '$USER'."
|
||||||
echo "# POI07| If you are using a different python version, please set the environment variable SETUP_PYTHON to the correct command - eg. 'python3.11'."
|
echo "# POI07| If you are using a different python version, please set the environment variable SETUP_PYTHON to the correct command - eg. 'python3.12'."
|
||||||
echo "${Color_Off}"
|
echo "${Color_Off}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export DATA_DIR=${APP_HOME}/data
|
|||||||
export SETUP_NGINX_FILE=${SETUP_NGINX_FILE:-/etc/nginx/sites-enabled/inventree.conf}
|
export SETUP_NGINX_FILE=${SETUP_NGINX_FILE:-/etc/nginx/sites-enabled/inventree.conf}
|
||||||
export SETUP_ADMIN_PASSWORD_FILE=${CONF_DIR}/admin_password.txt
|
export SETUP_ADMIN_PASSWORD_FILE=${CONF_DIR}/admin_password.txt
|
||||||
export SETUP_NO_CALLS=${SETUP_NO_CALLS:-false}
|
export SETUP_NO_CALLS=${SETUP_NO_CALLS:-false}
|
||||||
export SETUP_PYTHON=${SETUP_PYTHON:-python3.11}
|
export SETUP_PYTHON=${SETUP_PYTHON:-python3.12}
|
||||||
export SETUP_ADMIN_NOCREATION=${SETUP_ADMIN_NOCREATION:-false}
|
export SETUP_ADMIN_NOCREATION=${SETUP_ADMIN_NOCREATION:-false}
|
||||||
# SETUP_DEBUG can be set to get debug info
|
# SETUP_DEBUG can be set to get debug info
|
||||||
# SETUP_EXTRA_PIP can be set to install extra pip packages
|
# SETUP_EXTRA_PIP can be set to install extra pip packages
|
||||||
|
|||||||
+2
-2
@@ -4,10 +4,10 @@ import json
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from distutils.version import StrictVersion # type: ignore[import]
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
from packaging.version import Version
|
||||||
|
|
||||||
here = Path(__file__).parent
|
here = Path(__file__).parent
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ def fetch_rtd_versions():
|
|||||||
print('No RTD token found - skipping RTD version fetch')
|
print('No RTD token found - skipping RTD version fetch')
|
||||||
|
|
||||||
# Sort versions by version number
|
# Sort versions by version number
|
||||||
versions = sorted(versions, key=lambda x: StrictVersion(x['version']), reverse=True)
|
versions = sorted(versions, key=lambda x: Version(x['version']), reverse=True)
|
||||||
|
|
||||||
# Add "latest" version first
|
# Add "latest" version first
|
||||||
if not any(x['title'] == 'latest' for x in versions):
|
if not any(x['title'] == 'latest' for x in versions):
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ ARG INVENTREE_TAG
|
|||||||
|
|
||||||
# prebuild stage - needs a lot of build dependencies
|
# prebuild stage - needs a lot of build dependencies
|
||||||
# make sure, the alpine and python version matches the version used in the inventree base image
|
# make sure, the alpine and python version matches the version used in the inventree base image
|
||||||
FROM python:3.11-alpine3.18 as prebuild
|
FROM python:3.12-alpine3.18 as prebuild
|
||||||
|
|
||||||
# Install whatever development dependency is needed (e.g. cups-dev, gcc, the musl-dev build tools and the pip pycups package)
|
# Install whatever development dependency is needed (e.g. cups-dev, gcc, the musl-dev build tools and the pip pycups package)
|
||||||
RUN apk add --no-cache cups-dev gcc musl-dev && \
|
RUN apk add --no-cache cups-dev gcc musl-dev && \
|
||||||
|
|||||||
+1
-1
@@ -366,7 +366,7 @@ extra:
|
|||||||
# provider: google
|
# provider: google
|
||||||
# property: UA-143467500-1
|
# property: UA-143467500-1
|
||||||
|
|
||||||
min_python_version: 3.11
|
min_python_version: 3.12
|
||||||
min_invoke_version: 2.0.0
|
min_invoke_version: 2.0.0
|
||||||
django_version: 5.2
|
django_version: 5.2
|
||||||
docker_postgres_version: 17
|
docker_postgres_version: 17
|
||||||
|
|||||||
+1
-1
@@ -97,7 +97,7 @@ skip-magic-trailing-comma = true
|
|||||||
line-ending = "auto"
|
line-ending = "auto"
|
||||||
|
|
||||||
[tool.uv.pip]
|
[tool.uv.pip]
|
||||||
python-version = "3.11"
|
python-version = "3.12"
|
||||||
no-strip-extras=true
|
no-strip-extras=true
|
||||||
generate-hashes=true
|
generate-hashes=true
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -9,9 +9,9 @@ python:
|
|||||||
- requirements: src/backend/requirements.txt
|
- requirements: src/backend/requirements.txt
|
||||||
|
|
||||||
build:
|
build:
|
||||||
os: "ubuntu-22.04"
|
os: "ubuntu-24.04"
|
||||||
tools:
|
tools:
|
||||||
python: "3.11"
|
python: "3.12"
|
||||||
jobs:
|
jobs:
|
||||||
post_install:
|
post_install:
|
||||||
- pip install -U invoke
|
- pip install -U invoke
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION
|
|||||||
INVENTREE_SW_VERSION = '1.5.0 dev'
|
INVENTREE_SW_VERSION = '1.5.0 dev'
|
||||||
|
|
||||||
# Minimum supported Python version
|
# Minimum supported Python version
|
||||||
MIN_PYTHON_VERSION = (3, 11)
|
MIN_PYTHON_VERSION = (3, 12)
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,7 @@
|
|||||||
"""Types for settings."""
|
"""Types for settings."""
|
||||||
|
|
||||||
import sys
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from typing import Any, TypedDict
|
from typing import Any, NotRequired, TypedDict
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
from typing import NotRequired # pragma: no cover
|
|
||||||
else:
|
|
||||||
|
|
||||||
class NotRequired: # pragma: no cover
|
|
||||||
"""NotRequired type helper is only supported with Python 3.11+."""
|
|
||||||
|
|
||||||
def __class_getitem__(cls, item):
|
|
||||||
"""Return the item."""
|
|
||||||
return item
|
|
||||||
|
|
||||||
|
|
||||||
class SettingsKeyType(TypedDict, total=False):
|
class SettingsKeyType(TypedDict, total=False):
|
||||||
|
|||||||
@@ -108,9 +108,6 @@ def handle_error(error, do_raise: bool = True, do_log: bool = True, log_name: st
|
|||||||
|
|
||||||
def get_entrypoints():
|
def get_entrypoints():
|
||||||
"""Returns list for entrypoints for InvenTree plugins."""
|
"""Returns list for entrypoints for InvenTree plugins."""
|
||||||
# on python before 3.12, we need to use importlib_metadata
|
|
||||||
if sys.version_info < (3, 12):
|
|
||||||
return entry_points().get('inventree_plugins', [])
|
|
||||||
return entry_points(group='inventree_plugins')
|
return entry_points(group='inventree_plugins')
|
||||||
|
|
||||||
|
|
||||||
@@ -190,13 +187,11 @@ def get_modules(pkg, path=None):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if sys.version_info < (3, 12):
|
spec = finder.find_spec(name, path)
|
||||||
module = finder.find_module(name).load_module(name)
|
module = module_from_spec(spec)
|
||||||
else:
|
sys.modules[name] = module
|
||||||
spec = finder.find_spec(name)
|
spec.loader.exec_module(module)
|
||||||
module = module_from_spec(spec)
|
|
||||||
sys.modules[name] = module
|
|
||||||
spec.loader.exec_module(module)
|
|
||||||
pkg_names = getattr(module, '__all__', None)
|
pkg_names = getattr(module, '__all__', None)
|
||||||
for k, v in vars(module).items():
|
for k, v in vars(module).items():
|
||||||
if not k.startswith('_') and (pkg_names is None or k in pkg_names):
|
if not k.startswith('_') and (pkg_names is None or k in pkg_names):
|
||||||
|
|||||||
@@ -117,8 +117,7 @@ def plugins_file_hash():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
with pf.open('rb') as f:
|
with pf.open('rb') as f:
|
||||||
# Note: Once we support 3.11 as a minimum, we can use hashlib.file_digest
|
return hashlib.file_digest(f, 'sha256').hexdigest()
|
||||||
return hashlib.sha256(f.read()).hexdigest()
|
|
||||||
except Exception:
|
except Exception:
|
||||||
log_error('plugins_file_hash', scope='plugins')
|
log_error('plugins_file_hash', scope='plugins')
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import warnings
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from importlib.metadata import PackageNotFoundError, metadata
|
from importlib.metadata import PackageNotFoundError, metadata
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from sysconfig import get_path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -517,7 +518,6 @@ class InvenTreePlugin(VersionMixin, MixinBase, MetaBase):
|
|||||||
return InvenTree.helpers.pui_url(f'/settings/admin/plugin/{config.pk}/')
|
return InvenTree.helpers.pui_url(f'/settings/admin/plugin/{config.pk}/')
|
||||||
return InvenTree.helpers.pui_url('/settings/admin/plugin/')
|
return InvenTree.helpers.pui_url('/settings/admin/plugin/')
|
||||||
|
|
||||||
# region package info
|
|
||||||
@mark_final
|
@mark_final
|
||||||
def _get_package_commit(self):
|
def _get_package_commit(self):
|
||||||
"""Get last git commit for the plugin."""
|
"""Get last git commit for the plugin."""
|
||||||
@@ -527,10 +527,9 @@ class InvenTreePlugin(VersionMixin, MixinBase, MetaBase):
|
|||||||
@mark_final
|
@mark_final
|
||||||
def is_editable(cls):
|
def is_editable(cls):
|
||||||
"""Returns if the current part is editable."""
|
"""Returns if the current part is editable."""
|
||||||
from distutils.sysconfig import get_python_lib
|
|
||||||
|
|
||||||
pkg_name = cls.__name__.split('.')[0]
|
pkg_name = cls.__name__.split('.')[0]
|
||||||
dist_info = list(Path(get_python_lib()).glob(f'{pkg_name}-*.dist-info'))
|
py_lib = get_path('platlib')
|
||||||
|
dist_info = list(Path(py_lib).glob(f'{pkg_name}-*.dist-info'))
|
||||||
return bool(len(dist_info) == 1)
|
return bool(len(dist_info) == 1)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -585,15 +585,9 @@ class PluginsRegistry:
|
|||||||
|
|
||||||
# Gather Modules
|
# Gather Modules
|
||||||
if parent_path:
|
if parent_path:
|
||||||
# On python 3.12 use new loader method
|
raw_module = SourceFileLoader(
|
||||||
if sys.version_info < (3, 12):
|
plugin_dir, str(parent_obj.joinpath('__init__.py'))
|
||||||
raw_module = _load_source(
|
).load_module()
|
||||||
plugin_dir, str(parent_obj.joinpath('__init__.py'))
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
raw_module = SourceFileLoader(
|
|
||||||
plugin_dir, str(parent_obj.joinpath('__init__.py'))
|
|
||||||
).load_module()
|
|
||||||
else:
|
else:
|
||||||
raw_module = importlib.import_module(plugin_dir)
|
raw_module = importlib.import_module(plugin_dir)
|
||||||
|
|
||||||
|
|||||||
@@ -594,55 +594,6 @@ sqlparse==0.5.5 \
|
|||||||
# -c src/backend/requirements.txt
|
# -c src/backend/requirements.txt
|
||||||
# django
|
# django
|
||||||
# django-silk
|
# django-silk
|
||||||
tomli==2.4.1 \
|
|
||||||
--hash=sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853 \
|
|
||||||
--hash=sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe \
|
|
||||||
--hash=sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5 \
|
|
||||||
--hash=sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d \
|
|
||||||
--hash=sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd \
|
|
||||||
--hash=sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26 \
|
|
||||||
--hash=sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54 \
|
|
||||||
--hash=sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6 \
|
|
||||||
--hash=sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c \
|
|
||||||
--hash=sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a \
|
|
||||||
--hash=sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd \
|
|
||||||
--hash=sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f \
|
|
||||||
--hash=sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5 \
|
|
||||||
--hash=sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9 \
|
|
||||||
--hash=sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662 \
|
|
||||||
--hash=sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9 \
|
|
||||||
--hash=sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1 \
|
|
||||||
--hash=sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585 \
|
|
||||||
--hash=sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e \
|
|
||||||
--hash=sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c \
|
|
||||||
--hash=sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41 \
|
|
||||||
--hash=sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f \
|
|
||||||
--hash=sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085 \
|
|
||||||
--hash=sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15 \
|
|
||||||
--hash=sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7 \
|
|
||||||
--hash=sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c \
|
|
||||||
--hash=sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36 \
|
|
||||||
--hash=sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076 \
|
|
||||||
--hash=sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac \
|
|
||||||
--hash=sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8 \
|
|
||||||
--hash=sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232 \
|
|
||||||
--hash=sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece \
|
|
||||||
--hash=sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a \
|
|
||||||
--hash=sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897 \
|
|
||||||
--hash=sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d \
|
|
||||||
--hash=sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4 \
|
|
||||||
--hash=sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917 \
|
|
||||||
--hash=sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396 \
|
|
||||||
--hash=sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a \
|
|
||||||
--hash=sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc \
|
|
||||||
--hash=sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba \
|
|
||||||
--hash=sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f \
|
|
||||||
--hash=sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257 \
|
|
||||||
--hash=sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30 \
|
|
||||||
--hash=sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf \
|
|
||||||
--hash=sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9 \
|
|
||||||
--hash=sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049
|
|
||||||
# via coverage
|
|
||||||
ty==0.0.51 \
|
ty==0.0.51 \
|
||||||
--hash=sha256:08adbe53fb8bc9e7f00e89bf1d3c875a02cda76d83f109d2e6ab1ff35a7bfa8c \
|
--hash=sha256:08adbe53fb8bc9e7f00e89bf1d3c875a02cda76d83f109d2e6ab1ff35a7bfa8c \
|
||||||
--hash=sha256:25a5b31e6f23fd5dc63ad29087ded09932409e4154e2fe07bbaed015035990bb \
|
--hash=sha256:25a5b31e6f23fd5dc63ad29087ded09932409e4154e2fe07bbaed015035990bb \
|
||||||
|
|||||||
@@ -8,10 +8,6 @@ asgiref==3.11.1 \
|
|||||||
# django-allauth
|
# django-allauth
|
||||||
# django-cors-headers
|
# django-cors-headers
|
||||||
# django-structlog
|
# django-structlog
|
||||||
async-timeout==5.0.1 \
|
|
||||||
--hash=sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c \
|
|
||||||
--hash=sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3
|
|
||||||
# via redis
|
|
||||||
attrs==26.1.0 \
|
attrs==26.1.0 \
|
||||||
--hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \
|
--hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \
|
||||||
--hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32
|
--hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32
|
||||||
@@ -1929,7 +1925,6 @@ typing-extensions==4.15.0 \
|
|||||||
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
# via
|
# via
|
||||||
# django-redis
|
# django-redis
|
||||||
# dulwich
|
|
||||||
# flexcache
|
# flexcache
|
||||||
# flexparser
|
# flexparser
|
||||||
# grpcio
|
# grpcio
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
[build.environment]
|
[build.environment]
|
||||||
VITE_DEMO = "true"
|
VITE_DEMO = "true"
|
||||||
PYTHON_VERSION = "3.11"
|
PYTHON_VERSION = "3.12"
|
||||||
|
|
||||||
# Send requests to subpath
|
# Send requests to subpath
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user