Metadata-Version: 2.4
Name: murfey
Version: 0.20.1
Summary: Client-Server architecture hauling Cryo-EM data
License: Copyright (c) 2022 Diamond Light Source.
        All rights reserved.
        
        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are met:
        
        Redistributions of source code must retain the above copyright notice, this
        list of conditions and the following disclaimer.
        
        Redistributions in binary form must reproduce the above copyright notice, this
        list of conditions and the following disclaimer in the documentation and/or
        other materials provided with the distribution.
        
        Neither the name of the copyright holder nor the names of its
        contributors may be used to endorse or promote products derived from
        this software without specific prior written permission.
        
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
        ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
        WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
        ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
        (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
        LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
        ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
        SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        
Project-URL: Bug-Tracker, https://github.com/DiamondLightSource/python-murfey/issues
Project-URL: Documentation, https://github.com/DiamondLightSource/python-murfey
Project-URL: GitHub, https://github.com/DiamondLightSource/python-murfey
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: AUTHORS.rst
Requires-Dist: backports.entry_points_selectable
Requires-Dist: defusedxml
Requires-Dist: pydantic>=2
Requires-Dist: pydantic-settings
Requires-Dist: requests
Requires-Dist: rich
Requires-Dist: werkzeug
Requires-Dist: xmltodict
Provides-Extra: cicd
Requires-Dist: pytest-cov; extra == "cicd"
Provides-Extra: client
Requires-Dist: textual==0.42.0; extra == "client"
Requires-Dist: websocket-client; extra == "client"
Provides-Extra: developer
Requires-Dist: bump-my-version; extra == "developer"
Requires-Dist: ipykernel; extra == "developer"
Requires-Dist: pre-commit; extra == "developer"
Requires-Dist: pytest; extra == "developer"
Requires-Dist: pytest-mock; extra == "developer"
Provides-Extra: instrument-server
Requires-Dist: aiohttp; extra == "instrument-server"
Requires-Dist: fastapi[standard]<0.116.0; extra == "instrument-server"
Requires-Dist: python-jose; extra == "instrument-server"
Provides-Extra: server
Requires-Dist: aiohttp; extra == "server"
Requires-Dist: cryptography; extra == "server"
Requires-Dist: fastapi[standard]<0.116.0; extra == "server"
Requires-Dist: ispyb>=10.2.4; extra == "server"
Requires-Dist: jinja2; extra == "server"
Requires-Dist: mrcfile; extra == "server"
Requires-Dist: numpy<2; extra == "server"
Requires-Dist: packaging; extra == "server"
Requires-Dist: passlib; extra == "server"
Requires-Dist: pillow; extra == "server"
Requires-Dist: prometheus_client; extra == "server"
Requires-Dist: python-jose[cryptography]; extra == "server"
Requires-Dist: sqlalchemy[postgresql]; extra == "server"
Requires-Dist: sqlmodel; extra == "server"
Requires-Dist: stomp-py<=8.1.0; extra == "server"
Requires-Dist: zocalo>=1; extra == "server"
Dynamic: license-file

# Murfey

A transporter for data from Diamond eBIC microscope and detector machines onto the Diamond network.

## Who is Murfey?

Murfey, the package, is named after [Eliza Murfey, the inventor](https://nationalrrmuseum.org/blog/mother-of-invention-women-railroad-innovators/):

> Focusing on the mechanics of the railroad, inventor Eliza Murfey created devices designed
> to improve the bearings on rail wheels. With sixteen patents for her lubrication system,
> it was Murfey who designed the packings that would lubricate the axles with oil, aiding
> in the reduction of derailments caused by seized axles and bearings.

## How do I set up a development environment?

We suggest you start with your favourite virtual environment (mamba/conda/python virtualenv/...),
then install using the following command.

```text
$ git clone git@github.com:DiamondLightSource/python-murfey.git
$ cd python-murfey
$ pip install -e .[client,server,developer]
```

The packages included under the `[developer]` installation key contain some helpful tools to aid you with developing Murfey further:

- `bump-my-version` - Simplifies version control.
- `ipykernel` - Enables interactive code development via Jupyter Notebooks.
- `pre-commit` - Allows for the installation and running of hooks to help with linting, formatting, and type checking your code.
- `pytest` - Used in conjunction with test functions to evaluate the reliability of your code.

Instructions for setting up the database for Murfey to register files to can be found [here](src/murfey/server/README.md).

Finally, you may want to set up an ISPyB mock database server and a Zocalo
development environment. The instructions for this are out of scope here.

You can then start the Murfey server with

```text
$ murfey.server
```

and connect the client with

```text
$ murfey --server http://127.0.0.1:8000
```

You can also install a client on a remote machine. This machine only needs to have
a minimum Python installation and curl. Open the murfey server website in a browser
on the client, and navigate to the bootstrap page. Then copy the displayed commands
into a command line terminal.
