pyrobird is a python backend for Firebird HENP event display
Project description
pyrobird
Installation
pip install pyrobird
Optional dependencies:
batch- install playwright, that allows to make screenshots in batch modexrootd- install libraries to read xrootd located files and URLs starting withroot://dev- install pytest and other development requirements, mainly to run tests
If using batch for screenshots, after installing playwright, you need to install browser binaries:
python -m playwright install chromium
If installed via pip, xrootd library requires compilation, so the system should have cmake,
compiler and some xrootd dependencies installed.
For debian/ubuntu the packages to install to use xrootd:
sudo apt install build-essential libxrootd-client-dev cmake zlib1g-dev uuid-dev libssl-dev python3-dev
Development installation
It is recommended to use uv
cd pyrobird # directory inside main firebird repo. NOT pyrobird/pyrobird - this is lib
uv venv # create virtual environment
source .venv/bin/activate # activate it
uv sync # install all requirements
Still possible without uv
python -m pip install --editable .[dev,batch]
# with xrootd
python -m pip install --editable .[dev,batch,xrootd]
Running with Gunicorn (development mode)
gunicorn --bind 0.0.0.0:5454 pyrobird.server:flask_app --log-level debug --capture-output
Contributing
- PEP8 is required
- Use Numpy style dockstring comments
- pytest is used for unit tests. Aim for comprehensive coverage of the new code.
- Utilize type hints wherever is possible to enhance readability and reduce errors.
- Use of specific exceptions for error handling is better. As described in the Python documentation rather than general exceptions.
- Contributions are subject to code review. Please submit pull requests (PRs) against the
mainbranch for any contributions. - Manage dependencies appropriately. Add new dependencies to
pyproject.toml. Provide a justification for new dependencies
Testing
To install dependencies with testing libraries included
pip install .[test]
Navigate to the pyrobird/tests and execute:
pytest
# To stop immediately on error and enter debugging mode
pytest -x --pdb
Development install
python -m pip install --upgrade --editable .[dev]
Pyrobird Server
This server allows Firebird to work with local files and the local file system as well as to complement frontend features such as opening XRootD files, etc.
Serve Pirobird locally and have access to files in current directory:
pyrobird serve
pyrobird (backend) allows Firebird (frontend) to access certain files on your system.
For this reason pyrobird server has multiple endpoints such as /api/v1/download
which allows to download files. There are library files served and by default Firebird
has access to files in your current directory or a directory provided via --work-path flag
Available Options
| Option | Short | Type | Default | Description |
|---|---|---|---|---|
--allow-any-file |
Flag | False |
Allow unrestricted access to download files in the system. When enabled, the server allows downloads of all files which the running user has access to. Use with caution: It is considered dangerous in production environments. | |
--allow-cors |
Flag | False |
Enable CORS for downloaded files. This option should be used if you need to support web applications from different domains accessing the files, such as serving your server from a central Firebird server. | |
--disable-files |
Flag | False |
Disable all file downloads from the server. This option will prevent any file from being downloaded, enhancing security by restricting file access. | |
--work-path TEXT |
String | CWD |
Set the base directory path for file downloads. Defaults to the current working directory. Use this option to specify where the server should look for files when handling download requests. |
--allow-any-file- allows unrestricted access to download files in a system. When enabled, the server allows downloads of all files that user has access to. When disabled - only files in--work-pathand its subdirectories are allowed to be downloaded. This option could be considered safe on personal machines with a single user, who runs localhost server in a terminal(!) It is considered dangerous in all other cases: farms, interactive nodes, production environments, servers, etc. Just think
/etc/passwdwill be accessible throughlocalhost:port/api/v1/download?f=/etc/passwdSo security wise, it is better to use
--work-paththan--allow-any-file
-
Start server with default settings, Firebird works with files in current directory:
pyrobird serve -
Set where Firebird will take files from:
pyrobird serve --work-path=/home/username/datafiles
Now if you set file
local://filename.rootin Firebird UI, the file/home/username/datafiles/filename.rootwill be opened
API Documentation
This is technical explanation of what is under the hood of the server part
Features
- Secure File Downloading: Download files with access control to prevent unauthorized access.
- EDM4eic Event Processing: Extract and convert specific events from EDM4eic files to JSON.
- Static File Serving: Serve frontend assets seamlessly alongside API endpoints.
- Dynamic Configuration: Serve configuration files with real-time server information.
- CORS Support: Enable Cross-Origin Resource Sharing for specified routes.
Configuration Options
- DOWNLOAD_PATH:
str[getcwd()], Specifies the directory from which files can be downloaded when using relative paths. - PYROBIRD_DOWNLOAD_IS_DISABLED:
bool[False]If set toTrue, all download functionalities are disabled. - PYROBIRD_DOWNLOAD_IS_UNRESTRICTED:
bool[False], allows unrestricted access to download any file, including sensitive ones. - CORS_IS_ALLOWED:
bool[False], If set toTrue, enables Cross-Origin Resource Sharing (CORS) for download routes.
The API provides endpoints for downloading files, processing EDM4eic events, and serving configuration files. It also includes static file serving for frontend assets.
Download File
Endpoint
GET /api/v1/download
GET /api/v1/download/<path:filename>
Description
Allows users to download specified files. The download can be restricted based on configuration settings to prevent unauthorized access to sensitive files.
Parameters
-
Query Parameters:
filename(optional): The name or path of the file to download.f(optional): An alternative parameter for the filename.
-
Path Parameters:
filename(optional): The path of the file to download.
Note: You can provide the filename either as a query parameter or as part of the URL path.
Usage
-
Download via Query Parameter
curl -O "http://localhost:5454/api/v1/download?filename=example.txt"
-
Download via URL Path
curl -O "http://localhost:5454/api/v1/download/example.txt"
Security Considerations
- Access Control: Ensure that
DOWNLOAD_ALLOW_UNRESTRICTEDis set appropriately to prevent unauthorized access. - Path Traversal: The server sanitizes file paths to prevent directory traversal attacks.
Open EDM4eic Event
Endpoint
GET /api/v1/convert/edm4eic/<int:event_number>
GET /api/v1/convert/edm4eic/<int:event_number>/<path:filename>
Description
Processes an EDM4eic file to extract a specific event and returns the event data in JSON format. Supports both local and remote files.
Parameters
-
Path Parameters:
event_number(required): The number of the event to extract.filename(optional): The path or URL of the EDM4eic file.
-
Query Parameters:
filename(optional): The name or path of the file to process.f(optional): An alternative parameter for the filename.
Note: You can provide the filename either as a query parameter or as part of the URL path.
Usage
-
Process Local File via Query Parameter
curl "http://localhost:5454/api/v1/convert/edm4eic/5?filename=path/to/file.edm4eic.root"
-
Process Remote File via URL Path
curl "http://localhost:5454/api/v1/convert/edm4eic/5/http://example.com/data/file.edm4eic.root"
Asset Configuration
Endpoint
GET /assets/config.jsonc
Description
Serves the asset configuration file (config.jsonc) with additional server information injected dynamically.
Usage
curl "http://localhost:5454/assets/config.jsonc"
Publishing
pip install --upgrade build twine
python -m build && python -m twine upload dist/*
# You will have to setup your pip authentication key
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 pyrobird-2025.12rc1.tar.gz.
File metadata
- Download URL: pyrobird-2025.12rc1.tar.gz
- Upload date:
- Size: 97.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70b515de1de6642994af4cb91d2f41eb971762230df6a0b3561251e6c74350e7
|
|
| MD5 |
5bab839137877a6d442ae6cd9839fe81
|
|
| BLAKE2b-256 |
24cd175d294fbd34c2bdeed458914c6522079ce240e11191aff7839a8306cbae
|
File details
Details for the file pyrobird-2025.12rc1-py3-none-any.whl.
File metadata
- Download URL: pyrobird-2025.12rc1-py3-none-any.whl
- Upload date:
- Size: 97.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fd75d643181a6ca6bc5b5eee824c841b63322d470920aebc5f26b096e088372
|
|
| MD5 |
654c30fc6c74211583fb55cfbfbe28bc
|
|
| BLAKE2b-256 |
02a2375aa94cb820df8b38cbb1479c634f4c79bbb60936502bba4431aacfab8c
|