Frequently Asked Questions (FAQ)
Below are some of the most commonly asked technical and development questions about the RDMC project, along with their answers. If you want to see general user faq then go to Frequently Asked Questions (FAQ)
Installation & Setup
1. How do I set up the development environment?
Clone the repository, activate your virtual environment, and install all dependencies including dev and docs extras:
git clone https://gitlab.gwdg.de/nfdixcs/a1-architecture/rdmc-prototype.git
venv\Scripts\Activate
python -m pip install ".[dev,docs]"
Then create a .env file from the .env.example before running the project.
2. Where do I find the example .env file?
An example configuration file is available directly on .env.example.
3. Do I need to create the .env file before running Docker, and why might the app fail to start?
Yes. The .env file must be created in the project root before running docker-compose up -d --build.
The most common cause of the application failing to start or not starting correctly in Docker is a missing or incomplete .env file. See Docker Setup for the full steps.
4. How do I run the project using Docker?
Make sure Docker is running on your system, then execute the following command in your terminal:
docker-compose up -d --build
5. How do I rebuild the documentation after making changes?
cd docs/0.6.0
make html
If changes are not reflecting, clean the build cache first:
rmdir /s /q build\doctrees && make html
Architecture & Apps
6. How is the Django project structured?
The project is split into three Django apps, each with a clear responsibility:
rdmc— core app, controls container lifecycle, metadata, and manifest generationrdmc_organiser— manages the step-by-step container creation workflow and form logicrdmc_publish— handles all publish-related logic (Zenodo, Dataverse, Search Portal, ePIC PID)
See Apps Overview for a full breakdown.
7. Which app should I modify for a specific feature?
Container or artifact logic →
rdmcWizard steps, questions, or form fields →
rdmc_organiserPublishing, registry, or PID updates →
rdmc_publish
APIs & Integrations
8. How does the Zenodo integration work internally?
The RDMC prototype communicates with a dedicated Zenodo API microservice.
The flow is: OAuth2 authorize → token exchange → file upload → metadata upload.
All calls go to https://api.nfdixcs.org/zenodo.
See Zenodo Integration for endpoint details and code examples.
9. How does the Search Portal registration work?
After publishing, a POST request is sent to https://api.nfdixcs.org/registryservice/rdmcs
with a JSON payload containing the container metadata, PID, and artifact details.
See Search Portal for the full payload structure and field reference.
10. When is the ePIC PID created and updated?
The PID is automatically created when the container is sealed and updated when it is published.
It is stored in the manifest.rdmc file and updated via the epic_handler in rdmc_publish/handlers/epic_pid.py.
11. Where is the PID stored?
The PID is saved directly inside the container’s manifest.rdmc file and can also
be viewed at any time via the Handle Registry.
12. How do I add a new API endpoint to the Registry Service?
The Registry Service is a separate microservice. Its source code is on GitLab and the interactive API reference is at api.nfdixcs.org/registryservice/docs.
Logging
13. How do I add logging to a new function?
Use the @log_process decorator — it automatically logs start, success, and failure:
import logging
from RDMC_Proto.log_utils import log_process
logger = logging.getLogger('app')
@log_process("My Process Label")
def my_function(request):
...
Always use logging.getLogger('app') — never the django logger for app-level code.
14. Where are log files stored and how long are they kept?
Logs are written to LOG_DIR in daily files (rdmc.YYYY-MM-DD.log).
User-specific logs go into a subfolder named after the user.
Files older than 30 days are automatically deleted on each rotation.
15. Why is my function logging a warning instead of success?
The @log_process decorator logs a warning if the wrapped function returns None.
Make sure your function explicitly returns a value.
Contributing & Issues
19. How do I report a bug or propose a change?
Open an issue on the GitLab issue tracker. Follow the workflow: Create → Assign → Link to Merge Request → Review → Close. Check closed issues first to avoid duplicates. See Open Issues for details.