diff --git a/conductr_cli/bundle_installation.py b/conductr_cli/bundle_installation.py
index 885499a..a97e64a 100644
--- a/conductr_cli/bundle_installation.py
+++ b/conductr_cli/bundle_installation.py
@@ -21,29 +21,45 @@ def count_installations(bundle_id, args):
     return 0
 
 
+def wait_for_uninstallation(bundle_id, args):
+    return wait_for_condition(bundle_id, is_uninstalled, 'uninstalled', args)
+
+
 def wait_for_installation(bundle_id, args):
+    return wait_for_condition(bundle_id, is_installed, 'installed', args)
+
+
+def wait_for_condition(bundle_id, condition, condition_name, args):
     log = logging.getLogger(__name__)
     start_time = datetime.now()
 
     installed_bundles = count_installations(bundle_id, args)
-    if installed_bundles > 0:
-        log.info('Bundle {} is installed'.format(bundle_id))
+    if condition(installed_bundles):
+        log.info('Bundle {} is {}'.format(bundle_id, condition_name))
         return
     else:
-        log.info('Bundle {} waiting to be installed'.format(bundle_id))
+        log.info('Bundle {} waiting to be {}'.format(bundle_id, condition_name))
         bundle_events_url = conduct_url.url('bundles/events', args)
         sse_events = sse_client.get_events(bundle_events_url)
         for event in sse_events:
             elapsed = (datetime.now() - start_time).total_seconds()
             if elapsed > args.wait_timeout:
-                raise WaitTimeoutError('Bundle {} waiting to be installed'.format(bundle_id))
+                raise WaitTimeoutError('Bundle {} waiting to be {}'.format(bundle_id, condition_name))
 
             if event.event and event.event.startswith('bundleInstallation'):
                 installed_bundles = count_installations(bundle_id, args)
-                if installed_bundles > 0:
-                    log.info('Bundle {} installed'.format(bundle_id))
+                if condition(installed_bundles):
+                    log.info('Bundle {} {}'.format(bundle_id, condition_name))
                     return
                 else:
-                    log.info('Bundle {} still waiting to be installed'.format(bundle_id))
+                    log.info('Bundle {} still waiting to be {}'.format(bundle_id, condition_name))
+
+        raise WaitTimeoutError('Bundle {} still waiting to be {}'.format(bundle_id, condition_name))
+
+
+def is_installed(number_of_installations):
+    return number_of_installations > 0
+
 
-        raise WaitTimeoutError('Bundle {} still waiting to be installed'.format(bundle_id))
+def is_uninstalled(number_of_installations):
+    return number_of_installations <= 0
diff --git a/conductr_cli/conduct.py b/conductr_cli/conduct.py
index 7b8c042..1e6f945 100755
--- a/conductr_cli/conduct.py
+++ b/conductr_cli/conduct.py
@@ -205,6 +205,8 @@ def build_parser():
     unload_parser.add_argument('bundle',
                                help='The ID of the bundle')
     add_default_arguments(unload_parser)
+    add_wait_timeout(unload_parser)
+    add_no_wait(unload_parser)
     unload_parser.set_defaults(func=conduct_unload.unload)
 
     # Sub-parser for `events` sub-command
diff --git a/conductr_cli/conduct_unload.py b/conductr_cli/conduct_unload.py
index 5e1f47a..24f7466 100644
--- a/conductr_cli/conduct_unload.py
+++ b/conductr_cli/conduct_unload.py
@@ -1,4 +1,5 @@
-from conductr_cli import conduct_url, validation
+from conductr_cli import conduct_url, validation, bundle_installation
+import json
 import logging
 import requests
 from conductr_cli.http import DEFAULT_HTTP_TIMEOUT
@@ -19,6 +20,14 @@ def unload(args):
         log.verbose(validation.pretty_json(response.text))
 
     log.info('Bundle unload request sent.')
+
+    response_json = json.loads(response.text)
+    if not args.no_wait:
+        bundle_installation.wait_for_uninstallation(response_json['bundleId'], args)
+
     log.info('Print ConductR info with: conduct info{}'.format(args.cli_parameters))
 
+    if not log.is_info_enabled() and log.is_quiet_enabled():
+        log.quiet(response_json['bundleId'])
+
     return True

Introduce wait behaviour for conduct unload command
The `conduct load`, `conduct run`, and `conduct stop` has its default behaviour (to wait) and `--no-wait` option.

Implement the same behaviour for `conduct unload` command to allow scripting of the stop and uninstallation of bundles within ConductR
diff --git a/conductr_cli/test/test_bundle_installation.py b/conductr_cli/test/test_bundle_installation.py
index 567b81a..eb32335 100644
--- a/conductr_cli/test/test_bundle_installation.py
+++ b/conductr_cli/test/test_bundle_installation.py
@@ -8,8 +8,14 @@ except ImportError:
     from mock import call, patch, MagicMock
 
 
+def create_test_event(event_name):
+    sse_mock = MagicMock()
+    sse_mock.event = event_name
+    return sse_mock
+
+
 class TestCountInstallation(CliTestCase):
-    def test_return_scale(self):
+    def test_return_installation_count(self):
         bundles_endpoint_reply = """
             [{
                 "bundleId": "a101449418187d92c789d1adc240b6d6",
@@ -36,7 +42,7 @@ class TestCountInstallation(CliTestCase):
 
         http_method.assert_called_with('http://127.0.0.1:9005/bundles')
 
-    def test_return_scale_v2(self):
+    def test_return_installation_count_v2(self):
         bundles_endpoint_reply = """
             [{
                 "bundleId": "a101449418187d92c789d1adc240b6d6",
@@ -63,7 +69,7 @@ class TestCountInstallation(CliTestCase):
 
         http_method.assert_called_with('http://127.0.0.1:9005/v2/bundles')
 
-    def test_return_zero_v1(self):
+    def test_return_zero_installation_count_v1(self):
         bundles_endpoint_reply = '[]'
         http_method = self.respond_with(text=bundles_endpoint_reply)
 
@@ -79,7 +85,7 @@ class TestCountInstallation(CliTestCase):
 
         http_method.assert_called_with('http://127.0.0.1:9005/bundles')
 
-    def test_return_zero_v2(self):
+    def test_return_zero_installation_count_v2(self):
         bundles_endpoint_reply = '[]'
         http_method = self.respond_with(text=bundles_endpoint_reply)
 
@@ -96,14 +102,14 @@ class TestCountInstallation(CliTestCase):
         http_method.assert_called_with('http://127.0.0.1:9005/v2/bundles')
 
 
-class TestWaitForScale(CliTestCase):
+class TestWaitForInstallation(CliTestCase):
     def test_wait_for_installation(self):
         count_installations_mock = MagicMock(side_effect=[0, 1])
         url_mock = MagicMock(return_value='/bundle-events/endpoint')
         get_events_mock = MagicMock(return_value=[
-            self.create_test_event(None),
-            self.create_test_event('bundleInstallationAdded'),
-            self.create_test_event('bundleInstallationAdded')
+            create_test_event(None),
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded')
         ])
 
         stdout = MagicMock()
@@ -124,7 +130,6 @@ class TestWaitForScale(CliTestCase):
         ])
 
         url_mock.assert_called_with('bundles/events', args)
-        self.maxDiff = None
 
         self.assertEqual(strip_margin("""|Bundle a101449418187d92c789d1adc240b6d6 waiting to be installed
                                          |Bundle a101449418187d92c789d1adc240b6d6 installed
@@ -154,9 +159,9 @@ class TestWaitForScale(CliTestCase):
         count_installations_mock = MagicMock(side_effect=[0, 1, 1])
         url_mock = MagicMock(return_value='/bundle-events/endpoint')
         get_events_mock = MagicMock(return_value=[
-            self.create_test_event('bundleExecutionAdded'),
-            self.create_test_event('bundleExecutionAdded'),
-            self.create_test_event('bundleExecutionAdded')
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded')
         ])
 
         stdout = MagicMock()
@@ -185,9 +190,9 @@ class TestWaitForScale(CliTestCase):
         count_installations_mock = MagicMock(return_value=0)
         url_mock = MagicMock(return_value='/bundle-events/endpoint')
         get_events_mock = MagicMock(return_value=[
-            self.create_test_event('bundleInstallationAdded'),
-            self.create_test_event('bundleInstallationAdded'),
-            self.create_test_event('bundleInstallationAdded')
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded')
         ])
 
         stdout = MagicMock()
@@ -217,7 +222,123 @@ class TestWaitForScale(CliTestCase):
                                          |Bundle a101449418187d92c789d1adc240b6d6 still waiting to be installed
                                          |"""), self.output(stdout))
 
-    def create_test_event(self, event_name):
-        sse_mock = MagicMock()
-        sse_mock.event = event_name
-        return sse_mock
+
+class TestWaitForUninstallation(CliTestCase):
+    def test_wait_for_uninstallation(self):
+        count_installations_mock = MagicMock(side_effect=[1, 0])
+        url_mock = MagicMock(return_value='/bundle-events/endpoint')
+        get_events_mock = MagicMock(return_value=[
+            create_test_event(None),
+            create_test_event('bundleInstallationRemoved'),
+            create_test_event('bundleInstallationRemoved')
+        ])
+
+        stdout = MagicMock()
+
+        bundle_id = 'a101449418187d92c789d1adc240b6d6'
+        args = MagicMock(**{
+            'wait_timeout': 10
+        })
+        with patch('conductr_cli.conduct_url.url', url_mock), \
+                patch('conductr_cli.bundle_installation.count_installations', count_installations_mock), \
+                patch('conductr_cli.sse_client.get_events', get_events_mock):
+            logging_setup.configure_logging(args, stdout)
+            bundle_installation.wait_for_uninstallation(bundle_id, args)
+
+        self.assertEqual(count_installations_mock.call_args_list, [
+            call(bundle_id, args),
+            call(bundle_id, args)
+        ])
+
+        url_mock.assert_called_with('bundles/events', args)
+
+        self.assertEqual(strip_margin("""|Bundle a101449418187d92c789d1adc240b6d6 waiting to be uninstalled
+                                         |Bundle a101449418187d92c789d1adc240b6d6 uninstalled
+                                         |"""), self.output(stdout))
+
+    def test_return_immediately_if_uninstalled(self):
+        count_installations_mock = MagicMock(side_effect=[0])
+
+        stdout = MagicMock()
+
+        bundle_id = 'a101449418187d92c789d1adc240b6d6'
+        args = MagicMock(**{
+            'wait_timeout': 10
+        })
+        with patch('conductr_cli.bundle_installation.count_installations', count_installations_mock):
+            logging_setup.configure_logging(args, stdout)
+            bundle_installation.wait_for_uninstallation(bundle_id, args)
+
+        self.assertEqual(count_installations_mock.call_args_list, [
+            call(bundle_id, args)
+        ])
+
+        self.assertEqual(strip_margin("""|Bundle a101449418187d92c789d1adc240b6d6 is uninstalled
+                                         |"""), self.output(stdout))
+
+    def test_wait_timeout(self):
+        count_installations_mock = MagicMock(side_effect=[1, 1, 1])
+        url_mock = MagicMock(return_value='/bundle-events/endpoint')
+        get_events_mock = MagicMock(return_value=[
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded')
+        ])
+
+        stdout = MagicMock()
+
+        bundle_id = 'a101449418187d92c789d1adc240b6d6'
+        args = MagicMock(**{
+            # Purposely set no timeout to invoke the error
+            'wait_timeout': 0
+        })
+        with patch('conductr_cli.conduct_url.url', url_mock), \
+                patch('conductr_cli.bundle_installation.count_installations', count_installations_mock), \
+                patch('conductr_cli.sse_client.get_events', get_events_mock):
+            logging_setup.configure_logging(args, stdout)
+            self.assertRaises(WaitTimeoutError, bundle_installation.wait_for_uninstallation, bundle_id, args)
+
+        self.assertEqual(count_installations_mock.call_args_list, [
+            call(bundle_id, args)
+        ])
+
+        url_mock.assert_called_with('bundles/events', args)
+
+        self.assertEqual(strip_margin("""|Bundle a101449418187d92c789d1adc240b6d6 waiting to be uninstalled
+                                         |"""), self.output(stdout))
+
+    def test_wait_timeout_all_events(self):
+        count_installations_mock = MagicMock(return_value=1)
+        url_mock = MagicMock(return_value='/bundle-events/endpoint')
+        get_events_mock = MagicMock(return_value=[
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded'),
+            create_test_event('bundleInstallationAdded')
+        ])
+
+        stdout = MagicMock()
+
+        bundle_id = 'a101449418187d92c789d1adc240b6d6'
+        args = MagicMock(**{
+            'wait_timeout': 10
+        })
+        with patch('conductr_cli.conduct_url.url', url_mock), \
+                patch('conductr_cli.bundle_installation.count_installations', count_installations_mock), \
+                patch('conductr_cli.sse_client.get_events', get_events_mock):
+            logging_setup.configure_logging(args, stdout)
+            self.assertRaises(WaitTimeoutError, bundle_installation.wait_for_uninstallation, bundle_id, args)
+
+        self.assertEqual(count_installations_mock.call_args_list, [
+            call(bundle_id, args),
+            call(bundle_id, args),
+            call(bundle_id, args),
+            call(bundle_id, args)
+        ])
+
+        url_mock.assert_called_with('bundles/events', args)
+
+        self.assertEqual(strip_margin("""|Bundle a101449418187d92c789d1adc240b6d6 waiting to be uninstalled
+                                         |Bundle a101449418187d92c789d1adc240b6d6 still waiting to be uninstalled
+                                         |Bundle a101449418187d92c789d1adc240b6d6 still waiting to be uninstalled
+                                         |Bundle a101449418187d92c789d1adc240b6d6 still waiting to be uninstalled
+                                         |"""), self.output(stdout))
diff --git a/conductr_cli/test/test_conduct.py b/conductr_cli/test/test_conduct.py
index f0c2141..15df94d 100644
--- a/conductr_cli/test/test_conduct.py
+++ b/conductr_cli/test/test_conduct.py
@@ -60,6 +60,8 @@ class TestConduct(TestCase):
         self.assertEqual(args.resolve_cache_dir, '{}/.conductr/cache'.format(os.path.expanduser('~')))
         self.assertEqual(args.verbose, False)
         self.assertEqual(args.long_ids, False)
+        self.assertEqual(args.no_wait, False)
+        self.assertEqual(args.wait_timeout, 60)
         self.assertEqual(args.bundle, 'path-to-bundle')
         self.assertEqual(args.configuration, 'path-to-conf')
 
@@ -74,6 +76,8 @@ class TestConduct(TestCase):
         self.assertEqual(args.resolve_cache_dir, '/somewhere')
         self.assertEqual(args.verbose, False)
         self.assertEqual(args.long_ids, False)
+        self.assertEqual(args.no_wait, False)
+        self.assertEqual(args.wait_timeout, 60)
         self.assertEqual(args.bundle, 'path-to-bundle')
         self.assertEqual(args.configuration, 'path-to-conf')
         self.assertFalse(args.quiet)
@@ -88,6 +92,8 @@ class TestConduct(TestCase):
         self.assertEqual(args.cli_settings_dir, '{}/.conductr'.format(os.path.expanduser('~')))
         self.assertEqual(args.verbose, False)
         self.assertEqual(args.long_ids, False)
+        self.assertEqual(args.no_wait, False)
+        self.assertEqual(args.wait_timeout, 60)
         self.assertEqual(args.scale, 5)
         self.assertEqual(args.bundle, 'path-to-bundle')
 
@@ -101,6 +107,8 @@ class TestConduct(TestCase):
         self.assertEqual(args.cli_settings_dir, '{}/.conductr'.format(os.path.expanduser('~')))
         self.assertEqual(args.verbose, False)
         self.assertEqual(args.long_ids, False)
+        self.assertEqual(args.no_wait, False)
+        self.assertEqual(args.wait_timeout, 60)
         self.assertEqual(args.bundle, 'path-to-bundle')
 
     def test_parser_unload(self):
@@ -113,6 +121,8 @@ class TestConduct(TestCase):
         self.assertEqual(args.cli_settings_dir, '{}/.conductr'.format(os.path.expanduser('~')))
         self.assertEqual(args.verbose, False)
         self.assertEqual(args.long_ids, False)
+        self.assertEqual(args.no_wait, False)
+        self.assertEqual(args.wait_timeout, 60)
         self.assertEqual(args.bundle, 'path-to-bundle')
 
     def test_get_cli_parameters(self):
diff --git a/conductr_cli/test/test_conduct_unload.py b/conductr_cli/test/test_conduct_unload.py
index b2adc98..92f69d4 100644
--- a/conductr_cli/test/test_conduct_unload.py
+++ b/conductr_cli/test/test_conduct_unload.py
@@ -22,6 +22,7 @@ class TestConductUnloadCommand(CliTestCase):
         'port': 9005,
         'api_version': '1',
         'verbose': False,
+        'no_wait': False,
         'quiet': False,
         'cli_parameters': '',
         'bundle': '45e0c477d3e5ea92aa8d85c0d8f3e25c'
@@ -37,51 +38,101 @@ class TestConductUnloadCommand(CliTestCase):
         return strip_margin(self.output_template.format(**{'params': params}))
 
     def test_success(self):
+        wait_for_uninstallation_mock = MagicMock()
         http_method = self.respond_with(200, self.default_response)
         stdout = MagicMock()
 
-        with patch('requests.delete', http_method):
-            logging_setup.configure_logging(MagicMock(**self.default_args), stdout)
-            result = conduct_unload.unload(MagicMock(**self.default_args))
+        input_args = MagicMock(**self.default_args)
+        with patch('requests.delete', http_method), \
+                patch('conductr_cli.bundle_installation.wait_for_uninstallation', wait_for_uninstallation_mock):
+            logging_setup.configure_logging(input_args, stdout)
+            result = conduct_unload.unload(input_args)
             self.assertTrue(result)
 
         http_method.assert_called_with(self.default_url, timeout=DEFAULT_HTTP_TIMEOUT)
+        wait_for_uninstallation_mock.assert_called_with('45e0c477d3e5ea92aa8d85c0d8f3e25c', input_args)
 
         self.assertEqual(self.default_output(), self.output(stdout))
 
     def test_success_verbose(self):
+        wait_for_uninstallation_mock = MagicMock()
         http_method = self.respond_with(200, self.default_response)
         stdout = MagicMock()
 
-        with patch('requests.delete', http_method), patch('sys.stdout', stdout):
-            args = self.default_args.copy()
-            args.update({'verbose': True})
-            logging_setup.configure_logging(MagicMock(**args), stdout)
-            result = conduct_unload.unload(MagicMock(**args))
+        args = self.default_args.copy()
+        args.update({'verbose': True})
+        input_args = MagicMock(**args)
+
+        with patch('requests.delete', http_method), \
+                patch('conductr_cli.bundle_installation.wait_for_uninstallation', wait_for_uninstallation_mock):
+            logging_setup.configure_logging(input_args, stdout)
+            result = conduct_unload.unload(input_args)
             self.assertTrue(result)
 
         http_method.assert_called_with(self.default_url, timeout=DEFAULT_HTTP_TIMEOUT)
+        wait_for_uninstallation_mock.assert_called_with('45e0c477d3e5ea92aa8d85c0d8f3e25c', input_args)
 
         self.assertEqual(self.default_response + self.default_output(), self.output(stdout))
 
+    def test_success_quiet(self):
+        wait_for_uninstallation_mock = MagicMock()
+        http_method = self.respond_with(200, self.default_response)
+        stdout = MagicMock()
+
+        args = self.default_args.copy()
+        args.update({'quiet': True})
+        input_args = MagicMock(**args)
+
+        with patch('requests.delete', http_method), \
+                patch('conductr_cli.bundle_installation.wait_for_uninstallation', wait_for_uninstallation_mock):
+            logging_setup.configure_logging(input_args, stdout)
+            result = conduct_unload.unload(input_args)
+            self.assertTrue(result)
+
+        http_method.assert_called_with(self.default_url, timeout=DEFAULT_HTTP_TIMEOUT)
+        wait_for_uninstallation_mock.assert_called_with('45e0c477d3e5ea92aa8d85c0d8f3e25c', input_args)
+
+        self.assertEqual('45e0c477d3e5ea92aa8d85c0d8f3e25c\n', self.output(stdout))
+
     def test_success_with_configuration(self):
+        wait_for_uninstallation_mock = MagicMock()
         http_method = self.respond_with(200, self.default_response)
         stdout = MagicMock()
 
+        args = self.default_args.copy()
         cli_parameters = ' --ip 127.0.1.1 --port 9006'
-        with patch('requests.delete', http_method):
-            args = self.default_args.copy()
-            args.update({'cli_parameters': cli_parameters})
-            logging_setup.configure_logging(MagicMock(**args), stdout)
-            result = conduct_unload.unload(MagicMock(**args))
+        args.update({'cli_parameters': cli_parameters})
+        input_args = MagicMock(**args)
+
+        with patch('requests.delete', http_method), \
+                patch('conductr_cli.bundle_installation.wait_for_uninstallation', wait_for_uninstallation_mock):
+            logging_setup.configure_logging(input_args, stdout)
+            result = conduct_unload.unload(input_args)
             self.assertTrue(result)
 
         http_method.assert_called_with(self.default_url, timeout=DEFAULT_HTTP_TIMEOUT)
+        wait_for_uninstallation_mock.assert_called_with('45e0c477d3e5ea92aa8d85c0d8f3e25c', input_args)
 
         self.assertEqual(
             self.default_output(params=cli_parameters),
             self.output(stdout))
 
+    def test_success_no_wait(self):
+        http_method = self.respond_with(200, self.default_response)
+        stdout = MagicMock()
+
+        args = self.default_args.copy()
+        args.update({'no_wait': True})
+        input_args = MagicMock(**args)
+        with patch('requests.delete', http_method):
+            logging_setup.configure_logging(input_args, stdout)
+            result = conduct_unload.unload(input_args)
+            self.assertTrue(result)
+
+        http_method.assert_called_with(self.default_url, timeout=DEFAULT_HTTP_TIMEOUT)
+
+        self.assertEqual(self.default_output(), self.output(stdout))
+
     def test_failure(self):
         http_method = self.respond_with(404)
         stderr = MagicMock()

pip install -e .
parse_log_pytest
pytest
pytest flake8 pep8-naming flake8-quotes
apt-get update apt-get install -y gcc
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
argcomplete==3.6.1
arrow==1.3.0
certifi==2025.1.31
charset-normalizer==3.4.1
-e git+https://github.com/typesafehub/conductr-cli.git@5947a412f5c61a10f5e5f0aa2da85cac2c66faca#egg=conductr_cli
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
flake8==7.2.0
flake8-quotes==3.4.0
idna==3.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
mccabe==0.7.0
packaging @ file:///croot/packaging_1734472117206/work
pep8-naming==0.14.1
pluggy @ file:///croot/pluggy_1733169602837/work
pycodestyle==2.13.0
pyflakes==3.3.1
pyhocon==0.2.1
pyparsing==2.0.3
pytest @ file:///croot/pytest_1738938843180/work
python-dateutil==2.9.0.post0
requests==2.32.3
six==1.17.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
types-python-dateutil==2.9.0.20241206
urllib3==2.3.0

name: conductr-cli
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - argcomplete==3.6.1
      - arrow==1.3.0
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - flake8==7.2.0
      - flake8-quotes==3.4.0
      - idna==3.10
      - mccabe==0.7.0
      - pep8-naming==0.14.1
      - pycodestyle==2.13.0
      - pyflakes==3.3.1
      - pyhocon==0.2.1
      - pyparsing==2.0.3
      - python-dateutil==2.9.0.post0
      - requests==2.32.3
      - six==1.17.0
      - types-python-dateutil==2.9.0.20241206
      - urllib3==2.3.0
prefix: /opt/conda/envs/conductr-cli

conductr_cli/test/test_bundle_installation.py::TestWaitForUninstallation::test_return_immediately_if_uninstalled conductr_cli/test/test_bundle_installation.py::TestWaitForUninstallation::test_wait_for_uninstallation conductr_cli/test/test_bundle_installation.py::TestWaitForUninstallation::test_wait_timeout conductr_cli/test/test_bundle_installation.py::TestWaitForUninstallation::test_wait_timeout_all_events conductr_cli/test/test_conduct.py::TestConduct::test_parser_unload conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_success conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_success_quiet conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_success_verbose conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_success_with_configuration
conductr_cli/test/test_bundle_installation.py::TestCountInstallation::test_return_installation_count conductr_cli/test/test_bundle_installation.py::TestCountInstallation::test_return_installation_count_v2 conductr_cli/test/test_bundle_installation.py::TestCountInstallation::test_return_zero_installation_count_v1 conductr_cli/test/test_bundle_installation.py::TestCountInstallation::test_return_zero_installation_count_v2 conductr_cli/test/test_bundle_installation.py::TestWaitForInstallation::test_return_immediately_if_installed conductr_cli/test/test_bundle_installation.py::TestWaitForInstallation::test_wait_for_installation conductr_cli/test/test_bundle_installation.py::TestWaitForInstallation::test_wait_timeout conductr_cli/test/test_bundle_installation.py::TestWaitForInstallation::test_wait_timeout_all_events conductr_cli/test/test_conduct.py::TestConduct::test_default conductr_cli/test/test_conduct.py::TestConduct::test_get_cli_parameters conductr_cli/test/test_conduct.py::TestConduct::test_parser_info conductr_cli/test/test_conduct.py::TestConduct::test_parser_load conductr_cli/test/test_conduct.py::TestConduct::test_parser_load_with_custom_resolve_cache_dir conductr_cli/test/test_conduct.py::TestConduct::test_parser_run conductr_cli/test/test_conduct.py::TestConduct::test_parser_services conductr_cli/test/test_conduct.py::TestConduct::test_parser_stop conductr_cli/test/test_conduct.py::TestConduct::test_parser_version conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_failure conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_failure_invalid_address conductr_cli/test/test_conduct_unload.py::TestConductUnloadCommand::test_success_no_wait
conductr_cli/bundle_installation.py conductr_cli/conduct_unload.py conductr_cli/conduct.py
conductr_cli/bundle_installation.py conductr_cli/conduct_unload.py conductr_cli/conduct.py