A program for converting NOMAD metainfo YAML schemas into Python class definitions
Project description
metainfo-yaml2py
A program for converting NOMAD metainfo YAML schemas into Python class definitions.
Installation
metainfo-yaml2py
is not yet on PyPI but you can install the latest version using:
pip install git+https://github.com/hampusnasstrom/metainfo-yaml2py.git
You can then run the program with:
$ metainfo-yaml2py <target file>
For development
metainfo-yaml2py
is currently under development and for installing and contributing you should clone the repository and install the package in editable mode (-e
) using:
pip install -e .
Example
Running metainfo-yaml2py
on the following YAML file (with the -n
flag):
definitions:
name: Example Schema
sections:
Activity:
description: |
A base class for any activity in relation to an entity.
This docstring can span multiple lines.
quantities:
start_time:
description: |
The starting date and time of the activity.
type: Datetime
m_annotations:
eln:
component: DateTimeEditQuantity
end_time:
description: |
The ending date and time of the activity.
type: Datetime
m_annotations:
eln:
component: DateTimeEditQuantity
Entity:
description: |
A base class for any entity which can be related to an activity.
Will create the following python file:
#
# Copyright The NOMAD Authors.
#
# This file is part of NOMAD. See https://nomad-lab.eu for further info.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from structlog.stdlib import (
BoundLogger,
)
from nomad.metainfo import (
Package,
Quantity,
Datetime,
Section,
)
from nomad.datamodel.data import (
ArchiveSection,
)
m_package = Package(name='Example Schema')
class Activity(ArchiveSection):
'''
A base class for any activity in relation to an entity.
This docstring can span multiple lines.
'''
m_def = Section()
start_time = Quantity(
type=Datetime,
description='''
The starting date and time of the activity.
''',
a_eln={
"component": "DateTimeEditQuantity"
},
)
end_time = Quantity(
type=Datetime,
description='''
The ending date and time of the activity.
''',
a_eln={
"component": "DateTimeEditQuantity"
},
)
def normalize(self, archive, logger: BoundLogger) -> None:
'''
The normalizer for the `Activity` class.
Args:
archive (EntryArchive): The archive containing the section that is being
normalized.
logger (BoundLogger): A structlog logger.
'''
super(Activity, self).normalize(archive, logger)
class Entity(ArchiveSection):
'''
A base class for any entity which can be related to an activity.
'''
m_def = Section()
def normalize(self, archive, logger: BoundLogger) -> None:
'''
The normalizer for the `Entity` class.
Args:
archive (EntryArchive): The archive containing the section that is being
normalized.
logger (BoundLogger): A structlog logger.
'''
super(Entity, self).normalize(archive, logger)
m_package.__init_metainfo__()
Command Line Interface
metainfo-yaml2py --help
usage: metainfo-yaml2py [-h] [-o OUTPUT_DIR] [-n] [-p] yaml_path
positional arguments:
yaml_path The path to the YAML schema that should be converted to Python
classes.
optional arguments:
-h, --help show this help message and exit
-o OUTPUT_DIR, --output_dir OUTPUT_DIR
The path to the output directory of the conversion. Defaults to
the current directory.
-n, --normalizers Add empty normalizers to all class definitions.
-p, --plugin Create all the necessary files for a nomad plugin.
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
metainfoyaml2py-0.0.5.tar.gz
(36.3 kB
view hashes)
Built Distribution
Close
Hashes for metainfoyaml2py-0.0.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d3ebb34b606fafb11fc18f4e2d0bb08fd5f30192c9f0f4cb663650db130d324 |
|
MD5 | 63584a6f1e3f1dfb446d2eb274560581 |
|
BLAKE2b-256 | f6bec1f2622832fcb74c9b136bd91dd466bb9d12d8f106f2f49b26caa3dcf33d |