import re
import os
import contextlib

from . import pipeline


@contextlib.contextmanager
def maintained_selection():
    comp = pipeline.get_current_comp()
    previous_selection = comp.GetToolList(True).values()
    try:
        yield
    finally:
        flow = comp.CurrentFrame.FlowView
        flow.Select()  # No args equals clearing selection
        if previous_selection:
            for tool in previous_selection:
                flow.Select(tool, True)


def get_frame_path(path):
    """Get filename for the Fusion Saver with padded number as '#'

    >>> get_frame_path("C:/test.exr")
    ("C:/test", 4, ".exr")

    >>> get_frame_path("filename.00.tif")
    ("filename.", 2, ".tif")

    >>> get_frame_path("foobar35.tif")
    ("foobar", 2, ".tif")

    Args:
        path (str): The path to render to.

    Returns:
        tuple: head, padding, tail (extension)

    """
    filename, ext = os.path.splitext(path)

    # Find a final number group
    match = re.match('.*?([0-9]+)$', filename)
    if match:
        padding = len(match.group(1))
        # remove number from end since fusion
        # will swap it with the frame number
        filename = filename[:-padding]
    else:
        padding = 4  # default Fusion padding

    return filename, padding, ext

import re
import os
import contextlib

from . import pipeline


@contextlib.contextmanager
def maintained_selection():
    comp = pipeline.get_current_comp()
    previous_selection = comp.GetToolList(True).values()
    try:
        yield
    finally:
        flow = comp.CurrentFrame.FlowView
        flow.Select()  # No args equals clearing selection
        if previous_selection:
            for tool in previous_selection:
                flow.Select(tool, True)


def get_frame_path(path):
    """Get filename for the Fusion Saver with padded number as '#'

    >>> get_frame_path("C:/test.exr")
    ('C:/test', 4, '.exr')

    >>> get_frame_path("filename.00.tif")
    ('filename.', 2, '.tif')

    >>> get_frame_path("foobar35.tif")
    ('foobar', 2, '.tif')

    Args:
        path (str): The path to render to.

    Returns:
        tuple: head, padding, tail (extension)

    """
    filename, ext = os.path.splitext(path)

    # Find a final number group
    match = re.match('.*?([0-9]+)$', filename)
    if match:
        padding = len(match.group(1))
        # remove number from end since fusion
        # will swap it with the frame number
        filename = filename[:-padding]
    else:
        padding = 4  # default Fusion padding

    return filename, padding, ext

Fix doctest - not sure why it was failing on the quotation marks
Fix doctest - not sure why it was failing on the quotation marks

  import re
  import os
  import contextlib
  
  from . import pipeline
  
  
  @contextlib.contextmanager
  def maintained_selection():
      comp = pipeline.get_current_comp()
      previous_selection = comp.GetToolList(True).values()
      try:
          yield
      finally:
          flow = comp.CurrentFrame.FlowView
          flow.Select()  # No args equals clearing selection
          if previous_selection:
              for tool in previous_selection:
                  flow.Select(tool, True)
  
  
  def get_frame_path(path):
      """Get filename for the Fusion Saver with padded number as '#'
  
      >>> get_frame_path("C:/test.exr")
-     ("C:/test", 4, ".exr")
+     ('C:/test', 4, '.exr')
  
      >>> get_frame_path("filename.00.tif")
-     ("filename.", 2, ".tif")
+     ('filename.', 2, '.tif')
  
      >>> get_frame_path("foobar35.tif")
-     ("foobar", 2, ".tif")
+     ('foobar', 2, '.tif')
  
      Args:
          path (str): The path to render to.
  
      Returns:
          tuple: head, padding, tail (extension)
  
      """
      filename, ext = os.path.splitext(path)
  
      # Find a final number group
      match = re.match('.*?([0-9]+)$', filename)
      if match:
          padding = len(match.group(1))
          # remove number from end since fusion
          # will swap it with the frame number
          filename = filename[:-padding]
      else:
          padding = 4  # default Fusion padding
  
      return filename, padding, ext
  
Fix doctest - not sure why it was failing on the quotation marks
## Code Before:
import re
import os
import contextlib

from . import pipeline


@contextlib.contextmanager
def maintained_selection():
    comp = pipeline.get_current_comp()
    previous_selection = comp.GetToolList(True).values()
    try:
        yield
    finally:
        flow = comp.CurrentFrame.FlowView
        flow.Select()  # No args equals clearing selection
        if previous_selection:
            for tool in previous_selection:
                flow.Select(tool, True)


def get_frame_path(path):
    """Get filename for the Fusion Saver with padded number as '#'

    >>> get_frame_path("C:/test.exr")
    ("C:/test", 4, ".exr")

    >>> get_frame_path("filename.00.tif")
    ("filename.", 2, ".tif")

    >>> get_frame_path("foobar35.tif")
    ("foobar", 2, ".tif")

    Args:
        path (str): The path to render to.

    Returns:
        tuple: head, padding, tail (extension)

    """
    filename, ext = os.path.splitext(path)

    # Find a final number group
    match = re.match('.*?([0-9]+)$', filename)
    if match:
        padding = len(match.group(1))
        # remove number from end since fusion
        # will swap it with the frame number
        filename = filename[:-padding]
    else:
        padding = 4  # default Fusion padding

    return filename, padding, ext

## Instruction:
Fix doctest - not sure why it was failing on the quotation marks
## Code After:
import re
import os
import contextlib

from . import pipeline


@contextlib.contextmanager
def maintained_selection():
    comp = pipeline.get_current_comp()
    previous_selection = comp.GetToolList(True).values()
    try:
        yield
    finally:
        flow = comp.CurrentFrame.FlowView
        flow.Select()  # No args equals clearing selection
        if previous_selection:
            for tool in previous_selection:
                flow.Select(tool, True)


def get_frame_path(path):
    """Get filename for the Fusion Saver with padded number as '#'

    >>> get_frame_path("C:/test.exr")
    ('C:/test', 4, '.exr')

    >>> get_frame_path("filename.00.tif")
    ('filename.', 2, '.tif')

    >>> get_frame_path("foobar35.tif")
    ('foobar', 2, '.tif')

    Args:
        path (str): The path to render to.

    Returns:
        tuple: head, padding, tail (extension)

    """
    filename, ext = os.path.splitext(path)

    # Find a final number group
    match = re.match('.*?([0-9]+)$', filename)
    if match:
        padding = len(match.group(1))
        # remove number from end since fusion
        # will swap it with the frame number
        filename = filename[:-padding]
    else:
        padding = 4  # default Fusion padding

    return filename, padding, ext
