def __init__(self, vm, initial=None, *args, **kwargs): super(VirtualMachineForm, self).__init__(initial, *args, **kwargs) # Set owner on form try: self.owner except AttributeError: self.owner = vm.owner # Setup os choices os_list = cluster_os_list(vm.cluster) self.fields['os'].choices = os_list for field in self.always_required: self.fields[field].required = True # If the required property is set on a child class, # require those form fields try: if self.required: for field in self.required: self.fields[field].required = True except AttributeError: pass # Need to set initial values from vm.info as these are not saved # per the vm model. if vm.info: info = vm.info hvparam = info['hvparams'] # XXX Convert ram string since it comes out # from ganeti as an int and the DataVolumeField does not like # ints. self.fields['vcpus'].initial = info['beparams']['vcpus'] self.fields['memory'].initial = str(info['beparams']['memory']) # always take the larger nic count. this ensures that if nics are # being removed that they will be in the form as Nones self.nics = len(info['nic.links']) nic_count = int(initial.get('nic_count', 1)) if initial else 1 nic_count = self.nics if self.nics > nic_count else nic_count self.fields['nic_count'].initial = nic_count self.nic_fields = xrange(nic_count) for i in xrange(nic_count): link = forms.CharField(label=_('NIC/%s Link' % i), max_length=255, required=True) self.fields['nic_link_%s' % i] = link mac = MACAddressField(label=_('NIC/%s Mac' % i), required=True) self.fields['nic_mac_%s' % i] = mac if i < self.nics: mac.initial = info['nic.macs'][i] link.initial = info['nic.links'][i] self.fields['os'].initial = info['os'] try: if self.hvparam_fields: for field in self.hvparam_fields: self.fields[field].initial = hvparam.get(field) except AttributeError: pass
class TestMACAddressField(TestCase): def setUp(self): self.f = MACAddressField(required=True) def test_trivial(self): """ Check that setUp() is sane. """ pass def test_required(self): # implicit success, should not throw error self.f.validate("aa:bb:cc:dd:ee:ff") # required, not given self.assertRaises(ValidationError, self.f.validate, None) # not required, not given self.f.required = False self.f.validate(None) def test_valid(self): self.f.validate("aa:bb:cc:dd:ee:ff") def test_invalid(self): self.assertRaises(ValidationError, self.f.validate, "aa:bb:cc:dd:ee") self.assertRaises(ValidationError, self.f.validate, "aa:bb:cc:dd:ee:ff:00") self.assertRaises(ValidationError, self.f.validate, "aa:bb:cc:dd:ee:gg") self.assertRaises(ValidationError, self.f.validate, "aabbccddeeffaabbc")
def setUp(self): self.f = MACAddressField(required=True)