소스 검색

Address review feedback: format_map for partial substitution, fix description wording

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brian Tiemann 2 일 전
부모
커밋
d140047fcd
3개의 변경된 파일15개의 추가작업 그리고 6개의 파일을 삭제
  1. 1 1
      netbox/netbox/config/parameters.py
  2. 8 1
      netbox/netbox/tests/test_ui.py
  3. 6 4
      netbox/netbox/ui/attrs.py

+ 1 - 1
netbox/netbox/config/parameters.py

@@ -230,7 +230,7 @@ PARAMS = (
         label=_('Maps URL'),
         label=_('Maps URL'),
         default='https://maps.google.com/?q=',
         default='https://maps.google.com/?q=',
         description=_(
         description=_(
-            "URL for mapping geographic locations. For GPS coordinates, include {lat} and {lon} placeholders, "
+            "URL for mapping geographic locations. For GPS coordinates, include {lat} and/or {lon} placeholders, "
             "or omit them to append coordinates as a comma-separated pair."
             "or omit them to append coordinates as a comma-separated pair."
         )
         )
     ),
     ),

+ 8 - 1
netbox/netbox/tests/test_ui.py

@@ -461,10 +461,17 @@ class GPSCoordinatesAttrTestCase(TestCase):
         self.assertEqual(url, 'https://example.com/?lon=2.294')
         self.assertEqual(url, 'https://example.com/?lon=2.294')
 
 
     def test_build_coords_url_unknown_placeholder_falls_back_to_legacy(self):
     def test_build_coords_url_unknown_placeholder_falls_back_to_legacy(self):
-        # Unknown placeholder: should not raise, fall back to appending lat,lon
+        # URL with only an unknown placeholder (no {lat}/{lon}) → legacy append
         url = attrs.GPSCoordinatesAttr._build_coords_url('https://example.com/?q={unknown}', 48.858, 2.294)
         url = attrs.GPSCoordinatesAttr._build_coords_url('https://example.com/?q={unknown}', 48.858, 2.294)
         self.assertEqual(url, 'https://example.com/?q={unknown}48.858,2.294')
         self.assertEqual(url, 'https://example.com/?q={unknown}48.858,2.294')
 
 
+    def test_build_coords_url_known_and_unknown_placeholder(self):
+        # {lat} is substituted; unknown key is left as a literal placeholder
+        url = attrs.GPSCoordinatesAttr._build_coords_url(
+            'https://example.com/?lat={lat}&layer={layer}', 48.858, 2.294
+        )
+        self.assertEqual(url, 'https://example.com/?lat=48.858&layer={layer}')
+
     def test_build_coords_url_decimal_values_no_locale_separator(self):
     def test_build_coords_url_decimal_values_no_locale_separator(self):
         # Decimal field values must format with '.' as the decimal separator regardless of locale;
         # Decimal field values must format with '.' as the decimal separator regardless of locale;
         # a locale-style comma separator would produce e.g. '48,858258' and break the URL
         # a locale-style comma separator would produce e.g. '48,858258' and break the URL

+ 6 - 4
netbox/netbox/ui/attrs.py

@@ -513,10 +513,12 @@ class GPSCoordinatesAttr(MapURLMixin, ObjectAttribute):
     @staticmethod
     @staticmethod
     def _build_coords_url(map_url, latitude, longitude):
     def _build_coords_url(map_url, latitude, longitude):
         if '{lat}' in map_url or '{lon}' in map_url:
         if '{lat}' in map_url or '{lon}' in map_url:
-            try:
-                return map_url.format(lat=latitude, lon=longitude)
-            except (KeyError, IndexError, ValueError):
-                pass
+            # Substitute only {lat}/{lon}; leave any other placeholders intact
+            # so a misconfigured URL still resolves the known tokens correctly.
+            class _SubstituteKnown(dict):
+                def __missing__(self, key):
+                    return '{' + key + '}'
+            return map_url.format_map(_SubstituteKnown(lat=latitude, lon=longitude))
         return f'{map_url}{latitude},{longitude}'
         return f'{map_url}{latitude},{longitude}'