Repository: SFDO-Tooling/CumulusCI
Pull request #3686 (2023-10-19 21:37:16)

W42 dependency updates


Patch:
diff --git a/cumulusci/tasks/marketing_cloud/get_user_info.py b/cumulusci/tasks/marketing_cloud/get_user_info.py
index efe49f40c..e44b7d108 100644
--- a/cumulusci/tasks/marketing_cloud/get_user_info.py
+++ b/cumulusci/tasks/marketing_cloud/get_user_info.py
@@ -14,7 +14,7 @@ class GetUserInfoTask(BaseMarketingCloudTask):
             payload = self.mc_config.get_user_info()
         except requests.exceptions.HTTPError as e:
             self.logger.error(
-                f"Exception occurred fetching user info: {e.response.text}"
+                f"Exception occurred fetching user info: {e.response.text if e.response else 'None'}"
             )
             raise
 
diff --git a/cumulusci/tasks/robotframework/libdoc.py b/cumulusci/tasks/robotframework/libdoc.py
index 91c4f5eb0..876a09cf3 100644
--- a/cumulusci/tasks/robotframework/libdoc.py
+++ b/cumulusci/tasks/robotframework/libdoc.py
@@ -241,7 +241,7 @@ class KeywordFile:
                 # we don't want to see the same base pageobject
                 # keywords a kajillion times. This should probably
                 # be configurable, but I don't need it to be right now.
-                if base_pageobjects_path in keyword.source:
+                if base_pageobjects_path in str(keyword.source):
                     continue
 
                 path = Path(keyword.source)
diff --git a/cumulusci/tasks/robotframework/robotframework.py b/cumulusci/tasks/robotframework/robotframework.py
index 3cc76e976..f05d5d11d 100644
--- a/cumulusci/tasks/robotframework/robotframework.py
+++ b/cumulusci/tasks/robotframework/robotframework.py
@@ -1,3 +1,4 @@
+import fnmatch
 import json
 import os
 import shlex
@@ -5,7 +6,6 @@ import subprocess
 import sys
 from pathlib import Path
 
-from robot import pythonpathsetter
 from robot import run as robot_run
 from robot.testdoc import testdoc
 
@@ -278,11 +278,8 @@ class Robot(BaseSalesforceTask):
             # Save it so that we can restore it later
             orig_sys_path = sys.path.copy()
 
-            # Add each source to PYTHONPATH. Robot recommends that we
-            # use pythonpathsetter instead of directly setting
-            # sys.path. <shrug>
             for path in source_paths.values():
-                pythonpathsetter.add_path(path, end=True)
+                add_path(path, end=True)
 
             # Make sure the path to the repo root is on sys.path. Normally
             # it will be, but if we're running this task from another repo
@@ -293,7 +290,7 @@ class Robot(BaseSalesforceTask):
             # by robot.run. Plus, robot recommends we call a special
             # function instead of directly modifying sys.path
             if self.project_config.repo_root not in sys.path:
-                pythonpathsetter.add_path(self.project_config.repo_root)
+                add_path(self.project_config.repo_root)
 
             options["stdout"] = sys.stdout
             options["stderr"] = sys.stderr
@@ -380,4 +377,16 @@ def patch_executescript():
     WebDriver.execute_script = execute_script
 
 
+def add_path(path, end=False):
+    """
+    Adds a source to PYTHONPATH. Robot recommended that we
+    use pythonpathsetter.add_path instead of directly setting
+    sys.path, but removed this function in v6.1.
+    """
+    if not end:
+        sys.path.insert(0, path)
+    elif not any(fnmatch.fnmatch(p, path) for p in sys.path):
+        sys.path.append(path)
+
+
 patch_executescript()
diff --git a/pyproject.toml b/pyproject.toml
index e0b65ce47..3b494008e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -34,9 +34,10 @@ dependencies = [
     "keyring<=23.0.1",
     "defusedxml",
     "lxml",
+    "markdown-it-py==2.2.0", # resolve dependency conflict between prod/dev
     "MarkupSafe",
     "psutil",
-    "pydantic",
+    "pydantic<2",
     "PyJWT",
     "pytz",
     "pyyaml",
@@ -73,7 +74,7 @@ test = [
     "responses",
     "testfixtures",
     "tox",
-    "typeguard",
+    "typeguard<=2.13.3", # TODO: Lots of changes required for v4
     "vcrpy"
 ]
 
@@ -173,8 +174,6 @@ include = [
     'cumulusci/core/config/base_config.py',
     'cumulusci/core/config/base_task_flow_config.py',
     'cumulusci/core/config/oauth2_service_config.py',
-    'cumulusci/core/config/scratch_org_config.py',
-    'cumulusci/core/config/sfdx_org_config.py',
     'cumulusci/core/debug.py',
     'cumulusci/core/dependencies/__init__.py',
     'cumulusci/core/dependencies/utils.py',
@@ -184,7 +183,6 @@ include = [
     'cumulusci/core/metadeploy/__init__.py',
     'cumulusci/core/metadeploy/api.py',
     'cumulusci/core/runtime.py',
-    'cumulusci/core/sfdx.py',
     'cumulusci/core/source/__init__.py',
     'cumulusci/core/source/local_folder.py',
     'cumulusci/core/source_transforms/__init__.py',
@@ -199,7 +197,6 @@ include = [
     'cumulusci/salesforce_api/exceptions.py',
     'cumulusci/salesforce_api/filterable_objects.py',
     'cumulusci/salesforce_api/mc_soap_envelopes.py',
-    'cumulusci/salesforce_api/org_schema_models.py',
     'cumulusci/salesforce_api/package_install.py',
     'cumulusci/salesforce_api/soap_envelopes.py',
     'cumulusci/tasks/__init__.py',
@@ -212,17 +209,10 @@ include = [
     'cumulusci/tasks/bulkdata/generate_mapping_utils/extract_mapping_file_generator.py',
     'cumulusci/tasks/bulkdata/generate_mapping_utils/generate_mapping_from_declarations.py',
     'cumulusci/tasks/bulkdata/generate_mapping_utils/mapping_generator_post_processes.py',
-    'cumulusci/tasks/bulkdata/query_transformers.py',
-    'cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_working_directory.py',
     'cumulusci/tasks/bulkdata/snowfakery_utils/subtask_configurator.py',
     'cumulusci/tasks/dx_convert_from.py',
     'cumulusci/tasks/github/__init__.py',
     'cumulusci/tasks/github/commit_status.py',
-    'cumulusci/tasks/github/merge.py',
-    'cumulusci/tasks/github/publish.py',
-    'cumulusci/tasks/github/pull_request.py',
-    'cumulusci/tasks/github/release_report.py',
-    'cumulusci/tasks/github/tag.py',
     'cumulusci/tasks/github/util.py',
     'cumulusci/tasks/marketing_cloud/__init__.py',
     'cumulusci/tasks/marketing_cloud/api.py',
@@ -263,7 +253,6 @@ include = [
     'cumulusci/tests/util.py',
     'cumulusci/utils/waiting.py',
     'cumulusci/utils/xml/robot_xml.py',
-    'cumulusci/utils/xml/salesforce_encoding.py',
     'cumulusci/utils/ziputils.py'
 ]
 # Do not add to this list. Instead use
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 95efd2dd8..626507d8e 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -2,74 +2,80 @@
 # This file is autogenerated by pip-compile with Python 3.8
 # by the following command:
 #
-#    pip-compile --all-extras --output-file=requirements/dev.txt --resolver=backtracking pyproject.toml
+#    pip-compile --all-extras --output-file=requirements/dev.txt pyproject.toml
 #
 alabaster==0.7.13
     # via sphinx
 appdirs==1.4.4
     # via fs
-attrs==22.2.0
+attrs==23.1.0
     # via
     #   jsonschema
     #   pytest
-authlib==1.2.0
+    #   referencing
+authlib==1.2.1
     # via simple-salesforce
-babel==2.11.0
+babel==2.13.0
     # via sphinx
-beautifulsoup4==4.11.2
+beautifulsoup4==4.12.2
     # via furo
-black==23.1.0
+black==23.10.0
     # via cumulusci (pyproject.toml)
-cachetools==5.3.0
+cachetools==5.3.1
     # via tox
-certifi==2022.12.7
+certifi==2023.7.22
     # via
     #   requests
     #   snowfakery
-cffi==1.15.1
+cffi==1.16.0
     # via cryptography
-cfgv==3.3.1
+cfgv==3.4.0
     # via pre-commit
-chardet==5.1.0
+chardet==5.2.0
     # via tox
-charset-normalizer==3.0.1
+charset-normalizer==3.2.0
     # via
     #   requests
     #   snowfakery
-click==8.1.3
+click==8.1.6
     # via
     #   black
     #   cumulusci (pyproject.toml)
     #   snowfakery
 colorama==0.4.6
     # via tox
-coverage[toml]==7.1.0
+coverage[toml]==7.3.2
     # via
     #   cumulusci (pyproject.toml)
     #   pytest-cov
-cryptography==39.0.1
+cryptography==41.0.4
     # via
     #   authlib
     #   cumulusci (pyproject.toml)
     #   pyjwt
-    #   secretstorage
 defusedxml==0.7.1
     # via cumulusci (pyproject.toml)
-distlib==0.3.6
+distlib==0.3.7
     # via virtualenv
 docutils==0.16
     # via
     #   cumulusci (pyproject.toml)
     #   myst-parser
     #   sphinx
-factory-boy==3.2.1
+factory-boy==3.3.0
     # via cumulusci (pyproject.toml)
-faker==17.0.0
+faker==19.3.0
     # via
     #   cumulusci (pyproject.toml)
     #   factory-boy
+    #   faker-edu
+    #   faker-nonprofit
     #   snowfakery
-filelock==3.9.0
+faker-edu==1.0.0
+    # via snowfakery
+faker-nonprofit==1.0.0
+    # via snowfakery
+filelock==3.12.4
     # via
     #   tox
     #   virtualenv
@@ -77,17 +83,15 @@ flake8==3.9.2
     # via cumulusci (pyproject.toml)
 fs==2.4.16
     # via cumulusci (pyproject.toml)
-furo==2022.12.7
+furo==2023.3.27
     # via cumulusci (pyproject.toml)
-github3-py==3.2.0
+github3-py==4.0.1
     # via cumulusci (pyproject.toml)
-greenlet==2.0.2
-    # via
-    #   snowfakery
-    #   sqlalchemy
+greenlet==3.0.0
+    # via sqlalchemy
 gvgen==1.0
     # via snowfakery
-identify==2.5.18
+identify==2.5.30
     # via pre-commit
 idna==3.4
     # via
@@ -96,45 +100,46 @@ idna==3.4
     #   yarl
 imagesize==1.4.1
     # via sphinx
-importlib-metadata==6.0.0
+importlib-metadata==6.8.0
     # via
     #   keyring
     #   sphinx
-importlib-resources==5.10.2
-    # via jsonschema
+importlib-resources==6.1.0
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
 iniconfig==2.0.0
     # via pytest
 isort==5.12.0
     # via cumulusci (pyproject.toml)
-jeepney==0.8.0
-    # via
-    #   keyring
-    #   secretstorage
 jinja2==3.1.2
     # via
     #   cumulusci (pyproject.toml)
     #   myst-parser
     #   snowfakery
     #   sphinx
-jsonschema==4.17.3
+jsonschema==4.19.1
     # via cumulusci (pyproject.toml)
+jsonschema-specifications==2023.7.1
+    # via jsonschema
 keyring==23.0.1
     # via cumulusci (pyproject.toml)
-lxml==4.9.2
+lxml==4.9.3
     # via cumulusci (pyproject.toml)
-markdown-it-py==2.1.0
+markdown-it-py==2.2.0
     # via
+    #   cumulusci (pyproject.toml)
     #   mdit-py-plugins
     #   myst-parser
     #   rich
-markupsafe==2.1.2
+markupsafe==2.1.3
     # via
     #   cumulusci (pyproject.toml)
     #   jinja2
     #   snowfakery
 mccabe==0.6.1
     # via flake8
-mdit-py-plugins==0.3.3
+mdit-py-plugins==0.3.5
     # via myst-parser
 mdurl==0.1.2
     # via markdown-it-py
@@ -142,35 +147,35 @@ multidict==6.0.4
     # via yarl
 mypy-extensions==1.0.0
     # via black
-myst-parser==0.18.1
+myst-parser==1.0.0
     # via cumulusci (pyproject.toml)
-natsort==8.2.0
+natsort==8.4.0
     # via robotframework-pabot
-nodeenv==1.7.0
+nodeenv==1.8.0
     # via pre-commit
-packaging==23.0
+packaging==23.2
     # via
     #   black
     #   pyproject-api
     #   pytest
     #   sphinx
     #   tox
-pathspec==0.11.0
+pathspec==0.11.2
     # via black
 pkgutil-resolve-name==1.3.10
     # via jsonschema
-platformdirs==3.0.0
+platformdirs==3.11.0
     # via
     #   black
     #   tox
     #   virtualenv
-pluggy==1.0.0
+pluggy==1.3.0
     # via
     #   pytest
     #   tox
-pre-commit==3.0.4
+pre-commit==3.5.0
     # via cumulusci (pyproject.toml)
-psutil==5.9.4
+psutil==5.9.6
     # via cumulusci (pyproject.toml)
 py==1.11.0
     # via pytest
@@ -178,32 +183,30 @@ pycodestyle==2.7.0
     # via flake8
 pycparser==2.21
     # via cffi
-pydantic==1.10.5
+pydantic==1.10.12
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
 pyflakes==2.3.1
     # via flake8
-pygments==2.14.0
+pygments==2.16.1
     # via
     #   furo
     #   rich
     #   sphinx
-pyjwt[crypto]==2.6.0
+pyjwt[crypto]==2.8.0
     # via
     #   cumulusci (pyproject.toml)
     #   github3-py
-pyproject-api==1.5.0
+pyproject-api==1.6.1
     # via tox
-pyrsistent==0.19.3
-    # via jsonschema
 pytest==7.0.1
     # via
     #   cumulusci (pyproject.toml)
     #   pytest-cov
     #   pytest-random-order
     #   pytest-vcr
-pytest-cov==4.0.0
+pytest-cov==4.1.0
     # via cumulusci (pyproject.toml)
 pytest-random-order==1.1.0
     # via cumulusci (pyproject.toml)
@@ -217,18 +220,23 @@ python-dateutil==2.8.2
     #   faker
     #   github3-py
     #   snowfakery
-pytz==2022.7.1
+pytz==2023.3.post1
     # via
     #   babel
     #   cumulusci (pyproject.toml)
-pyyaml==6.0
+pyyaml==6.0.1
     # via
     #   cumulusci (pyproject.toml)
     #   myst-parser
     #   pre-commit
+    #   responses
     #   snowfakery
     #   vcrpy
-requests==2.28.2
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
+requests==2.29.0
     # via
     #   cumulusci (pyproject.toml)
     #   github3-py
@@ -239,13 +247,13 @@ requests==2.28.2
     #   simple-salesforce
     #   snowfakery
     #   sphinx
-requests-futures==1.0.0
+requests-futures==1.0.1
     # via cumulusci (pyproject.toml)
-responses==0.22.0
+responses==0.23.1
     # via cumulusci (pyproject.toml)
-rich==13.3.1
+rich==13.6.0
     # via cumulusci (pyproject.toml)
-robotframework==6.0.2
+robotframework==6.1.1
     # via
     #   cumulusci (pyproject.toml)
     #   robotframework-lint
@@ -255,24 +263,26 @@ robotframework==6.0.2
     #   robotframework-stacktrace
 robotframework-lint==1.1
     # via cumulusci (pyproject.toml)
-robotframework-pabot==2.13.0
+robotframework-pabot==2.16.0
     # via cumulusci (pyproject.toml)
-robotframework-pythonlibcore==4.1.0
+robotframework-pythonlibcore==4.2.0
     # via robotframework-seleniumlibrary
-robotframework-requests==0.9.4
+robotframework-requests==0.9.5
     # via cumulusci (pyproject.toml)
 robotframework-seleniumlibrary==5.1.3
     # via cumulusci (pyproject.toml)
 robotframework-stacktrace==0.4.1
     # via robotframework-pabot
+rpds-py==0.10.6
+    # via
+    #   jsonschema
+    #   referencing
 rst2ansi==0.1.5
     # via cumulusci (pyproject.toml)
 salesforce-bulk==2.2.0
     # via cumulusci (pyproject.toml)
 sarge==0.1.7.post1
     # via cumulusci (pyproject.toml)
-secretstorage==3.3.3
-    # via keyring
 selenium==3.141.0
     # via
     #   cumulusci (pyproject.toml)
@@ -287,12 +297,11 @@ six==1.16.0
     #   python-dateutil
     #   salesforce-bulk
     #   snowfakery
-    #   vcrpy
 snowballstemmer==2.2.0
     # via sphinx
-snowfakery==3.5.0
+snowfakery==3.6.1
     # via cumulusci (pyproject.toml)
-soupsieve==2.4
+soupsieve==2.5
     # via beautifulsoup4
 sphinx==5.3.0
     # via
@@ -300,7 +309,7 @@ sphinx==5.3.0
     #   furo
     #   myst-parser
     #   sphinx-basic-ng
-sphinx-basic-ng==1.0.0b1
+sphinx-basic-ng==1.0.0b2
     # via furo
 sphinxcontrib-applehelp==1.0.4
     # via sphinx
@@ -314,14 +323,12 @@ sphinxcontrib-qthelp==1.0.3
     # via sphinx
 sphinxcontrib-serializinghtml==1.1.5
     # via sphinx
-sqlalchemy==1.4.46
+sqlalchemy==1.4.49
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
-testfixtures==7.1.0
+testfixtures==7.2.0
     # via cumulusci (pyproject.toml)
-toml==0.10.2
-    # via responses
 tomli==2.0.1
     # via
     #   black
@@ -329,16 +336,16 @@ tomli==2.0.1
     #   pyproject-api
     #   pytest
     #   tox
-tox==4.4.5
+tox==4.11.3
     # via cumulusci (pyproject.toml)
 typeguard==2.13.3
     # via cumulusci (pyproject.toml)
-types-toml==0.10.8.4
+types-pyyaml==6.0.12.12
     # via responses
-typing-extensions==4.5.0
+typing-extensions==4.7.1
     # via
     #   black
-    #   myst-parser
+    #   faker
     #   pydantic
     #   rich
     #   snowfakery
@@ -346,27 +353,28 @@ unicodecsv==0.14.1
     # via salesforce-bulk
 uritemplate==4.1.1
     # via github3-py
-urllib3==1.26.14
+urllib3==1.26.16
     # via
     #   requests
     #   responses
     #   selenium
     #   snowfakery
-vcrpy==4.2.1
+    #   vcrpy
+vcrpy==5.1.0
     # via
     #   cumulusci (pyproject.toml)
     #   pytest-vcr
-virtualenv==20.19.0
+virtualenv==20.24.5
     # via
     #   pre-commit
     #   tox
-wrapt==1.14.1
+wrapt==1.15.0
     # via vcrpy
 xmltodict==0.13.0
     # via cumulusci (pyproject.toml)
-yarl==1.8.2
+yarl==1.9.2
     # via vcrpy
-zipp==3.13.0
+zipp==3.17.0
     # via
     #   importlib-metadata
     #   importlib-resources
diff --git a/requirements/prod.txt b/requirements/prod.txt
index 2da9f813d..ebb157e3d 100644
--- a/requirements/prod.txt
+++ b/requirements/prod.txt
@@ -2,90 +2,91 @@
 # This file is autogenerated by pip-compile with Python 3.8
 # by the following command:
 #
-#    pip-compile --output-file=requirements/prod.txt --resolver=backtracking pyproject.toml
+#    pip-compile --output-file=requirements/prod.txt pyproject.toml
 #
 appdirs==1.4.4
     # via fs
-authlib==1.2.0
+authlib==1.2.1
     # via simple-salesforce
-certifi==2022.12.7
+certifi==2023.7.22
     # via
     #   requests
     #   snowfakery
-cffi==1.15.1
+cffi==1.16.0
     # via cryptography
-charset-normalizer==3.0.1
+charset-normalizer==3.2.0
     # via
     #   requests
     #   snowfakery
-click==8.1.3
+click==8.1.6
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
-cryptography==39.0.1
+cryptography==41.0.4
     # via
     #   authlib
     #   cumulusci (pyproject.toml)
     #   pyjwt
-    #   secretstorage
 defusedxml==0.7.1
     # via cumulusci (pyproject.toml)
 docutils==0.16
     # via cumulusci (pyproject.toml)
-faker==17.0.0
+faker==19.3.0
     # via
     #   cumulusci (pyproject.toml)
+    #   faker-edu
+    #   faker-nonprofit
     #   snowfakery
+faker-edu==1.0.0
+    # via snowfakery
+faker-nonprofit==1.0.0
+    # via snowfakery
 fs==2.4.16
     # via cumulusci (pyproject.toml)
-github3-py==3.2.0
+github3-py==4.0.1
     # via cumulusci (pyproject.toml)
-greenlet==2.0.2
-    # via
-    #   snowfakery
-    #   sqlalchemy
+greenlet==3.0.0
+    # via sqlalchemy
 gvgen==1.0
     # via snowfakery
 idna==3.4
     # via
     #   requests
     #   snowfakery
-importlib-metadata==6.0.0
+importlib-metadata==6.8.0
     # via keyring
-jeepney==0.8.0
-    # via
-    #   keyring
-    #   secretstorage
 jinja2==3.1.2
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
 keyring==23.0.1
     # via cumulusci (pyproject.toml)
-lxml==4.9.2
+lxml==4.9.3
     # via cumulusci (pyproject.toml)
-markdown-it-py==2.1.0
-    # via rich
-markupsafe==2.1.2
+markdown-it-py==2.2.0
+    # via
+    #   cumulusci (pyproject.toml)
+    #   rich
+markupsafe==2.1.3
     # via
     #   cumulusci (pyproject.toml)
     #   jinja2
     #   snowfakery
 mdurl==0.1.2
     # via markdown-it-py
-natsort==8.2.0
+natsort==8.4.0
     # via robotframework-pabot
-psutil==5.9.4
+psutil==5.9.6
     # via cumulusci (pyproject.toml)
 pycparser==2.21
     # via cffi
-pydantic==1.10.5
+pydantic==1.10.12
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
-pygments==2.14.0
+pygments==2.16.1
     # via rich
-pyjwt[crypto]==2.6.0
+pyjwt[crypto]==2.8.0
     # via
     #   cumulusci (pyproject.toml)
     #   github3-py
@@ -97,13 +98,13 @@ python-dateutil==2.8.2
     #   faker
     #   github3-py
     #   snowfakery
-pytz==2022.7.1
+pytz==2023.3.post1
     # via cumulusci (pyproject.toml)
-pyyaml==6.0
+pyyaml==6.0.1
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
-requests==2.28.2
+requests==2.29.0
     # via
     #   cumulusci (pyproject.toml)
     #   github3-py
@@ -112,11 +113,11 @@ requests==2.28.2
     #   salesforce-bulk
     #   simple-salesforce
     #   snowfakery
-requests-futures==1.0.0
+requests-futures==1.0.1
     # via cumulusci (pyproject.toml)
-rich==13.3.1
+rich==13.6.0
     # via cumulusci (pyproject.toml)
-robotframework==6.0.2
+robotframework==6.1.1
     # via
     #   cumulusci (pyproject.toml)
     #   robotframework-lint
@@ -126,11 +127,11 @@ robotframework==6.0.2
     #   robotframework-stacktrace
 robotframework-lint==1.1
     # via cumulusci (pyproject.toml)
-robotframework-pabot==2.13.0
+robotframework-pabot==2.16.0
     # via cumulusci (pyproject.toml)
-robotframework-pythonlibcore==4.1.0
+robotframework-pythonlibcore==4.2.0
     # via robotframework-seleniumlibrary
-robotframework-requests==0.9.4
+robotframework-requests==0.9.5
     # via cumulusci (pyproject.toml)
 robotframework-seleniumlibrary==5.1.3
     # via cumulusci (pyproject.toml)
@@ -142,8 +143,6 @@ salesforce-bulk==2.2.0
     # via cumulusci (pyproject.toml)
 sarge==0.1.7.post1
     # via cumulusci (pyproject.toml)
-secretstorage==3.3.3
-    # via keyring
 selenium==3.141.0
     # via
     #   cumulusci (pyproject.toml)
@@ -158,14 +157,15 @@ six==1.16.0
     #   python-dateutil
     #   salesforce-bulk
     #   snowfakery
-snowfakery==3.5.0
+snowfakery==3.6.1
     # via cumulusci (pyproject.toml)
-sqlalchemy==1.4.46
+sqlalchemy==1.4.49
     # via
     #   cumulusci (pyproject.toml)
     #   snowfakery
-typing-extensions==4.5.0
+typing-extensions==4.7.1
     # via
+    #   faker
     #   pydantic
     #   rich
     #   snowfakery
@@ -173,14 +173,14 @@ unicodecsv==0.14.1
     # via salesforce-bulk
 uritemplate==4.1.1
     # via github3-py
-urllib3==1.26.14
+urllib3==1.26.16
     # via
     #   requests
     #   selenium
     #   snowfakery
 xmltodict==0.13.0
     # via cumulusci (pyproject.toml)
-zipp==3.13.0
+zipp==3.17.0
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:


Test patch:
diff --git a/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml b/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml
index 5cee11d9c..605022a5b 100644
--- a/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml
+++ b/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml
@@ -3,7 +3,6 @@
 
 # contact based on a user
 - object: Contact
-  include: SFStandardContact
   fields:
       __user:
           SalesforceQuery.find_record:
diff --git a/cumulusci/tasks/robotframework/tests/test_robotframework.py b/cumulusci/tasks/robotframework/tests/test_robotframework.py
index 2068ccc10..0a9a4e7a7 100644
--- a/cumulusci/tasks/robotframework/tests/test_robotframework.py
+++ b/cumulusci/tasks/robotframework/tests/test_robotframework.py
@@ -182,7 +182,7 @@ class TestRobot:
                 },
             },
         )
-        assert type(task.options["options"]["tagstatexclude"]) == list
+        assert type(task.options["options"]["tagstatexclude"]) is list
         task()
         outputdir = str(Path(".").resolve())
         mock_robot_run.assert_called_once_with(
@@ -266,9 +266,7 @@ class TestRobot:
         assert KeywordLogger in listener_classes
 
     @mock.patch("cumulusci.tasks.robotframework.robotframework.robot_run")
-    @mock.patch(
-        "cumulusci.tasks.robotframework.robotframework.pythonpathsetter.add_path"
-    )
+    @mock.patch("cumulusci.tasks.robotframework.robotframework.add_path")
     def test_sources(self, mock_add_path, mock_robot_run):
         """Verify that sources get added to PYTHONPATH when task runs"""
         universal_config = UniversalConfig()
@@ -313,9 +311,7 @@ class TestRobot:
         )
 
     @mock.patch("cumulusci.tasks.robotframework.robotframework.robot_run")
-    @mock.patch(
-        "cumulusci.tasks.robotframework.robotframework.pythonpathsetter.add_path"
-    )
+    @mock.patch("cumulusci.tasks.robotframework.robotframework.add_path")
     def test_repo_root_in_sys_path(self, mock_add_path, mock_robot_run):
         """Verify that the repo root is added to sys.path