Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MRG: add plugin support for new command-line subcommands #2438

Merged
merged 63 commits into from
Mar 1, 2023
Merged

Conversation

ctb
Copy link
Contributor

@ctb ctb commented Jan 6, 2023

Add command-line plug-in interface, per #1353.

This PR builds on #2428 to provide support for adding new sourmash subcommands, under sourmash scripts <cmd>.

The CLI plugin interface looks like this on the client side -

class cmd_somewhat:
    command = 'somewhat'
    description = "does a thing"

    def __init__(self, subparser):
        super().__init__(p)
        # add arguments etc here 
        debug_literal('RUNNING cmd_somewhat.__init__')
        subparser.add_argument('foo', type=int)

    def main(self, args):
        super().main(args)
        # what we actually run. 
        print('RUNNING cmd', self, args)
        print('XYZ somewhat', args.foo)
        print(f'2*{args.foo} is {2*args.foo}')

Adding this plugin enables:

% sourmash scripts  -h          

== This is sourmash version 4.6.1. ==
== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==

usage:  scripts [-h]

optional arguments:
  -h, --help  show this help message and exit

extension commands:
  sourmash scripts somewhat --help - do a thing

and

% sourmash scripts somewhat 5 

== This is sourmash version 4.6.1. ==
== Please cite Brown and Irber (2016), doi:10.21105/joss.00027. ==

...
2*5 is 10

which is prety cool 🎉

Alternatives to script

could be sourmash ext or sourmash plugin?

@ctb ctb changed the base branch from latest to exp/plugins January 6, 2023 16:18
@codecov
Copy link

codecov bot commented Jan 6, 2023

Codecov Report

Merging #2438 (0813a01) into latest (59f48c1) will increase coverage by 7.85%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           latest    #2438      +/-   ##
==========================================
+ Coverage   84.72%   92.58%   +7.85%     
==========================================
  Files         132      104      -28     
  Lines       14731    12026    -2705     
  Branches     2503     2513      +10     
==========================================
- Hits        12481    11134    -1347     
+ Misses       1948      590    -1358     
  Partials      302      302              
Flag Coverage Δ
python 92.58% <100.00%> (+0.05%) ⬆️
rust ?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
src/sourmash/__main__.py 100.00% <100.00%> (ø)
src/sourmash/cli/__init__.py 95.78% <100.00%> (+0.04%) ⬆️
src/sourmash/cli/info.py 100.00% <100.00%> (ø)
src/sourmash/cli/scripts/__init__.py 100.00% <100.00%> (ø)
src/sourmash/plugins.py 100.00% <100.00%> (ø)
src/core/src/index/revindex.rs
src/core/src/sketch/minhash.rs
src/core/src/ffi/cmd/compute.rs
src/core/src/signature.rs
src/core/src/encodings.rs
... and 24 more

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@ctb ctb changed the title WIP: add support for new command-line subcommands WIP: add plugin support for new command-line subcommands Jan 6, 2023
@ctb ctb changed the title WIP: add plugin support for new command-line subcommands MRG: add plugin support for new command-line subcommands Feb 20, 2023
@ctb ctb marked this pull request as ready for review February 20, 2023 03:16
@ctb ctb requested a review from bluegenes February 20, 2023 03:16
@ctb
Copy link
Contributor Author

ctb commented Feb 20, 2023

Ready for review!

doc/dev_plugins.md Outdated Show resolved Hide resolved
doc/dev_plugins.md Outdated Show resolved Hide resolved
@bluegenes
Copy link
Contributor

Notes to self/questions for review: is scripts the right subcommand to use here?

I think you mentioned sourmash ext as an option somewhere. I really like that -- it's short and gets across the idea that the plugin is an "extension" beyond standard sourmash. But scripts is also good - maybe alias?

@ctb
Copy link
Contributor Author

ctb commented Mar 1, 2023

Notes to self/questions for review: is scripts the right subcommand to use here?

I think you mentioned sourmash ext as an option somewhere. I really like that -- it's short and gets across the idea that the plugin is an "extension" beyond standard sourmash. But scripts is also good - maybe alias?

added as an alias in 0813a01.

I think we should probably switch to it as the default, but I'm going to punt that to the next PR that will do more documenting and testing!

@ctb ctb mentioned this pull request Mar 1, 2023
@ctb ctb requested a review from bluegenes March 1, 2023 14:12
Copy link
Contributor

@bluegenes bluegenes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm!

@ctb ctb merged commit 2fd1ae0 into latest Mar 1, 2023
@ctb ctb deleted the plugins/cli branch March 1, 2023 15:42
@ctb ctb mentioned this pull request Mar 3, 2023
ctb added a commit that referenced this pull request Mar 3, 2023
# sourmash release 4.7.0

Major new features:

* provide an initial plugin architecture for sourmash that supports new
signature saving & loading mechanisms (#2428)
* add plugin support for new command-line subcommands (#2438)
* debias all containment values (#2243)

Minor new features:

* Use RankLineageInfo to simplify reading lineages (#2467)
* store taxids in lineageDB (#2466)
* Use new tax classes for taxonomic summarization (#2443)
* add tax summarization dataclasses for safety and flexibility (#2439)
* add `--scaled` to sourmash compare (#2414)
* replace `lca_utils.LineagePair` with `tax_utils.LineagePair` (#2441)
* Add new classes for lineage manipulation (#2437)

Cleanup and documentation updates:

* ReadTheDocs updates (#2445)
* update `sourmash compare` command-line docs (#2400)

Developer updates:

* fix python tests by bumping tox and pip cache versions (#2424)
* Update sphinx requirement from <6,>=4.4.0 to >=4.4.0,<7 (#2430)
* Build: replace milksnake with maturin (#2393)
* importlib_metadata is a dependency on old Python versions (#2484)
* Release docs: use two separate sed commands (#2483)
* minor fixes to release behavior (#2479)
* Use screed and maturin from nixpkgs in `flake.nix` (#2481)
* update release procedure after v4.6.0 and v4.6.1 (#2386)
* Update makefile and docs (#2432)

Dependabot updates:

* Bump once_cell from 1.17.0 to 1.17.1 (#2488)
* Bump ouroboros from 0.15.5 to 0.15.6 (#2487)
* Bump memmap2 from 0.5.8 to 0.5.9 (#2486)
* Bump supercharge/redis-github-action from 1.4.0 to 1.5.0 (#2485)
* Bump proptest from 1.0.0 to 1.1.0 (#2460)
* Bump web-sys from 0.3.60 to 0.3.61 (#2461)
* Bump serde_json from 1.0.91 to 1.0.93 (#2471)
* Bump wasm-bindgen-test from 0.3.33 to 0.3.34 (#2463)
* Bump cachix/install-nix-action from 18 to 19 (#2459)
* Bump wasm-bindgen from 0.2.83 to 0.2.84 (#2464)
* Bump typed-builder from 0.11.0 to 0.12.0 (#2451)
* Bump bumpalo from 3.9.1 to 3.12.0 (#2450)
* Bump pypa/cibuildwheel from 2.11.4 to 2.12.0 (#2447)
* Bump bzip2 from 0.4.3 to 0.4.4 (#2444)
* Bump once_cell from 1.14.0 to 1.17.0 (#2429)
* Bump serde from 1.0.151 to 1.0.152 (#2423)
* Bump pypa/cibuildwheel from 2.11.3 to 2.11.4 (#2422)
* Bump serde_json from 1.0.89 to 1.0.91 (#2418)
* Bump serde from 1.0.150 to 1.0.151 (#2419)
* Bump thiserror from 1.0.37 to 1.0.38 (#2417)
* Bump finch from 0.4.3 to 0.5.0 (#2416)
* Bump rayon from 1.6.0 to 1.6.1 (#2404)
* Bump serde from 1.0.149 to 1.0.150 (#2403)
* Bump pypa/cibuildwheel from 2.11.2 to 2.11.3 (#2402)
* Bump serde from 1.0.148 to 1.0.149 (#2397)
* Bump capnp from 0.14.5 to 0.14.11 (#2396)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants