Source code for aiida.cmdline.commands.rehash

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
import sys

import click

from plum.util import load_class
from plum.exceptions import ClassNotFoundException

from aiida import try_load_dbenv
from aiida.cmdline.baseclass import VerdiCommand


[docs]class Rehash(VerdiCommand): """ Re-hash all nodes. """
[docs] def run(self, *args): ctx = _rehash_cmd.make_context('rehash', list(args)) with ctx: _rehash_cmd.invoke(ctx)
[docs] def complete(self, subargs_idx, subargs): """ No completion after 'verdi rehash'. """ print ""
@click.command('rehash') @click.option('--all', '-a', is_flag=True, help='Rehash all nodes of the given Node class.') @click.option('--class-name', type=str, default='aiida.orm.node.Node', help='Restrict nodes which are re-hashed to instances of this class.') @click.argument('pks', type=int, nargs=-1) def _rehash_cmd(all, class_name, pks): try_load_dbenv() from aiida.orm.querybuilder import QueryBuilder # Get the Node class to match try: node_class = load_class(class_name) except ClassNotFoundException: click.echo("Could not load class '{}'.\nAborted!".format(class_name)) sys.exit(1) # Add the filters for the class and PKs. qb = QueryBuilder() qb.append(node_class, tag='node') if pks: qb.add_filter('node', {'id': {'in': pks}}) else: if not all: click.echo("Nothing specified, nothing re-hashed.\nExplicitly specify the PK of the nodes, or use '--all'.") return if not qb.count(): click.echo('No matching nodes found.') return for i, (node,) in enumerate(qb.iterall()): if i % 100 == 0: click.echo('.', nl=False) node.rehash() click.echo('\nAll done! {} node(s) re-hashed.'.format(i + 1))