cumulusci-plus 5.0.8__py3-none-any.whl → 5.0.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cumulusci-plus might be problematic. Click here for more details.

cumulusci/__about__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "5.0.8"
1
+ __version__ = "5.0.9"
cumulusci/cli/cci.py CHANGED
@@ -93,9 +93,16 @@ def _signal_handler(signum, frame):
93
93
  old_handler = signal.signal(signum, signal.SIG_IGN)
94
94
 
95
95
  try:
96
- pgrp = os.getpgrp()
97
- # Send signal to all processes in the group except ourselves
98
- os.killpg(pgrp, signum)
96
+ # Only use process group termination on Unix systems
97
+ if hasattr(os, "getpgrp") and hasattr(os, "killpg"):
98
+ pgrp = os.getpgrp()
99
+ # Send signal to all processes in the group except ourselves
100
+ os.killpg(pgrp, signum)
101
+ else:
102
+ # On Windows, we can't use process groups, so just log the attempt
103
+ console.print(
104
+ "[yellow]Process group termination not supported on this platform[/yellow]"
105
+ )
99
106
  finally:
100
107
  # Restore the original signal handler
101
108
  signal.signal(signum, old_handler)
@@ -3,7 +3,6 @@ import io
3
3
  import os
4
4
  import signal
5
5
  import sys
6
- import tempfile
7
6
  from pathlib import Path
8
7
  from unittest import mock
9
8
 
@@ -26,17 +25,11 @@ CONSOLE = mock.Mock()
26
25
 
27
26
 
28
27
  @pytest.fixture(autouse=True)
29
- def env_config():
30
- config = {
31
- "global_tempdir": tempfile.gettempdir(),
32
- "tempdir": tempfile.gettempdir(),
33
- }
34
-
35
- # Reset signal handler flag to ensure clean state for tests
28
+ def reset_signal_handler_flag():
29
+ """Reset signal handler flag to ensure clean state for tests"""
30
+ cci._signal_handler_active = False
31
+ yield
36
32
  cci._signal_handler_active = False
37
-
38
- with mock.patch.dict(os.environ, config):
39
- yield
40
33
 
41
34
 
42
35
  @mock.patch("cumulusci.cli.cci.tee_stdout_stderr")
@@ -544,8 +537,8 @@ def test_dash_dash_version(
544
537
 
545
538
  @mock.patch("sys.exit")
546
539
  @mock.patch("cumulusci.cli.cci.Console")
547
- @mock.patch("os.killpg")
548
- @mock.patch("os.getpgrp")
540
+ @mock.patch("os.killpg", create=True)
541
+ @mock.patch("os.getpgrp", create=True)
549
542
  @mock.patch("signal.signal")
550
543
  def test_signal_handler_terminates_process_group(
551
544
  mock_signal, mock_getpgrp, mock_killpg, mock_console, mock_exit
@@ -557,38 +550,40 @@ def test_signal_handler_terminates_process_group(
557
550
  # Mock the global exit stack
558
551
  mock_exit_stack = mock.Mock()
559
552
  with mock.patch.object(cci, "_exit_stack", mock_exit_stack):
560
- # Call the signal handler with SIGTERM
561
- cci._signal_handler(signal.SIGTERM, None)
553
+ # Mock hasattr to return True for Unix functions
554
+ with mock.patch("builtins.hasattr", return_value=True):
555
+ # Call the signal handler with SIGTERM
556
+ cci._signal_handler(signal.SIGTERM, None)
562
557
 
563
- # Verify console output
564
- console_instance.print.assert_any_call(
565
- "\n[yellow]Received SIGTERM - CumulusCI is being terminated[/yellow]"
566
- )
567
- console_instance.print.assert_any_call(
568
- "[yellow]Exiting with failure code due to external cancellation.[/yellow]"
569
- )
570
- console_instance.print.assert_any_call(
571
- "[yellow]Terminating child processes...[/yellow]"
572
- )
558
+ # Verify console output
559
+ console_instance.print.assert_any_call(
560
+ "\n[yellow]Received SIGTERM - CumulusCI is being terminated[/yellow]"
561
+ )
562
+ console_instance.print.assert_any_call(
563
+ "[yellow]Exiting with failure code due to external cancellation.[/yellow]"
564
+ )
565
+ console_instance.print.assert_any_call(
566
+ "[yellow]Terminating child processes...[/yellow]"
567
+ )
573
568
 
574
- # Verify cleanup was called
575
- mock_exit_stack.close.assert_called_once()
569
+ # Verify cleanup was called
570
+ mock_exit_stack.close.assert_called_once()
576
571
 
577
- # Verify signal was temporarily ignored and then restored
578
- mock_signal.assert_called()
572
+ # Verify signal was temporarily ignored and then restored
573
+ mock_signal.assert_called()
579
574
 
580
- # Verify process group was terminated
581
- mock_getpgrp.assert_called_once()
582
- mock_killpg.assert_called_once_with(1234, signal.SIGTERM)
575
+ # Verify process group was terminated
576
+ mock_getpgrp.assert_called_once()
577
+ mock_killpg.assert_called_once_with(1234, signal.SIGTERM)
583
578
 
584
- # Verify exit with correct code
585
- mock_exit.assert_called_once_with(143)
579
+ # Verify exit with correct code
580
+ mock_exit.assert_called_once_with(143)
586
581
 
587
582
 
588
583
  @mock.patch("sys.exit")
589
584
  @mock.patch("cumulusci.cli.cci.Console")
590
- @mock.patch("os.killpg")
591
- @mock.patch("os.getpgrp")
585
+ @mock.patch("os.killpg", create=True)
586
+ @mock.patch("os.getpgrp", create=True)
592
587
  @mock.patch("signal.signal")
593
588
  def test_signal_handler_sigint(
594
589
  mock_signal, mock_getpgrp, mock_killpg, mock_console, mock_exit
@@ -600,19 +595,21 @@ def test_signal_handler_sigint(
600
595
  # Mock the global exit stack
601
596
  mock_exit_stack = mock.Mock()
602
597
  with mock.patch.object(cci, "_exit_stack", mock_exit_stack):
603
- # Call the signal handler with SIGINT
604
- cci._signal_handler(signal.SIGINT, None)
598
+ # Mock hasattr to return True for Unix functions
599
+ with mock.patch("builtins.hasattr", return_value=True):
600
+ # Call the signal handler with SIGINT
601
+ cci._signal_handler(signal.SIGINT, None)
605
602
 
606
- # Verify console output
607
- console_instance.print.assert_any_call(
608
- "\n[yellow]Received SIGINT - CumulusCI is being terminated[/yellow]"
609
- )
603
+ # Verify console output
604
+ console_instance.print.assert_any_call(
605
+ "\n[yellow]Received SIGINT - CumulusCI is being terminated[/yellow]"
606
+ )
610
607
 
611
- # Verify process group was terminated with SIGINT
612
- mock_killpg.assert_called_once_with(1234, signal.SIGINT)
608
+ # Verify process group was terminated with SIGINT
609
+ mock_killpg.assert_called_once_with(1234, signal.SIGINT)
613
610
 
614
- # Verify exit with correct code for SIGINT
615
- mock_exit.assert_called_once_with(130)
611
+ # Verify exit with correct code for SIGINT
612
+ mock_exit.assert_called_once_with(130)
616
613
 
617
614
 
618
615
  @mock.patch("sys.exit")
@@ -635,8 +632,8 @@ def test_signal_handler_prevents_recursion(mock_console, mock_exit):
635
632
 
636
633
  @mock.patch("sys.exit")
637
634
  @mock.patch("cumulusci.cli.cci.Console")
638
- @mock.patch("os.killpg")
639
- @mock.patch("os.getpgrp")
635
+ @mock.patch("os.killpg", create=True)
636
+ @mock.patch("os.getpgrp", create=True)
640
637
  @mock.patch("signal.signal")
641
638
  def test_signal_handler_handles_killpg_error(
642
639
  mock_signal, mock_getpgrp, mock_killpg, mock_console, mock_exit
@@ -646,8 +643,10 @@ def test_signal_handler_handles_killpg_error(
646
643
  mock_getpgrp.return_value = 1234
647
644
  mock_killpg.side_effect = OSError("Process group not found")
648
645
 
649
- # Call the signal handler with SIGTERM
650
- cci._signal_handler(signal.SIGTERM, None)
646
+ # Mock hasattr to return True for Unix functions
647
+ with mock.patch("builtins.hasattr", return_value=True):
648
+ # Call the signal handler with SIGTERM
649
+ cci._signal_handler(signal.SIGTERM, None)
651
650
 
652
651
  # Verify error message was printed
653
652
  console_instance.print.assert_any_call(
@@ -661,27 +660,39 @@ def test_signal_handler_handles_killpg_error(
661
660
  @mock.patch("sys.exit")
662
661
  @mock.patch("cumulusci.cli.cci.Console")
663
662
  def test_signal_handler_without_process_group_support(mock_console, mock_exit):
664
- """Test that the signal handler works on systems without process group support"""
663
+ """Test that the signal handler works on Windows where process groups aren't supported"""
665
664
  console_instance = mock_console.return_value
666
665
 
667
666
  # Mock the global exit stack
668
667
  mock_exit_stack = mock.Mock()
669
-
670
- # Mock os module to not have killpg or getpgrp
671
668
  with mock.patch.object(cci, "_exit_stack", mock_exit_stack):
672
- with mock.patch.object(os, "killpg", None, create=True):
673
- with mock.patch.object(os, "getpgrp", None, create=True):
674
- # Call the signal handler with SIGTERM
675
- cci._signal_handler(signal.SIGTERM, None)
676
-
677
- # Verify basic functionality still works
678
- console_instance.print.assert_any_call(
679
- "\n[yellow]Received SIGTERM - CumulusCI is being terminated[/yellow]"
680
- )
681
- mock_exit.assert_called_once_with(143)
682
-
683
-
684
- @mock.patch("os.setpgrp")
669
+ # Mock hasattr to return False for Unix functions (like on Windows)
670
+ with mock.patch("builtins.hasattr", return_value=False):
671
+ # Call the signal handler with SIGTERM
672
+ cci._signal_handler(signal.SIGTERM, None)
673
+
674
+ # Verify console output
675
+ console_instance.print.assert_any_call(
676
+ "\n[yellow]Received SIGTERM - CumulusCI is being terminated[/yellow]"
677
+ )
678
+ console_instance.print.assert_any_call(
679
+ "[yellow]Exiting with failure code due to external cancellation.[/yellow]"
680
+ )
681
+ console_instance.print.assert_any_call(
682
+ "[yellow]Terminating child processes...[/yellow]"
683
+ )
684
+ console_instance.print.assert_any_call(
685
+ "[yellow]Process group termination not supported on this platform[/yellow]"
686
+ )
687
+
688
+ # Verify cleanup was called
689
+ mock_exit_stack.close.assert_called_once()
690
+
691
+ # Verify exit with correct code
692
+ mock_exit.assert_called_once_with(143)
693
+
694
+
695
+ @mock.patch("os.setpgrp", create=True)
685
696
  def test_main_creates_process_group(mock_setpgrp):
686
697
  """Test that main() creates a new process group"""
687
698
  # Mock dependencies to avoid actual CLI execution
@@ -711,7 +722,7 @@ def test_main_creates_process_group(mock_setpgrp):
711
722
  mock_setpgrp.assert_called_once()
712
723
 
713
724
 
714
- @mock.patch("os.setpgrp")
725
+ @mock.patch("os.setpgrp", create=True)
715
726
  def test_main_handles_setpgrp_error(mock_setpgrp):
716
727
  """Test that main() handles setpgrp errors gracefully"""
717
728
  mock_setpgrp.side_effect = OSError("Operation not permitted")
@@ -9,7 +9,11 @@ from pydantic import BaseModel, validator
9
9
  from simple_salesforce.exceptions import SalesforceMalformedRequest
10
10
 
11
11
  from cumulusci.core.config.util import get_devhub_config
12
- from cumulusci.core.dependencies.base import UnmanagedDependency, UnmanagedVcsDependency
12
+ from cumulusci.core.dependencies.base import (
13
+ UnmanagedDependency,
14
+ UnmanagedVcsDependency,
15
+ UnmanagedVcsDependencyFlow,
16
+ )
13
17
  from cumulusci.core.dependencies.dependencies import (
14
18
  PackageNamespaceVersionDependency,
15
19
  PackageVersionIdDependency,
@@ -628,6 +632,11 @@ class CreatePackageVersion(BaseSalesforceApiTask):
628
632
  f"Skipping dependency {dependency} because create_unlocked_dependency_packages is False."
629
633
  )
630
634
  continue
635
+ elif isinstance(dependency, UnmanagedVcsDependencyFlow):
636
+ self.logger.info(
637
+ f"Skipping Pre/Post flow static dependency {dependency}."
638
+ )
639
+ continue
631
640
  else:
632
641
  raise DependencyLookupError(
633
642
  f"Unable to convert dependency: {dependency}"
@@ -373,20 +373,24 @@ class TestDownloadExtract:
373
373
 
374
374
  def test_set_target_directory__absolute_path(self):
375
375
  """Test _set_target_directory with absolute path"""
376
- absolute_path = "/tmp/test_dir"
377
- task_config = TaskConfig(
378
- {
379
- "options": {
380
- "repo_url": self.repo_url,
381
- "target_directory": absolute_path,
376
+ absolute_path = tempfile.mkdtemp(prefix="test_")
377
+ try:
378
+ task_config = TaskConfig(
379
+ {
380
+ "options": {
381
+ "repo_url": self.repo_url,
382
+ "target_directory": absolute_path,
383
+ }
382
384
  }
383
- }
384
- )
385
- task = DownloadExtract(self.project_config, task_config)
385
+ )
386
+ task = DownloadExtract(self.project_config, task_config)
386
387
 
387
- task._set_target_directory()
388
+ task._set_target_directory()
388
389
 
389
- assert task.options["target_directory"] == absolute_path
390
+ assert task.options["target_directory"] == absolute_path
391
+ finally:
392
+ # Clean up the temporary directory
393
+ os.rmdir(absolute_path)
390
394
 
391
395
  def test_rename_files(self):
392
396
  """Test _rename_files method"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cumulusci-plus
3
- Version: 5.0.8
3
+ Version: 5.0.9
4
4
  Summary: Build and release tools for Salesforce developers
5
5
  Project-URL: Homepage, https://github.com/jorgesolebur/CumulusCI
6
6
  Project-URL: Changelog, https://cumulusci.readthedocs.io/en/stable/history.html
@@ -127,19 +127,6 @@ license](https://github.com/SFDO-Tooling/CumulusCI/blob/main/LICENSE)
127
127
  and is not covered by the Salesforce Master Subscription Agreement.
128
128
 
129
129
  <!-- Changelog -->
130
- ## v4.4.0 (2025-05-05)
130
+ ## v5.0.9 (2025-07-23)
131
131
 
132
- <!-- Release notes generated using configuration in .github/release.yml at main -->
133
-
134
- ## What's Changed
135
-
136
- ### Changes
137
-
138
- - Add new tasks get_assignable_permission_sets and get_assignable_licenses by [@vsbharath](https://github.com/vsbharath) in [#3892](https://github.com/SFDO-Tooling/CumulusCI/pull/3892)
139
-
140
- ### Issues Fixed
141
-
142
- - fix: Make get permset licenses return active only by [@jstvz](https://github.com/jstvz) in [#3888](https://github.com/SFDO-Tooling/CumulusCI/pull/3888)
143
- - fix: Read the docs configuration by LaTeX into PDF by [@dcinzona](https://github.com/dcinzona) in [#3891](https://github.com/SFDO-Tooling/CumulusCI/pull/3891)
144
-
145
- **Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.3.0.dev0...v4.4.0
132
+ {"message":"Resource not accessible by integration","documentation_url":"https://docs.github.com/rest/releases/releases#generate-release-notes-content-for-a-release","status":"403"}
@@ -1,10 +1,10 @@
1
- cumulusci/__about__.py,sha256=iknMV3i3Ktpb-eCRBUG-Q--oWKy45MyfhUxfGmOFozU,22
1
+ cumulusci/__about__.py,sha256=htJkFGv1pEl2x0AOxjwUuzliBJOAfmYsgFclTAT77Fo,22
2
2
  cumulusci/__init__.py,sha256=jdanFQ_i8vbdO7Eltsf4pOfvV4mwa_Osyc4gxWKJ8ng,764
3
3
  cumulusci/__main__.py,sha256=kgRH-n5AJrH_daCK_EJwH7azAUxdXEmpi-r-dPGMR6Y,43
4
4
  cumulusci/conftest.py,sha256=AIL98BDwNAQtdo8YFmLKwav0tmrQ5dpbw1cX2FyGouQ,5108
5
5
  cumulusci/cumulusci.yml,sha256=FE1Dm7EhcMXY-XtLljbcbRyo_E0tvspaxqh8Nsiup3w,72365
6
6
  cumulusci/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- cumulusci/cli/cci.py,sha256=fDA3Kym5OoKOsjW4YSPxCLnGIu9y7NrCiIZHvial2ck,11513
7
+ cumulusci/cli/cci.py,sha256=NcFm0Nng5o47fAMcjpSHjWRvQKDbD2lwPSkuoCVW9eA,11901
8
8
  cumulusci/cli/error.py,sha256=znj0YN8D2Grozm1u7mZAsJlmmdGebbuy0c1ofQluL4Q,4410
9
9
  cumulusci/cli/flow.py,sha256=rN_9WL2Z6dcx-oRngChIgei3E5Qmg3XVzk5ND1o0i3s,6171
10
10
  cumulusci/cli/logger.py,sha256=bpzSD0Bm0BAwdNbVR6yZXMREh2vm7jOytZevEaNoVR4,2267
@@ -18,7 +18,7 @@ cumulusci/cli/task.py,sha256=xm8lo0_LMMpcsUDv1Gj_HpW1phllyEW9IRm2lQSh5wg,10077
18
18
  cumulusci/cli/ui.py,sha256=Ld-2S6Kr204SBput-1pNAVlYglzcvbV5nVA_rGXlAo8,7346
19
19
  cumulusci/cli/utils.py,sha256=Bl-l8eOXxzi6E_DsWGGGeefwZxrVg7Zo52BIwoNhKH8,5522
20
20
  cumulusci/cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- cumulusci/cli/tests/test_cci.py,sha256=oosAcnp3CCkRSs_izsT8zPTXoDUdbPO-_pfCoaTACGk,26917
21
+ cumulusci/cli/tests/test_cci.py,sha256=p9PYNij3dB3dNwOg9ivPSzVw179WORFVMfRpkWW68pg,27891
22
22
  cumulusci/cli/tests/test_error.py,sha256=zU2ccfGOivcVMpCManam18uyhlzT-HFb9xuMljU4few,6629
23
23
  cumulusci/cli/tests/test_flow.py,sha256=CIkZWvai5H4EOs35epMKWmxzDfauIEqL6BUwC8q3LPU,8535
24
24
  cumulusci/cli/tests/test_logger.py,sha256=-XBwSmtuelpx5sax0_E2xi4F9m_UsRkt2gn1o9ub6h8,834
@@ -229,7 +229,7 @@ cumulusci/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
229
  cumulusci/tasks/base_source_control_task.py,sha256=YVLngLcXsjnsbQwTS33tioLic3EU5D-P0GtY8op00Uw,637
230
230
  cumulusci/tasks/command.py,sha256=ntVmi98kUvoQm90sd34pbILLt73tdG9VUT1-eTdHQ6g,5710
231
231
  cumulusci/tasks/connectedapp.py,sha256=G-OiSnLYCWj3iQ2AYU1zQk0x0jWQcwKM8wGRkF694VE,7187
232
- cumulusci/tasks/create_package_version.py,sha256=hxwK9VUItXxjGqb40BVnOu5-1yONaTpQECAau7idvUw,33058
232
+ cumulusci/tasks/create_package_version.py,sha256=bawzRfOsfsN3E-4OB6ltjwcuxZD3W5xQylsGg0SCc2w,33327
233
233
  cumulusci/tasks/datadictionary.py,sha256=qtMBXR-xnkLPCFQfe3v09b_DgAVhe_ElKc6355Yd4f4,29801
234
234
  cumulusci/tasks/dx_convert_from.py,sha256=io-6S3Kfp86GR7CAsHyFhPAW6XEtVKWVeJdNO0FFsgQ,806
235
235
  cumulusci/tasks/metadeploy.py,sha256=33AX5701G2fyu42wNY9mitKAXq04Dxpg_WMIK59d4P8,15787
@@ -622,7 +622,7 @@ cumulusci/tasks/vcs/release.py,sha256=xXim12XVij34LRK6kAQ_5qeQLlYHNtx4e386doQCxh
622
622
  cumulusci/tasks/vcs/release_report.py,sha256=B8ehl6PK7kaEI_jS-rapQfNm0bhJRR7LBL4WFq1meNE,4226
623
623
  cumulusci/tasks/vcs/tag.py,sha256=x9Xw5t6g13ztl0TjtclQ1_JRBWtez73e9Az8oYJeqvU,1098
624
624
  cumulusci/tasks/vcs/tests/github/test_commit_status.py,sha256=1IAGz8_wFVUvk0wY5V_Aetb6M5Ri0nkOHaRSUdqQkZI,7206
625
- cumulusci/tasks/vcs/tests/github/test_download_extract.py,sha256=mpDYmuai0cF_p-PjPlY3MPMoDhk2r8QAcm4qZq2fOHQ,32420
625
+ cumulusci/tasks/vcs/tests/github/test_download_extract.py,sha256=_8j2xkypbF6xECkYgWby6vfHAss16FHhuy9flu-m5Fo,32594
626
626
  cumulusci/tasks/vcs/tests/github/test_merge.py,sha256=OS25YJHNVqfb2lPzpXOpzR8BEiDEh_C94BwDTvTDQ-U,39306
627
627
  cumulusci/tasks/vcs/tests/github/test_publish.py,sha256=kl3IvWmDL8M225R7Ygyr-vUjXQ0_GoUDH85kOncDlMk,30739
628
628
  cumulusci/tasks/vcs/tests/github/test_pull_request.py,sha256=dh-XihMjCH69wML6vg3KKqjB2NsfhBoMr0Ii1xfM8gw,974
@@ -736,9 +736,9 @@ cumulusci/vcs/tests/dummy_service.py,sha256=RltOUpMIhSDNrfxk0LhLqlH4ppC0sK6NC2cO
736
736
  cumulusci/vcs/tests/test_vcs_base.py,sha256=9mp6uZ3lTxY4onjUNCucp9N9aB3UylKS7_2Zu_hdAZw,24331
737
737
  cumulusci/vcs/tests/test_vcs_bootstrap.py,sha256=N0NA48-rGNIIjY3Z7PtVnNwHObSlEGDk2K55TQGI8g4,27954
738
738
  cumulusci/vcs/utils/__init__.py,sha256=py4fEcHM7Vd0M0XWznOlywxaeCtG3nEVGmELmEKVGU8,869
739
- cumulusci_plus-5.0.8.dist-info/METADATA,sha256=8u-lOMmYllxq6LLwXp7uUzNerM3gi0BDn4lTDExZ_eA,6134
740
- cumulusci_plus-5.0.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
741
- cumulusci_plus-5.0.8.dist-info/entry_points.txt,sha256=nTtu04b9iLXhzADcTrb5PwmdXE6e2MTUAMh9OK6Z2pg,80
742
- cumulusci_plus-5.0.8.dist-info/licenses/AUTHORS.rst,sha256=PvewjKImdKPhhJ6xR2EEZ4T7GbpY2ZeAeyWm2aLtiMQ,676
743
- cumulusci_plus-5.0.8.dist-info/licenses/LICENSE,sha256=NFsF_s7RVXk2dU6tmRAN8wF45pnD98VZ5IwqOsyBcaU,1499
744
- cumulusci_plus-5.0.8.dist-info/RECORD,,
739
+ cumulusci_plus-5.0.9.dist-info/METADATA,sha256=wJIf_2LQnYB14hynOvNeWdhDXBp4ICUVJqW28c1aO-g,5582
740
+ cumulusci_plus-5.0.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
741
+ cumulusci_plus-5.0.9.dist-info/entry_points.txt,sha256=nTtu04b9iLXhzADcTrb5PwmdXE6e2MTUAMh9OK6Z2pg,80
742
+ cumulusci_plus-5.0.9.dist-info/licenses/AUTHORS.rst,sha256=PvewjKImdKPhhJ6xR2EEZ4T7GbpY2ZeAeyWm2aLtiMQ,676
743
+ cumulusci_plus-5.0.9.dist-info/licenses/LICENSE,sha256=NFsF_s7RVXk2dU6tmRAN8wF45pnD98VZ5IwqOsyBcaU,1499
744
+ cumulusci_plus-5.0.9.dist-info/RECORD,,