The 4TU.ResearchData and Nikhef data repository system
Project description
djehuty
This Python package provides the repository system for 4TU.ResearchData and Nikhef.
Security
To report a vulnerability, please see SECURITY.md.
Development environment
Prerequisites
Getting started
git clone https://github.com/4TUResearchData/djehuty.git
cd djehuty/
Running the development environment
To spin up a fully working local instance, run:
just dev
This builds and starts Docker containers for djehuty and Virtuoso (SPARQL store). On first run, the database is automatically initialized with categories, licences, and a dev account with full admin privileges — no extra setup needed.
Once running:
- Djehuty: http://localhost:8080 (auto-login, no auth setup needed)
- Virtuoso SPARQL: http://localhost:8890/sparql (useful for troubleshooting)
Edit any Python file under src/ and the server reloads automatically.
To start the development environment with a Virtuoso database backup (e.g. to test against specific production data):
just db_backup=path/to/prod-2025-10-09_#1.bp dev
Point db_backup at any one of the backup files. All siblings sharing
the same prefix in that directory are applied in order, so a full backup
plus its incrementals (e.g. prod-2025-10-09_#1.bp, …_#2.bp,
…_#3.bp) are restored together.
To stop and remove the development environment, run just clean.
To see all available commands, run just --list.
Running in production
Djehuty needs a SPARQL 1.1 endpoint such as Virtuoso OSE or Jena Fuseki to store its state.
Copy the example configuration and adjust it for your environment:
cp etc/djehuty/djehuty-example-config.xml djehuty.xml
JSON is also supported and recommended for new deployments
(see djehuty-example-config.json);
pass it the same way with --config-file djehuty.json.
First run
Upon first run, djehuty needs to initialize the database with categories,
licences and accounts. To do so, pass the --initialize option to the
djehuty web command:
djehuty web --initialize --config-file djehuty.xml
Subsequent runs
After the database has been initialized, you can remove the --initialize
option:
djehuty web --config-file=djehuty.xml
Running the tests
The project includes an end-to-end test suite built with Playwright and pytest. Tests run against a live djehuty + Virtuoso stack seeded with test data — all in containers, so no host Python or browser setup is required.
just test
That single command builds the test image (with Playwright and
chromium), brings up Virtuoso and djehuty, loads the SPARQL
permissions, runs --initialize, applies the seed dataset, and runs
the suite inside the docker network. Coverage data lands in
docker/coverage/; failure screenshots in docker/test-results/.
Filter the run with any pytest argument:
just test -m smoke # one marker
just test -k test_homepage # by keyword
just test tests/test_auth.py # specific file
Marker isolation
CI runs each marker (smoke, auth, dataset, admin, embargo,
citation, versioning, …) in its own job with a fresh stack, so a
test never sees data left over from another marker. just test runs
everything against one shared stack, which is faster but means a few
state-sensitive tests can fail locally that pass in CI. When that
happens, run the affected marker on its own:
just clean # drop volumes for a truly fresh stack
just test -m citation
CI
Tests run automatically on every push via GitHub Actions. Each runner
in the matrix invokes just test -m <marker> against the same compose
stack used locally, so a green just test on your laptop reproduces
what CI sees. Screenshots are captured on failure and uploaded as
artifacts; coverage from each shard is combined into a single report.
Contact information
- Maintainers: a.e.wilczynska@tudelft.nl, g.kuhn@tudelft.nl, k.f.deAraujo@tudelft.nl
- Security issues: djehuty@4tu.nl
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file djehuty-26.3.1.tar.gz.
File metadata
- Download URL: djehuty-26.3.1.tar.gz
- Upload date:
- Size: 4.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b39b4f9773ffe46f53fd85955ec3c324875d71039add95912e86e93ab3c78457
|
|
| MD5 |
da24ec4fd17abf883a41eb3be974a69a
|
|
| BLAKE2b-256 |
52f0b47676b9151aa270dc367eb4f5736aca87c2000a5f707ff8cd888e64c96c
|
Provenance
The following attestation bundles were made for djehuty-26.3.1.tar.gz:
Publisher:
release.yml on 4TUResearchData/djehuty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
djehuty-26.3.1.tar.gz -
Subject digest:
b39b4f9773ffe46f53fd85955ec3c324875d71039add95912e86e93ab3c78457 - Sigstore transparency entry: 2047581299
- Sigstore integration time:
-
Permalink:
4TUResearchData/djehuty@eed560146b532b6bbec06f356c0315eebfd83d31 -
Branch / Tag:
refs/tags/v26.3.1 - Owner: https://github.com/4TUResearchData
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@eed560146b532b6bbec06f356c0315eebfd83d31 -
Trigger Event:
push
-
Statement type:
File details
Details for the file djehuty-26.3.1-py3-none-any.whl.
File metadata
- Download URL: djehuty-26.3.1-py3-none-any.whl
- Upload date:
- Size: 3.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c22e1b8a2126fa4ee4105a38cc4850a98fcd9e859b28b9d6b8ad068b817e7fb
|
|
| MD5 |
cf8afdfb75f370960757aed1d16f68ff
|
|
| BLAKE2b-256 |
83cfe9ac4518fcc566f7aeb0c20c8b47b6c343745cd302a47ce5426b937c58c6
|
Provenance
The following attestation bundles were made for djehuty-26.3.1-py3-none-any.whl:
Publisher:
release.yml on 4TUResearchData/djehuty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
djehuty-26.3.1-py3-none-any.whl -
Subject digest:
4c22e1b8a2126fa4ee4105a38cc4850a98fcd9e859b28b9d6b8ad068b817e7fb - Sigstore transparency entry: 2047581345
- Sigstore integration time:
-
Permalink:
4TUResearchData/djehuty@eed560146b532b6bbec06f356c0315eebfd83d31 -
Branch / Tag:
refs/tags/v26.3.1 - Owner: https://github.com/4TUResearchData
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@eed560146b532b6bbec06f356c0315eebfd83d31 -
Trigger Event:
push
-
Statement type: