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
can be installed from PyPI using pip:
pip install metainfoyaml2py
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 nomad.datamodel.data import ArchiveSection
from typing import (
TYPE_CHECKING,
)
from nomad.metainfo import (
Package,
Quantity,
Datetime,
Section,
)
from nomad.datamodel.data import (
ArchiveSection,
)
if TYPE_CHECKING:
from nomad.datamodel.datamodel import (
EntryArchive,
)
from structlog.stdlib import (
BoundLogger,
)
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: 'EntryArchive', 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().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: 'EntryArchive', 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().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
Built Distribution
File details
Details for the file metainfoyaml2py-0.0.12.tar.gz
.
File metadata
- Download URL: metainfoyaml2py-0.0.12.tar.gz
- Upload date:
- Size: 32.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 142ec1172e4ec36a361cffa8f435ae01d254eb1e65df34b92ace950b488f3b38 |
|
MD5 | 1a0757c1c192ea37e1a6947d69eb6301 |
|
BLAKE2b-256 | 557ed4a4affdf0cddbba264e4586cd3e8ffdd89d81202f59d531f2163c0c448b |
File details
Details for the file metainfoyaml2py-0.0.12-py3-none-any.whl
.
File metadata
- Download URL: metainfoyaml2py-0.0.12-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ccdc4cd300d1c38b807bf9172d23112a3ba241fa9a6866851a9464740abe85a |
|
MD5 | b890791b25e071cfbeff27d2f5c82db2 |
|
BLAKE2b-256 | 0cbc6c0e5ac4c50ed3f98ee4e0ac797b0aaa7cc67dcd6e2a0561ad98dfe0074a |