From 8dffedf57d362f88f189b9c91681a294f76312bd Mon Sep 17 00:00:00 2001 From: "Lewis A. Marshall" Date: Sat, 31 Oct 2020 11:54:45 -0700 Subject: [PATCH] Added a solution CLI. --- ionize/__main__.py | 30 +++++++++++++++--------------- ionize/tests.py | 4 ++++ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/ionize/__main__.py b/ionize/__main__.py index 6e51fce..ac856e9 100644 --- a/ionize/__main__.py +++ b/ionize/__main__.py @@ -20,21 +20,21 @@ def ion(name): click.echo(Database()[name].serialize(nested=False, compact=True)) -# @cli.command() -# @click.option('--ion', '-i', multiple=True) -# @click.option('--concentration', '-c', multiple=True, type=float) -# def solution(ion, concentration): -# sol = Solution(ion, concentration) -# click.echo('pH: {:0.4f}'.format(sol.pH)) -# click.echo('ionic strength: {:0.4f} M'.format(sol.ionic_strength)) -# click.echo('conductivity: {:0.4f} s/M'.format(sol.conductivity())) -# click.echo('Debye length: {:0.4f} um'.format(sol.debye()*1e6)) -# click.echo(dir(sol)) -# -# -# @cli.command() -# def io(): -# pass +@cli.command() +@click.option('--serialize', '-s', is_flag=True) +@click.argument("components", nargs=-1) +def solution(components, serialize): + ions = components[::2] + concentrations = [float(c) for c in components[1::2]] + assert len(ions) == len(concentrations), "There must be a concentration for each ion." + sol = Solution(ions, concentrations) + if serialize: + click.echo(sol.serialize(nested=False, compact=True)) + else: + click.echo('pH: {:0.4f}'.format(sol.pH)) + click.echo('ionic strength: {:0.4f} M'.format(sol.ionic_strength)) + click.echo('conductivity: {:0.4f} s/M'.format(sol.conductivity())) + click.echo('Debye length: {:0.4f} um'.format(sol.debye()*1e6)) if __name__ == '__main__': cli() diff --git a/ionize/tests.py b/ionize/tests.py index d009f97..a8930a5 100644 --- a/ionize/tests.py +++ b/ionize/tests.py @@ -460,6 +460,10 @@ def test_ion_cli(self): result = runner.invoke(cli, ['ion', 'tris']) self.assertEqual(result.exit_code, 0) + def test_solution_cli(self): + runner = CliRunner() + result = runner.invoke(cli, ['solution', 'tris', '0.1', 'chloride', '0.05']) + self.assertEqual(result.exit_code, 0) if __name__ == '__main__': unittest.main()