Source code for qudi.core.config.schema

# -*- coding: utf-8 -*-

"""
JSON schema to be used by jsonschema.validate on YAML qudi configuration files.

Copyright (c) 2021, the qudi developers. See the AUTHORS.md file at the top-level directory of this
distribution and on <https://github.com/Ulm-IQO/qudi-core/>

This file is part of qudi.

Qudi is free software: you can redistribute it and/or modify it under the terms of
the GNU Lesser General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

Qudi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with qudi.
If not, see <https://www.gnu.org/licenses/>.
"""

__all__ = ['config_schema', 'local_module_config_schema', 'remote_module_config_schema']

from typing import Dict, Any


__module_name_pattern = r'[a-zA-Z_]+[a-zA-Z0-9_]*'


[docs] def config_schema() -> Dict[str, Any]: """Creates and returns the JSON schema for a qudi configuration.""" return { 'type': 'object', 'additionalProperties': False, 'properties': { 'global': { 'type': 'object', 'additionalProperties': True, 'default': dict(), 'properties': { 'startup_modules': { 'type': 'array', 'uniqueItems': True, 'items': { 'type': 'string', 'pattern': f'^{__module_name_pattern}$' }, 'default': list() }, 'remote_modules_server': { 'type': ['null', 'object'], 'required': ['address', 'port'], 'default': None, 'additionalProperties': False, 'properties': { 'address': { 'type': 'string', }, 'port': { 'type': 'integer', 'minimum': 0, 'maximum': 65535 }, 'certfile': { 'type': ['null', 'string'], 'default': None }, 'keyfile': { 'type': ['null', 'string'], 'default': None } } }, 'namespace_server_port': { 'type': 'integer', 'minimum': 0, 'maximum': 65535, 'default': 18861 }, 'force_remote_calls_by_value': { 'type': 'boolean', 'default': True }, 'hide_manager_window': { 'type': 'boolean', 'default': False }, 'stylesheet': { 'type': 'string', 'pattern': r'^[^.]+\.qss$', 'default': 'qdark.qss' }, 'daily_data_dirs': { 'type': 'boolean', 'default': True }, 'default_data_dir': { 'type': ['null', 'string'], 'default': None }, 'extension_paths': { 'type': 'array', 'uniqueItems': True, 'items': { 'type': 'string' }, 'default': list() } } }, 'gui': { 'type': 'object', 'propertyNames': { 'pattern': f'^{__module_name_pattern}$' }, 'additionalProperties': { '$ref': '#/$defs/local_module' }, 'default': dict() }, 'logic': { 'type': 'object', 'propertyNames': { 'pattern': f'^{__module_name_pattern}$' }, 'additionalProperties': { 'oneOf': [ {'$ref': '#/$defs/local_module'}, {'$ref': '#/$defs/remote_module'} ] }, 'default': dict() }, 'hardware': { 'type': 'object', 'propertyNames': { 'pattern': f'^{__module_name_pattern}$' }, 'additionalProperties': { 'oneOf': [ {'$ref': '#/$defs/local_module'}, {'$ref': '#/$defs/remote_module'} ] }, 'default': dict() } }, '$defs': { 'local_module': local_module_config_schema(), 'remote_module': remote_module_config_schema() } }
[docs] def local_module_config_schema() -> Dict[str, Any]: """Creates and returns the JSON schema for a single qudi local module configuration.""" return { 'type': 'object', 'required': ['module.Class'], 'additionalProperties': False, 'properties': { 'module.Class': { 'type': 'string', 'pattern': f'^{__module_name_pattern}(\\.{__module_name_pattern})*$', }, 'allow_remote': { 'type': 'boolean', 'default': False }, 'connect': { 'type': 'object', 'additionalProperties': { 'type': 'string', 'pattern': f'^{__module_name_pattern}$' }, 'default': dict() }, 'options': { 'type': 'object', 'additionalProperties': True, 'default': dict() } } }
[docs] def remote_module_config_schema() -> Dict[str, Any]: """Creates and returns the JSON schema for a single qudi remote module configuration.""" return { 'type': 'object', 'required': ['native_module_name', 'address', 'port'], 'additionalProperties': False, 'properties': { 'native_module_name': { 'type': 'string', 'pattern': f'^{__module_name_pattern}$' }, 'address': { 'type': 'string', }, 'port': { 'type': 'integer', 'minimum': 0, 'maximum': 65535 }, 'certfile': { 'type': ['null', 'string'], 'default': None }, 'keyfile': { 'type': ['null', 'string'], 'default': None } } }