Resolve F541 errors

This commit is contained in:
Jeremy Stretch 2024-10-10 15:25:34 -04:00
parent 4e763462e6
commit 4b3f6e5fbb
39 changed files with 78 additions and 78 deletions

View File

@ -18,7 +18,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -171,7 +171,7 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,cid,description,status", "id,cid,description,status",
f"{circuits[0].pk},Circuit 7,New description7,{CircuitStatusChoices.STATUS_DECOMMISSIONED}", f"{circuits[0].pk},Circuit 7,New description7,{CircuitStatusChoices.STATUS_DECOMMISSIONED}",
f"{circuits[1].pk},Circuit 8,New description8,{CircuitStatusChoices.STATUS_DECOMMISSIONED}", f"{circuits[1].pk},Circuit 8,New description8,{CircuitStatusChoices.STATUS_DECOMMISSIONED}",
f"{circuits[2].pk},Circuit 9,New description9,{CircuitStatusChoices.STATUS_DECOMMISSIONED}", f"{circuits[2].pk},Circuit 9,New description9,{CircuitStatusChoices.STATUS_DECOMMISSIONED}",

View File

@ -16,7 +16,7 @@ __all__ = (
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -34,7 +34,7 @@ class LocalBackend(DataBackend):
@contextmanager @contextmanager
def fetch(self): def fetch(self):
logger.debug(f"Data source type is local; skipping fetch") logger.debug("Data source type is local; skipping fetch")
local_path = urlparse(self.url).path # Strip file:// scheme local_path = urlparse(self.url).path # Strip file:// scheme
yield local_path yield local_path

View File

@ -26,7 +26,7 @@ class Command(BaseCommand):
if invalid_names := set(options['name']) - found_names: if invalid_names := set(options['name']) - found_names:
raise CommandError(f"Invalid data source names: {', '.join(invalid_names)}") raise CommandError(f"Invalid data source names: {', '.join(invalid_names)}")
else: else:
raise CommandError(f"Must specify at least one data source, or set --all.") raise CommandError("Must specify at least one data source, or set --all.")
if len(options['name']) > 1: if len(options['name']) > 1:
self.stdout.write(f"Syncing {len(datasources)} data sources.") self.stdout.write(f"Syncing {len(datasources)} data sources.")
@ -43,4 +43,4 @@ class Command(BaseCommand):
raise e raise e
if len(options['name']) > 1: if len(options['name']) > 1:
self.stdout.write(f"Finished.") self.stdout.write("Finished.")

View File

@ -125,7 +125,7 @@ class DataSource(JobsMixin, PrimaryModel):
# Ensure URL scheme matches selected type # Ensure URL scheme matches selected type
if self.backend_class.is_local and self.url_scheme not in ('file', ''): if self.backend_class.is_local and self.url_scheme not in ('file', ''):
raise ValidationError({ raise ValidationError({
'source_url': f"URLs for local sources must start with file:// (or specify no scheme)" 'source_url': "URLs for local sources must start with file:// (or specify no scheme)"
}) })
def to_objectchange(self, action): def to_objectchange(self, action):

View File

@ -118,9 +118,9 @@ class Job(models.Model):
# TODO: Employ dynamic registration # TODO: Employ dynamic registration
if self.object_type: if self.object_type:
if self.object_type.model == 'reportmodule': if self.object_type.model == 'reportmodule':
return reverse(f'extras:report_result', kwargs={'job_pk': self.pk}) return reverse('extras:report_result', kwargs={'job_pk': self.pk})
elif self.object_type.model == 'scriptmodule': elif self.object_type.model == 'scriptmodule':
return reverse(f'extras:script_result', kwargs={'job_pk': self.pk}) return reverse('extras:script_result', kwargs={'job_pk': self.pk})
return reverse('core:job', args=[self.pk]) return reverse('core:job', args=[self.pk])
def get_status_color(self): def get_status_color(self):

View File

@ -56,7 +56,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -261,8 +261,8 @@ class FrontPortCreateForm(ComponentCreateForm, model_forms.FrontPortForm):
# TODO: Clean up the application of HTMXSelect attributes # TODO: Clean up the application of HTMXSelect attributes
attrs={ attrs={
'hx-get': '.', 'hx-get': '.',
'hx-include': f'#form_fields', 'hx-include': '#form_fields',
'hx-target': f'#form_fields', 'hx-target': '#form_fields',
} }
) )
) )

View File

@ -60,7 +60,7 @@ class Command(BaseCommand):
self.stdout.write((self.style.SUCCESS(f' Deleted {deleted_count} paths'))) self.stdout.write((self.style.SUCCESS(f' Deleted {deleted_count} paths')))
# Reinitialize the model's PK sequence # Reinitialize the model's PK sequence
self.stdout.write(f'Resetting database sequence for CablePath model') self.stdout.write('Resetting database sequence for CablePath model')
sequence_sql = connection.ops.sequence_reset_sql(no_style(), [CablePath]) sequence_sql = connection.ops.sequence_reset_sql(no_style(), [CablePath])
with connection.cursor() as cursor: with connection.cursor() as cursor:
for sql in sequence_sql: for sql in sequence_sql:

View File

@ -2135,12 +2135,12 @@ class ConnectedDeviceTest(APITestCase):
def test_get_connected_device(self): def test_get_connected_device(self):
url = reverse('dcim-api:connected-device-list') url = reverse('dcim-api:connected-device-list')
url_params = f'?peer_device=TestDevice1&peer_interface=eth0' url_params = '?peer_device=TestDevice1&peer_interface=eth0'
response = self.client.get(url + url_params, **self.header) response = self.client.get(url + url_params, **self.header)
self.assertHttpStatus(response, status.HTTP_200_OK) self.assertHttpStatus(response, status.HTTP_200_OK)
self.assertEqual(response.data['name'], 'TestDevice2') self.assertEqual(response.data['name'], 'TestDevice2')
url_params = f'?peer_device=TestDevice1&peer_interface=eth1' url_params = '?peer_device=TestDevice1&peer_interface=eth1'
response = self.client.get(url + url_params, **self.header) response = self.client.get(url + url_params, **self.header)
self.assertHttpStatus(response, status.HTTP_404_NOT_FOUND) self.assertHttpStatus(response, status.HTTP_404_NOT_FOUND)

View File

@ -2571,7 +2571,7 @@ class InterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"device,name,type,vrf.pk,poe_mode,poe_type", "device,name,type,vrf.pk,poe_mode,poe_type",
f"Device 1,Interface 4,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af", f"Device 1,Interface 4,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af",
f"Device 1,Interface 5,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af", f"Device 1,Interface 5,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af",
f"Device 1,Interface 6,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af", f"Device 1,Interface 6,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af",

View File

@ -24,7 +24,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -48,7 +48,7 @@ class ScriptJob(JobRunner):
except AbortTransaction: except AbortTransaction:
script.log_info(message=_("Database changes have been reverted automatically.")) script.log_info(message=_("Database changes have been reverted automatically."))
if script.failed: if script.failed:
logger.warning(f"Script failed") logger.warning("Script failed")
raise raise
except Exception as e: except Exception as e:

View File

@ -95,7 +95,7 @@ class Command(BaseCommand):
self.stdout.write("[*] Checking for latest release") self.stdout.write("[*] Checking for latest release")
if settings.ISOLATED_DEPLOYMENT: if settings.ISOLATED_DEPLOYMENT:
if options['verbosity']: if options['verbosity']:
self.stdout.write(f"\tSkipping: ISOLATED_DEPLOYMENT is enabled") self.stdout.write("\tSkipping: ISOLATED_DEPLOYMENT is enabled")
elif settings.RELEASE_CHECK_URL: elif settings.RELEASE_CHECK_URL:
headers = { headers = {
'Accept': 'application/vnd.github.v3+json', 'Accept': 'application/vnd.github.v3+json',
@ -129,7 +129,7 @@ class Command(BaseCommand):
self.stdout.write(f"\tRequest error: {exc}", self.style.ERROR) self.stdout.write(f"\tRequest error: {exc}", self.style.ERROR)
else: else:
if options['verbosity']: if options['verbosity']:
self.stdout.write(f"\tSkipping: RELEASE_CHECK_URL not set") self.stdout.write("\tSkipping: RELEASE_CHECK_URL not set")
if options['verbosity']: if options['verbosity']:
self.stdout.write("Finished.", self.style.SUCCESS) self.stdout.write("Finished.", self.style.SUCCESS)

View File

@ -96,9 +96,9 @@ class Command(BaseCommand):
if i: if i:
self.stdout.write(f'{i} entries cached.') self.stdout.write(f'{i} entries cached.')
else: else:
self.stdout.write(f'No objects found.') self.stdout.write('No objects found.')
msg = f'Completed.' msg = 'Completed.'
if total_count := search_backend.size: if total_count := search_backend.size:
msg += f' Total entries: {total_count}' msg += f' Total entries: {total_count}'
self.stdout.write(msg, self.style.SUCCESS) self.stdout.write(msg, self.style.SUCCESS)

View File

@ -51,7 +51,7 @@ class Command(BaseCommand):
user = User.objects.filter(is_superuser=True).order_by('pk')[0] user = User.objects.filter(is_superuser=True).order_by('pk')[0]
# Setup logging to Stdout # Setup logging to Stdout
formatter = logging.Formatter(f'[%(asctime)s][%(levelname)s] - %(message)s') formatter = logging.Formatter('[%(asctime)s][%(levelname)s] - %(message)s')
stdouthandler = logging.StreamHandler(sys.stdout) stdouthandler = logging.StreamHandler(sys.stdout)
stdouthandler.setLevel(logging.DEBUG) stdouthandler.setLevel(logging.DEBUG)
stdouthandler.setFormatter(formatter) stdouthandler.setFormatter(formatter)

View File

@ -283,7 +283,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
""" """
for ct in content_types: for ct in content_types:
model = ct.model_class() model = ct.model_class()
instances = model.objects.exclude(**{f'custom_field_data__contains': self.name}) instances = model.objects.exclude(**{'custom_field_data__contains': self.name})
for instance in instances: for instance in instances:
instance.custom_field_data[self.name] = self.default instance.custom_field_data[self.name] = self.default
model.objects.bulk_update(instances, ['custom_field_data'], batch_size=100) model.objects.bulk_update(instances, ['custom_field_data'], batch_size=100)

View File

@ -554,7 +554,7 @@ class BaseScript:
""" """
Run the report and save its results. Each test method will be executed in order. Run the report and save its results. Each test method will be executed in order.
""" """
self.logger.info(f"Running report") self.logger.info("Running report")
try: try:
for test_name in self.tests: for test_name in self.tests:

View File

@ -417,7 +417,7 @@ class EventRulesTestCase(ViewTestCases.PrimaryObjectViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f'name,object_types,event_types,action_type,action_object', 'name,object_types,event_types,action_type,action_object',
f'Webhook 4,dcim.site,"{OBJECT_CREATED},{OBJECT_UPDATED}",webhook,Webhook 1', f'Webhook 4,dcim.site,"{OBJECT_CREATED},{OBJECT_UPDATED}",webhook,Webhook 1',
) )

View File

@ -30,7 +30,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -250,7 +250,7 @@ class AvailableObjectsView(ObjectValidationMixin, APIView):
# Determine if the requested number of objects is available # Determine if the requested number of objects is available
if not self.check_sufficient_available(serializer.validated_data, available_objects): if not self.check_sufficient_available(serializer.validated_data, available_objects):
return Response( return Response(
{"detail": f"Insufficient resources are available to satisfy the request"}, {"detail": "Insufficient resources are available to satisfy the request"},
status=status.HTTP_409_CONFLICT status=status.HTTP_409_CONFLICT
) )

View File

@ -50,7 +50,7 @@ class ASNRangeTestCase(ViewTestCases.PrimaryObjectViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"name,slug,rir,tenant,start,end,description", "name,slug,rir,tenant,start,end,description",
f"ASN Range 4,asn-range-4,{rirs[1].name},{tenants[1].name},400,499,Fourth range", f"ASN Range 4,asn-range-4,{rirs[1].name},{tenants[1].name},400,499,Fourth range",
f"ASN Range 5,asn-range-5,{rirs[1].name},{tenants[1].name},500,599,Fifth range", f"ASN Range 5,asn-range-5,{rirs[1].name},{tenants[1].name},500,599,Fifth range",
f"ASN Range 6,asn-range-6,{rirs[1].name},{tenants[1].name},600,699,Sixth range", f"ASN Range 6,asn-range-6,{rirs[1].name},{tenants[1].name},600,699,Sixth range",
@ -770,14 +770,14 @@ class VLANGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"name,slug,scope_type,scope_id,description", "name,slug,scope_type,scope_id,description",
f"VLAN Group 4,vlan-group-4,,,Fourth VLAN group", "VLAN Group 4,vlan-group-4,,,Fourth VLAN group",
f"VLAN Group 5,vlan-group-5,dcim.site,{sites[0].pk},Fifth VLAN group", f"VLAN Group 5,vlan-group-5,dcim.site,{sites[0].pk},Fifth VLAN group",
f"VLAN Group 6,vlan-group-6,dcim.site,{sites[1].pk},Sixth VLAN group", f"VLAN Group 6,vlan-group-6,dcim.site,{sites[1].pk},Sixth VLAN group",
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,name,description", "id,name,description",
f"{vlan_groups[0].pk},VLAN Group 7,Fourth VLAN group7", f"{vlan_groups[0].pk},VLAN Group 7,Fourth VLAN group7",
f"{vlan_groups[1].pk},VLAN Group 8,Fifth VLAN group8", f"{vlan_groups[1].pk},VLAN Group 8,Fifth VLAN group8",
f"{vlan_groups[2].pk},VLAN Group 9,Sixth VLAN group9", f"{vlan_groups[2].pk},VLAN Group 9,Sixth VLAN group9",

View File

@ -85,7 +85,7 @@ class Config:
logger.debug("Loaded configuration data from database") logger.debug("Loaded configuration data from database")
except DatabaseError: except DatabaseError:
# The database may not be available yet (e.g. when running a management command) # The database may not be available yet (e.g. when running a management command)
logger.warning(f"Skipping config initialization (database unavailable)") logger.warning("Skipping config initialization (database unavailable)")
return return
revision.activate() revision.activate()

View File

@ -386,57 +386,57 @@ ADMIN_MENU = Menu(
label=_('Authentication'), label=_('Authentication'),
items=( items=(
MenuItem( MenuItem(
link=f'users:user_list', link='users:user_list',
link_text=_('Users'), link_text=_('Users'),
auth_required=True, auth_required=True,
permissions=[f'users.view_user'], permissions=['users.view_user'],
buttons=( buttons=(
MenuItemButton( MenuItemButton(
link=f'users:user_add', link='users:user_add',
title='Add', title='Add',
icon_class='mdi mdi-plus-thick', icon_class='mdi mdi-plus-thick',
permissions=[f'users.add_user'] permissions=['users.add_user']
), ),
MenuItemButton( MenuItemButton(
link=f'users:user_import', link='users:user_import',
title='Import', title='Import',
icon_class='mdi mdi-upload', icon_class='mdi mdi-upload',
permissions=[f'users.add_user'] permissions=['users.add_user']
) )
) )
), ),
MenuItem( MenuItem(
link=f'users:group_list', link='users:group_list',
link_text=_('Groups'), link_text=_('Groups'),
auth_required=True, auth_required=True,
permissions=[f'users.view_group'], permissions=['users.view_group'],
buttons=( buttons=(
MenuItemButton( MenuItemButton(
link=f'users:group_add', link='users:group_add',
title='Add', title='Add',
icon_class='mdi mdi-plus-thick', icon_class='mdi mdi-plus-thick',
permissions=[f'users.add_group'] permissions=['users.add_group']
), ),
MenuItemButton( MenuItemButton(
link=f'users:group_import', link='users:group_import',
title='Import', title='Import',
icon_class='mdi mdi-upload', icon_class='mdi mdi-upload',
permissions=[f'users.add_group'] permissions=['users.add_group']
) )
) )
), ),
MenuItem( MenuItem(
link=f'users:token_list', link='users:token_list',
link_text=_('API Tokens'), link_text=_('API Tokens'),
auth_required=True, auth_required=True,
permissions=[f'users.view_token'], permissions=['users.view_token'],
buttons=get_model_buttons('users', 'token') buttons=get_model_buttons('users', 'token')
), ),
MenuItem( MenuItem(
link=f'users:objectpermission_list', link='users:objectpermission_list',
link_text=_('Permissions'), link_text=_('Permissions'),
auth_required=True, auth_required=True,
permissions=[f'users.view_objectpermission'], permissions=['users.view_objectpermission'],
buttons=get_model_buttons('users', 'objectpermission', actions=['add']) buttons=get_model_buttons('users', 'objectpermission', actions=['add'])
), ),
), ),

View File

@ -80,7 +80,7 @@ class checkout:
Create Change instances for all actions stored in the queue. Create Change instances for all actions stored in the queue.
""" """
if not self.queue: if not self.queue:
logger.debug(f"No queued changes; aborting") logger.debug("No queued changes; aborting")
return return
logger.debug(f"Processing {len(self.queue)} queued changes") logger.debug(f"Processing {len(self.queue)} queued changes")

View File

@ -21,7 +21,7 @@ class DummyModelsView(View):
class DummyModelAddView(View): class DummyModelAddView(View):
def get(self, request): def get(self, request):
return HttpResponse(f"Create an instance") return HttpResponse("Create an instance")
def post(self, request): def post(self, request):
instance = DummyModel( instance = DummyModel(
@ -29,7 +29,7 @@ class DummyModelAddView(View):
number=random.randint(1, 100000) number=random.randint(1, 100000)
) )
instance.save() instance.save()
return HttpResponse(f"Instance created") return HttpResponse("Instance created")
@register_model_view(Site, 'extra', path='other-stuff') @register_model_view(Site, 'extra', path='other-stuff')

View File

@ -15,7 +15,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -18,7 +18,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -73,7 +73,7 @@ class TokenProvisionView(APIView):
def perform_create(self, serializer): def perform_create(self, serializer):
model = serializer.Meta.model model = serializer.Meta.model
logger = logging.getLogger(f'netbox.api.views.TokenProvisionView') logger = logging.getLogger('netbox.api.views.TokenProvisionView')
logger.info(f"Creating new {model._meta.verbose_name}") logger.info(f"Creating new {model._meta.verbose_name}")
serializer.save() serializer.save()

View File

@ -51,11 +51,11 @@ class UserPreferencesTest(TestCase):
# Check that table ordering preference has been recorded # Check that table ordering preference has been recorded
self.user.refresh_from_db() self.user.refresh_from_db()
ordering = self.user.config.get(f'tables.SiteTable.ordering') ordering = self.user.config.get('tables.SiteTable.ordering')
self.assertEqual(ordering, ['status']) self.assertEqual(ordering, ['status'])
# Check that a recorded preference is honored by default # Check that a recorded preference is honored by default
self.user.config.set(f'tables.SiteTable.ordering', ['-status'], commit=True) self.user.config.set('tables.SiteTable.ordering', ['-status'], commit=True)
table = SiteTable(Site.objects.all()) table = SiteTable(Site.objects.all())
request = RequestFactory().get(url) request = RequestFactory().get(url)
request.user = self.user request.user = self.user

View File

@ -149,7 +149,7 @@ class APIPaginationTestCase(APITestCase):
self.assertHttpStatus(response, status.HTTP_200_OK) self.assertHttpStatus(response, status.HTTP_200_OK)
self.assertEqual(response.data['count'], 100) self.assertEqual(response.data['count'], 100)
self.assertTrue(response.data['next'].endswith(f'?limit=10&offset=10')) self.assertTrue(response.data['next'].endswith('?limit=10&offset=10'))
self.assertIsNone(response.data['previous']) self.assertIsNone(response.data['previous'])
self.assertEqual(len(response.data['results']), 10) self.assertEqual(len(response.data['results']), 10)
@ -159,7 +159,7 @@ class APIPaginationTestCase(APITestCase):
self.assertHttpStatus(response, status.HTTP_200_OK) self.assertHttpStatus(response, status.HTTP_200_OK)
self.assertEqual(response.data['count'], 100) self.assertEqual(response.data['count'], 100)
self.assertTrue(response.data['next'].endswith(f'?limit=20&offset=20')) self.assertTrue(response.data['next'].endswith('?limit=20&offset=20'))
self.assertIsNone(response.data['previous']) self.assertIsNone(response.data['previous'])
self.assertEqual(len(response.data['results']), 20) self.assertEqual(len(response.data['results']), 20)

View File

@ -18,7 +18,7 @@ __all__ = [
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -354,14 +354,14 @@ class VMInterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"virtual_machine,name,vrf.pk", "virtual_machine,name,vrf.pk",
f"Virtual Machine 2,Interface 4,{vrfs[0].pk}", f"Virtual Machine 2,Interface 4,{vrfs[0].pk}",
f"Virtual Machine 2,Interface 5,{vrfs[0].pk}", f"Virtual Machine 2,Interface 5,{vrfs[0].pk}",
f"Virtual Machine 2,Interface 6,{vrfs[0].pk}", f"Virtual Machine 2,Interface 6,{vrfs[0].pk}",
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,name,description", "id,name,description",
f"{interfaces[0].pk},Interface 7,New description 7", f"{interfaces[0].pk},Interface 7,New description 7",
f"{interfaces[1].pk},Interface 8,New description 8", f"{interfaces[1].pk},Interface 8,New description 8",
f"{interfaces[2].pk},Interface 9,New description 9", f"{interfaces[2].pk},Interface 9,New description 9",
@ -438,14 +438,14 @@ class VirtualDiskTestCase(ViewTestCases.DeviceComponentViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"virtual_machine,name,size,description", "virtual_machine,name,size,description",
f"Virtual Machine 1,Disk 4,20,Fourth", "Virtual Machine 1,Disk 4,20,Fourth",
f"Virtual Machine 1,Disk 5,20,Fifth", "Virtual Machine 1,Disk 5,20,Fifth",
f"Virtual Machine 1,Disk 6,20,Sixth", "Virtual Machine 1,Disk 6,20,Sixth",
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,name,size", "id,name,size",
f"{disks[0].pk},disk1,20", f"{disks[0].pk},disk1,20",
f"{disks[1].pk},disk2,20", f"{disks[1].pk},disk2,20",
f"{disks[2].pk},disk3,20", f"{disks[2].pk},disk3,20",

View File

@ -657,7 +657,7 @@ class VirtualMachineBulkAddInterfaceView(generic.BulkComponentCreateView):
default_return_url = 'virtualization:virtualmachine_list' default_return_url = 'virtualization:virtualmachine_list'
def get_required_permission(self): def get_required_permission(self):
return f'virtualization.add_vminterface' return 'virtualization.add_vminterface'
class VirtualMachineBulkAddVirtualDiskView(generic.BulkComponentCreateView): class VirtualMachineBulkAddVirtualDiskView(generic.BulkComponentCreateView):
@ -671,4 +671,4 @@ class VirtualMachineBulkAddVirtualDiskView(generic.BulkComponentCreateView):
default_return_url = 'virtualization:virtualmachine_list' default_return_url = 'virtualization:virtualmachine_list'
def get_required_permission(self): def get_required_permission(self):
return f'virtualization.add_virtualdisk' return 'virtualization.add_virtualdisk'

View File

@ -21,7 +21,7 @@ __all__ = (
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -542,9 +542,9 @@ class IPSecProfileTestCase(ViewTestCases.PrimaryObjectViewTestCase):
cls.csv_data = ( cls.csv_data = (
"name,mode,ike_policy,ipsec_policy", "name,mode,ike_policy,ipsec_policy",
f"IKE Proposal 4,ah,IKE Policy 2,IPSec Policy 2", "IKE Proposal 4,ah,IKE Policy 2,IPSec Policy 2",
f"IKE Proposal 5,ah,IKE Policy 2,IPSec Policy 2", "IKE Proposal 5,ah,IKE Policy 2,IPSec Policy 2",
f"IKE Proposal 6,ah,IKE Policy 2,IPSec Policy 2", "IKE Proposal 6,ah,IKE Policy 2,IPSec Policy 2",
) )
cls.csv_update_data = ( cls.csv_update_data = (
@ -661,7 +661,7 @@ class L2VPNTerminationTestCase(
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,l2vpn", "id,l2vpn",
f"{terminations[0].pk},{l2vpns[0].name}", f"{terminations[0].pk},{l2vpns[0].name}",
f"{terminations[1].pk},{l2vpns[0].name}", f"{terminations[1].pk},{l2vpns[0].name}",
f"{terminations[2].pk},{l2vpns[0].name}", f"{terminations[2].pk},{l2vpns[0].name}",

View File

@ -12,7 +12,7 @@ __all__ = (
# TODO: Remove in v4.2 # TODO: Remove in v4.2
warnings.warn( warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning DeprecationWarning
) )

View File

@ -102,14 +102,14 @@ class WirelessLANTestCase(ViewTestCases.PrimaryObjectViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"group,ssid,status,tenant", "group,ssid,status,tenant",
f"Wireless LAN Group 2,WLAN4,{WirelessLANStatusChoices.STATUS_ACTIVE},{tenants[0].name}", f"Wireless LAN Group 2,WLAN4,{WirelessLANStatusChoices.STATUS_ACTIVE},{tenants[0].name}",
f"Wireless LAN Group 2,WLAN5,{WirelessLANStatusChoices.STATUS_DISABLED},{tenants[1].name}", f"Wireless LAN Group 2,WLAN5,{WirelessLANStatusChoices.STATUS_DISABLED},{tenants[1].name}",
f"Wireless LAN Group 2,WLAN6,{WirelessLANStatusChoices.STATUS_RESERVED},{tenants[2].name}", f"Wireless LAN Group 2,WLAN6,{WirelessLANStatusChoices.STATUS_RESERVED},{tenants[2].name}",
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,ssid", "id,ssid",
f"{wireless_lans[0].pk},WLAN7", f"{wireless_lans[0].pk},WLAN7",
f"{wireless_lans[1].pk},WLAN8", f"{wireless_lans[1].pk},WLAN8",
f"{wireless_lans[2].pk},WLAN9", f"{wireless_lans[2].pk},WLAN9",
@ -167,7 +167,7 @@ class WirelessLinkTestCase(ViewTestCases.PrimaryObjectViewTestCase):
} }
cls.csv_data = ( cls.csv_data = (
f"interface_a,interface_b,status,tenant", "interface_a,interface_b,status,tenant",
f"{interfaces[6].pk},{interfaces[7].pk},connected,{tenants[0].name}", f"{interfaces[6].pk},{interfaces[7].pk},connected,{tenants[0].name}",
f"{interfaces[8].pk},{interfaces[9].pk},connected,{tenants[1].name}", f"{interfaces[8].pk},{interfaces[9].pk},connected,{tenants[1].name}",
f"{interfaces[10].pk},{interfaces[11].pk},connected,{tenants[2].name}", f"{interfaces[10].pk},{interfaces[11].pk},connected,{tenants[2].name}",