Murfey validates ALL MachineConfigs in the MachineConfig file

Open
#488 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python
Domain
backend

Research direction

Start in murfey/util/config.py, following get_machine_config() into from_file(), then trace how the instrument of interest is selected during murfey.server --feedback startup. Check how mixed MachineConfig entries are loaded and validated. Done means an irrelevant config with the older key format no longer prevents the selected instrument's server from starting.

Written by the indexing model from the issue text.

Description

bug server

This means that multiple versions which have changed MachineConfig behaviour cannot coexist in the same file.

It might be worth modifying the function so that it only validates the MachineConfig relevant to the instrument of interest.

The current error:

  • Updated the configs of one of our servers to reflect the new key format used in the latest Murfey release, but left the other ones untouched
  • Noticed that Murfey server failed to start, so tried starting it manually while SSH'ed to one of our storage servers
  • Got the following error message:
$ murfey.server --feedback

[02/12/25 06:44:53] INFO     Starting Murfey RabbitMQ thread             __init__.py:310
                    INFO     Starting Murfey server version 0.16.10 for  __init__.py:314
                             beamline m14, listening on 0.0.0.0:8000                    
Traceback (most recent call last):
  File "/dls_sw/apps/murfey/0.16.10/bin/murfey.server", line 8, in <module>
    sys.exit(run())
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/server/__init__.py", line 330, in run
    _running_server.run()
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/uvicorn/server.py", line 66, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/uvicorn/server.py", line 70, in serve
    await self._serve(sockets)
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/uvicorn/server.py", line 77, in _serve
    config.load()
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/uvicorn/config.py", line 435, in load
    self.loaded_app = import_from_string(self.app)
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/uvicorn/importer.py", line 19, in import_from_string
    module = importlib.import_module(module_str)
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/server/main.py", line 14, in <module>
    import murfey.server.api.auth
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/server/api/__init__.py", line 49, in <module>
    from murfey.server.api.auth import MurfeySessionID, validate_token
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/server/api/auth.py", line 67, in <module>
    machine_config = get_machine_config()
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/util/config.py", line 172, in get_machine_config
    machine_config = from_file(
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/util/config.py", line 77, in from_file
    return {
  File "/dls_sw/apps/murfey/0.16.10/lib/python3.10/site-packages/murfey/util/config.py", line 78, in <dictcomp>
    i: MachineConfig(**config[i])
  File "pydantic/main.py", line 347, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for MachineConfig
create_directories
  value is not a valid list (type=type_error.list)
Dominant language
Python
Stars
2
Forks
1
Avg merge
1d 12h
Merged PRs (30d)
22

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from DiamondLightSource/python-murfey

All issues in DiamondLightSource/python-murfey

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.