# Path: snapshottest/snapshot.py
# class Snapshot(OrderedDict):
#     pass
# 
# Path: snapshottest/formatter.py
# class Formatter(object):
#     formatters = default_formatters()
# 
#     def __init__(self, imports=None):
#         self.htchar = " " * 4
#         self.lfchar = "\n"
#         self.indent = 0
#         self.imports = imports
# 
#     def __call__(self, value, **args):
#         return self.format(value, self.indent)
# 
#     def format(self, value, indent):
#         formatter = self.get_formatter(value)
#         for module, import_name in formatter.get_imports():
#             self.imports[module].add(import_name)
#         return formatter.format(value, indent, self)
# 
#     def normalize(self, value):
#         formatter = self.get_formatter(value)
#         return formatter.normalize(value, self)
# 
#     @staticmethod
#     def get_formatter(value):
#         for formatter in Formatter.formatters:
#             if formatter.can_format(value):
#                 return formatter
# 
#         # This should never happen as GenericFormatter is registered by default.
#         raise RuntimeError("No formatter found for value")
# 
#     @staticmethod
#     def register_formatter(formatter):
#         Formatter.formatters.insert(0, formatter)
# 
# Path: snapshottest/error.py
# class SnapshotNotFound(SnapshotError):
#     def __init__(self, module, test_name):
#         super(SnapshotNotFound, self).__init__(
#             "Snapshot '{snapshot_id!s}' not found in {snapshot_file!s}".format(
#                 snapshot_id=test_name, snapshot_file=module.filepath
#             )
#         )


import codecs
import errno
import os
import imp
import logging
from collections import defaultdict
from .snapshot import Snapshot
from .formatter import Formatter
from .error import SnapshotNotFound



logger = logging.getLogger(__name__)


class SnapshotModule(object):
    _snapshot_modules = {}

    def __init__(self, module, filepath):
        self._original_snapshot = None
        self._snapshots = None
        self.module = module
        self.filepath = filepath
        self.imports = defaultdict(set)
        self.visited_snapshots = set()
        self.new_snapshots = set()
        self.failed_snapshots = set()
        self.imports["snapshottest"].add("Snapshot")

    def load_snapshots(self):
        try:
            source = imp.load_source(self.module, self.filepath)
        # except FileNotFoundError:  # Python 3
        except (IOError, OSError) as err:
            if err.errno == errno.ENOENT:
                return Snapshot()
            else:
                raise
        else:

# Path: snapshottest/snapshot.py
# class Snapshot(OrderedDict):
#     pass
# 
# Path: snapshottest/formatter.py
# class Formatter(object):
#     formatters = default_formatters()
# 
#     def __init__(self, imports=None):
#         self.htchar = " " * 4
#         self.lfchar = "\n"
#         self.indent = 0
#         self.imports = imports
# 
#     def __call__(self, value, **args):
#         return self.format(value, self.indent)
# 
#     def format(self, value, indent):
#         formatter = self.get_formatter(value)
#         for module, import_name in formatter.get_imports():
#             self.imports[module].add(import_name)
#         return formatter.format(value, indent, self)
# 
#     def normalize(self, value):
#         formatter = self.get_formatter(value)
#         return formatter.normalize(value, self)
# 
#     @staticmethod
#     def get_formatter(value):
#         for formatter in Formatter.formatters:
#             if formatter.can_format(value):
#                 return formatter
# 
#         # This should never happen as GenericFormatter is registered by default.
#         raise RuntimeError("No formatter found for value")
# 
#     @staticmethod
#     def register_formatter(formatter):
#         Formatter.formatters.insert(0, formatter)
# 
# Path: snapshottest/error.py
# class SnapshotNotFound(SnapshotError):
#     def __init__(self, module, test_name):
#         super(SnapshotNotFound, self).__init__(
#             "Snapshot '{snapshot_id!s}' not found in {snapshot_file!s}".format(
#                 snapshot_id=test_name, snapshot_file=module.filepath
#             )
#         )


# Path: snapshottest/module.py
import codecs
import errno
import os
import imp
import logging
from collections import defaultdict
from .snapshot import Snapshot
from .formatter import Formatter
from .error import SnapshotNotFound




logger = logging.getLogger(__name__)


class SnapshotModule(object):
    _snapshot_modules = {}

    def __init__(self, module, filepath):
        self._original_snapshot = None
        self._snapshots = None
        self.module = module
        self.filepath = filepath
        self.imports = defaultdict(set)
        self.visited_snapshots = set()
        self.new_snapshots = set()
        self.failed_snapshots = set()
        self.imports["snapshottest"].add("Snapshot")

    def load_snapshots(self):
        try:
            source = imp.load_source(self.module, self.filepath)
        # except FileNotFoundError:  # Python 3
        except (IOError, OSError) as err:
            if err.errno == errno.ENOENT:
                return Snapshot()
            else:
                raise
        else:

            assert isinstance(source.snapshots, Snapshot)