Repository: ynput/OpenPype
Issue: Maya: Extract playblast fail

 review publish in Maya fails with the following error:
(Maya2020, Maya2022, OP 3.7.0, OP 3.8.0.nightly.4)

```
 // pyblish.ExtractPlayblast : playblast path  c:\\users\\render~1.far\\appdata\\local\\temp\\pyblish_tmp_idopdz\\reviewMain.####.jpg // 
// pyblish.ExtractPlayblast : filename c:\\users\\render~1.far\\appdata\\local\\temp\\pyblish_tmp_idopdz\\reviewMain // 
// Error: pyblish.plugin : Traceback (most recent call last):
  File "D:\\REPO\\OpenPype\\.venv\\lib\\site-packages\\pyblish\\plugin.py", line 522, in __explicit_process
    runner(*args)
  File "D:\\REPO\\OpenPype\\openpype\\hosts\\maya\\plugins\\publish\\extract_playblast.py", line 135, in process
TypeError: 'NoneType' object is not iterable
Traceback (most recent call last):
  File "D:\\REPO\\OpenPype\\.venv\\lib\\site-packages\\pyblish\\plugin.py", line 522, in __explicit_process
    runner(*args)
  File "<string>", line 135, in process
TypeError: 'NoneType' object is not iterable // 
Processing Thumbnail
// pyblish.ExtractThumbnail : Extracting capture.. //
```

[cuID:237u3f8]

Changed files:
openpype/hosts/maya/plugins/publish/extract_playblast.py, openpype/plugins/publish/extract_review.py

diff --git a/openpype/hosts/maya/plugins/publish/extract_playblast.py b/openpype/hosts/maya/plugins/publish/extract_playblast.py
index bb1ecf279d..ba939d5428 100644
--- a/openpype/hosts/maya/plugins/publish/extract_playblast.py
+++ b/openpype/hosts/maya/plugins/publish/extract_playblast.py
@@ -111,7 +111,8 @@ class ExtractPlayblast(openpype.api.Extractor):
         self.log.debug("playblast path  {}".format(path))
 
         collected_files = os.listdir(stagingdir)
-        collections, remainder = clique.assemble(collected_files)
+        collections, remainder = clique.assemble(collected_files,
+                                                 minimum_items=1)
 
         self.log.debug("filename {}".format(filename))
         frame_collection = None
@@ -134,10 +135,15 @@ class ExtractPlayblast(openpype.api.Extractor):
         # Add camera node name to representation data
         camera_node_name = pm.ls(camera)[0].getTransform().name()
 
+        collected_files = list(frame_collection)
+        # single frame file shouldn't be in list, only as a string
+        if len(collected_files) == 1:
+            collected_files = collected_files[0]
+
         representation = {
             'name': 'png',
             'ext': 'png',
-            'files': list(frame_collection),
+            'files': collected_files,
             "stagingDir": stagingdir,
             "frameStart": start,
             "frameEnd": end,
diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py
index 879125dac3..b6e5fee1fe 100644
--- a/openpype/plugins/publish/extract_review.py
+++ b/openpype/plugins/publish/extract_review.py
@@ -763,7 +763,8 @@ class ExtractReview(pyblish.api.InstancePlugin):
         start_frame = int(start_frame)
         end_frame = int(end_frame)
         collections = clique.assemble(files)[0]
-        assert len(collections) == 1, "Multiple collections found."
+        msg = "Multiple collections {} found.".format(collections)
+        assert len(collections) == 1, msg
         col = collections[0]
 
         # do nothing if no gap is found in input range