nautobot 2.1.8__py3-none-any.whl → 2.1.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (296) hide show
  1. nautobot/apps/api.py +1 -2
  2. nautobot/apps/utils.py +4 -0
  3. nautobot/apps/views.py +2 -0
  4. nautobot/circuits/api/urls.py +1 -2
  5. nautobot/circuits/api/views.py +0 -12
  6. nautobot/core/api/routers.py +25 -3
  7. nautobot/core/api/utils.py +4 -0
  8. nautobot/core/api/views.py +21 -15
  9. nautobot/core/settings.py +1 -0
  10. nautobot/core/templates/admin/base.html +23 -94
  11. nautobot/core/templates/graphene/graphiql.html +18 -47
  12. nautobot/core/templates/inc/footer.html +5 -5
  13. nautobot/core/templates/inc/nav_menu.html +0 -7
  14. nautobot/core/templates/rest_framework/api.html +12 -5
  15. nautobot/core/tests/integration/test_view_authentication.py +67 -0
  16. nautobot/core/tests/test_graphql.py +2 -14
  17. nautobot/core/tests/test_views.py +22 -16
  18. nautobot/core/utils/lookup.py +124 -0
  19. nautobot/core/views/__init__.py +3 -7
  20. nautobot/core/views/generic.py +9 -0
  21. nautobot/dcim/api/urls.py +1 -2
  22. nautobot/dcim/api/views.py +1 -12
  23. nautobot/dcim/models/racks.py +1 -3
  24. nautobot/dcim/templates/dcim/device/lldp_neighbors.html +67 -43
  25. nautobot/dcim/tests/test_api.py +3 -0
  26. nautobot/dcim/views.py +5 -2
  27. nautobot/extras/api/urls.py +1 -2
  28. nautobot/extras/api/views.py +0 -10
  29. nautobot/extras/plugins/views.py +6 -9
  30. nautobot/extras/tests/test_views.py +101 -0
  31. nautobot/extras/views.py +10 -10
  32. nautobot/ipam/api/urls.py +1 -2
  33. nautobot/ipam/api/views.py +0 -11
  34. nautobot/ipam/tables.py +0 -1
  35. nautobot/ipam/tests/test_graphql.py +2 -3
  36. nautobot/ipam/views.py +9 -9
  37. nautobot/project-static/css/base.css +1 -0
  38. nautobot/project-static/docs/404.html +14 -0
  39. nautobot/project-static/docs/apps/index.html +14 -0
  40. nautobot/project-static/docs/apps/nautobot-apps.html +14 -0
  41. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +14 -0
  42. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +14 -0
  43. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +394 -408
  44. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +14 -0
  45. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +14 -0
  46. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +14 -0
  47. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +14 -0
  48. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +14 -0
  49. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +14 -0
  50. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +14 -0
  51. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +14 -0
  52. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +14 -0
  53. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +14 -0
  54. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +14 -0
  55. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +14 -0
  56. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +14 -0
  57. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +14 -0
  58. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +14 -0
  59. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +14 -0
  60. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +14 -0
  61. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +649 -183
  62. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +1811 -1744
  63. nautobot/project-static/docs/development/apps/api/configuration-view.html +14 -0
  64. nautobot/project-static/docs/development/apps/api/database-backend-config.html +14 -0
  65. nautobot/project-static/docs/development/apps/api/models/django-admin.html +14 -0
  66. nautobot/project-static/docs/development/apps/api/models/global-search.html +14 -0
  67. nautobot/project-static/docs/development/apps/api/models/graphql.html +14 -0
  68. nautobot/project-static/docs/development/apps/api/models/index.html +14 -0
  69. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +14 -0
  70. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +14 -0
  71. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +14 -0
  72. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +14 -0
  73. nautobot/project-static/docs/development/apps/api/platform-features/index.html +14 -0
  74. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +14 -0
  75. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +14 -0
  76. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +14 -0
  77. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +14 -0
  78. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +14 -0
  79. nautobot/project-static/docs/development/apps/api/prometheus.html +14 -0
  80. nautobot/project-static/docs/development/apps/api/setup.html +14 -0
  81. nautobot/project-static/docs/development/apps/api/testing.html +14 -0
  82. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +14 -0
  83. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +14 -0
  84. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +14 -0
  85. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +14 -0
  86. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +14 -0
  87. nautobot/project-static/docs/development/apps/api/views/base-template.html +14 -0
  88. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +28 -9
  89. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +31 -12
  90. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +14 -0
  91. nautobot/project-static/docs/development/apps/api/views/index.html +14 -0
  92. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +14 -0
  93. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +14 -0
  94. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +14 -0
  95. nautobot/project-static/docs/development/apps/api/views/notes.html +14 -0
  96. nautobot/project-static/docs/development/apps/api/views/rest-api.html +14 -0
  97. nautobot/project-static/docs/development/apps/api/views/urls.html +14 -0
  98. nautobot/project-static/docs/development/apps/index.html +14 -0
  99. nautobot/project-static/docs/development/apps/migration/code-updates.html +14 -0
  100. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +14 -0
  101. nautobot/project-static/docs/development/apps/migration/from-v1.html +14 -0
  102. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +14 -0
  103. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +14 -0
  104. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +14 -0
  105. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +14 -0
  106. nautobot/project-static/docs/development/apps/porting-from-netbox.html +14 -0
  107. nautobot/project-static/docs/development/core/application-registry.html +14 -0
  108. nautobot/project-static/docs/development/core/best-practices.html +14 -0
  109. nautobot/project-static/docs/development/core/bootstrap-ui.html +14 -0
  110. nautobot/project-static/docs/development/core/caching.html +14 -0
  111. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +14 -0
  112. nautobot/project-static/docs/development/core/extending-models.html +14 -0
  113. nautobot/project-static/docs/development/core/generic-views.html +14 -0
  114. nautobot/project-static/docs/development/core/getting-started.html +33 -10
  115. nautobot/project-static/docs/development/core/homepage.html +14 -0
  116. nautobot/project-static/docs/development/core/index.html +14 -0
  117. nautobot/project-static/docs/development/core/model-features.html +14 -0
  118. nautobot/project-static/docs/development/core/natural-keys.html +14 -0
  119. nautobot/project-static/docs/development/core/navigation-menu.html +14 -0
  120. nautobot/project-static/docs/development/core/release-checklist.html +14 -0
  121. nautobot/project-static/docs/development/core/role-internals.html +14 -0
  122. nautobot/project-static/docs/development/core/style-guide.html +14 -0
  123. nautobot/project-static/docs/development/core/templates.html +14 -0
  124. nautobot/project-static/docs/development/core/testing.html +14 -0
  125. nautobot/project-static/docs/development/core/user-preferences.html +14 -0
  126. nautobot/project-static/docs/development/index.html +14 -0
  127. nautobot/project-static/docs/development/jobs/index.html +14 -0
  128. nautobot/project-static/docs/development/jobs/migration/from-v1.html +14 -0
  129. nautobot/project-static/docs/index.html +14 -0
  130. nautobot/project-static/docs/objects.inv +0 -0
  131. nautobot/project-static/docs/release-notes/index.html +14 -0
  132. nautobot/project-static/docs/release-notes/version-1.0.html +14 -0
  133. nautobot/project-static/docs/release-notes/version-1.1.html +14 -0
  134. nautobot/project-static/docs/release-notes/version-1.2.html +14 -0
  135. nautobot/project-static/docs/release-notes/version-1.3.html +14 -0
  136. nautobot/project-static/docs/release-notes/version-1.4.html +14 -0
  137. nautobot/project-static/docs/release-notes/version-1.5.html +14 -0
  138. nautobot/project-static/docs/release-notes/version-1.6.html +14 -0
  139. nautobot/project-static/docs/release-notes/version-2.0.html +14 -0
  140. nautobot/project-static/docs/release-notes/version-2.1.html +365 -159
  141. nautobot/project-static/docs/search/search_index.json +1 -1
  142. nautobot/project-static/docs/sitemap.xml +245 -240
  143. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  144. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +14 -0
  145. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +14 -0
  146. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +14 -0
  147. nautobot/project-static/docs/user-guide/administration/configuration/index.html +14 -0
  148. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +14 -0
  149. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +14 -0
  150. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +14 -0
  151. nautobot/project-static/docs/user-guide/administration/guides/caching.html +14 -0
  152. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +14 -0
  153. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +14 -0
  154. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +14 -0
  155. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +14 -0
  156. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +14 -0
  157. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +14 -0
  158. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +14 -0
  159. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +14 -0
  160. nautobot/project-static/docs/user-guide/administration/installation/docker.html +21 -3
  161. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +14 -0
  162. nautobot/project-static/docs/user-guide/administration/installation/health-checks.html +6019 -0
  163. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +14 -0
  164. nautobot/project-static/docs/user-guide/administration/installation/index.html +14 -0
  165. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +14 -0
  166. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +14 -0
  167. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +17 -3
  168. nautobot/project-static/docs/user-guide/administration/installation/services.html +14 -0
  169. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +14 -0
  170. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +14 -0
  171. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +14 -0
  172. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +14 -0
  173. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +14 -0
  174. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +14 -0
  175. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +14 -0
  176. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +14 -0
  177. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +14 -0
  178. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +14 -0
  179. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +14 -0
  180. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +14 -0
  181. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +14 -0
  182. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +14 -0
  183. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +14 -0
  184. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +14 -0
  185. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +14 -0
  186. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +14 -0
  187. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +14 -0
  188. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +14 -0
  189. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +14 -0
  190. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +14 -0
  191. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +14 -0
  192. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +14 -0
  193. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +14 -0
  194. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +14 -0
  195. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +14 -0
  196. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +14 -0
  197. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +14 -0
  198. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +14 -0
  199. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +14 -0
  200. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +14 -0
  201. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +14 -0
  202. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +14 -0
  203. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +14 -0
  204. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +14 -0
  205. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +14 -0
  206. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +14 -0
  207. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +14 -0
  208. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +14 -0
  209. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +14 -0
  210. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +14 -0
  211. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +14 -0
  212. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +14 -0
  213. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +14 -0
  214. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +14 -0
  215. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +14 -0
  216. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +14 -0
  217. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +14 -0
  218. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +14 -0
  219. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +14 -0
  220. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +14 -0
  221. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +14 -0
  222. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +14 -0
  223. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +14 -0
  224. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +14 -0
  225. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +14 -0
  226. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +14 -0
  227. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +14 -0
  228. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +14 -0
  229. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +14 -0
  230. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +14 -0
  231. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +14 -0
  232. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +14 -0
  233. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +14 -0
  234. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +14 -0
  235. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +14 -0
  236. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +14 -0
  237. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +14 -0
  238. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +14 -0
  239. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +14 -0
  240. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +14 -0
  241. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +14 -0
  242. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +14 -0
  243. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +14 -0
  244. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +14 -0
  245. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +14 -0
  246. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +14 -0
  247. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +14 -0
  248. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +14 -0
  249. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +14 -0
  250. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +14 -0
  251. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +14 -0
  252. nautobot/project-static/docs/user-guide/index.html +14 -0
  253. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +14 -0
  254. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +14 -0
  255. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +14 -0
  256. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +14 -0
  257. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +14 -0
  258. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +14 -0
  259. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +14 -0
  260. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +14 -0
  261. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +14 -0
  262. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +14 -0
  263. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +14 -0
  264. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +14 -0
  265. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +14 -0
  266. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +14 -0
  267. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +14 -0
  268. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +14 -0
  269. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +14 -0
  270. nautobot/project-static/docs/user-guide/platform-functionality/note.html +14 -0
  271. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +14 -0
  272. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +14 -0
  273. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +14 -0
  274. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +14 -0
  275. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +14 -0
  276. nautobot/project-static/docs/user-guide/platform-functionality/role.html +14 -0
  277. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +14 -0
  278. nautobot/project-static/docs/user-guide/platform-functionality/status.html +14 -0
  279. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +14 -0
  280. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +14 -0
  281. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +14 -0
  282. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +14 -0
  283. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +14 -0
  284. nautobot/tenancy/api/urls.py +1 -2
  285. nautobot/tenancy/api/views.py +0 -12
  286. nautobot/users/api/urls.py +1 -2
  287. nautobot/users/api/views.py +2 -65
  288. nautobot/users/views.py +8 -8
  289. nautobot/virtualization/api/urls.py +1 -2
  290. nautobot/virtualization/api/views.py +0 -12
  291. {nautobot-2.1.8.dist-info → nautobot-2.1.9.dist-info}/METADATA +2 -2
  292. {nautobot-2.1.8.dist-info → nautobot-2.1.9.dist-info}/RECORD +296 -294
  293. {nautobot-2.1.8.dist-info → nautobot-2.1.9.dist-info}/LICENSE.txt +0 -0
  294. {nautobot-2.1.8.dist-info → nautobot-2.1.9.dist-info}/NOTICE +0 -0
  295. {nautobot-2.1.8.dist-info → nautobot-2.1.9.dist-info}/WHEEL +0 -0
  296. {nautobot-2.1.8.dist-info → nautobot-2.1.9.dist-info}/entry_points.txt +0 -0
@@ -550,6 +550,20 @@
550
550
 
551
551
 
552
552
 
553
+ <li class="md-nav__item">
554
+ <a href="../../../user-guide/administration/installation/health-checks.html" class="md-nav__link">
555
+ Health Checks
556
+ </a>
557
+ </li>
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
553
567
  <li class="md-nav__item">
554
568
  <a href="../../../user-guide/administration/installation/selinux-troubleshooting.html" class="md-nav__link">
555
569
  SELinux Troubleshooting
@@ -4642,6 +4656,20 @@
4642
4656
  get_table_for_model()
4643
4657
  </a>
4644
4658
 
4659
+ </li>
4660
+
4661
+ <li class="md-nav__item">
4662
+ <a href="#nautobot.apps.utils.get_url_for_url_pattern" class="md-nav__link">
4663
+ get_url_for_url_pattern()
4664
+ </a>
4665
+
4666
+ </li>
4667
+
4668
+ <li class="md-nav__item">
4669
+ <a href="#nautobot.apps.utils.get_url_patterns" class="md-nav__link">
4670
+ get_url_patterns()
4671
+ </a>
4672
+
4645
4673
  </li>
4646
4674
 
4647
4675
  <li class="md-nav__item">
@@ -6147,6 +6175,20 @@
6147
6175
  get_table_for_model()
6148
6176
  </a>
6149
6177
 
6178
+ </li>
6179
+
6180
+ <li class="md-nav__item">
6181
+ <a href="#nautobot.apps.utils.get_url_for_url_pattern" class="md-nav__link">
6182
+ get_url_for_url_pattern()
6183
+ </a>
6184
+
6185
+ </li>
6186
+
6187
+ <li class="md-nav__item">
6188
+ <a href="#nautobot.apps.utils.get_url_patterns" class="md-nav__link">
6189
+ get_url_patterns()
6190
+ </a>
6191
+
6150
6192
  </li>
6151
6193
 
6152
6194
  <li class="md-nav__item">
@@ -8872,9 +8914,7 @@ by the model class. If an instance is provided, the queryset will also be filter
8872
8914
 
8873
8915
  <details class="quote">
8874
8916
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
8875
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
8876
- <span class="normal"><a href="#__codelineno-0-14">14</a></span>
8877
- <span class="normal"><a href="#__codelineno-0-15">15</a></span>
8917
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-15">15</a></span>
8878
8918
  <span class="normal"><a href="#__codelineno-0-16">16</a></span>
8879
8919
  <span class="normal"><a href="#__codelineno-0-17">17</a></span>
8880
8920
  <span class="normal"><a href="#__codelineno-0-18">18</a></span>
@@ -8886,21 +8926,23 @@ by the model class. If an instance is provided, the queryset will also be filter
8886
8926
  <span class="normal"><a href="#__codelineno-0-24">24</a></span>
8887
8927
  <span class="normal"><a href="#__codelineno-0-25">25</a></span>
8888
8928
  <span class="normal"><a href="#__codelineno-0-26">26</a></span>
8889
- <span class="normal"><a href="#__codelineno-0-27">27</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">def</span> <span class="nf">get_changes_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
8890
- <a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
8891
- <a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Return a queryset of ObjectChanges for a model or instance. The queryset will be filtered</span>
8892
- <a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> by the model class. If an instance is provided, the queryset will also be filtered by the instance id.</span>
8893
- <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
8894
- <a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="kn">from</span> <span class="nn">nautobot.extras.models</span> <span class="kn">import</span> <span class="n">ObjectChange</span> <span class="c1"># prevent circular import</span>
8895
- <a id="__codelineno-0-19" name="__codelineno-0-19"></a>
8896
- <a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
8897
- <a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">return</span> <span class="n">ObjectChange</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
8898
- <a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">changed_object_type</span><span class="o">=</span><span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_model</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model</span><span class="p">),</span>
8899
- <a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">changed_object_id</span><span class="o">=</span><span class="n">model</span><span class="o">.</span><span class="n">pk</span><span class="p">,</span>
8900
- <a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="p">)</span>
8901
- <a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
8902
- <a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">return</span> <span class="n">ObjectChange</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">changed_object_type</span><span class="o">=</span><span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_model</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model</span><span class="p">))</span>
8903
- <a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="si">!r}</span><span class="s2"> is not a Django Model class or instance&quot;</span><span class="p">)</span>
8929
+ <span class="normal"><a href="#__codelineno-0-27">27</a></span>
8930
+ <span class="normal"><a href="#__codelineno-0-28">28</a></span>
8931
+ <span class="normal"><a href="#__codelineno-0-29">29</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="k">def</span> <span class="nf">get_changes_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
8932
+ <a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
8933
+ <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Return a queryset of ObjectChanges for a model or instance. The queryset will be filtered</span>
8934
+ <a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> by the model class. If an instance is provided, the queryset will also be filtered by the instance id.</span>
8935
+ <a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> &quot;&quot;&quot;</span>
8936
+ <a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="kn">from</span> <span class="nn">nautobot.extras.models</span> <span class="kn">import</span> <span class="n">ObjectChange</span> <span class="c1"># prevent circular import</span>
8937
+ <a id="__codelineno-0-21" name="__codelineno-0-21"></a>
8938
+ <a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
8939
+ <a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">return</span> <span class="n">ObjectChange</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
8940
+ <a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">changed_object_type</span><span class="o">=</span><span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_model</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model</span><span class="p">),</span>
8941
+ <a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">changed_object_id</span><span class="o">=</span><span class="n">model</span><span class="o">.</span><span class="n">pk</span><span class="p">,</span>
8942
+ <a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="p">)</span>
8943
+ <a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
8944
+ <a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">return</span> <span class="n">ObjectChange</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">changed_object_type</span><span class="o">=</span><span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_model</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model</span><span class="p">))</span>
8945
+ <a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="si">!r}</span><span class="s2"> is not a Django Model class or instance&quot;</span><span class="p">)</span>
8904
8946
  </code></pre></div></td></tr></table></div>
8905
8947
  </details>
8906
8948
  </div>
@@ -9266,9 +9308,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
9266
9308
 
9267
9309
  <details class="quote">
9268
9310
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
9269
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-141">141</a></span>
9270
- <span class="normal"><a href="#__codelineno-0-142">142</a></span>
9271
- <span class="normal"><a href="#__codelineno-0-143">143</a></span>
9311
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-143">143</a></span>
9272
9312
  <span class="normal"><a href="#__codelineno-0-144">144</a></span>
9273
9313
  <span class="normal"><a href="#__codelineno-0-145">145</a></span>
9274
9314
  <span class="normal"><a href="#__codelineno-0-146">146</a></span>
@@ -9280,21 +9320,23 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
9280
9320
  <span class="normal"><a href="#__codelineno-0-152">152</a></span>
9281
9321
  <span class="normal"><a href="#__codelineno-0-153">153</a></span>
9282
9322
  <span class="normal"><a href="#__codelineno-0-154">154</a></span>
9283
- <span class="normal"><a href="#__codelineno-0-155">155</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="k">def</span> <span class="nf">get_filterset_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
9284
- <a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the `FilterSet` class associated with a given `model`.</span>
9285
- <a id="__codelineno-0-143" name="__codelineno-0-143"></a>
9286
- <a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> The `FilterSet` class is expected to be in the `filters` module within the application</span>
9287
- <a id="__codelineno-0-145" name="__codelineno-0-145"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}FilterSet`.</span>
9288
- <a id="__codelineno-0-146" name="__codelineno-0-146"></a>
9289
- <a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> If a matching `FilterSet` is not found, this will return `None`.</span>
9323
+ <span class="normal"><a href="#__codelineno-0-155">155</a></span>
9324
+ <span class="normal"><a href="#__codelineno-0-156">156</a></span>
9325
+ <span class="normal"><a href="#__codelineno-0-157">157</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="k">def</span> <span class="nf">get_filterset_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
9326
+ <a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the `FilterSet` class associated with a given `model`.</span>
9327
+ <a id="__codelineno-0-145" name="__codelineno-0-145"></a>
9328
+ <a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> The `FilterSet` class is expected to be in the `filters` module within the application</span>
9329
+ <a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}FilterSet`.</span>
9290
9330
  <a id="__codelineno-0-148" name="__codelineno-0-148"></a>
9291
- <a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> Args:</span>
9292
- <a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> model (BaseModel): A model class</span>
9293
- <a id="__codelineno-0-151" name="__codelineno-0-151"></a>
9294
- <a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> Returns:</span>
9295
- <a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> (Union[FilterSet,None]): Either the `FilterSet` class or `None`</span>
9296
- <a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> &quot;&quot;&quot;</span>
9297
- <a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="k">return</span> <span class="n">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="s2">&quot;filters&quot;</span><span class="p">,</span> <span class="n">object_suffix</span><span class="o">=</span><span class="s2">&quot;FilterSet&quot;</span><span class="p">)</span>
9331
+ <a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> If a matching `FilterSet` is not found, this will return `None`.</span>
9332
+ <a id="__codelineno-0-150" name="__codelineno-0-150"></a>
9333
+ <a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> Args:</span>
9334
+ <a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> model (BaseModel): A model class</span>
9335
+ <a id="__codelineno-0-153" name="__codelineno-0-153"></a>
9336
+ <a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> Returns:</span>
9337
+ <a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> (Union[FilterSet,None]): Either the `FilterSet` class or `None`</span>
9338
+ <a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> &quot;&quot;&quot;</span>
9339
+ <a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">return</span> <span class="n">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="s2">&quot;filters&quot;</span><span class="p">,</span> <span class="n">object_suffix</span><span class="o">=</span><span class="s2">&quot;FilterSet&quot;</span><span class="p">)</span>
9298
9340
  </code></pre></div></td></tr></table></div>
9299
9341
  </details>
9300
9342
  </div>
@@ -9562,9 +9604,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
9562
9604
 
9563
9605
  <details class="quote">
9564
9606
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
9565
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-158">158</a></span>
9566
- <span class="normal"><a href="#__codelineno-0-159">159</a></span>
9567
- <span class="normal"><a href="#__codelineno-0-160">160</a></span>
9607
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-160">160</a></span>
9568
9608
  <span class="normal"><a href="#__codelineno-0-161">161</a></span>
9569
9609
  <span class="normal"><a href="#__codelineno-0-162">162</a></span>
9570
9610
  <span class="normal"><a href="#__codelineno-0-163">163</a></span>
@@ -9579,24 +9619,26 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
9579
9619
  <span class="normal"><a href="#__codelineno-0-172">172</a></span>
9580
9620
  <span class="normal"><a href="#__codelineno-0-173">173</a></span>
9581
9621
  <span class="normal"><a href="#__codelineno-0-174">174</a></span>
9582
- <span class="normal"><a href="#__codelineno-0-175">175</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="k">def</span> <span class="nf">get_form_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">form_prefix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
9583
- <a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the `Form` class associated with a given `model`.</span>
9584
- <a id="__codelineno-0-160" name="__codelineno-0-160"></a>
9585
- <a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> The `Form` class is expected to be in the `forms` module within the application</span>
9586
- <a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}{form_prefix}Form`.</span>
9587
- <a id="__codelineno-0-163" name="__codelineno-0-163"></a>
9588
- <a id="__codelineno-0-164" name="__codelineno-0-164"></a><span class="sd"> If a matching `Form` is not found, this will return `None`.</span>
9622
+ <span class="normal"><a href="#__codelineno-0-175">175</a></span>
9623
+ <span class="normal"><a href="#__codelineno-0-176">176</a></span>
9624
+ <span class="normal"><a href="#__codelineno-0-177">177</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="k">def</span> <span class="nf">get_form_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">form_prefix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
9625
+ <a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the `Form` class associated with a given `model`.</span>
9626
+ <a id="__codelineno-0-162" name="__codelineno-0-162"></a>
9627
+ <a id="__codelineno-0-163" name="__codelineno-0-163"></a><span class="sd"> The `Form` class is expected to be in the `forms` module within the application</span>
9628
+ <a id="__codelineno-0-164" name="__codelineno-0-164"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}{form_prefix}Form`.</span>
9589
9629
  <a id="__codelineno-0-165" name="__codelineno-0-165"></a>
9590
- <a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="sd"> Args:</span>
9591
- <a id="__codelineno-0-167" name="__codelineno-0-167"></a><span class="sd"> form_prefix (str):</span>
9592
- <a id="__codelineno-0-168" name="__codelineno-0-168"></a><span class="sd"> An additional prefix for the form name (e.g. `Filter`, such as to retrieve</span>
9593
- <a id="__codelineno-0-169" name="__codelineno-0-169"></a><span class="sd"> `FooFilterForm`) that will come after the model name.</span>
9594
- <a id="__codelineno-0-170" name="__codelineno-0-170"></a>
9595
- <a id="__codelineno-0-171" name="__codelineno-0-171"></a><span class="sd"> Returns:</span>
9596
- <a id="__codelineno-0-172" name="__codelineno-0-172"></a><span class="sd"> (Union[Form, None]): Either the `Form` class or `None`</span>
9597
- <a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="sd"> &quot;&quot;&quot;</span>
9598
- <a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="n">object_suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">form_prefix</span><span class="si">}</span><span class="s2">Form&quot;</span>
9599
- <a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">return</span> <span class="n">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="s2">&quot;forms&quot;</span><span class="p">,</span> <span class="n">object_suffix</span><span class="o">=</span><span class="n">object_suffix</span><span class="p">)</span>
9630
+ <a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="sd"> If a matching `Form` is not found, this will return `None`.</span>
9631
+ <a id="__codelineno-0-167" name="__codelineno-0-167"></a>
9632
+ <a id="__codelineno-0-168" name="__codelineno-0-168"></a><span class="sd"> Args:</span>
9633
+ <a id="__codelineno-0-169" name="__codelineno-0-169"></a><span class="sd"> form_prefix (str):</span>
9634
+ <a id="__codelineno-0-170" name="__codelineno-0-170"></a><span class="sd"> An additional prefix for the form name (e.g. `Filter`, such as to retrieve</span>
9635
+ <a id="__codelineno-0-171" name="__codelineno-0-171"></a><span class="sd"> `FooFilterForm`) that will come after the model name.</span>
9636
+ <a id="__codelineno-0-172" name="__codelineno-0-172"></a>
9637
+ <a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="sd"> Returns:</span>
9638
+ <a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="sd"> (Union[Form, None]): Either the `Form` class or `None`</span>
9639
+ <a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="sd"> &quot;&quot;&quot;</span>
9640
+ <a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">object_suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">form_prefix</span><span class="si">}</span><span class="s2">Form&quot;</span>
9641
+ <a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="n">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="s2">&quot;forms&quot;</span><span class="p">,</span> <span class="n">object_suffix</span><span class="o">=</span><span class="n">object_suffix</span><span class="p">)</span>
9600
9642
  </code></pre></div></td></tr></table></div>
9601
9643
  </details>
9602
9644
  </div>
@@ -9724,9 +9766,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
9724
9766
 
9725
9767
  <details class="quote">
9726
9768
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
9727
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-30">30</a></span>
9728
- <span class="normal"><a href="#__codelineno-0-31">31</a></span>
9729
- <span class="normal"><a href="#__codelineno-0-32">32</a></span>
9769
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-32">32</a></span>
9730
9770
  <span class="normal"><a href="#__codelineno-0-33">33</a></span>
9731
9771
  <span class="normal"><a href="#__codelineno-0-34">34</a></span>
9732
9772
  <span class="normal"><a href="#__codelineno-0-35">35</a></span>
@@ -9738,21 +9778,23 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
9738
9778
  <span class="normal"><a href="#__codelineno-0-41">41</a></span>
9739
9779
  <span class="normal"><a href="#__codelineno-0-42">42</a></span>
9740
9780
  <span class="normal"><a href="#__codelineno-0-43">43</a></span>
9741
- <span class="normal"><a href="#__codelineno-0-44">44</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="k">def</span> <span class="nf">get_model_from_name</span><span class="p">(</span><span class="n">model_name</span><span class="p">):</span>
9742
- <a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Given a full model name in dotted format (example: `dcim.model`), a model class is returned if valid.</span>
9743
- <a id="__codelineno-0-32" name="__codelineno-0-32"></a>
9744
- <a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> :param model_name: Full dotted name for a model as a string (ex: `dcim.model`)</span>
9745
- <a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> :type model_name: str</span>
9746
- <a id="__codelineno-0-35" name="__codelineno-0-35"></a>
9747
- <a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> :raises TypeError: If given model name is not found.</span>
9781
+ <span class="normal"><a href="#__codelineno-0-44">44</a></span>
9782
+ <span class="normal"><a href="#__codelineno-0-45">45</a></span>
9783
+ <span class="normal"><a href="#__codelineno-0-46">46</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k">def</span> <span class="nf">get_model_from_name</span><span class="p">(</span><span class="n">model_name</span><span class="p">):</span>
9784
+ <a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Given a full model name in dotted format (example: `dcim.model`), a model class is returned if valid.</span>
9785
+ <a id="__codelineno-0-34" name="__codelineno-0-34"></a>
9786
+ <a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> :param model_name: Full dotted name for a model as a string (ex: `dcim.model`)</span>
9787
+ <a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> :type model_name: str</span>
9748
9788
  <a id="__codelineno-0-37" name="__codelineno-0-37"></a>
9749
- <a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> :return: Found model.</span>
9750
- <a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> &quot;&quot;&quot;</span>
9751
- <a id="__codelineno-0-40" name="__codelineno-0-40"></a>
9752
- <a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">try</span><span class="p">:</span>
9753
- <a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="k">return</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_model</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span>
9754
- <a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">)</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
9755
- <a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">exc</span>
9789
+ <a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> :raises TypeError: If given model name is not found.</span>
9790
+ <a id="__codelineno-0-39" name="__codelineno-0-39"></a>
9791
+ <a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> :return: Found model.</span>
9792
+ <a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> &quot;&quot;&quot;</span>
9793
+ <a id="__codelineno-0-42" name="__codelineno-0-42"></a>
9794
+ <a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">try</span><span class="p">:</span>
9795
+ <a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">return</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_model</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span>
9796
+ <a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">)</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
9797
+ <a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">exc</span>
9756
9798
  </code></pre></div></td></tr></table></div>
9757
9799
  </details>
9758
9800
  </div>
@@ -10068,9 +10110,7 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
10068
10110
 
10069
10111
  <details class="quote">
10070
10112
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
10071
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
10072
- <span class="normal"><a href="#__codelineno-0-100">100</a></span>
10073
- <span class="normal"><a href="#__codelineno-0-101">101</a></span>
10113
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-101">101</a></span>
10074
10114
  <span class="normal"><a href="#__codelineno-0-102">102</a></span>
10075
10115
  <span class="normal"><a href="#__codelineno-0-103">103</a></span>
10076
10116
  <span class="normal"><a href="#__codelineno-0-104">104</a></span>
@@ -10107,46 +10147,48 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
10107
10147
  <span class="normal"><a href="#__codelineno-0-135">135</a></span>
10108
10148
  <span class="normal"><a href="#__codelineno-0-136">136</a></span>
10109
10149
  <span class="normal"><a href="#__codelineno-0-137">137</a></span>
10110
- <span class="normal"><a href="#__codelineno-0-138">138</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="k">def</span> <span class="nf">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="p">,</span> <span class="n">object_suffix</span><span class="p">):</span>
10111
- <a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the appropriate class associated with a given model matching the `module_name` and</span>
10112
- <a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> `object_suffix`.</span>
10113
- <a id="__codelineno-0-102" name="__codelineno-0-102"></a>
10114
- <a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> The given `model` can either be a model class, a model instance, or a dotted representation (ex: `dcim.device`).</span>
10150
+ <span class="normal"><a href="#__codelineno-0-138">138</a></span>
10151
+ <span class="normal"><a href="#__codelineno-0-139">139</a></span>
10152
+ <span class="normal"><a href="#__codelineno-0-140">140</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="k">def</span> <span class="nf">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="p">,</span> <span class="n">object_suffix</span><span class="p">):</span>
10153
+ <a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the appropriate class associated with a given model matching the `module_name` and</span>
10154
+ <a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> `object_suffix`.</span>
10115
10155
  <a id="__codelineno-0-104" name="__codelineno-0-104"></a>
10116
- <a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> The object class is expected to be in the module within the application</span>
10117
- <a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}{object_suffix}`.</span>
10118
- <a id="__codelineno-0-107" name="__codelineno-0-107"></a>
10119
- <a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> If a matching class is not found, this will return `None`.</span>
10156
+ <a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> The given `model` can either be a model class, a model instance, or a dotted representation (ex: `dcim.device`).</span>
10157
+ <a id="__codelineno-0-106" name="__codelineno-0-106"></a>
10158
+ <a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> The object class is expected to be in the module within the application</span>
10159
+ <a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}{object_suffix}`.</span>
10120
10160
  <a id="__codelineno-0-109" name="__codelineno-0-109"></a>
10121
- <a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> Args:</span>
10122
- <a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> model (Union[BaseModel, str]): A model class, instance, or dotted representation</span>
10123
- <a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> module_name (str): The name of the module to search for the object class</span>
10124
- <a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> object_suffix (str): The suffix to append to the model name to find the object class</span>
10125
- <a id="__codelineno-0-114" name="__codelineno-0-114"></a>
10126
- <a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> Returns:</span>
10127
- <a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> (Union[BaseModel, str]): Either the matching object class or None</span>
10128
- <a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> &quot;&quot;&quot;</span>
10129
- <a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
10130
- <a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">get_model_from_name</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
10131
- <a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
10132
- <a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">model</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
10133
- <a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
10134
- <a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="si">!r}</span><span class="s2"> is not a Django Model class&quot;</span><span class="p">)</span>
10135
- <a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
10136
- <a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="si">!r}</span><span class="s2"> is not a subclass of a Django Model class&quot;</span><span class="p">)</span>
10137
- <a id="__codelineno-0-126" name="__codelineno-0-126"></a>
10138
- <a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="c1"># e.g. &quot;nautobot.dcim.forms.DeviceFilterForm&quot;</span>
10139
- <a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">app_config</span> <span class="o">=</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_app_config</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span><span class="p">)</span>
10140
- <a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="n">object_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}{</span><span class="n">object_suffix</span><span class="si">}</span><span class="s2">&quot;</span>
10141
- <a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="n">object_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">app_config</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">module_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">object_name</span><span class="si">}</span><span class="s2">&quot;</span>
10142
- <a id="__codelineno-0-131" name="__codelineno-0-131"></a>
10143
- <a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="k">try</span><span class="p">:</span>
10144
- <a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">return</span> <span class="n">import_string</span><span class="p">(</span><span class="n">object_path</span><span class="p">)</span>
10145
- <a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="c1"># The name of the module is not correct or unable to find the desired object for this model</span>
10146
- <a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="ne">ModuleNotFoundError</span><span class="p">):</span>
10147
- <a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">pass</span>
10148
- <a id="__codelineno-0-137" name="__codelineno-0-137"></a>
10149
- <a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">return</span> <span class="kc">None</span>
10161
+ <a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> If a matching class is not found, this will return `None`.</span>
10162
+ <a id="__codelineno-0-111" name="__codelineno-0-111"></a>
10163
+ <a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> Args:</span>
10164
+ <a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> model (Union[BaseModel, str]): A model class, instance, or dotted representation</span>
10165
+ <a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> module_name (str): The name of the module to search for the object class</span>
10166
+ <a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> object_suffix (str): The suffix to append to the model name to find the object class</span>
10167
+ <a id="__codelineno-0-116" name="__codelineno-0-116"></a>
10168
+ <a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> Returns:</span>
10169
+ <a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> (Union[BaseModel, str]): Either the matching object class or None</span>
10170
+ <a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> &quot;&quot;&quot;</span>
10171
+ <a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
10172
+ <a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">get_model_from_name</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
10173
+ <a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
10174
+ <a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">model</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
10175
+ <a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
10176
+ <a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="si">!r}</span><span class="s2"> is not a Django Model class&quot;</span><span class="p">)</span>
10177
+ <a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
10178
+ <a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="si">!r}</span><span class="s2"> is not a subclass of a Django Model class&quot;</span><span class="p">)</span>
10179
+ <a id="__codelineno-0-128" name="__codelineno-0-128"></a>
10180
+ <a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="c1"># e.g. &quot;nautobot.dcim.forms.DeviceFilterForm&quot;</span>
10181
+ <a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="n">app_config</span> <span class="o">=</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_app_config</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span><span class="p">)</span>
10182
+ <a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">object_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">model</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}{</span><span class="n">object_suffix</span><span class="si">}</span><span class="s2">&quot;</span>
10183
+ <a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">object_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">app_config</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">module_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">object_name</span><span class="si">}</span><span class="s2">&quot;</span>
10184
+ <a id="__codelineno-0-133" name="__codelineno-0-133"></a>
10185
+ <a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">try</span><span class="p">:</span>
10186
+ <a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">return</span> <span class="n">import_string</span><span class="p">(</span><span class="n">object_path</span><span class="p">)</span>
10187
+ <a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="c1"># The name of the module is not correct or unable to find the desired object for this model</span>
10188
+ <a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="ne">ModuleNotFoundError</span><span class="p">):</span>
10189
+ <a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">pass</span>
10190
+ <a id="__codelineno-0-139" name="__codelineno-0-139"></a>
10191
+ <a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="k">return</span> <span class="kc">None</span>
10150
10192
  </code></pre></div></td></tr></table></div>
10151
10193
  </details>
10152
10194
  </div>
@@ -10270,9 +10312,7 @@ Supports both core and plugin routes.</p>
10270
10312
 
10271
10313
  <details class="quote">
10272
10314
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
10273
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-47">47</a></span>
10274
- <span class="normal"><a href="#__codelineno-0-48">48</a></span>
10275
- <span class="normal"><a href="#__codelineno-0-49">49</a></span>
10315
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-49">49</a></span>
10276
10316
  <span class="normal"><a href="#__codelineno-0-50">50</a></span>
10277
10317
  <span class="normal"><a href="#__codelineno-0-51">51</a></span>
10278
10318
  <span class="normal"><a href="#__codelineno-0-52">52</a></span>
@@ -10319,56 +10359,58 @@ Supports both core and plugin routes.</p>
10319
10359
  <span class="normal"><a href="#__codelineno-0-93">93</a></span>
10320
10360
  <span class="normal"><a href="#__codelineno-0-94">94</a></span>
10321
10361
  <span class="normal"><a href="#__codelineno-0-95">95</a></span>
10322
- <span class="normal"><a href="#__codelineno-0-96">96</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="k">def</span> <span class="nf">get_route_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
10323
- <a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
10324
- <a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Return the URL route name for the given model and action. Does not perform any validation.</span>
10325
- <a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Supports both core and plugin routes.</span>
10326
- <a id="__codelineno-0-51" name="__codelineno-0-51"></a>
10327
- <a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
10328
- <a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> model (models.Model, str): Class, Instance, or dotted string of a Django Model</span>
10329
- <a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> action (str): name of the action in the route</span>
10330
- <a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> api (bool): If set, return an API route.</span>
10331
- <a id="__codelineno-0-56" name="__codelineno-0-56"></a>
10332
- <a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Returns:</span>
10333
- <a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> (str): return the name of the view for the model/action provided.</span>
10334
- <a id="__codelineno-0-59" name="__codelineno-0-59"></a>
10335
- <a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Examples:</span>
10336
- <a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(Device, &quot;list&quot;)</span>
10337
- <a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;dcim:device_list&quot;</span>
10338
- <a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(Device, &quot;list&quot;, api=True)</span>
10339
- <a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;dcim-api:device-list&quot;</span>
10340
- <a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(&quot;dcim.location&quot;, &quot;list&quot;)</span>
10341
- <a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;dcim:location_list&quot;</span>
10342
- <a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(&quot;dcim.location&quot;, &quot;list&quot;, api=True)</span>
10343
- <a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> &quot;dcim-api:location-list&quot;</span>
10344
- <a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(ExampleModel, &quot;list&quot;)</span>
10345
- <a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> &quot;plugins:example_plugin:examplemodel_list&quot;</span>
10346
- <a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(ExampleModel, &quot;list&quot;, api=True)</span>
10347
- <a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> &quot;plugins-api:example_plugin-api:examplemodel-list&quot;</span>
10348
- <a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> &quot;&quot;&quot;</span>
10349
- <a id="__codelineno-0-74" name="__codelineno-0-74"></a>
10350
- <a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
10351
- <a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">get_model_from_name</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
10352
- <a id="__codelineno-0-77" name="__codelineno-0-77"></a>
10353
- <a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span> <span class="k">else</span> <span class="s2">&quot;-api&quot;</span>
10354
- <a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="c1"># The `contenttypes` and `auth` app doesn&#39;t provide REST API endpoints,</span>
10355
- <a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="c1"># but Nautobot provides one for the ContentType model in our `extras` and Group model in `users` app.</span>
10356
- <a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="n">model</span> <span class="ow">is</span> <span class="n">ContentType</span><span class="p">:</span>
10357
- <a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">app_label</span> <span class="o">=</span> <span class="s2">&quot;extras&quot;</span>
10358
- <a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">elif</span> <span class="n">model</span> <span class="ow">is</span> <span class="n">Group</span><span class="p">:</span>
10359
- <a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">app_label</span> <span class="o">=</span> <span class="s2">&quot;users&quot;</span>
10360
- <a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">else</span><span class="p">:</span>
10361
- <a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">app_label</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span>
10362
- <a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">prefix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">app_label</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model_name</span><span class="si">}</span><span class="s2">&quot;</span>
10363
- <a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
10364
- <a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">if</span> <span class="n">action</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
10365
- <a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;_&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span> <span class="k">else</span> <span class="s2">&quot;-&quot;</span>
10366
- <a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">viewname</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sep</span><span class="si">}{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span>
10367
- <a id="__codelineno-0-92" name="__codelineno-0-92"></a>
10368
- <a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">if</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_app_config</span><span class="p">(</span><span class="n">app_label</span><span class="p">)</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">PLUGINS</span><span class="p">:</span>
10369
- <a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">viewname</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;plugins</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">viewname</span><span class="si">}</span><span class="s2">&quot;</span>
10370
- <a id="__codelineno-0-95" name="__codelineno-0-95"></a>
10371
- <a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="n">viewname</span>
10362
+ <span class="normal"><a href="#__codelineno-0-96">96</a></span>
10363
+ <span class="normal"><a href="#__codelineno-0-97">97</a></span>
10364
+ <span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="k">def</span> <span class="nf">get_route_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
10365
+ <a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
10366
+ <a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> Return the URL route name for the given model and action. Does not perform any validation.</span>
10367
+ <a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Supports both core and plugin routes.</span>
10368
+ <a id="__codelineno-0-53" name="__codelineno-0-53"></a>
10369
+ <a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Args:</span>
10370
+ <a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> model (models.Model, str): Class, Instance, or dotted string of a Django Model</span>
10371
+ <a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> action (str): name of the action in the route</span>
10372
+ <a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> api (bool): If set, return an API route.</span>
10373
+ <a id="__codelineno-0-58" name="__codelineno-0-58"></a>
10374
+ <a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Returns:</span>
10375
+ <a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> (str): return the name of the view for the model/action provided.</span>
10376
+ <a id="__codelineno-0-61" name="__codelineno-0-61"></a>
10377
+ <a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Examples:</span>
10378
+ <a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(Device, &quot;list&quot;)</span>
10379
+ <a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;dcim:device_list&quot;</span>
10380
+ <a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(Device, &quot;list&quot;, api=True)</span>
10381
+ <a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;dcim-api:device-list&quot;</span>
10382
+ <a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(&quot;dcim.location&quot;, &quot;list&quot;)</span>
10383
+ <a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> &quot;dcim:location_list&quot;</span>
10384
+ <a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(&quot;dcim.location&quot;, &quot;list&quot;, api=True)</span>
10385
+ <a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> &quot;dcim-api:location-list&quot;</span>
10386
+ <a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(ExampleModel, &quot;list&quot;)</span>
10387
+ <a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> &quot;plugins:example_plugin:examplemodel_list&quot;</span>
10388
+ <a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> &gt;&gt;&gt; get_route_for_model(ExampleModel, &quot;list&quot;, api=True)</span>
10389
+ <a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> &quot;plugins-api:example_plugin-api:examplemodel-list&quot;</span>
10390
+ <a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> &quot;&quot;&quot;</span>
10391
+ <a id="__codelineno-0-76" name="__codelineno-0-76"></a>
10392
+ <a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
10393
+ <a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">get_model_from_name</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
10394
+ <a id="__codelineno-0-79" name="__codelineno-0-79"></a>
10395
+ <a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span> <span class="k">else</span> <span class="s2">&quot;-api&quot;</span>
10396
+ <a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="c1"># The `contenttypes` and `auth` app doesn&#39;t provide REST API endpoints,</span>
10397
+ <a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="c1"># but Nautobot provides one for the ContentType model in our `extras` and Group model in `users` app.</span>
10398
+ <a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="n">model</span> <span class="ow">is</span> <span class="n">ContentType</span><span class="p">:</span>
10399
+ <a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">app_label</span> <span class="o">=</span> <span class="s2">&quot;extras&quot;</span>
10400
+ <a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">elif</span> <span class="n">model</span> <span class="ow">is</span> <span class="n">Group</span><span class="p">:</span>
10401
+ <a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">app_label</span> <span class="o">=</span> <span class="s2">&quot;users&quot;</span>
10402
+ <a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">else</span><span class="p">:</span>
10403
+ <a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="n">app_label</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span>
10404
+ <a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">prefix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">app_label</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">model_name</span><span class="si">}</span><span class="s2">&quot;</span>
10405
+ <a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
10406
+ <a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">if</span> <span class="n">action</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
10407
+ <a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;_&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span> <span class="k">else</span> <span class="s2">&quot;-&quot;</span>
10408
+ <a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">viewname</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sep</span><span class="si">}{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span>
10409
+ <a id="__codelineno-0-94" name="__codelineno-0-94"></a>
10410
+ <a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="n">apps</span><span class="o">.</span><span class="n">get_app_config</span><span class="p">(</span><span class="n">app_label</span><span class="p">)</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">PLUGINS</span><span class="p">:</span>
10411
+ <a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">viewname</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;plugins</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">viewname</span><span class="si">}</span><span class="s2">&quot;</span>
10412
+ <a id="__codelineno-0-97" name="__codelineno-0-97"></a>
10413
+ <a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="n">viewname</span>
10372
10414
  </code></pre></div></td></tr></table></div>
10373
10415
  </details>
10374
10416
  </div>
@@ -10483,9 +10525,7 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
10483
10525
 
10484
10526
  <details class="quote">
10485
10527
  <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
10486
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-178">178</a></span>
10487
- <span class="normal"><a href="#__codelineno-0-179">179</a></span>
10488
- <span class="normal"><a href="#__codelineno-0-180">180</a></span>
10528
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-180">180</a></span>
10489
10529
  <span class="normal"><a href="#__codelineno-0-181">181</a></span>
10490
10530
  <span class="normal"><a href="#__codelineno-0-182">182</a></span>
10491
10531
  <span class="normal"><a href="#__codelineno-0-183">183</a></span>
@@ -10497,21 +10537,447 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
10497
10537
  <span class="normal"><a href="#__codelineno-0-189">189</a></span>
10498
10538
  <span class="normal"><a href="#__codelineno-0-190">190</a></span>
10499
10539
  <span class="normal"><a href="#__codelineno-0-191">191</a></span>
10500
- <span class="normal"><a href="#__codelineno-0-192">192</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="k">def</span> <span class="nf">get_table_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
10501
- <a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the `Table` class associated with a given `model`.</span>
10502
- <a id="__codelineno-0-180" name="__codelineno-0-180"></a>
10503
- <a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="sd"> The `Table` class is expected to be in the `tables` module within the application</span>
10504
- <a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}Table`.</span>
10505
- <a id="__codelineno-0-183" name="__codelineno-0-183"></a>
10506
- <a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> If a matching `Table` is not found, this will return `None`.</span>
10540
+ <span class="normal"><a href="#__codelineno-0-192">192</a></span>
10541
+ <span class="normal"><a href="#__codelineno-0-193">193</a></span>
10542
+ <span class="normal"><a href="#__codelineno-0-194">194</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-180" name="__codelineno-0-180"></a><span class="k">def</span> <span class="nf">get_table_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">):</span>
10543
+ <a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the `Table` class associated with a given `model`.</span>
10544
+ <a id="__codelineno-0-182" name="__codelineno-0-182"></a>
10545
+ <a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> The `Table` class is expected to be in the `tables` module within the application</span>
10546
+ <a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> associated with the model and its name is expected to be `{ModelName}Table`.</span>
10507
10547
  <a id="__codelineno-0-185" name="__codelineno-0-185"></a>
10508
- <a id="__codelineno-0-186" name="__codelineno-0-186"></a><span class="sd"> Args:</span>
10509
- <a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> model (BaseModel): A model class</span>
10510
- <a id="__codelineno-0-188" name="__codelineno-0-188"></a>
10511
- <a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> Returns:</span>
10512
- <a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sd"> (Union[Table, None]): Either the `Table` class or `None`</span>
10513
- <a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> &quot;&quot;&quot;</span>
10514
- <a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="k">return</span> <span class="n">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">,</span> <span class="n">object_suffix</span><span class="o">=</span><span class="s2">&quot;Table&quot;</span><span class="p">)</span>
10548
+ <a id="__codelineno-0-186" name="__codelineno-0-186"></a><span class="sd"> If a matching `Table` is not found, this will return `None`.</span>
10549
+ <a id="__codelineno-0-187" name="__codelineno-0-187"></a>
10550
+ <a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> Args:</span>
10551
+ <a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> model (BaseModel): A model class</span>
10552
+ <a id="__codelineno-0-190" name="__codelineno-0-190"></a>
10553
+ <a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> Returns:</span>
10554
+ <a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> (Union[Table, None]): Either the `Table` class or `None`</span>
10555
+ <a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> &quot;&quot;&quot;</span>
10556
+ <a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="k">return</span> <span class="n">get_related_class_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">module_name</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">,</span> <span class="n">object_suffix</span><span class="o">=</span><span class="s2">&quot;Table&quot;</span><span class="p">)</span>
10557
+ </code></pre></div></td></tr></table></div>
10558
+ </details>
10559
+ </div>
10560
+
10561
+ </div>
10562
+
10563
+
10564
+ <div class="doc doc-object doc-function">
10565
+
10566
+
10567
+
10568
+ <h2 id="nautobot.apps.utils.get_url_for_url_pattern" class="doc doc-heading">
10569
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_url_for_url_pattern</span><span class="p">(</span><span class="n">url_pattern</span><span class="p">)</span></code>
10570
+
10571
+ <a href="#nautobot.apps.utils.get_url_for_url_pattern" class="headerlink" title="Permanent link">&para;</a></h2>
10572
+
10573
+
10574
+ <div class="doc doc-contents ">
10575
+
10576
+ <p>Given a URL pattern, construct a URL string that would match that pattern.</p>
10577
+
10578
+
10579
+
10580
+ <p><strong>Examples:</strong></p>
10581
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">get_url_for_url_pattern</span><span class="p">(</span><span class="s2">&quot;/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$&quot;</span><span class="p">)</span>
10582
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="go">&#39;/plugins/example-plugin/models/00000000-0000-0000-0000-000000000000/&#39;</span>
10583
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">get_url_for_url_pattern</span><span class="p">(</span><span class="s2">&quot;/circuits/circuit-terminations/&lt;uuid:termination_a_id&gt;/connect/&lt;str:termination_b_type&gt;/&quot;</span><span class="p">)</span>
10584
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="go">&#39;/circuits/circuit-terminations/00000000-0000-0000-0000-000000000000/connect/string/&#39;</span>
10585
+ </code></pre></div>
10586
+
10587
+ <details class="quote">
10588
+ <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
10589
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-300">300</a></span>
10590
+ <span class="normal"><a href="#__codelineno-0-301">301</a></span>
10591
+ <span class="normal"><a href="#__codelineno-0-302">302</a></span>
10592
+ <span class="normal"><a href="#__codelineno-0-303">303</a></span>
10593
+ <span class="normal"><a href="#__codelineno-0-304">304</a></span>
10594
+ <span class="normal"><a href="#__codelineno-0-305">305</a></span>
10595
+ <span class="normal"><a href="#__codelineno-0-306">306</a></span>
10596
+ <span class="normal"><a href="#__codelineno-0-307">307</a></span>
10597
+ <span class="normal"><a href="#__codelineno-0-308">308</a></span>
10598
+ <span class="normal"><a href="#__codelineno-0-309">309</a></span>
10599
+ <span class="normal"><a href="#__codelineno-0-310">310</a></span>
10600
+ <span class="normal"><a href="#__codelineno-0-311">311</a></span>
10601
+ <span class="normal"><a href="#__codelineno-0-312">312</a></span>
10602
+ <span class="normal"><a href="#__codelineno-0-313">313</a></span>
10603
+ <span class="normal"><a href="#__codelineno-0-314">314</a></span>
10604
+ <span class="normal"><a href="#__codelineno-0-315">315</a></span>
10605
+ <span class="normal"><a href="#__codelineno-0-316">316</a></span>
10606
+ <span class="normal"><a href="#__codelineno-0-317">317</a></span>
10607
+ <span class="normal"><a href="#__codelineno-0-318">318</a></span>
10608
+ <span class="normal"><a href="#__codelineno-0-319">319</a></span>
10609
+ <span class="normal"><a href="#__codelineno-0-320">320</a></span>
10610
+ <span class="normal"><a href="#__codelineno-0-321">321</a></span>
10611
+ <span class="normal"><a href="#__codelineno-0-322">322</a></span>
10612
+ <span class="normal"><a href="#__codelineno-0-323">323</a></span>
10613
+ <span class="normal"><a href="#__codelineno-0-324">324</a></span>
10614
+ <span class="normal"><a href="#__codelineno-0-325">325</a></span>
10615
+ <span class="normal"><a href="#__codelineno-0-326">326</a></span>
10616
+ <span class="normal"><a href="#__codelineno-0-327">327</a></span>
10617
+ <span class="normal"><a href="#__codelineno-0-328">328</a></span>
10618
+ <span class="normal"><a href="#__codelineno-0-329">329</a></span>
10619
+ <span class="normal"><a href="#__codelineno-0-330">330</a></span>
10620
+ <span class="normal"><a href="#__codelineno-0-331">331</a></span>
10621
+ <span class="normal"><a href="#__codelineno-0-332">332</a></span>
10622
+ <span class="normal"><a href="#__codelineno-0-333">333</a></span>
10623
+ <span class="normal"><a href="#__codelineno-0-334">334</a></span>
10624
+ <span class="normal"><a href="#__codelineno-0-335">335</a></span>
10625
+ <span class="normal"><a href="#__codelineno-0-336">336</a></span>
10626
+ <span class="normal"><a href="#__codelineno-0-337">337</a></span>
10627
+ <span class="normal"><a href="#__codelineno-0-338">338</a></span>
10628
+ <span class="normal"><a href="#__codelineno-0-339">339</a></span>
10629
+ <span class="normal"><a href="#__codelineno-0-340">340</a></span>
10630
+ <span class="normal"><a href="#__codelineno-0-341">341</a></span>
10631
+ <span class="normal"><a href="#__codelineno-0-342">342</a></span>
10632
+ <span class="normal"><a href="#__codelineno-0-343">343</a></span>
10633
+ <span class="normal"><a href="#__codelineno-0-344">344</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-300" name="__codelineno-0-300"></a><span class="k">def</span> <span class="nf">get_url_for_url_pattern</span><span class="p">(</span><span class="n">url_pattern</span><span class="p">):</span>
10634
+ <a id="__codelineno-0-301" name="__codelineno-0-301"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
10635
+ <a id="__codelineno-0-302" name="__codelineno-0-302"></a><span class="sd"> Given a URL pattern, construct a URL string that would match that pattern.</span>
10636
+ <a id="__codelineno-0-303" name="__codelineno-0-303"></a>
10637
+ <a id="__codelineno-0-304" name="__codelineno-0-304"></a><span class="sd"> Examples:</span>
10638
+ <a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="sd"> &gt;&gt;&gt; get_url_for_url_pattern(&quot;/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$&quot;)</span>
10639
+ <a id="__codelineno-0-306" name="__codelineno-0-306"></a><span class="sd"> &#39;/plugins/example-plugin/models/00000000-0000-0000-0000-000000000000/&#39;</span>
10640
+ <a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="sd"> &gt;&gt;&gt; get_url_for_url_pattern(&quot;/circuits/circuit-terminations/&lt;uuid:termination_a_id&gt;/connect/&lt;str:termination_b_type&gt;/&quot;)</span>
10641
+ <a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="sd"> &#39;/circuits/circuit-terminations/00000000-0000-0000-0000-000000000000/connect/string/&#39;</span>
10642
+ <a id="__codelineno-0-309" name="__codelineno-0-309"></a><span class="sd"> &quot;&quot;&quot;</span>
10643
+ <a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">url_pattern</span>
10644
+ <a id="__codelineno-0-311" name="__codelineno-0-311"></a> <span class="c1"># Fixup tokens in path-style &quot;classic&quot; view URLs:</span>
10645
+ <a id="__codelineno-0-312" name="__codelineno-0-312"></a> <span class="c1"># &quot;/admin/users/user/&lt;id&gt;/password/&quot;</span>
10646
+ <a id="__codelineno-0-313" name="__codelineno-0-313"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;id&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;00000000-0000-0000-0000-000000000000&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10647
+ <a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="c1"># &quot;/silk/request/&lt;uuid:request_id&gt;/profile/&lt;int:profile_id&gt;/&quot;</span>
10648
+ <a id="__codelineno-0-315" name="__codelineno-0-315"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;int:\w+&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10649
+ <a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="c1"># &quot;/admin/admin/logentry/&lt;path:object_id&gt;/&quot;</span>
10650
+ <a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;path:\w+&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10651
+ <a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="c1"># &quot;/dcim/sites/&lt;slug:slug&gt;/&quot;</span>
10652
+ <a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;slug:\w+&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;slug&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10653
+ <a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="c1"># &quot;/apps/installed-apps/&lt;str:app&gt;/&quot;</span>
10654
+ <a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;str:\w+&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10655
+ <a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="c1"># &quot;/dcim/locations/&lt;uuid:pk&gt;/&quot;</span>
10656
+ <a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;uuid:\w+&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;00000000-0000-0000-0000-000000000000&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10657
+ <a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="c1"># tokens in regexp-style router urls, including REST and NautobotUIViewSet:</span>
10658
+ <a id="__codelineno-0-325" name="__codelineno-0-325"></a> <span class="c1"># &quot;/extras/^external-integrations/(?P&lt;pk&gt;[^/.]+)/$&quot;</span>
10659
+ <a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="c1"># &quot;/api/virtualization/^interfaces/(?P&lt;pk&gt;[^/.]+)/$&quot;</span>
10660
+ <a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="c1"># &quot;/api/virtualization/^interfaces/(?P&lt;pk&gt;[^/.]+)\\.(?P&lt;format&gt;[a-z0-9]+)/?$&quot;</span>
10661
+ <a id="__codelineno-0-328" name="__codelineno-0-328"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[$^]&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10662
+ <a id="__codelineno-0-329" name="__codelineno-0-329"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;/\?&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10663
+ <a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;app_label&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;users&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10664
+ <a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;class_path&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;foo/bar/baz&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10665
+ <a id="__codelineno-0-332" name="__codelineno-0-332"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;format&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;json&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10666
+ <a id="__codelineno-0-333" name="__codelineno-0-333"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;name&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10667
+ <a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;pk&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;00000000-0000-0000-0000-000000000000&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10668
+ <a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;slug&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10669
+ <a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;url&gt;[^)]+\)&quot;</span><span class="p">,</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10670
+ <a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="c1"># Fallthru for generic URL parameters</span>
10671
+ <a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\(\?P&lt;\w+&gt;[^)]+\)\??&quot;</span><span class="p">,</span> <span class="s2">&quot;unknown&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10672
+ <a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
10673
+ <a id="__codelineno-0-340" name="__codelineno-0-340"></a>
10674
+ <a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="n">url</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="s2">&quot;&lt;&gt;[]()?+^$&quot;</span><span class="p">):</span>
10675
+ <a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unhandled token in URL </span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s2"> derived from </span><span class="si">{</span><span class="n">url_pattern</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
10676
+ <a id="__codelineno-0-343" name="__codelineno-0-343"></a>
10677
+ <a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="k">return</span> <span class="n">url</span>
10678
+ </code></pre></div></td></tr></table></div>
10679
+ </details>
10680
+ </div>
10681
+
10682
+ </div>
10683
+
10684
+
10685
+ <div class="doc doc-object doc-function">
10686
+
10687
+
10688
+
10689
+ <h2 id="nautobot.apps.utils.get_url_patterns" class="doc doc-heading">
10690
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_url_patterns</span><span class="p">(</span><span class="n">urlconf</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">patterns_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">base_path</span><span class="o">=</span><span class="s1">&#39;/&#39;</span><span class="p">)</span></code>
10691
+
10692
+ <a href="#nautobot.apps.utils.get_url_patterns" class="headerlink" title="Permanent link">&para;</a></h2>
10693
+
10694
+
10695
+ <div class="doc doc-contents ">
10696
+
10697
+ <p>Recursively yield a list of registered URL patterns.</p>
10698
+
10699
+
10700
+
10701
+ <p><strong>Parameters:</strong></p>
10702
+ <table>
10703
+ <thead>
10704
+ <tr>
10705
+ <th>Name</th>
10706
+ <th>Type</th>
10707
+ <th>Description</th>
10708
+ <th>Default</th>
10709
+ </tr>
10710
+ </thead>
10711
+ <tbody>
10712
+ <tr>
10713
+ <td><code>urlconf</code></td>
10714
+ <td>
10715
+ <code>URLConf</code>
10716
+ </td>
10717
+ <td>
10718
+ <div class="doc-md-description">
10719
+ <p>Python module such as <code>nautobot.core.urls</code>.
10720
+ Default if unspecified is the value of <code>settings.ROOT_URLCONF</code>, i.e. the <code>nautobot.core.urls</code> module.</p>
10721
+ </div>
10722
+ </td>
10723
+ <td>
10724
+ <code>None</code>
10725
+ </td>
10726
+ </tr>
10727
+ <tr>
10728
+ <td><code>patterns_list</code></td>
10729
+ <td>
10730
+ <code>list</code>
10731
+ </td>
10732
+ <td>
10733
+ <div class="doc-md-description">
10734
+ <p>Used in recursion. Generally can be omitted on initial call.
10735
+ Default if unspecified is the <code>url_patterns</code> attribute of the given <code>urlconf</code> module.</p>
10736
+ </div>
10737
+ </td>
10738
+ <td>
10739
+ <code>None</code>
10740
+ </td>
10741
+ </tr>
10742
+ <tr>
10743
+ <td><code>base_path</code></td>
10744
+ <td>
10745
+ <code>str</code>
10746
+ </td>
10747
+ <td>
10748
+ <div class="doc-md-description">
10749
+ <p>String to prepend to all URL patterns yielded.
10750
+ Default if unspecified is the string <code>"/"</code>.</p>
10751
+ </div>
10752
+ </td>
10753
+ <td>
10754
+ <code>&#39;/&#39;</code>
10755
+ </td>
10756
+ </tr>
10757
+ </tbody>
10758
+ </table>
10759
+
10760
+
10761
+
10762
+ <p><strong>Yields:</strong></p>
10763
+ <table>
10764
+ <thead>
10765
+ <tr>
10766
+ <th>Type</th>
10767
+ <th>Description</th>
10768
+ </tr>
10769
+ </thead>
10770
+ <tbody>
10771
+ <tr>
10772
+ <td>
10773
+ <code>str</code>
10774
+ </td>
10775
+ <td>
10776
+ <div class="doc-md-description">
10777
+ <p>Each URL pattern defined in the given urlconf and its descendants</p>
10778
+ </div>
10779
+ </td>
10780
+ </tr>
10781
+ </tbody>
10782
+ </table>
10783
+
10784
+
10785
+
10786
+ <p><strong>Examples:</strong></p>
10787
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">generator</span> <span class="o">=</span> <span class="n">get_url_patterns</span><span class="p">()</span>
10788
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">generator</span><span class="p">)</span>
10789
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="go">&#39;/&#39;</span>
10790
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">generator</span><span class="p">)</span>
10791
+ <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="go">&#39;/search/&#39;</span>
10792
+ <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">generator</span><span class="p">)</span>
10793
+ <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="go">&#39;/login/&#39;</span>
10794
+ <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">generator</span><span class="p">)</span>
10795
+ <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="go">&#39;/logout/&#39;</span>
10796
+ <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">generator</span><span class="p">)</span>
10797
+ <a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="go">&#39;/circuits/circuits/&lt;uuid:pk&gt;/terminations/swap/&#39;</span>
10798
+ </code></pre></div>
10799
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">example_plugin.urls</span> <span class="k">as</span> <span class="nn">example_urls</span>
10800
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">url_pattern</span> <span class="ow">in</span> <span class="n">get_url_patterns</span><span class="p">(</span><span class="n">example_urls</span><span class="p">,</span> <span class="n">base_path</span><span class="o">=</span><span class="s2">&quot;/plugins/example-plugin/&quot;</span><span class="p">):</span>
10801
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">url_pattern</span><span class="p">)</span>
10802
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="gp">...</span>
10803
+ <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="go">/plugins/example-plugin/</span>
10804
+ <a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="go">/plugins/example-plugin/config/</span>
10805
+ <a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="go">/plugins/example-plugin/models/&lt;uuid:pk&gt;/dynamic-groups/</span>
10806
+ <a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="go">/plugins/example-plugin/other-models/&lt;uuid:pk&gt;/dynamic-groups/</span>
10807
+ <a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="go">/plugins/example-plugin/docs/</span>
10808
+ <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="go">/plugins/example-plugin/circuits/&lt;uuid:pk&gt;/example-plugin-tab/</span>
10809
+ <a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="go">/plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-1/</span>
10810
+ <a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="go">/plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-2/</span>
10811
+ <a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="go">/plugins/example-plugin/override-target/</span>
10812
+ <a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="go">/plugins/example-plugin/^models/$</span>
10813
+ <a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="go">/plugins/example-plugin/^models/add/$</span>
10814
+ <a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="go">/plugins/example-plugin/^models/import/$</span>
10815
+ <a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="go">/plugins/example-plugin/^models/edit/$</span>
10816
+ <a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a><span class="go">/plugins/example-plugin/^models/delete/$</span>
10817
+ <a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="go">/plugins/example-plugin/^models/all-names/$</span>
10818
+ <a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a><span class="go">/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$</span>
10819
+ <a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="go">/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
10820
+ <a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="go">/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
10821
+ <a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a><span class="go">/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
10822
+ <a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="go">/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
10823
+ <a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="go">/plugins/example-plugin/^other-models/$</span>
10824
+ <a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="go">/plugins/example-plugin/^other-models/add/$</span>
10825
+ <a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="go">/plugins/example-plugin/^other-models/edit/$</span>
10826
+ <a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="go">/plugins/example-plugin/^other-models/delete/$</span>
10827
+ <a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a><span class="go">/plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/$</span>
10828
+ <a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="go">/plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
10829
+ <a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="go">/plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
10830
+ <a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="go">/plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
10831
+ <a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="go">/plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
10832
+ </code></pre></div>
10833
+
10834
+ <details class="quote">
10835
+ <summary>Source code in <code>nautobot/core/utils/lookup.py</code></summary>
10836
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-225">225</a></span>
10837
+ <span class="normal"><a href="#__codelineno-0-226">226</a></span>
10838
+ <span class="normal"><a href="#__codelineno-0-227">227</a></span>
10839
+ <span class="normal"><a href="#__codelineno-0-228">228</a></span>
10840
+ <span class="normal"><a href="#__codelineno-0-229">229</a></span>
10841
+ <span class="normal"><a href="#__codelineno-0-230">230</a></span>
10842
+ <span class="normal"><a href="#__codelineno-0-231">231</a></span>
10843
+ <span class="normal"><a href="#__codelineno-0-232">232</a></span>
10844
+ <span class="normal"><a href="#__codelineno-0-233">233</a></span>
10845
+ <span class="normal"><a href="#__codelineno-0-234">234</a></span>
10846
+ <span class="normal"><a href="#__codelineno-0-235">235</a></span>
10847
+ <span class="normal"><a href="#__codelineno-0-236">236</a></span>
10848
+ <span class="normal"><a href="#__codelineno-0-237">237</a></span>
10849
+ <span class="normal"><a href="#__codelineno-0-238">238</a></span>
10850
+ <span class="normal"><a href="#__codelineno-0-239">239</a></span>
10851
+ <span class="normal"><a href="#__codelineno-0-240">240</a></span>
10852
+ <span class="normal"><a href="#__codelineno-0-241">241</a></span>
10853
+ <span class="normal"><a href="#__codelineno-0-242">242</a></span>
10854
+ <span class="normal"><a href="#__codelineno-0-243">243</a></span>
10855
+ <span class="normal"><a href="#__codelineno-0-244">244</a></span>
10856
+ <span class="normal"><a href="#__codelineno-0-245">245</a></span>
10857
+ <span class="normal"><a href="#__codelineno-0-246">246</a></span>
10858
+ <span class="normal"><a href="#__codelineno-0-247">247</a></span>
10859
+ <span class="normal"><a href="#__codelineno-0-248">248</a></span>
10860
+ <span class="normal"><a href="#__codelineno-0-249">249</a></span>
10861
+ <span class="normal"><a href="#__codelineno-0-250">250</a></span>
10862
+ <span class="normal"><a href="#__codelineno-0-251">251</a></span>
10863
+ <span class="normal"><a href="#__codelineno-0-252">252</a></span>
10864
+ <span class="normal"><a href="#__codelineno-0-253">253</a></span>
10865
+ <span class="normal"><a href="#__codelineno-0-254">254</a></span>
10866
+ <span class="normal"><a href="#__codelineno-0-255">255</a></span>
10867
+ <span class="normal"><a href="#__codelineno-0-256">256</a></span>
10868
+ <span class="normal"><a href="#__codelineno-0-257">257</a></span>
10869
+ <span class="normal"><a href="#__codelineno-0-258">258</a></span>
10870
+ <span class="normal"><a href="#__codelineno-0-259">259</a></span>
10871
+ <span class="normal"><a href="#__codelineno-0-260">260</a></span>
10872
+ <span class="normal"><a href="#__codelineno-0-261">261</a></span>
10873
+ <span class="normal"><a href="#__codelineno-0-262">262</a></span>
10874
+ <span class="normal"><a href="#__codelineno-0-263">263</a></span>
10875
+ <span class="normal"><a href="#__codelineno-0-264">264</a></span>
10876
+ <span class="normal"><a href="#__codelineno-0-265">265</a></span>
10877
+ <span class="normal"><a href="#__codelineno-0-266">266</a></span>
10878
+ <span class="normal"><a href="#__codelineno-0-267">267</a></span>
10879
+ <span class="normal"><a href="#__codelineno-0-268">268</a></span>
10880
+ <span class="normal"><a href="#__codelineno-0-269">269</a></span>
10881
+ <span class="normal"><a href="#__codelineno-0-270">270</a></span>
10882
+ <span class="normal"><a href="#__codelineno-0-271">271</a></span>
10883
+ <span class="normal"><a href="#__codelineno-0-272">272</a></span>
10884
+ <span class="normal"><a href="#__codelineno-0-273">273</a></span>
10885
+ <span class="normal"><a href="#__codelineno-0-274">274</a></span>
10886
+ <span class="normal"><a href="#__codelineno-0-275">275</a></span>
10887
+ <span class="normal"><a href="#__codelineno-0-276">276</a></span>
10888
+ <span class="normal"><a href="#__codelineno-0-277">277</a></span>
10889
+ <span class="normal"><a href="#__codelineno-0-278">278</a></span>
10890
+ <span class="normal"><a href="#__codelineno-0-279">279</a></span>
10891
+ <span class="normal"><a href="#__codelineno-0-280">280</a></span>
10892
+ <span class="normal"><a href="#__codelineno-0-281">281</a></span>
10893
+ <span class="normal"><a href="#__codelineno-0-282">282</a></span>
10894
+ <span class="normal"><a href="#__codelineno-0-283">283</a></span>
10895
+ <span class="normal"><a href="#__codelineno-0-284">284</a></span>
10896
+ <span class="normal"><a href="#__codelineno-0-285">285</a></span>
10897
+ <span class="normal"><a href="#__codelineno-0-286">286</a></span>
10898
+ <span class="normal"><a href="#__codelineno-0-287">287</a></span>
10899
+ <span class="normal"><a href="#__codelineno-0-288">288</a></span>
10900
+ <span class="normal"><a href="#__codelineno-0-289">289</a></span>
10901
+ <span class="normal"><a href="#__codelineno-0-290">290</a></span>
10902
+ <span class="normal"><a href="#__codelineno-0-291">291</a></span>
10903
+ <span class="normal"><a href="#__codelineno-0-292">292</a></span>
10904
+ <span class="normal"><a href="#__codelineno-0-293">293</a></span>
10905
+ <span class="normal"><a href="#__codelineno-0-294">294</a></span>
10906
+ <span class="normal"><a href="#__codelineno-0-295">295</a></span>
10907
+ <span class="normal"><a href="#__codelineno-0-296">296</a></span>
10908
+ <span class="normal"><a href="#__codelineno-0-297">297</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-225" name="__codelineno-0-225"></a><span class="k">def</span> <span class="nf">get_url_patterns</span><span class="p">(</span><span class="n">urlconf</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">patterns_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">base_path</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">):</span>
10909
+ <a id="__codelineno-0-226" name="__codelineno-0-226"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
10910
+ <a id="__codelineno-0-227" name="__codelineno-0-227"></a><span class="sd"> Recursively yield a list of registered URL patterns.</span>
10911
+ <a id="__codelineno-0-228" name="__codelineno-0-228"></a>
10912
+ <a id="__codelineno-0-229" name="__codelineno-0-229"></a><span class="sd"> Args:</span>
10913
+ <a id="__codelineno-0-230" name="__codelineno-0-230"></a><span class="sd"> urlconf (URLConf): Python module such as `nautobot.core.urls`.</span>
10914
+ <a id="__codelineno-0-231" name="__codelineno-0-231"></a><span class="sd"> Default if unspecified is the value of `settings.ROOT_URLCONF`, i.e. the `nautobot.core.urls` module.</span>
10915
+ <a id="__codelineno-0-232" name="__codelineno-0-232"></a><span class="sd"> patterns_list (list): Used in recursion. Generally can be omitted on initial call.</span>
10916
+ <a id="__codelineno-0-233" name="__codelineno-0-233"></a><span class="sd"> Default if unspecified is the `url_patterns` attribute of the given `urlconf` module.</span>
10917
+ <a id="__codelineno-0-234" name="__codelineno-0-234"></a><span class="sd"> base_path (str): String to prepend to all URL patterns yielded.</span>
10918
+ <a id="__codelineno-0-235" name="__codelineno-0-235"></a><span class="sd"> Default if unspecified is the string `&quot;/&quot;`.</span>
10919
+ <a id="__codelineno-0-236" name="__codelineno-0-236"></a>
10920
+ <a id="__codelineno-0-237" name="__codelineno-0-237"></a><span class="sd"> Yields:</span>
10921
+ <a id="__codelineno-0-238" name="__codelineno-0-238"></a><span class="sd"> (str): Each URL pattern defined in the given urlconf and its descendants</span>
10922
+ <a id="__codelineno-0-239" name="__codelineno-0-239"></a>
10923
+ <a id="__codelineno-0-240" name="__codelineno-0-240"></a><span class="sd"> Examples:</span>
10924
+ <a id="__codelineno-0-241" name="__codelineno-0-241"></a><span class="sd"> &gt;&gt;&gt; generator = get_url_patterns()</span>
10925
+ <a id="__codelineno-0-242" name="__codelineno-0-242"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
10926
+ <a id="__codelineno-0-243" name="__codelineno-0-243"></a><span class="sd"> &#39;/&#39;</span>
10927
+ <a id="__codelineno-0-244" name="__codelineno-0-244"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
10928
+ <a id="__codelineno-0-245" name="__codelineno-0-245"></a><span class="sd"> &#39;/search/&#39;</span>
10929
+ <a id="__codelineno-0-246" name="__codelineno-0-246"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
10930
+ <a id="__codelineno-0-247" name="__codelineno-0-247"></a><span class="sd"> &#39;/login/&#39;</span>
10931
+ <a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
10932
+ <a id="__codelineno-0-249" name="__codelineno-0-249"></a><span class="sd"> &#39;/logout/&#39;</span>
10933
+ <a id="__codelineno-0-250" name="__codelineno-0-250"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
10934
+ <a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="sd"> &#39;/circuits/circuits/&lt;uuid:pk&gt;/terminations/swap/&#39;</span>
10935
+ <a id="__codelineno-0-252" name="__codelineno-0-252"></a>
10936
+ <a id="__codelineno-0-253" name="__codelineno-0-253"></a><span class="sd"> &gt;&gt;&gt; import example_plugin.urls as example_urls</span>
10937
+ <a id="__codelineno-0-254" name="__codelineno-0-254"></a><span class="sd"> &gt;&gt;&gt; for url_pattern in get_url_patterns(example_urls, base_path=&quot;/plugins/example-plugin/&quot;):</span>
10938
+ <a id="__codelineno-0-255" name="__codelineno-0-255"></a><span class="sd"> ... print(url_pattern)</span>
10939
+ <a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="sd"> ...</span>
10940
+ <a id="__codelineno-0-257" name="__codelineno-0-257"></a><span class="sd"> /plugins/example-plugin/</span>
10941
+ <a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="sd"> /plugins/example-plugin/config/</span>
10942
+ <a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="sd"> /plugins/example-plugin/models/&lt;uuid:pk&gt;/dynamic-groups/</span>
10943
+ <a id="__codelineno-0-260" name="__codelineno-0-260"></a><span class="sd"> /plugins/example-plugin/other-models/&lt;uuid:pk&gt;/dynamic-groups/</span>
10944
+ <a id="__codelineno-0-261" name="__codelineno-0-261"></a><span class="sd"> /plugins/example-plugin/docs/</span>
10945
+ <a id="__codelineno-0-262" name="__codelineno-0-262"></a><span class="sd"> /plugins/example-plugin/circuits/&lt;uuid:pk&gt;/example-plugin-tab/</span>
10946
+ <a id="__codelineno-0-263" name="__codelineno-0-263"></a><span class="sd"> /plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-1/</span>
10947
+ <a id="__codelineno-0-264" name="__codelineno-0-264"></a><span class="sd"> /plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-2/</span>
10948
+ <a id="__codelineno-0-265" name="__codelineno-0-265"></a><span class="sd"> /plugins/example-plugin/override-target/</span>
10949
+ <a id="__codelineno-0-266" name="__codelineno-0-266"></a><span class="sd"> /plugins/example-plugin/^models/$</span>
10950
+ <a id="__codelineno-0-267" name="__codelineno-0-267"></a><span class="sd"> /plugins/example-plugin/^models/add/$</span>
10951
+ <a id="__codelineno-0-268" name="__codelineno-0-268"></a><span class="sd"> /plugins/example-plugin/^models/import/$</span>
10952
+ <a id="__codelineno-0-269" name="__codelineno-0-269"></a><span class="sd"> /plugins/example-plugin/^models/edit/$</span>
10953
+ <a id="__codelineno-0-270" name="__codelineno-0-270"></a><span class="sd"> /plugins/example-plugin/^models/delete/$</span>
10954
+ <a id="__codelineno-0-271" name="__codelineno-0-271"></a><span class="sd"> /plugins/example-plugin/^models/all-names/$</span>
10955
+ <a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$</span>
10956
+ <a id="__codelineno-0-273" name="__codelineno-0-273"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
10957
+ <a id="__codelineno-0-274" name="__codelineno-0-274"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
10958
+ <a id="__codelineno-0-275" name="__codelineno-0-275"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
10959
+ <a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
10960
+ <a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="sd"> /plugins/example-plugin/^other-models/$</span>
10961
+ <a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="sd"> /plugins/example-plugin/^other-models/add/$</span>
10962
+ <a id="__codelineno-0-279" name="__codelineno-0-279"></a><span class="sd"> /plugins/example-plugin/^other-models/edit/$</span>
10963
+ <a id="__codelineno-0-280" name="__codelineno-0-280"></a><span class="sd"> /plugins/example-plugin/^other-models/delete/$</span>
10964
+ <a id="__codelineno-0-281" name="__codelineno-0-281"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/$</span>
10965
+ <a id="__codelineno-0-282" name="__codelineno-0-282"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
10966
+ <a id="__codelineno-0-283" name="__codelineno-0-283"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
10967
+ <a id="__codelineno-0-284" name="__codelineno-0-284"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
10968
+ <a id="__codelineno-0-285" name="__codelineno-0-285"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
10969
+ <a id="__codelineno-0-286" name="__codelineno-0-286"></a><span class="sd"> &quot;&quot;&quot;</span>
10970
+ <a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="k">if</span> <span class="n">urlconf</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
10971
+ <a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="n">urlconf</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">ROOT_URLCONF</span>
10972
+ <a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="k">if</span> <span class="n">patterns_list</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
10973
+ <a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="n">patterns_list</span> <span class="o">=</span> <span class="n">get_resolver</span><span class="p">(</span><span class="n">urlconf</span><span class="p">)</span><span class="o">.</span><span class="n">url_patterns</span>
10974
+ <a id="__codelineno-0-291" name="__codelineno-0-291"></a>
10975
+ <a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">patterns_list</span><span class="p">:</span>
10976
+ <a id="__codelineno-0-293" name="__codelineno-0-293"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">URLPattern</span><span class="p">):</span>
10977
+ <a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="k">yield</span> <span class="n">base_path</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">pattern</span><span class="p">)</span>
10978
+ <a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">URLResolver</span><span class="p">):</span>
10979
+ <a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="c1"># Recurse!</span>
10980
+ <a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="k">yield from</span> <span class="n">get_url_patterns</span><span class="p">(</span><span class="n">urlconf</span><span class="p">,</span> <span class="n">item</span><span class="o">.</span><span class="n">url_patterns</span><span class="p">,</span> <span class="n">base_path</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">pattern</span><span class="p">))</span>
10515
10981
  </code></pre></div></td></tr></table></div>
10516
10982
  </details>
10517
10983
  </div>