diff --git a/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml b/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml index 5cee11d9cc..605022a5bb 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/marketing_cloud/get_user_info.py b/cumulusci/tasks/marketing_cloud/get_user_info.py index efe49f40c1..e44b7d1082 100644 --- a/cumulusci/tasks/marketing_cloud/get_user_info.py +++ b/cumulusci/tasks/marketing_cloud/get_user_info.py @@ -14,7 +14,7 @@ def _run_task(self): 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 91c4f5eb0f..876a09cf39 100644 --- a/cumulusci/tasks/robotframework/libdoc.py +++ b/cumulusci/tasks/robotframework/libdoc.py @@ -241,7 +241,7 @@ def to_tuples(self): # 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 3cc76e9768..f05d5d11d5 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 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 @@ def _run_task(self): # 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. 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 @@ def _run_task(self): # 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 execute_script(self, script, *args): 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/cumulusci/tasks/robotframework/tests/test_robotframework.py b/cumulusci/tasks/robotframework/tests/test_robotframework.py index 2068ccc108..0a9a4e7a74 100644 --- a/cumulusci/tasks/robotframework/tests/test_robotframework.py +++ b/cumulusci/tasks/robotframework/tests/test_robotframework.py @@ -182,7 +182,7 @@ def test_tagstatexclude(self, mock_robot_run): }, }, ) - 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 @@ def test_user_defined_listeners_option(self): 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 @@ def test_sources(self, mock_add_path, mock_robot_run): ) @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 diff --git a/pyproject.toml b/pyproject.toml index e0b65ce47f..3b494008e3 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 95efd2dd81..626507d8e5 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 2da9f813d5..ebb157e3d8 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: