text: from __future__ import absolute_import
  import logging
  import os
  
  from nose.plugins import Plugin
  
  from .module import SnapshotModule
  from .reporting import reporting_lines
  from .unittest import TestCase
  
  log = logging.getLogger('nose.plugins.snapshottest')
  
  
  class SnapshotTestPlugin(Plugin):
      name = 'snapshottest'
      enabled = True
  
      separator1 = "=" * 70
      separator2 = "-" * 70
  
      def options(self, parser, env=os.environ):
          super(SnapshotTestPlugin, self).options(parser, env=env)
          parser.add_option(
              '--snapshot-update',
              action='store_true',
              default=False,
              dest='snapshot_update',
              help='Update the snapshots.'
          )
          parser.add_option(
              '--snapshot-disable',
              action='store_true',
              dest='snapshot_disable',
              default=False,
              help="Disable special SnapshotTest"
          )
  
      def configure(self, options, conf):
          super(SnapshotTestPlugin, self).configure(options, conf)
          self.snapshot_update = options.snapshot_update
          self.enabled = not options.snapshot_disable
  
      def wantClass(self, cls):
          if issubclass(cls, TestCase):
              cls.snapshot_should_update = self.snapshot_update
  
      def afterContext(self):
          if self.snapshot_update:
              for module in SnapshotModule.get_modules():
                  module.delete_unvisited()
                  module.save()
  
      def report(self, stream):
          if not SnapshotModule.has_snapshots():
              return
  
          stream.writeln(self.separator1)
          stream.writeln('SnapshotTest summary')
          stream.writeln(self.separator2)
          for line in reporting_lines('nosetests'):
              stream.writeln(line)
          stream.writeln(self.separator1)
  