Example #1
0
 def test_get_devices_with_unknown_module(self):
     dev = copy.copy(self.dev)
     dev['id'] = 2
     dev['module'] = 'unknown_module'
     dev_obj = Device(**dev)
     dev_obj.save()
     with self.assertRaises(DeviceModuleNotFound):
         DeviceManager.get_device(2)
Example #2
0
    def setUpClass(cls):
        super(RunOverallReportTests, cls).setUpClass()

        cls.user.profile_seen = True
        cls.user.timezone = settings.TEST_USER_TIMEZONE
        cls.user.save()

        # add devices
        for device in settings.TEST_DEVICES:
            d = Device(**device)
            d.save()
    def setUpClass(cls):
        super(RunOverallReportTests, cls).setUpClass()

        cls.user.profile_seen = True
        cls.user.timezone = settings.TEST_USER_TIMEZONE
        cls.user.save()

        # add devices
        for device in settings.TEST_DEVICES:
            d = Device(**device)
            d.save()
Example #4
0
    def handle(self, *args, **options):
        """ Main command handler. """
        if options['show_device']:
            dev = {}
            for opt in DEVICE_ATTRS + ['id']:
                if options[opt] is not None:
                    dev[opt] = options[opt]

            output = []
            for d in Device.objects.filter(**dev):
                output.append([
                    d.id, d.name, d.module, d.host, d.port, d.username,
                    d.enabled
                ])
            Formatter.print_table(output, [
                'ID', 'Name', 'Module', 'Host', 'Port', 'User Name', 'Enabled'
            ])
            if not output:
                self.stdout.write("No device found")

        elif options['add_device']:
            dev = {}
            for opt in REQUIRED_DEVICE_ATTRS:
                if options[opt] is None:
                    self.stdout.write("Option '%s' is required for a device" %
                                      opt)
                    sys.exit(1)
                dev[opt] = options[opt]

            if options['port']:
                if options['port'].isdigit():
                    dev['port'] = int(options['port'])
                else:
                    self.stdout.write("Option port '%s' is not a positive "
                                      "integer" % options['port'])
                    sys.exit(1)

            if options['enabled'] is not None:
                # --enabled or --no-enabled is set
                dev['enabled'] = options['enabled']

            dev_obj = Device(**dev)
            dev_obj.save()
            self.stdout.write('Device added.')

        elif options['edit_device']:

            if not options['id']:
                self.stdout.write('Option ID is required to edit a device')
                sys.exit(1)

            elif not options['id'].isdigit():
                self.stdout.write("Option id '%s' is not a positive integer" %
                                  options['id'])
                sys.exit(1)

            dev_list = Device.objects.filter(id=int(options['id']))
            if not dev_list:
                self.stdout.write("Option id '%s' does not match a device" %
                                  options['id'])
                sys.exit(1)

            if options['port']:
                if options['port'].isdigit():
                    options['port'] = int(options['port'])
                else:
                    self.stdout.write("Option port '%s' is not a positive "
                                      "integer" % options['port'])
                    sys.exit(1)

            dev_obj = dev_list[0]
            change = False
            for attr in DEVICE_ATTRS:
                if options[attr] is not None:
                    change = True
                    setattr(dev_obj, attr, options[attr])

            if change:
                dev_obj.save()
                self.stdout.write("Device '%s' modified" % options['id'])
            else:
                self.stdout.write("Device '%s' unchanged" % options['id'])
Example #5
0
 def setUp(self):
     dev = Device(**self.dev)
     dev.save()
     self.stash = plugins.devices
     plugins.devices = Mock(return_value=self.devices)
     sys.modules['dev_pkg'] = Mock()
Example #6
0
    def handle(self, *args, **options):
        """ Main command handler. """
        if options['show_device']:
            dev = {}
            for opt in DEVICE_ATTRS + ['id']:
                if options[opt] is not None:
                    dev[opt] = options[opt]

            output = []
            for d in Device.objects.filter(**dev):
                output.append([d.id, d.name, d.module, d.host, d.port,
                               d.username, d.enabled])
            Formatter.print_table(output, ['ID', 'Name', 'Module', 'Host',
                                           'Port', 'User Name', 'Enabled'])
            if not output:
                self.stdout.write("No device found")

        elif options['add_device']:
            dev = {}
            for opt in REQUIRED_DEVICE_ATTRS:
                if options[opt] is None:
                    self.stdout.write("Option '%s' is required for a device" %
                                      opt)
                    sys.exit(1)
                dev[opt] = options[opt]

            if options['port']:
                if options['port'].isdigit():
                    dev['port'] = int(options['port'])
                else:
                    self.stdout.write("Option port '%s' is not a positive "
                                      "integer" % options['port'])
                    sys.exit(1)

            if options['enabled'] is not None:
                # --enabled or --no-enabled is set
                dev['enabled'] = options['enabled']

            dev_obj = Device(**dev)
            dev_obj.save()
            self.stdout.write('Device added.')

        elif options['edit_device']:

            if not options['id']:
                self.stdout.write('Option ID is required to edit a device')
                sys.exit(1)

            elif not options['id'].isdigit():
                self.stdout.write("Option id '%s' is not a positive integer" %
                                  options['id'])
                sys.exit(1)

            dev_list = Device.objects.filter(id=int(options['id']))
            if not dev_list:
                self.stdout.write("Option id '%s' does not match a device" %
                                  options['id'])
                sys.exit(1)

            if options['port']:
                if options['port'].isdigit():
                    options['port'] = int(options['port'])
                else:
                    self.stdout.write("Option port '%s' is not a positive "
                                      "integer" % options['port'])
                    sys.exit(1)

            dev_obj = dev_list[0]
            change = False
            for attr in DEVICE_ATTRS:
                if options[attr] is not None:
                    change = True
                    setattr(dev_obj, attr, options[attr])

            if change:
                dev_obj.save()
                self.stdout.write("Device '%s' modified" % options['id'])
            else:
                self.stdout.write("Device '%s' unchanged" % options['id'])
Example #7
0
    def handle(self, *args, **options):
        """ Main command handler. """
        if options['show_device']:
            dev = {}
            for opt in DEVICE_ATTRS + ['id']:
                if options[opt] is not None:
                    dev[opt] = options[opt]

            output = []
            for d in Device.objects.filter(**dev):
                output.append([d.id, d.name, d.module, d.host, d.port,
                               d.username, d.enabled])
            Formatter.print_table(output, ['ID', 'Name', 'Module', 'Host',
                                           'Port', 'User Name', 'Enabled'])
            if not output:
                self.stdout.write("No device found")

        elif options['add_device']:
            dev = {}
            for opt in REQUIRED_DEVICE_ATTRS:
                if options[opt] is None:
                    self.stdout.write("Option '%s' is required for a device" %
                                      opt)
                    sys.exit(1)
                dev[opt] = options[opt]

            if options['port']:
                if options['port'].isdigit():
                    dev['port'] = int(options['port'])
                else:
                    self.stdout.write("Option port '%s' is not a positive "
                                      "integer" % options['port'])
                    sys.exit(1)

            if options['enabled'] is not None:
                # --enabled or --no-enabled is set
                dev['enabled'] = options['enabled']

            dev_obj = Device(**dev)
            dev_obj.save()
            self.stdout.write('Device added.')

        elif options['edit_device']:

            if not options['id']:
                self.stdout.write('Option ID is required to edit a device')
                sys.exit(1)

            elif not options['id'].isdigit():
                self.stdout.write("Option id '%s' is not a positive integer" %
                                  options['id'])
                sys.exit(1)

            dev_list = Device.objects.filter(id=int(options['id']))
            if not dev_list:
                self.stdout.write("Option id '%s' does not match a device" %
                                  options['id'])
                sys.exit(1)

            if options['port']:
                if options['port'].isdigit():
                    options['port'] = int(options['port'])
                else:
                    self.stdout.write("Option port '%s' is not a positive "
                                      "integer" % options['port'])
                    sys.exit(1)

            dev_obj = dev_list[0]
            change = False
            for attr in DEVICE_ATTRS:
                if options[attr] is not None:
                    change = True
                    setattr(dev_obj, attr, options[attr])

            if change:
                dev_obj.save()
                self.stdout.write("Device '%s' modified" % options['id'])
            else:
                self.stdout.write("Device '%s' unchanged" % options['id'])

        elif options['batch_file']:
            file_name = options['batch_file']
            default_header = ['name', 'module', 'host', 'port',
                              'username', 'password', 'auth',
                              'access_code', 'tags']
            with open(file_name, 'r') as f:
                reader = csv.reader(f)
                devs = []
                add, update = 0, 0
                for i, row in enumerate(reader):
                    row = map(str.strip, row)
                    if i == 0:
                        if set(map(str.lower, row)) == set(default_header):
                            header = map(str.lower, row)
                            continue
                        else:
                            header = default_header

                    if not row or not row[0]:
                        continue

                    if len(row) < len(header):
                        msg = ('Line {0} only has {1} fields. '
                               '{2} fields are required.'
                               .format(i+1, len(row), len(header)))
                        raise CommandError(msg)

                    kwargs = dict(zip(header, row))

                    if not kwargs['host']:
                        msg = 'Host is empty string in line {0}.'.format(i+1)
                        raise CommandError(msg)

                    if not kwargs['port'].isdigit():
                        msg = ("Port should be integer instead of '{0}'"
                               " in line {1}".format(kwargs['port'], i+1))
                        raise CommandError(msg)

                    kwargs['port'] = int(kwargs['port'])
                    kwargs['enabled'] = True
                    kwargs['tags'] = ','.join(map(str.strip,
                                                  kwargs['tags'].split(';')))

                    # Check for device with same host and port
                    res = Device.objects.filter(host=kwargs['host'],
                                                port=kwargs['port'])
                    if res:
                        dev = res[0]
                        for k, v in kwargs.iteritems():
                            setattr(dev, k, v)
                        update += 1
                    else:
                        dev = Device(**kwargs)
                        add += 1

                    devs.append(dev)

                with transaction.atomic():
                    for dev in devs:
                        dev.save()

                self.stdout.write('{add} devices added. '
                                  '{update} existing devices refreshed.'
                                  .format(add=add, update=update))