Skip to main content

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


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.12.tar.gz (32.0 kB view details)

Uploaded Source

Built Distribution

metainfoyaml2py-0.0.12-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

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

Hashes for metainfoyaml2py-0.0.12.tar.gz
Algorithm Hash digest
SHA256 142ec1172e4ec36a361cffa8f435ae01d254eb1e65df34b92ace950b488f3b38
MD5 1a0757c1c192ea37e1a6947d69eb6301
BLAKE2b-256 557ed4a4affdf0cddbba264e4586cd3e8ffdd89d81202f59d531f2163c0c448b

See more details on using hashes here.

File details

Details for the file metainfoyaml2py-0.0.12-py3-none-any.whl.

File metadata

File hashes

Hashes for metainfoyaml2py-0.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 8ccdc4cd300d1c38b807bf9172d23112a3ba241fa9a6866851a9464740abe85a
MD5 b890791b25e071cfbeff27d2f5c82db2
BLAKE2b-256 0cbc6c0e5ac4c50ed3f98ee4e0ac797b0aaa7cc67dcd6e2a0561ad98dfe0074a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page