Metadata-Version: 2.4
Name: sampledb
Version: 0.32.0
Summary: A sample and measurement metadata database
Author: Dorothea Henkel, Du Kim Nguyen, Frederik Peters
Author-email: Florian Rhiem <f.rhiem@fz-juelich.de>, Daniel Kaiser <d.kaiser@fz-juelich.de>, Malte Deckers <m.deckers@fz-juelich.de>, Jannik Streitberg <j.streitberg@fz-juelich.de>, Björn Mayer <b.mayer@fz-juelich.de>, René Noffke <r.noffke@fz-juelich.de>, Nicolas Carpi <nico-git@deltablot.email>, Lukas Engering <l.engering@fz-juelich.de>, Maximilian Heuwes <m.heuwes@fz-juelich.de>, Tim Hallmann <t.hallmann@fz-juelich.de>, Torben Moll <t.moll@fz-juelich.de>, Nils Holle <nils.holle@uni-muenster.de>, Moritz Hannemann <m.hannemann@fz-juelich.de>, Moritz Velde <m.velde@fz-juelich.de>
Maintainer-email: Florian Rhiem <f.rhiem@fz-juelich.de>
License-Expression: MIT
Project-URL: Homepage, https://github.com/sciapp/sampledb
Project-URL: Documentation, https://scientific-it-systems.iffgit.fz-juelich.de/SampleDB/
Project-URL: Repository, https://github.com/sciapp/sampledb.git
Project-URL: Issues, https://github.com/sciapp/sampledb/issues
Project-URL: Changelog, https://scientific-it-systems.iffgit.fz-juelich.de/SampleDB/changelog
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Framework :: Flask
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: annotated-types==0.7.0
Requires-Dist: APScheduler==3.10.4
Requires-Dist: autocommand==2.2.2
Requires-Dist: babel==2.17.0
Requires-Dist: bcrypt==5.0.0
Requires-Dist: beautifulsoup4==4.14.2
Requires-Dist: bleach==6.2.0
Requires-Dist: blinker==1.9.0
Requires-Dist: Brotli==1.1.0
Requires-Dist: certifi==2025.10.5
Requires-Dist: cffi==2.0.0
Requires-Dist: charset-normalizer==3.4.4
Requires-Dist: cheroot==11.0.0
Requires-Dist: CherryPy==18.10.0
Requires-Dist: choreographer==1.1.2
Requires-Dist: click==8.3.0
Requires-Dist: colorhash==2.1.0
Requires-Dist: configparser==7.2.0
Requires-Dist: cryptography==43.0.3
Requires-Dist: cryptojwt==1.10.0
Requires-Dist: cssselect2==0.8.0
Requires-Dist: defusedxml==0.7.1
Requires-Dist: dnspython==2.8.0
Requires-Dist: elementpath==4.8.0
Requires-Dist: email-validator==2.3.0
Requires-Dist: fido2==2.0.0
Requires-Dist: Flask==3.1.2
Requires-Dist: flask-babel==4.0.0
Requires-Dist: flask-cors==6.0.1
Requires-Dist: Flask-HTTPAuth==4.8.0
Requires-Dist: Flask-Login==0.6.3
Requires-Dist: Flask-Mail==0.10.0
Requires-Dist: flask-orjson==2.0.0
Requires-Dist: Flask-SQLAlchemy==3.1.1
Requires-Dist: Flask-WTF==1.2.2
Requires-Dist: flexcache==0.3
Requires-Dist: flexparser==0.4
Requires-Dist: fonttools==4.60.1
Requires-Dist: furl==2.1.4
Requires-Dist: greenlet==3.2.4
Requires-Dist: idna==3.11
Requires-Dist: iniconfig==2.1.0
Requires-Dist: itsdangerous==2.2.0
Requires-Dist: jaraco.collections==5.2.1
Requires-Dist: jaraco.context==6.0.1
Requires-Dist: jaraco.functools==4.3.0
Requires-Dist: jaraco.text==4.0.0
Requires-Dist: Jinja2==3.1.6
Requires-Dist: kaleido==1.1.0
Requires-Dist: ldap3==2.9.1
Requires-Dist: logistro==2.0.0
Requires-Dist: Markdown==3.9
Requires-Dist: MarkupSafe==3.0.3
Requires-Dist: more-itertools==10.8.0
Requires-Dist: narwhals==2.8.0
Requires-Dist: numpy==2.3.3
Requires-Dist: orderedmultidict==1.0.1
Requires-Dist: orjson==3.11.3
Requires-Dist: packaging==25.0
Requires-Dist: pillow==11.3.0
Requires-Dist: Pint==0.25
Requires-Dist: platformdirs==4.5.0
Requires-Dist: plotly==6.3.1
Requires-Dist: pluggy==1.6.0
Requires-Dist: portend==3.2.1
Requires-Dist: psutil==7.1.0
Requires-Dist: psycopg2-binary==2.9.11
Requires-Dist: pyasn1==0.6.1
Requires-Dist: pycparser==2.23
Requires-Dist: pydantic==2.12.1
Requires-Dist: pydantic_core==2.41.3
Requires-Dist: pydyf==0.11.0
Requires-Dist: Pygments==2.19.2
Requires-Dist: pyOpenSSL==24.2.1
Requires-Dist: pyotp==2.9.0
Requires-Dist: pyphen==0.17.2
Requires-Dist: pysaml2==7.5.4
Requires-Dist: pytest==8.4.2
Requires-Dist: pytest-timeout==2.4.0
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: pytz==2025.2
Requires-Dist: qrcode==8.2
Requires-Dist: requests==2.32.5
Requires-Dist: scipy==1.16.2
Requires-Dist: setuptools==80.9.0
Requires-Dist: simple_openid_connect==2.3.2
Requires-Dist: simplejson==3.20.2
Requires-Dist: six==1.17.0
Requires-Dist: soupsieve==2.8
Requires-Dist: SQLAlchemy==2.0.41
Requires-Dist: tempora==5.8.1
Requires-Dist: tinycss2==1.4.0
Requires-Dist: tinyhtml5==2.0.0
Requires-Dist: typing-inspection==0.4.2
Requires-Dist: typing_extensions==4.15.0
Requires-Dist: tzlocal==2.0.0
Requires-Dist: urllib3==2.5.0
Requires-Dist: weasyprint==66.0
Requires-Dist: webencodings==0.5.1
Requires-Dist: Werkzeug==3.1.3
Requires-Dist: WTForms==3.2.1
Requires-Dist: xmlschema==2.5.1
Requires-Dist: zc.lockfile==4.0
Requires-Dist: zopfli==0.2.3.post1
Provides-Extra: test
Requires-Dist: coverage; extra == "test"
Requires-Dist: jsonschema; extra == "test"
Requires-Dist: lxml; extra == "test"
Requires-Dist: pypdf; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: pytest-xdist; extra == "test"
Requires-Dist: requests-mock; extra == "test"
Requires-Dist: rocrate; extra == "test"
Requires-Dist: roc-validator==0.5.0; extra == "test"
Requires-Dist: selenium; extra == "test"
Provides-Extra: analyze
Requires-Dist: flask-httpauth-stubs; extra == "analyze"
Requires-Dist: mypy; extra == "analyze"
Requires-Dist: pycodestyle; extra == "analyze"
Requires-Dist: pyflakes; extra == "analyze"
Requires-Dist: pylint; extra == "analyze"
Requires-Dist: types-Markdown; extra == "analyze"
Requires-Dist: types-babel; extra == "analyze"
Requires-Dist: types-beautifulsoup4; extra == "analyze"
Requires-Dist: types-bleach; extra == "analyze"
Requires-Dist: types-ldap3; extra == "analyze"
Requires-Dist: types-requests; extra == "analyze"
Provides-Extra: documentation
Requires-Dist: pygments; extra == "documentation"
Requires-Dist: pytest; extra == "documentation"
Requires-Dist: selenium; extra == "documentation"
Requires-Dist: Sphinx; extra == "documentation"
Requires-Dist: sphinxcontrib.httpdomain; extra == "documentation"
Requires-Dist: vcversioner; extra == "documentation"
Dynamic: license-file

<img src="https://raw.githubusercontent.com/sciapp/sampledb/develop/docs/static/img/logo.svg" align="right" width="60" height="60" />

# SampleDB

[![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![DOI](https://zenodo.org/badge/221237572.svg)](https://zenodo.org/badge/latestdoi/221237572)
[![DOI](https://joss.theoj.org/papers/10.21105/joss.02107/status.svg)](https://doi.org/10.21105/joss.02107)

SampleDB is a web-based sample and measurement metadata database.

## Documentation

You can find the documentation for the current release at https://scientific-it-systems.iffgit.fz-juelich.de/SampleDB/.

## Getting Started

We recommend using our pre-built Docker images for setting up `SampleDB`. You will need two containers, one for a PostgreSQL database and another for SampleDB itself, and a directory to store all files in.

If you would like to set up a development version of SampleDB instead, please see the [contribution guide](https://github.com/sciapp/sampledb/blob/develop/CONTRIBUTING.md).

If you do not have Docker installed yet, please [install Docker](https://docs.docker.com/engine/install/).

### Using docker-compose

First, get the [docker-compose.yml](https://raw.githubusercontent.com/sciapp/sampledb/develop/docker-compose.yml.dist) configuration file. You can git clone this repo or just get the file:

```bash
curl https://raw.githubusercontent.com/sciapp/sampledb/develop/docker-compose.yml.dist --output docker-compose.yml
```

Then simply bring everything up with:

```bash
docker compose up -d
```

### Using docker commands

First, start your database container:

```bash
docker run \
    -d \
    -e POSTGRES_PASSWORD=password \
    -e PGDATA=/var/lib/postgresql/data/pgdata \
    -v `pwd`/pgdata:/var/lib/postgresql/data/pgdata:rw \
    --restart=always \
    --name sampledb-postgres \
    postgres:15
```

Next, start the SampleDB container:

```bash
docker run \
    -d \
    --link sampledb-postgres \
    -e SAMPLEDB_CONTACT_EMAIL=sampledb@example.com \
    -e SAMPLEDB_MAIL_SERVER=mail.example.com \
    -e SAMPLEDB_MAIL_SENDER=sampledb@example.com \
    -e SAMPLEDB_ADMIN_PASSWORD=password \
    -e SAMPLEDB_SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://postgres:password@sampledb-postgres:5432/postgres \
    --restart=always \
    --name sampledb \
    -p 8000:8000 \
    sciapp/sampledb:0.32.0
```

### Once it's started

This will start a minimal SampleDB installation at `http://localhost:8000` and allow you to sign in with the username `admin` and the password `password` (which you should change immediately after signing in).

To learn how to further set up SampleDB, please follow the rest of the [Getting Started guide](https://scientific-it-systems.iffgit.fz-juelich.de/SampleDB/administrator_guide/getting_started.html).

## Contributing

If you want to improve SampleDB, please read the [contribution guide](https://github.com/sciapp/sampledb/blob/develop/CONTRIBUTING.md) for a few notes on how to report issues or submit changes.

## Support

If you run into any issues setting up or running SampleDB, please [open an issue on GitHub](https://github.com/sciapp/sampledb/issues/new).

You can also subscribe to the [SampleDB mailing list](https://lists.fz-juelich.de/postorius/lists/sampledb.lists.fz-juelich.de/) to learn about new features and to discuss any questions regarding SampleDB.
