def clean_hostname(self): hostname = self.cleaned_data.get('hostname') return clean_hostname(hostname)
def clean_csv(self): csv_string = self.cleaned_data['csv'].strip().lower() rows = UnicodeReader(cStringIO.StringIO(csv_string)) cleaned_csv = [] parsed_hostnames = set() parsed_ip_addresses = set() parsed_macs = set() for row_number, cols in enumerate(rows, start=1): _validate_cols_count(11, cols, row_number, 1) _validate_cols_not_empty(cols, row_number) mac = cols[3].strip() _validate_mac(mac, parsed_macs, row_number) parsed_macs.add(mac) hostname = cols[0].strip() _validate_hostname(hostname, mac, parsed_hostnames, row_number) if not clean_hostname(hostname): raise forms.ValidationError("Invalid hostname") parsed_hostnames.add(hostname) network_name = cols[5].strip() try: network = Network.objects.get(name=network_name) except Network.DoesNotExist: raise forms.ValidationError( "Row %s: Network '%s' doesn't exists." % (row_number, network_name) ) rack_sn = cols[2].strip() if re.match(r"^[0-9]+$", rack_sn): rack_sn = "Rack %s %s" % ( rack_sn, network.data_center.name.upper(), ) if not rack_exists(rack_sn): raise forms.ValidationError( "Row %s: Rack with serial number '%s' doesn't exists." % ( row_number, rack_sn ) ) try: network.racks.get(sn=rack_sn) except Device.DoesNotExist: raise forms.ValidationError( "Row %s: Rack '%s' isn't connected to " "network '%s'." % (row_number, rack_sn, network.name) ) ip = cols[1].strip() _validate_ip_address(ip, network, parsed_ip_addresses, row_number) _validate_ip_owner(ip, mac, row_number) parsed_ip_addresses.add(ip) management_ip = cols[4].strip() _validate_management_ip(management_ip, row_number) try: venture_role = VentureRole.objects.get( venture__symbol=cols[6].strip(), name=cols[7].strip() ) venture = venture_role.venture except VentureRole.DoesNotExist: raise forms.ValidationError( "Row %s: " "Couldn't find venture with symbol %s and role %s" % ( row_number, cols[6].strip(), cols[7].strip() ) ) try: preboot = Preboot.objects.get(name=cols[10].strip()) except Preboot.DoesNotExist: raise forms.ValidationError( "Row %s: Couldn't find preboot %s" % ( row_number, cols[10].strip() ) ) asset_identity = None if self.assets_enabled and len(cols) == 12: asset_identity = cols[11].strip() _validate_asset_identity(asset_identity, row_number, mac) service = cols[8].strip() _validate_service(service, row_number) environment = cols[9].strip() _validate_environment(environment, row_number) cleaned_csv.append({ 'hostname': hostname, 'ip': ip, 'mac': mac, 'rack_sn': rack_sn, 'venture': venture, 'venture_role': venture_role, 'preboot': preboot, 'management_ip': management_ip, 'network': network, 'asset_identity': asset_identity, 'service': service, 'device_environment': environment, }) return cleaned_csv
def clean_hostname(self): hostname = self.cleaned_data['hostname'] return clean_hostname(hostname)
def clean_csv(self): csv_string = self.cleaned_data['csv'].strip().lower() rows = UnicodeReader(cStringIO.StringIO(csv_string)) cleaned_csv = [] parsed_hostnames = set() parsed_ip_addresses = set() parsed_macs = set() for row_number, cols in enumerate(rows, start=1): _validate_cols_count(9, cols, row_number) _validate_cols_not_empty(cols, row_number) mac = cols[3].strip() _validate_mac(mac, parsed_macs, row_number) parsed_macs.add(mac) hostname = cols[0].strip() _validate_hostname(hostname, mac, parsed_hostnames, row_number) if not clean_hostname(hostname): raise forms.ValidationError("Invalid hostname") parsed_hostnames.add(hostname) network_name = cols[5].strip() try: network = Network.objects.get(name=network_name) except Network.DoesNotExist: raise forms.ValidationError( "Row %s: Network '%s' doesn't exists." % (row_number, network_name)) rack_sn = cols[2].strip() if re.match(r"^[0-9]+$", rack_sn): rack_sn = "Rack %s %s" % ( rack_sn, network.data_center.name.upper(), ) if not rack_exists(rack_sn): raise forms.ValidationError( "Row %s: Rack with serial number '%s' doesn't exists." % (row_number, rack_sn)) try: network.racks.get(sn=rack_sn) except Device.DoesNotExist: raise forms.ValidationError( "Row %s: Rack '%s' isn't connected to " "network '%s'." % (row_number, rack_sn, network.name)) ip = cols[1].strip() _validate_ip_address(ip, network, parsed_ip_addresses, row_number) _validate_ip_owner(ip, mac, row_number) parsed_ip_addresses.add(ip) management_ip = cols[4].strip() _validate_management_ip(management_ip, row_number) try: venture_role = VentureRole.objects.get( venture__symbol=cols[6].strip().upper(), name=cols[7].strip()) venture = venture_role.venture except VentureRole.DoesNotExist: raise forms.ValidationError( "Row %s: " "Couldn't find venture with symbol %s and role %s" % (row_number, cols[6].strip(), cols[7].strip())) try: preboot = Preboot.objects.get(name=cols[8].strip()) except Preboot.DoesNotExist: raise forms.ValidationError( "Row %s: Couldn't find preboot %s" % (row_number, cols[8].strip())) cleaned_csv.append({ 'hostname': hostname, 'ip': ip, 'mac': mac, 'rack_sn': rack_sn, 'venture': venture, 'venture_role': venture_role, 'preboot': preboot, 'management_ip': management_ip, 'network': network }) return cleaned_csv