This is a Django application that provides name resolution services to neurobank* using an HTTP API.
The data management strategy behind neurobank is simple: every
resource gets a unique identifier. As long as you use the correct
identifier, you can unambiguously locate the resource. Resources include
sources, which are used to control an experiment, and data, which
result from running the experiment. Identifiers can be pretty much
anything that’s encodable in a URL and isn’t too long. You can use
manually-assigned identifiers like st32_1_2_1 or let the API
generate short, memorable codes like heengei8
To use this strategy, you need to be able to do two things: register each resource you create somewhere, and then resolve resource names to locations so that you can access your data. Being able to attach searchable metadata to your resources is pretty handy, too. This software provides a backend for these tasks. You’ll also need neurobank or some other client software to take care of storing your files.
This software is licensed for you to use under the BSD License. See COPYING for details.
- Requires Python 3.10+. Runs on Django 4.2 LTS and 5.1.
- Install the package:
pip install django-neurobank - Add
neurobankto your INSTALLED_APPS setting like this:
INSTALLED_APPS = (
...
'rest_framework',
'django_filters',
'nbank_registry',
)neurobank uses django-sendfile2 to efficiently serve large
files, you will need to set settings.SENDFILE_BACKEND and possibly
other keys, depending on which reverse proxy you are using. Consult the
documentation for
django-sendfile2
for details.
- Include the neurobank URLconf in your project urls.py like this:
url(r'^neurobank/', include(nbank_registry.urls')),- Run
python manage.py migrateto create the database tables. - Start the development server and point your browser to http://127.0.0.1:8000/neurobank/ to view records and inspect the API.
Documentation is still in progress. We need a list of endpoints and supported verbs. However, the interface can be accessed through a browser.
Deleting is not supported in the HTTP API. A fundamental concept behind a registry is that resources have unique identifiers, which are never re-used or changed. You can edit locations, metadata, and other attributes using PUT. If you desperately need to change a name or delete an identifier, you’ll have to use the Django database admin or directly access the backing database.
This application is still under development, and you should probably only allow access from trusted networks. Authentication is required to modify or add resources, archives, or data types. Authentication uses the django user app, and credentials are sent in plain text. Your site should only be deployed as a reverse proxy behind an encrpyting https-enabled web server like nginx.
Recommend using uv for development.
Run uv sync to create a virtual environment and install
dependencies. uv sync --no-dev --frozen for deployment.
Testing: uv run pytest. Settings are in
nbank_registry/tests/settings.py. By default tests run against an
in-memory sqlite database. To test against postgres (as CI does), run
uv sync --group postgres and set NBANK_TEST_DB=postgres (see
settings.py for connection env vars).