Back to home page

EIC code displayed by LXR

 
 

    


Warning, /firebird/pyrobird/README.md is written in an unsupported language. File is not indexed.

0001 # pyrobird
0002 
0003 [![PyPI - Version](https://img.shields.io/pypi/v/pyrobird.svg)](https://pypi.org/project/pyrobird)
0004 [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyrobird.svg)](https://pypi.org/project/pyrobird)
0005 
0006 -----
0007 
0008 ## Installation
0009 
0010 ```bash
0011 pip install pyrobird
0012 ```
0013 
0014 Optional dependencies:
0015 
0016 - `batch` - install pyppeteer, that allows to make screenshots in batch mode
0017 - `xrootd` - install libraries to read xrootd located files and URLs starting with `root://`
0018 - `test` - install pytest, mainly to run tests in development build
0019 
0020 > If installed via pip, `xrootd` library requires compilation, so the system should have cmake,
0021 > compiler and some xrootd dependencies installed. 
0022 
0023 Development installation 
0024 
0025 ```bash
0026 python -m pip install --editable .[test,batch]
0027 ```
0028 
0029 Running with Gunicorn (development mode)
0030 
0031 ```bash
0032 gunicorn --bind 0.0.0.0:5454 pyrobird.server:flask_app --log-level debug --capture-output
0033 ```
0034 
0035 
0036 ## Contributing
0037 
0038 - [PEP8](https://peps.python.org/pep-0008/) is required
0039 - [Use Numpy style dockstring comments](https://numpydoc.readthedocs.io/en/latest/format.html)
0040 - [pytest](https://docs.pytest.org/en/latest/) is used for unit tests. Aim for comprehensive coverage of the new code.
0041 - Utilize [type hints](https://docs.python.org/3/library/typing.html) wherever is possible to enhance readability and reduce errors.
0042 - Use of specific exceptions for error handling is better. As described in the [Python documentation](https://docs.python.org/3/tutorial/errors.html) rather than general exceptions.
0043 - Contributions are subject to code review. Please submit pull requests (PRs) against the `main` branch for any contributions.
0044 - Manage dependencies appropriately. Add new dependencies to `pyproject.toml`. Provide a justification for new dependencies
0045 
0046 ## Testing
0047 
0048 To install dependencies with testing libraries included 
0049 
0050 ```bash
0051 pip install .[test]
0052 ```
0053 
0054 Navigate to the pyrobird/tests and execute:
0055 
0056 ```bash
0057 pytest
0058 
0059 # To stop immediately on error and enter debugging mode
0060 pytest -x --pdb 
0061 ```
0062 
0063 ## Development install
0064 
0065 ```
0066 python -m pip install --upgrade --editable  .[test]
0067 ```
0068 
0069 # Pyrobird Server
0070 
0071 This server allows Firebird to work with local files and the local file system as
0072 well as to complement frontend features such as opening XRootD files, etc.
0073 
0074 Serve Firobird locally and have access to files in current directory: 
0075 
0076 ```bash
0077 fbd serve
0078 ```
0079 
0080 **pyrobird** (backend) allows **Firebird** (frontend) to access certain files on your system. 
0081 For this reason pyrobird server has multiple endpoints such as `/api/v1/download` 
0082 which allows to download files. There are library files served and by default Firebird
0083 has access to files in your current directory or a directory provided via `--work-path` flag
0084 
0085 
0086 #### **Available Options**
0087 
0088 | Option                     | Short | Type    | Default | Description                                                                                                                                                                                                                                   |
0089 |----------------------------|-------|---------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
0090 | `--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.            |
0091 | `--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.                                       |
0092 | `--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.                                                                                              |
0093 | `--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.                                                       |
0094 
0095 
0096 > `--allow-any-file` - allows unrestricted access to download files in a system.
0097 > When enabled, the server allows downloads of all files that user has access to.
0098 > When disabled - only files in `--work-path` and its subdirectories are allowed to be downloaded.
0099 > This option could be considered safe on personal machines with a single user, 
0100 > who runs localhost server in a terminal
0101 > 
0102 > (!) It is considered dangerous in all other cases: farms, interactive nodes, production environments, servers, etc.
0103 > Just think `/etc/passwd` will be accessible through  `localhost:port/api/v1/download?f=/etc/passwd`
0104 > 
0105 > So security wise, it is better to use `--work-path` than `--allow-any-file`
0106 
0107 
0108 - Start server with default settings, Firebird works with files in current directory:
0109    ```bash
0110   fbd serve
0111    ```
0112 
0113 - Set where Firebird will take files from:
0114    
0115    ```bash
0116    fbd serve --work-path=/home/username/datafiles
0117    ```
0118 
0119    Now if you set file `local://filename.root` in Firebird UI,
0120    the file `/home/username/datafiles/filename.root` will be opened
0121 
0122 
0123 ## API Documentation
0124 
0125 This is technical explanation of what is under the hood of the server part
0126 
0127 ## Features
0128 
0129 - **Secure File Downloading**: Download files with access control to prevent unauthorized access.
0130 - **EDM4eic Event Processing**: Extract and convert specific events from EDM4eic files to JSON.
0131 - **Static File Serving**: Serve frontend assets seamlessly alongside API endpoints.
0132 - **Dynamic Configuration**: Serve configuration files with real-time server information.
0133 - **CORS Support**: Enable Cross-Origin Resource Sharing for specified routes.
0134 
0135 ### Configuration Options
0136 - **DOWNLOAD_PATH**: `str[getcwd()]`, Specifies the directory from which files can be downloaded when using relative paths.
0137 - **PYROBIRD_DOWNLOAD_IS_DISABLED**: `bool[False]` If set to `True`, all download functionalities are disabled.
0138 - **PYROBIRD_DOWNLOAD_IS_UNRESTRICTED**: `bool[False]`, allows unrestricted access to download any file, including sensitive ones.
0139 - **CORS_IS_ALLOWED**: `bool[False]`, If set to `True`, enables Cross-Origin Resource Sharing (CORS) for download routes.
0140 
0141 
0142 
0143 
0144 The API provides endpoints for downloading files, processing EDM4eic events, and serving configuration files. It also includes static file serving for frontend assets.
0145 
0146 ---
0147 
0148 ### Download File
0149 
0150 #### **Endpoint**
0151 
0152 ```
0153 GET /api/v1/download
0154 GET /api/v1/download/<path:filename>
0155 ```
0156 
0157 #### **Description**
0158 
0159 Allows users to download specified files. The download can be restricted based on configuration settings to prevent unauthorized access to sensitive files.
0160 
0161 #### **Parameters**
0162 
0163 - **Query Parameters**:
0164     - `filename` (optional): The name or path of the file to download.
0165     - `f` (optional): An alternative parameter for the filename.
0166 
0167 - **Path Parameters**:
0168     - `filename` (optional): The path of the file to download.
0169 
0170 **Note**: You can provide the filename either as a query parameter or as part of the URL path.
0171 
0172 #### **Usage**
0173 
0174 1. **Download via Query Parameter**
0175 
0176    ```bash
0177    curl -O "http://localhost:5454/api/v1/download?filename=example.txt"
0178    ```
0179 
0180 2. **Download via URL Path**
0181 
0182    ```bash
0183    curl -O "http://localhost:5454/api/v1/download/example.txt"
0184    ```
0185 
0186 #### **Security Considerations**
0187 
0188 - **Access Control**: Ensure that `DOWNLOAD_ALLOW_UNRESTRICTED` is set appropriately to prevent unauthorized access.
0189 - **Path Traversal**: The server sanitizes file paths to prevent directory traversal attacks.
0190 
0191 ---
0192 
0193 ### Open EDM4eic Event
0194 
0195 #### **Endpoint**
0196 
0197 ```
0198 GET /api/v1/convert/edm4eic/<int:event_number>
0199 GET /api/v1/convert/edm4eic/<int:event_number>/<path:filename>
0200 ```
0201 
0202 #### **Description**
0203 
0204 Processes an EDM4eic file to extract a specific event and returns the event data in JSON format. Supports both local and remote files.
0205 
0206 #### **Parameters**
0207 
0208 - **Path Parameters**:
0209     - `event_number` (required): The number of the event to extract.
0210     - `filename` (optional): The path or URL of the EDM4eic file.
0211 
0212 - **Query Parameters**:
0213     - `filename` (optional): The name or path of the file to process.
0214     - `f` (optional): An alternative parameter for the filename.
0215 
0216 **Note**: You can provide the filename either as a query parameter or as part of the URL path.
0217 
0218 #### **Usage**
0219 
0220 1. **Process Local File via Query Parameter**
0221 
0222    ```bash
0223    curl "http://localhost:5454/api/v1/convert/edm4eic/5?filename=path/to/file.edm4eic.root"
0224    ```
0225 
0226 2. **Process Remote File via URL Path**
0227 
0228    ```bash
0229    curl "http://localhost:5454/api/v1/convert/edm4eic/5/http://example.com/data/file.edm4eic.root"
0230    ```
0231 
0232 ### Asset Configuration
0233 
0234 #### **Endpoint**
0235 
0236 ```
0237 GET /assets/config.jsonc
0238 ```
0239 
0240 #### **Description**
0241 
0242 Serves the asset configuration file (`config.jsonc`) with additional server information injected dynamically.
0243 
0244 #### **Usage**
0245 
0246 ```bash
0247 curl "http://localhost:5454/assets/config.jsonc"
0248 ```
0249 
0250 ### Publishing
0251 
0252 ```bash
0253 hatch build
0254 hatch publish
0255 
0256 # You will have to setup your pip authentication key
0257 ```