diff --git a/ddsc/core/projectuploader.py b/ddsc/core/projectuploader.py
index 926df55..7498835 100644
--- a/ddsc/core/projectuploader.py
+++ b/ddsc/core/projectuploader.py
@@ -78,7 +78,7 @@ class UploadContext(object):
         """
         self.message_queue.put((self.task_id, data))
 
-    def started_waiting(self):
+    def start_waiting(self):
         """
         Called when we start waiting for project to be ready for file uploads.
         """
@@ -86,7 +86,7 @@ class UploadContext(object):
 
     def done_waiting(self):
         """
-        Called when project isready for file uploads (after waiting).
+        Called when project is ready for file uploads (after waiting).
         """
         self.send_message(False)
 
diff --git a/devRequirements.txt b/devRequirements.txt
index 4b55c18..5fade57 100644
--- a/devRequirements.txt
+++ b/devRequirements.txt
@@ -1,2 +1,3 @@
 mock==2.0.0
 flake8==3.3.0
+nose==1.3.7

AttributeError: 'UploadContext' object has no attribute 'start_waiting'
In refactoring the name of the method I missed one case.
UploadContext method should be `start_waiting` (ddsc/core/projectuploader.py).
diff --git a/ddsc/core/tests/test_projectuploader.py b/ddsc/core/tests/test_projectuploader.py
index 54b333a..8fc0f00 100644
--- a/ddsc/core/tests/test_projectuploader.py
+++ b/ddsc/core/tests/test_projectuploader.py
@@ -24,6 +24,24 @@ class TestUploadContext(TestCase):
         context = UploadContext(settings, params, multiprocessing.Manager().Queue(), 12)
         pickle.dumps(context)
 
+    def test_start_waiting(self):
+        mock_message_queue = MagicMock()
+        context = UploadContext(settings=MagicMock(),
+                                params=[],
+                                message_queue=mock_message_queue,
+                                task_id=12)
+        context.start_waiting()
+        mock_message_queue.put.assert_called_with((12, True))
+
+    def test_done_waiting(self):
+        mock_message_queue = MagicMock()
+        context = UploadContext(settings=MagicMock(),
+                                params=[],
+                                message_queue=mock_message_queue,
+                                task_id=13)
+        context.done_waiting()
+        mock_message_queue.put.assert_called_with((13, False))
+
 
 class TestProjectUploadDryRun(TestCase):
     def test_single_empty_non_existant_directory(self):

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio mock flake8
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
coverage==7.8.0
-e git+https://github.com/Duke-GCB/DukeDSClient.git@4125429b9a10ee60a92456a5bd2b4b207e625a45#egg=DukeDSClient
exceptiongroup==1.2.2
execnet==2.1.1
flake8==7.2.0
future==0.16.0
iniconfig==2.1.0
mccabe==0.7.0
mock==5.2.0
packaging==24.2
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.1
pytest==8.3.5
pytest-asyncio==0.26.0
pytest-cov==6.0.0
pytest-mock==3.14.0
pytest-xdist==3.6.1
pytz==2025.2
PyYAML==3.12
requests==2.13.0
six==1.10.0
tomli==2.2.1
typing_extensions==4.13.0

name: DukeDSClient
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
  - 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
  - pip=25.0=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
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.8.0
      - exceptiongroup==1.2.2
      - execnet==2.1.1
      - flake8==7.2.0
      - future==0.16.0
      - iniconfig==2.1.0
      - mccabe==0.7.0
      - mock==5.2.0
      - packaging==24.2
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.1
      - pytest==8.3.5
      - pytest-asyncio==0.26.0
      - pytest-cov==6.0.0
      - pytest-mock==3.14.0
      - pytest-xdist==3.6.1
      - pytz==2025.2
      - pyyaml==3.12
      - requests==2.13.0
      - six==1.10.0
      - tomli==2.2.1
      - typing-extensions==4.13.0
prefix: /opt/conda/envs/DukeDSClient

ddsc/core/tests/test_projectuploader.py::TestUploadContext::test_start_waiting
ddsc/core/tests/test_projectuploader.py::TestUploadContext::test_can_pickle ddsc/core/tests/test_projectuploader.py::TestUploadContext::test_done_waiting ddsc/core/tests/test_projectuploader.py::TestProjectUploadDryRun::test_nested_directories ddsc/core/tests/test_projectuploader.py::TestProjectUploadDryRun::test_nested_directories_skip_parents ddsc/core/tests/test_projectuploader.py::TestProjectUploadDryRun::test_single_empty_existing_directory ddsc/core/tests/test_projectuploader.py::TestProjectUploadDryRun::test_single_empty_non_existant_directory ddsc/core/tests/test_projectuploader.py::TestProjectUploadDryRun::test_some_files
ddsc/core/projectuploader.py devRequirements.txt
ddsc/core/projectuploader.py devRequirements.txt