Skip to content

Commit 2824055

Browse files
committed
Merge branch 'main' into 457-fix-report-date-field
Signed-off-by: tdruez <tdruez@aboutcode.org>
2 parents 0e2fe0b + b640621 commit 2824055

132 files changed

Lines changed: 75 additions & 1806 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/run-unit-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
- name: Set up Python
4141
uses: actions/setup-python@v5
4242
with:
43-
python-version: "3.13"
43+
python-version: "3.14"
4444

4545
- name: Install python-ldap OS dependencies
4646
run: |

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# See https://aboutcode.org for more information about AboutCode FOSS projects.
77
#
88

9-
FROM python:3.13-slim
9+
FROM python:3.14-slim
1010

1111
LABEL org.opencontainers.image.source="https://github.com/aboutcode-org/dejacode"
1212
LABEL org.opencontainers.image.description="DejaCode"

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# See https://aboutcode.org for more information about AboutCode FOSS projects.
77
#
88

9-
PYTHON_EXE=python3.13
9+
PYTHON_EXE=python3.14
1010
VENV_LOCATION=.venv
1111
ACTIVATE?=. ${VENV_LOCATION}/bin/activate;
1212
MANAGE=${VENV_LOCATION}/bin/python manage.py

README.rst

Lines changed: 29 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,36 @@
1+
========
12
DejaCode
23
========
34

4-
DejaCode is a complete enterprise-level application to automate open source license
5-
compliance and ensure software supply chain integrity, powered by
6-
`ScanCode <https://github.com/nexB/scancode-toolkit>`_,
5+
DejaCode provides an enterprise-level application to automate open source license
6+
compliance and ensure software supply chain integrity, powered by `ScanCode <https://github.com/aboutcode-org/scancode-toolkit>`_,
77
the industry-leading code scanner.
88

9-
- Run scans and track all the open source and third-party products and components used
10-
in your software.
11-
- Apply usage policies at the license or component level, and integrate into
12-
ScanCode to ensure compliance.
13-
- Capture software inventories (SBOMs), generate compliance artifacts, and keep
14-
historical data.
15-
- Ensure FOSS compliance with enterprise-grade features and integrations for DevOps and
16-
software systems.
17-
- Scan a software package, simply by providing its Download URL, to get comprehensive
18-
details of its composition and create an SBOM.
19-
- Load software package data into DejaCode with the integration for the open source
20-
ScanCode.io and ScanCode Toolkit projects to create a product’s SBOM.
21-
- Track and report vulnerability tracking and reporting by integrating with the open
22-
source VulnerableCode project.
23-
- Create, publish and share SBOM documents in DejaCode, including detailed attribution
24-
documentation and custom reports in multiple file formats and standards, such as
25-
CycloneDX and SPDX.
26-
27-
Getting started
28-
---------------
29-
30-
The DejaCode documentation is available here: https://dejacode.readthedocs.io/
31-
32-
If you have questions please ask them in
33-
`Discussions <https://github.com/aboutcode-org/dejacode/discussions>`_.
34-
35-
If you want to contribute to DejaCode, start with our
36-
`Contributing <https://dejacode.readthedocs.io/en/latest/contributing.html>`_ page.
9+
Why Use DejaCode?
10+
=================
11+
12+
DejaCode is your system of record as a single source of truth with quality data for
13+
licenses, vulnerabilities, and package provenance and metadata, enabling you to ensure
14+
FOSS compliance with enterprise-grade features and integrations for DevOps and
15+
software systems.
16+
17+
Getting Started
18+
===============
19+
20+
Instructions to get you up and running on your local machine are at `Getting Started <https://dejacode.readthedocs.io/en/stable/index.html>`_
21+
22+
The DejaCode documentation also provides:
23+
24+
- prerequisites for installing the software.
25+
- instructions for configuring DejaCode integration with `ScanCode.io <https://github.com/aboutcode-org/scancode.io>`_, `VulnerableCode <https://github.com/aboutcode-org/vulnerablecode>`_, and `PurlDB <https://github.com/aboutcode-org/purldb>`_.
26+
- tutorials that provide hands-on guidance to DejaCode features.
27+
- how to setup usage policies.
28+
- how to capture and share software inventories (SBOMs) in multiple file formats and standards, such as CycloneDX and SPDX.
29+
- how to customize your own workflows and reports.
30+
- guidelines for contributing to code development.
3731

3832
Build and tests status
39-
----------------------
33+
======================
4034

4135
+------------+-------------------+
4236
| **Tests** | **Documentation** |
@@ -45,7 +39,7 @@ Build and tests status
4539
+------------+-------------------+
4640

4741
DejaCode License Notice
48-
-----------------------
42+
=======================
4943

5044
DejaCode is an enterprise-level application to automate open source license
5145
compliance and ensure software supply chain integrity, powered by ScanCode,
@@ -68,7 +62,7 @@ You should have received a copy of the GNU Affero General Public License
6862
along with this program. If not, see <https://www.gnu.org/licenses/>.
6963

7064
Commercial Services option
71-
---------------------------
65+
==========================
7266

7367
nexB offers a commercial services option for DejaCode.
7468
You can learn more about these options by contacting nexB at
@@ -84,7 +78,7 @@ https://www.nexb.com/contact-us/
8478
:alt: Documentation Build Status
8579

8680
Acknowledgements, Funding, Support and Sponsoring
87-
--------------------------------------------------------
81+
=================================================
8882

8983
This project is funded, supported and sponsored by:
9084

@@ -99,7 +93,6 @@ This project is funded, supported and sponsored by:
9993
- nexB Inc.
10094

10195

102-
10396
|europa| |dgconnect|
10497

10598
|ngi| |nlnet|
@@ -179,10 +172,3 @@ Communications Networks, Content and Technology under grant agreement No 1010695
179172
:target: https://nlnet.nl/discovery/
180173
:height: 40
181174
:alt: NGI Discovery logo
182-
183-
184-
185-
186-
187-
188-

dje/views.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
from collections import defaultdict
1515
from collections import namedtuple
1616
from contextlib import suppress
17-
from functools import partial
18-
from functools import wraps
1917
from urllib.parse import parse_qsl
2018
from urllib.parse import unquote_plus
2119
from urllib.parse import urlparse
@@ -1361,14 +1359,15 @@ def object_copy_get(request, m2m_formset_class):
13611359
ct = ContentType.objects.get_for_model(related_model)
13621360
m2m_initial.append({"ct": ct.id})
13631361

1362+
m2m_formset = m2m_formset_class(initial=m2m_initial, form_kwargs={"user": request.user})
13641363
return render(
13651364
request,
13661365
"admin/object_copy.html",
13671366
{
13681367
"copy_candidates": copy_candidates,
13691368
"update_candidates": update_candidates,
13701369
"form": form,
1371-
"m2m_formset": m2m_formset_class(initial=m2m_initial),
1370+
"m2m_formset": m2m_formset,
13721371
"opts": source_object._meta,
13731372
"preserved_filters": preserved_filters,
13741373
},
@@ -1388,11 +1387,7 @@ def object_copy_view(request):
13881387
This result as an extra step of presenting the target Dataspace list of
13891388
choices.
13901389
"""
1391-
# Declared here as it required in GET and POST cases.
1392-
m2m_formset_class = formset_factory(
1393-
wraps(M2MCopyConfigurationForm)(partial(M2MCopyConfigurationForm, user=request.user)),
1394-
extra=0,
1395-
)
1390+
m2m_formset_class = formset_factory(M2MCopyConfigurationForm, extra=0)
13961391

13971392
# Default entry point of the view, requested using a GET
13981393
# At that stage, we are only looking at what the User requested,
@@ -1421,7 +1416,7 @@ def object_copy_view(request):
14211416
exclude_update = {model_class: config_form.cleaned_data.get("exclude_update")}
14221417

14231418
# Append the m2m copy configuration
1424-
for m2m_form in m2m_formset_class(request.POST):
1419+
for m2m_form in m2m_formset_class(request.POST, form_kwargs={"user": request.user}):
14251420
if not m2m_form.is_valid():
14261421
continue
14271422
m2m_model_class = m2m_form.model_class

docs/doc_maintenance.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ That will create a /dejacode directory in your working directory.
2828
Now you can install the dependencies in a virtualenv::
2929

3030
cd dejacode
31-
python3.13 -m venv .
31+
python3.14 -m venv .
3232
source bin/activate
3333

3434
Now you can build the HTML documents locally::

docs/installation.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ Pre-installation Checklist
179179

180180
Before you install DejaCode, make sure you have the following prerequisites:
181181

182-
#. **Python: versions 3.13** found at https://www.python.org/downloads/
182+
#. **Python: versions 3.14** found at https://www.python.org/downloads/
183183
#. **Git**: most recent release available at https://git-scm.com/
184184
#. **PostgreSQL**: release 16 or later found at https://www.postgresql.org/ or
185185
https://postgresapp.com/ on macOS

pyproject.toml

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "dejacode"
77
version = "5.6.0"
88
description = "Automate open source license compliance and ensure supply chain integrity"
99
readme = "README.rst"
10-
requires-python = ">=3.13,<3.14"
10+
requires-python = ">=3.14,<3.15"
1111
license = "AGPL-3.0-only"
1212
license-files = ["LICENSE", "NOTICE"]
1313
authors = [
@@ -26,19 +26,20 @@ classifiers = [
2626
"Intended Audience :: Legal Industry",
2727
"Programming Language :: Python",
2828
"Programming Language :: Python :: 3 :: Only",
29-
"Programming Language :: Python :: 3.13",
29+
"Programming Language :: Python :: 3.14",
3030
"Topic :: Utilities"
3131
]
3232
dependencies = [
3333
# Base configuration tools
34-
"setuptools==80.9.0",
35-
"wheel==0.45.1",
36-
"pip==25.3",
34+
"setuptools==82.0.0",
35+
"wheel==0.46.3",
36+
"packaging==26.0",
37+
"pip==26.0.1",
3738
# Django
38-
"Django==5.2.9",
39-
"asgiref==3.11.0",
39+
"Django==5.2.11",
40+
"asgiref==3.11.1",
4041
"typing_extensions==4.15.0",
41-
"sqlparse==0.5.3",
42+
"sqlparse==0.5.5",
4243
# Django apps
4344
"django-crispy-forms==2.5",
4445
"crispy_bootstrap5==2025.6",
@@ -48,59 +49,53 @@ dependencies = [
4849
"confusable_homoglyphs==3.3.1",
4950
"django-guardian==3.2.0",
5051
"django-environ==0.12.0",
51-
"django-debug-toolbar==6.1.0",
52+
"django-debug-toolbar==6.2.0",
5253
# CAPTCHA
5354
"altcha==1.0.0",
5455
"django_altcha==0.9.0",
5556
# REST API
5657
"djangorestframework==3.16.1",
5758
# API documentation
58-
"drf-yasg==1.21.11",
59+
"drf-yasg==1.21.14",
5960
"uritemplate==4.2.0",
6061
"inflection==0.5.1",
6162
"pytz==2025.2",
6263
# Track failed login attempts
6364
"django-axes==8.0.0",
6465
# Multi-factor authentication
65-
"django-otp==1.6.3",
66+
"django-otp==1.7.0",
6667
"qrcode==8.2",
6768
"pypng==0.20220715.0",
6869
# Database
69-
"psycopg==3.2.12",
70+
"psycopg==3.3.2",
7071
# Cache
71-
"redis==7.1.0",
72-
# redis dependencies:
73-
"packaging==25.0",
74-
"pyparsing==3.2.5",
75-
"async-timeout==5.0.1",
76-
"Deprecated==1.2.18",
77-
"wrapt==1.17.3",
72+
"redis==7.1.1",
7873
# Antivirus
7974
"clamd==1.0.2",
8075
# Testing
8176
"model_bakery==1.10.1",
8277
# Task queue
8378
"rq==2.6.1",
8479
"croniter==6.0.0",
85-
"django-rq==3.2.1",
80+
"django-rq==3.2.2",
8681
"fakeredis==2.33.0",
8782
# Libs
8883
"certifi==2026.1.4",
89-
"urllib3==2.6.2",
84+
"urllib3==2.6.3",
9085
"python-dateutil==2.9.0.post0",
9186
"python-mimeparse==2.0.0",
92-
"PyJWT==2.10.1",
87+
"PyJWT==2.11.0",
9388
"natsort==8.4.0",
9489
"six==1.17.0",
9590
"requests==2.32.5",
9691
"idna==3.11",
9792
"charset-normalizer==3.4.4",
98-
"PyYAML==6.0.2",
99-
"cython==3.1.1",
93+
"PyYAML==6.0.3",
94+
"cython==3.2.4",
10095
"zipp==3.23.0",
10196
"XlsxWriter==3.2.9",
10297
# Markdown
103-
"markdown==3.10",
98+
"markdown==3.10.2",
10499
"bleach==6.3.0",
105100
"bleach_allowlist==1.0.3",
106101
"webencodings==0.5.1",
@@ -111,10 +106,10 @@ dependencies = [
111106
"defusedxml==0.7.1",
112107
# LDAP Auth
113108
"python_ldap==3.4.5",
114-
"setuptools-scm==9.2.1",
115-
"pyasn1==0.6.1",
109+
"setuptools-scm==9.2.2",
110+
"pyasn1==0.6.2",
116111
"pyasn1-modules==0.4.2",
117-
"django-auth-ldap==5.2.0",
112+
"django-auth-ldap==5.3.0",
118113
# license expressions
119114
"boolean.py==5.0",
120115
"license-expression==30.4.4",
@@ -126,23 +121,22 @@ dependencies = [
126121
"swapper==1.4.0",
127122
# AboutCode Toolkit
128123
"aboutcode_toolkit==11.1.1",
129-
"click==8.2.1",
124+
"click==8.3.1",
130125
"Jinja2==3.1.6",
131-
"MarkupSafe==3.0.2",
126+
"MarkupSafe==3.0.3",
132127
"saneyaml==0.6.1",
133128
"openpyxl==3.1.5",
134129
"et-xmlfile==2.0.0",
135130
# PackageURL
136131
"packageurl-python==0.17.6",
137132
# Gunicorn
138-
"gunicorn==23.0.0",
133+
"gunicorn==25.0.3",
139134
# SPDX validation
140-
"jsonschema==4.24.0",
141-
"jsonschema-specifications==2025.4.1",
142-
"referencing==0.36.2",
143-
"rpds-py==0.25.1",
135+
"jsonschema==4.26.0",
136+
"jsonschema-specifications==2025.9.1",
137+
"referencing==0.37.0",
138+
"rpds-py==0.30.0",
144139
"attrs==25.4.0",
145-
"pyrsistent==0.20.0",
146140
# CycloneDX
147141
"cyclonedx-python-lib==11.6.0",
148142
"sortedcontainers==2.4.0",
@@ -152,11 +146,11 @@ dependencies = [
152146
"gitdb==4.0.12",
153147
"smmap==5.0.2",
154148
# CSAF
155-
"pydantic==2.11.5",
156-
"pydantic-core==2.33.2",
157-
"typing-inspection==0.4.1",
158-
"maturin==1.8.6",
159-
"setuptools-rust==1.11.1",
149+
"pydantic==2.12.5",
150+
"pydantic-core==2.41.5",
151+
"typing-inspection==0.4.2",
152+
"maturin==1.11.5",
153+
"setuptools-rust==1.12.0",
160154
"annotated-types==0.7.0",
161155
"semantic-version==2.10.0",
162156
# OpenVEX
@@ -166,7 +160,7 @@ dependencies = [
166160
[project.optional-dependencies]
167161
dev = [
168162
# Linter and Validation
169-
"ruff==0.14.0",
163+
"ruff==0.15.0",
170164
# Parallel testing
171165
"tblib==3.2.2"
172166
]
@@ -191,6 +185,7 @@ where = ["."]
191185

192186
[tool.ruff]
193187
line-length = 100
188+
target-version = "py313"
194189
exclude = [
195190
"migrations",
196191
"bin",
-9.76 KB
Binary file not shown.

0 commit comments

Comments
 (0)