Source code for geowatch.cli.find_dvc

"""
NODE: Deprecated in favor of "simple_dvc"

SeeAlso:
    ../cli/find_dvc.py

TODO:
    - [ ] This needs a better API. Something like the API for git/dvc remotes.

Example Usage:

    # List default directories (hard coded ones that exist)
    python -m geowatch.cli.find_dvc --command=list

    python -m geowatch.cli.find_dvc --command=add --name=test --path=$HOME --hardware=hdd

    # List after adding
    python -m geowatch.cli.find_dvc list

    # Now get one
    python -m geowatch.cli.find_dvc

    # Force it to recall "test"
    python -m geowatch.cli.find_dvc --name=test

    # Remove the test dir
    python -m geowatch.cli.find_dvc --command=remove --name=test

    # Final list
    python -m geowatch.cli.find_dvc --command=list

    python -m geowatch.cli.find_dvc --hardware=ssd
    python -m geowatch.cli.find_dvc --hardware=hdd

Example Usage:

    #### ON PROJECT DATA

    # When you register your drop4 data / experiment paths, the DVC examples in
    # this repo will generally work out of the box. The important part is that
    # your path agrees with the tags used in the examples. Telling the registry
    # if the path lives on an HDD or SSD is also useful.
    geowatch_dvc add my_drop4_data --path=$HOME/Projects/SMART/smart_data_dvc --hardware=hdd --priority=100 --tags=phase2_data
    geowatch_dvc add my_drop4_data --path=$HOME/Projects/SMART/smart_expt_dvc --hardware=hdd --priority=100 --tags=phase2_expt

    # The examples in this repo will generally use this pattern to query for
    # the machine-specific data location. Ensure that these commands work
    # and output the correct paths
    DVC_DATA_DPATH=$(geowatch_dvc --tags='phase2_data' --hardware=auto)
    DVC_EXPT_DPATH=$(geowatch_dvc --tags='phase2_expt' --hardware=auto)

    echo "DVC_DATA_DPATH = $DVC_DATA_DPATH"
    echo "DVC_EXPT_DPATH = $DVC_EXPT_DPATH"

"""
import scriptconfig as scfg


[docs] class FindDVCConfig(scfg.DataConfig): """ Find the path to a registered DVC repo. Example Usage: # List currently known directories geowatch_dvc list # Add a new path (with optional hardware and tags) mkdir -p $HOME/tmp/datadir geowatch_dvc add --name=testdir --path=$HOME/tmp/datadir --hardware=hdd --tags=mytag # Lookup the newly registered path geowatch_dvc find --tags mytag # Remove the test entry geowatch_dvc remove testdir """ __default__ = { 'command': scfg.Value('find', help='can be find, set, add, list, or remove', position=1), 'name': scfg.Value(None, help='specify a name to query or store or remove', position=2), 'hardware': scfg.Value(None, help='Specify hdd, ssd, etc..., Setable and getable property'), 'priority': scfg.Value(None, help='Higher is more likely. Setable and getable property'), 'tags': scfg.Value(None, help='User note. Setable and queryable property'), 'path': scfg.Value(None, help='The path to the dvc repo. Setable and queryable property'), 'verbose': scfg.Value(1, help='verbosity mode'), 'must_exist': scfg.Value('auto', help='if True, filter to only directories that exist. Defaults to false except on "find", which is True.') }
[docs] @staticmethod def main(cmdline=True, **kwargs): from geowatch.utils import util_data from rich import print import ubelt as ub cli_config = FindDVCConfig.cli(data=kwargs, cmdline=cmdline, strict=True) config = dict(cli_config) command = config.pop('command') verbose = config.pop('verbose') must_exist = config.pop('must_exist') if must_exist == 'auto': must_exist = command == 'find' if verbose > 1: print('config = {}'.format(ub.urepr(cli_config, nl=1))) registry = util_data.DataRegistry() if command == 'list': registry.list(**config, must_exist=must_exist) elif command == 'add': registry.add(**config) elif command == 'remove': registry.remove(name=config['name']) elif command == 'set': registry.set(**config) elif command == 'find': dpath = registry.find(**config, must_exist=must_exist) print(dpath) else: raise KeyError(command) return 0
__config__ = FindDVCConfig _CLI = __config__ if __name__ == '__main__': """ CommandLine: geowatch find_dvc python ~/code/watch/geowatch/cli/find_dvc.py python -m geowatch.cli.find_dvc --register python -m geowatch.cli.find_dvc --mode=list """ __config__.main()