Skip to content

Commit

Permalink
✨ NEW: structure.data.import plugin entrypoint (#4427)
Browse files Browse the repository at this point in the history
This commit adds an entry-point
for appending sub-commands to `verdi data structure import`,
to read specific file formats.
  • Loading branch information
dev-zero authored Mar 30, 2021
1 parent a6be2a2 commit d35a9d7
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 3 deletions.
3 changes: 2 additions & 1 deletion aiida/cmdline/commands/cmd_data/cmd_structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from aiida.cmdline.commands.cmd_data.cmd_list import data_list, list_options
from aiida.cmdline.params import arguments, options, types
from aiida.cmdline.utils import decorators, echo
from aiida.cmdline.utils.pluginable import Pluginable

LIST_PROJECT_HEADERS = ['Id', 'Label', 'Formula']
EXPORT_FORMATS = ['cif', 'xsf', 'xyz']
Expand Down Expand Up @@ -151,7 +152,7 @@ def structure_export(**kwargs):
data_export(node, output, fmt, other_args=kwargs, overwrite=force)


@structure.group('import')
@structure.group('import', entry_point_group='aiida.cmdline.data.structure.import', cls=Pluginable)
def structure_import():
"""Import a crystal structure from file into a StructureData object."""

Expand Down
1 change: 1 addition & 0 deletions aiida/plugins/entry_point.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class EntryPointFormat(enum.Enum):
ENTRY_POINT_GROUP_TO_MODULE_PATH_MAP = {
'aiida.calculations': 'aiida.orm.nodes.process.calculation.calcjob',
'aiida.cmdline.data': 'aiida.cmdline.data',
'aiida.cmdline.data.structure.import': 'aiida.cmdline.data.structure.import',
'aiida.cmdline.computer.configure': 'aiida.cmdline.computer.configure',
'aiida.data': 'aiida.orm.nodes.data',
'aiida.groups': 'aiida.orm.groups',
Expand Down
35 changes: 33 additions & 2 deletions docs/source/topics/plugins.rst
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,15 @@ Usage::
-----------------

``verdi`` uses the `click_` framework, which makes it possible to add new subcommands to existing verdi commands, such as ``verdi data mydata``.
AiiDA expects each entry point to be either a ``click.Command`` or ``click.CommandGroup``.
AiiDA expects each entry point to be either a ``click.Command`` or ``click.CommandGroup``. At present extra commands can be injected at the following levels:

* As a :ref:`direct subcommand of verdi data<spec-verdi-data>`
* As a :ref:`subcommand of verdi data structure import<spec-verdi-data-structure-import>`

Spec::

.. _spec-verdi-data:

Spec for ``verdi data``::

entry_points={
"aiida.cmdline.data": [
Expand Down Expand Up @@ -243,6 +248,32 @@ Usage:
verdi data mydata animate --format=Format PK
.. _spec-verdi-data-structure-import:

Spec for ``verdi data structure import``::

entry_points={
"aiida.cmdline.data.structure.import": [
"myformat = aiida_mycode.commands.myformat:myformat"
]
}

``aiida_mycode/commands/myformat.py``::

import click
@click.group()
@click.argument('filename', type=click.File('r'))
myformat(filename):
"""commandline help for myformat import command"""
...

Usage:

.. code-block:: bash
verdi data structure import myformat a_file.myfmt
``aiida.tools.dbexporters``
---------------------------

Expand Down
2 changes: 2 additions & 0 deletions setup.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@
"trajectory = aiida.cmdline.commands.cmd_data.cmd_trajectory:trajectory",
"upf = aiida.cmdline.commands.cmd_data.cmd_upf:upf"
],
"aiida.cmdline.data.structure.import": [
],
"aiida.data": [
"array = aiida.orm.nodes.data.array.array:ArrayData",
"array.bands = aiida.orm.nodes.data.array.bands:BandsData",
Expand Down

0 comments on commit d35a9d7

Please sign in to comment.