nautobot 1.6.31__py3-none-any.whl → 1.6.32__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 (235) hide show
  1. nautobot/circuits/forms.py +6 -0
  2. nautobot/circuits/views.py +1 -0
  3. nautobot/core/graphql/schema.py +3 -1
  4. nautobot/core/graphql/types.py +10 -0
  5. nautobot/core/models/__init__.py +2 -0
  6. nautobot/core/templates/generic/object_list.html +1 -1
  7. nautobot/core/tests/test_views.py +73 -0
  8. nautobot/core/urls.py +3 -3
  9. nautobot/core/views/__init__.py +21 -0
  10. nautobot/dcim/forms.py +29 -0
  11. nautobot/dcim/models/device_component_templates.py +4 -0
  12. nautobot/dcim/models/device_components.py +4 -0
  13. nautobot/dcim/models/devices.py +2 -0
  14. nautobot/dcim/views.py +4 -0
  15. nautobot/extras/forms/forms.py +12 -0
  16. nautobot/extras/models/customfields.py +2 -0
  17. nautobot/extras/models/datasources.py +2 -0
  18. nautobot/extras/models/groups.py +8 -0
  19. nautobot/extras/models/jobs.py +10 -0
  20. nautobot/extras/models/models.py +2 -0
  21. nautobot/extras/models/secrets.py +8 -2
  22. nautobot/extras/secrets/__init__.py +14 -0
  23. nautobot/extras/tests/test_models.py +26 -0
  24. nautobot/extras/views.py +1 -0
  25. nautobot/ipam/filters.py +1 -1
  26. nautobot/ipam/forms.py +6 -0
  27. nautobot/ipam/models.py +8 -0
  28. nautobot/ipam/views.py +1 -0
  29. nautobot/project-static/docs/404.html +62 -0
  30. nautobot/project-static/docs/additional-features/caching.html +62 -0
  31. nautobot/project-static/docs/additional-features/change-logging.html +62 -0
  32. nautobot/project-static/docs/additional-features/config-contexts.html +62 -0
  33. nautobot/project-static/docs/additional-features/graphql.html +62 -0
  34. nautobot/project-static/docs/additional-features/healthcheck.html +62 -0
  35. nautobot/project-static/docs/additional-features/job-scheduling-and-approvals.html +63 -1
  36. nautobot/project-static/docs/additional-features/jobs.html +62 -0
  37. nautobot/project-static/docs/additional-features/napalm.html +62 -0
  38. nautobot/project-static/docs/additional-features/prometheus-metrics.html +62 -0
  39. nautobot/project-static/docs/additional-features/template-filters.html +62 -0
  40. nautobot/project-static/docs/administration/celery-queues.html +63 -1
  41. nautobot/project-static/docs/administration/nautobot-server.html +62 -0
  42. nautobot/project-static/docs/administration/nautobot-shell.html +62 -0
  43. nautobot/project-static/docs/administration/permissions.html +62 -0
  44. nautobot/project-static/docs/administration/replicating-nautobot.html +62 -0
  45. nautobot/project-static/docs/administration/request-profiling.html +62 -0
  46. nautobot/project-static/docs/administration/security/index.html +4407 -0
  47. nautobot/project-static/docs/administration/security/notices.html +4797 -0
  48. nautobot/project-static/docs/apps/index.html +62 -0
  49. nautobot/project-static/docs/apps/nautobot-apps.html +62 -0
  50. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +62 -0
  51. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +62 -0
  52. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +62 -0
  53. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +62 -0
  54. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +62 -0
  55. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +62 -0
  56. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +83 -21
  57. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +67 -1
  58. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +140 -52
  59. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +62 -0
  60. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3203 -3101
  61. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +62 -0
  62. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +62 -0
  63. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +210 -148
  64. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +62 -0
  65. nautobot/project-static/docs/configuration/authentication/ldap.html +62 -0
  66. nautobot/project-static/docs/configuration/authentication/remote.html +62 -0
  67. nautobot/project-static/docs/configuration/authentication/sso.html +62 -0
  68. nautobot/project-static/docs/configuration/index.html +62 -0
  69. nautobot/project-static/docs/configuration/optional-settings.html +67 -5
  70. nautobot/project-static/docs/configuration/required-settings.html +62 -0
  71. nautobot/project-static/docs/core-functionality/circuits.html +62 -0
  72. nautobot/project-static/docs/core-functionality/device-types.html +62 -0
  73. nautobot/project-static/docs/core-functionality/devices.html +62 -0
  74. nautobot/project-static/docs/core-functionality/ipam.html +62 -0
  75. nautobot/project-static/docs/core-functionality/power.html +62 -0
  76. nautobot/project-static/docs/core-functionality/secrets.html +62 -0
  77. nautobot/project-static/docs/core-functionality/services.html +62 -0
  78. nautobot/project-static/docs/core-functionality/sites-and-racks.html +62 -0
  79. nautobot/project-static/docs/core-functionality/tenancy.html +62 -0
  80. nautobot/project-static/docs/core-functionality/virtualization.html +62 -0
  81. nautobot/project-static/docs/core-functionality/vlans.html +62 -0
  82. nautobot/project-static/docs/development/application-registry.html +62 -0
  83. nautobot/project-static/docs/development/best-practices.html +62 -0
  84. nautobot/project-static/docs/development/docker-compose-advanced-use-cases.html +62 -0
  85. nautobot/project-static/docs/development/extending-models.html +62 -0
  86. nautobot/project-static/docs/development/generic-views.html +62 -0
  87. nautobot/project-static/docs/development/getting-started.html +63 -1
  88. nautobot/project-static/docs/development/homepage.html +62 -0
  89. nautobot/project-static/docs/development/index.html +62 -0
  90. nautobot/project-static/docs/development/navigation-menu.html +62 -0
  91. nautobot/project-static/docs/development/release-checklist.html +62 -0
  92. nautobot/project-static/docs/development/style-guide.html +62 -0
  93. nautobot/project-static/docs/development/templates.html +62 -0
  94. nautobot/project-static/docs/development/testing.html +62 -0
  95. nautobot/project-static/docs/development/user-preferences.html +62 -0
  96. nautobot/project-static/docs/docker/index.html +62 -0
  97. nautobot/project-static/docs/index.html +62 -0
  98. nautobot/project-static/docs/installation/centos.html +62 -0
  99. nautobot/project-static/docs/installation/external-authentication.html +62 -0
  100. nautobot/project-static/docs/installation/http-server.html +62 -0
  101. nautobot/project-static/docs/installation/index.html +62 -0
  102. nautobot/project-static/docs/installation/migrating-from-netbox.html +62 -0
  103. nautobot/project-static/docs/installation/migrating-from-postgresql.html +62 -0
  104. nautobot/project-static/docs/installation/nautobot.html +62 -0
  105. nautobot/project-static/docs/installation/selinux-troubleshooting.html +62 -0
  106. nautobot/project-static/docs/installation/services.html +62 -0
  107. nautobot/project-static/docs/installation/ubuntu.html +62 -0
  108. nautobot/project-static/docs/installation/upgrading.html +62 -0
  109. nautobot/project-static/docs/models/circuits/circuit.html +62 -0
  110. nautobot/project-static/docs/models/circuits/circuittermination.html +62 -0
  111. nautobot/project-static/docs/models/circuits/circuittype.html +62 -0
  112. nautobot/project-static/docs/models/circuits/provider.html +62 -0
  113. nautobot/project-static/docs/models/circuits/providernetwork.html +62 -0
  114. nautobot/project-static/docs/models/dcim/cable.html +62 -0
  115. nautobot/project-static/docs/models/dcim/consoleport.html +62 -0
  116. nautobot/project-static/docs/models/dcim/consoleporttemplate.html +62 -0
  117. nautobot/project-static/docs/models/dcim/consoleserverport.html +62 -0
  118. nautobot/project-static/docs/models/dcim/consoleserverporttemplate.html +62 -0
  119. nautobot/project-static/docs/models/dcim/device.html +62 -0
  120. nautobot/project-static/docs/models/dcim/devicebay.html +62 -0
  121. nautobot/project-static/docs/models/dcim/devicebaytemplate.html +62 -0
  122. nautobot/project-static/docs/models/dcim/deviceredundancygroup.html +62 -0
  123. nautobot/project-static/docs/models/dcim/devicerole.html +62 -0
  124. nautobot/project-static/docs/models/dcim/devicetype.html +62 -0
  125. nautobot/project-static/docs/models/dcim/frontport.html +62 -0
  126. nautobot/project-static/docs/models/dcim/frontporttemplate.html +62 -0
  127. nautobot/project-static/docs/models/dcim/interface.html +62 -0
  128. nautobot/project-static/docs/models/dcim/interfaceredundancygroup.html +62 -0
  129. nautobot/project-static/docs/models/dcim/interfacetemplate.html +62 -0
  130. nautobot/project-static/docs/models/dcim/inventoryitem.html +62 -0
  131. nautobot/project-static/docs/models/dcim/location.html +62 -0
  132. nautobot/project-static/docs/models/dcim/locationtype.html +62 -0
  133. nautobot/project-static/docs/models/dcim/manufacturer.html +62 -0
  134. nautobot/project-static/docs/models/dcim/platform.html +62 -0
  135. nautobot/project-static/docs/models/dcim/powerfeed.html +62 -0
  136. nautobot/project-static/docs/models/dcim/poweroutlet.html +62 -0
  137. nautobot/project-static/docs/models/dcim/poweroutlettemplate.html +62 -0
  138. nautobot/project-static/docs/models/dcim/powerpanel.html +62 -0
  139. nautobot/project-static/docs/models/dcim/powerport.html +62 -0
  140. nautobot/project-static/docs/models/dcim/powerporttemplate.html +62 -0
  141. nautobot/project-static/docs/models/dcim/rack.html +62 -0
  142. nautobot/project-static/docs/models/dcim/rackgroup.html +62 -0
  143. nautobot/project-static/docs/models/dcim/rackreservation.html +62 -0
  144. nautobot/project-static/docs/models/dcim/rackrole.html +62 -0
  145. nautobot/project-static/docs/models/dcim/rearport.html +62 -0
  146. nautobot/project-static/docs/models/dcim/rearporttemplate.html +62 -0
  147. nautobot/project-static/docs/models/dcim/region.html +62 -0
  148. nautobot/project-static/docs/models/dcim/site.html +62 -0
  149. nautobot/project-static/docs/models/dcim/virtualchassis.html +62 -0
  150. nautobot/project-static/docs/models/extras/computedfield.html +63 -1
  151. nautobot/project-static/docs/models/extras/configcontext.html +62 -0
  152. nautobot/project-static/docs/models/extras/configcontextschema.html +62 -0
  153. nautobot/project-static/docs/models/extras/customfield.html +62 -0
  154. nautobot/project-static/docs/models/extras/customlink.html +63 -1
  155. nautobot/project-static/docs/models/extras/dynamicgroup.html +62 -0
  156. nautobot/project-static/docs/models/extras/exporttemplate.html +62 -0
  157. nautobot/project-static/docs/models/extras/gitrepository.html +62 -0
  158. nautobot/project-static/docs/models/extras/graphqlquery.html +62 -0
  159. nautobot/project-static/docs/models/extras/imageattachment.html +62 -0
  160. nautobot/project-static/docs/models/extras/job.html +62 -0
  161. nautobot/project-static/docs/models/extras/jobbutton.html +63 -1
  162. nautobot/project-static/docs/models/extras/jobhook.html +62 -0
  163. nautobot/project-static/docs/models/extras/joblogentry.html +62 -0
  164. nautobot/project-static/docs/models/extras/jobresult.html +62 -0
  165. nautobot/project-static/docs/models/extras/note.html +62 -0
  166. nautobot/project-static/docs/models/extras/relationship.html +62 -0
  167. nautobot/project-static/docs/models/extras/secret.html +62 -0
  168. nautobot/project-static/docs/models/extras/secretsgroup.html +62 -0
  169. nautobot/project-static/docs/models/extras/status.html +62 -0
  170. nautobot/project-static/docs/models/extras/tag.html +62 -0
  171. nautobot/project-static/docs/models/extras/webhook.html +62 -0
  172. nautobot/project-static/docs/models/ipam/aggregate.html +62 -0
  173. nautobot/project-static/docs/models/ipam/ipaddress.html +62 -0
  174. nautobot/project-static/docs/models/ipam/prefix.html +62 -0
  175. nautobot/project-static/docs/models/ipam/rir.html +62 -0
  176. nautobot/project-static/docs/models/ipam/role.html +62 -0
  177. nautobot/project-static/docs/models/ipam/routetarget.html +62 -0
  178. nautobot/project-static/docs/models/ipam/service.html +62 -0
  179. nautobot/project-static/docs/models/ipam/vlan.html +62 -0
  180. nautobot/project-static/docs/models/ipam/vlangroup.html +62 -0
  181. nautobot/project-static/docs/models/ipam/vrf.html +62 -0
  182. nautobot/project-static/docs/models/tenancy/tenant.html +62 -0
  183. nautobot/project-static/docs/models/tenancy/tenantgroup.html +62 -0
  184. nautobot/project-static/docs/models/users/objectpermission.html +62 -0
  185. nautobot/project-static/docs/models/users/token.html +62 -0
  186. nautobot/project-static/docs/models/virtualization/cluster.html +62 -0
  187. nautobot/project-static/docs/models/virtualization/clustergroup.html +62 -0
  188. nautobot/project-static/docs/models/virtualization/clustertype.html +62 -0
  189. nautobot/project-static/docs/models/virtualization/virtualmachine.html +62 -0
  190. nautobot/project-static/docs/models/virtualization/vminterface.html +62 -0
  191. nautobot/project-static/docs/plugins/development.html +63 -1
  192. nautobot/project-static/docs/plugins/index.html +62 -0
  193. nautobot/project-static/docs/plugins/porting-from-netbox.html +62 -0
  194. nautobot/project-static/docs/release-notes/index.html +62 -0
  195. nautobot/project-static/docs/release-notes/version-1.0.html +62 -0
  196. nautobot/project-static/docs/release-notes/version-1.1.html +64 -2
  197. nautobot/project-static/docs/release-notes/version-1.2.html +63 -1
  198. nautobot/project-static/docs/release-notes/version-1.3.html +62 -0
  199. nautobot/project-static/docs/release-notes/version-1.4.html +62 -0
  200. nautobot/project-static/docs/release-notes/version-1.5.html +62 -0
  201. nautobot/project-static/docs/release-notes/version-1.6.html +354 -188
  202. nautobot/project-static/docs/rest-api/authentication.html +62 -0
  203. nautobot/project-static/docs/rest-api/filtering.html +62 -0
  204. nautobot/project-static/docs/rest-api/overview.html +62 -0
  205. nautobot/project-static/docs/search/search_index.json +1 -1
  206. nautobot/project-static/docs/sitemap.xml +197 -187
  207. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  208. nautobot/project-static/docs/user-guides/custom-fields.html +62 -0
  209. nautobot/project-static/docs/user-guides/getting-started/creating-devices.html +63 -1
  210. nautobot/project-static/docs/user-guides/getting-started/index.html +62 -0
  211. nautobot/project-static/docs/user-guides/getting-started/interfaces.html +62 -0
  212. nautobot/project-static/docs/user-guides/getting-started/ipam.html +62 -0
  213. nautobot/project-static/docs/user-guides/getting-started/platforms.html +62 -0
  214. nautobot/project-static/docs/user-guides/getting-started/regions.html +62 -0
  215. nautobot/project-static/docs/user-guides/getting-started/search-bar.html +62 -0
  216. nautobot/project-static/docs/user-guides/getting-started/tenants.html +62 -0
  217. nautobot/project-static/docs/user-guides/getting-started/vlans-and-vlan-groups.html +63 -1
  218. nautobot/project-static/docs/user-guides/git-data-source.html +62 -0
  219. nautobot/project-static/docs/user-guides/graphql.html +62 -0
  220. nautobot/project-static/docs/user-guides/relationships.html +62 -0
  221. nautobot/project-static/docs/user-guides/s3-django-storage.html +62 -0
  222. nautobot/tenancy/forms.py +10 -0
  223. nautobot/tenancy/views.py +1 -0
  224. nautobot/users/models.py +4 -0
  225. nautobot/utilities/testing/views.py +17 -1
  226. nautobot/utilities/tests/test_jinja_filters.py +26 -2
  227. nautobot/utilities/utils.py +14 -0
  228. nautobot/virtualization/forms.py +12 -0
  229. nautobot/virtualization/views.py +2 -0
  230. {nautobot-1.6.31.dist-info → nautobot-1.6.32.dist-info}/METADATA +1 -1
  231. {nautobot-1.6.31.dist-info → nautobot-1.6.32.dist-info}/RECORD +235 -233
  232. {nautobot-1.6.31.dist-info → nautobot-1.6.32.dist-info}/LICENSE.txt +0 -0
  233. {nautobot-1.6.31.dist-info → nautobot-1.6.32.dist-info}/NOTICE +0 -0
  234. {nautobot-1.6.31.dist-info → nautobot-1.6.32.dist-info}/WHEEL +0 -0
  235. {nautobot-1.6.31.dist-info → nautobot-1.6.32.dist-info}/entry_points.txt +0 -0
@@ -869,6 +869,68 @@
869
869
 
870
870
 
871
871
 
872
+
873
+
874
+
875
+
876
+
877
+
878
+ <li class="md-nav__item md-nav__item--nested">
879
+
880
+
881
+
882
+
883
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_7" >
884
+
885
+
886
+
887
+ <label class="md-nav__link" for="__nav_2_5_7" id="__nav_2_5_7_label" tabindex="0">
888
+ Security
889
+ <span class="md-nav__icon md-icon"></span>
890
+ </label>
891
+
892
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_7_label" aria-expanded="false">
893
+ <label class="md-nav__title" for="__nav_2_5_7">
894
+ <span class="md-nav__icon md-icon"></span>
895
+ Security
896
+ </label>
897
+ <ul class="md-nav__list" data-md-scrollfix>
898
+
899
+
900
+
901
+
902
+
903
+
904
+ <li class="md-nav__item">
905
+ <a href="../../../administration/security/index.html" class="md-nav__link">
906
+ Nautobot Security
907
+ </a>
908
+ </li>
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+ <li class="md-nav__item">
919
+ <a href="../../../administration/security/notices.html" class="md-nav__link">
920
+ Notices
921
+ </a>
922
+ </li>
923
+
924
+
925
+
926
+
927
+ </ul>
928
+ </nav>
929
+ </li>
930
+
931
+
932
+
933
+
872
934
  </ul>
873
935
  </nav>
874
936
  </li>
@@ -4117,21 +4179,7 @@
4117
4179
 
4118
4180
  <details class="quote">
4119
4181
  <summary>Source code in <code>nautobot/utilities/utils.py</code></summary>
4120
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-771">771</a></span>
4121
- <span class="normal"><a href="#__codelineno-0-772">772</a></span>
4122
- <span class="normal"><a href="#__codelineno-0-773">773</a></span>
4123
- <span class="normal"><a href="#__codelineno-0-774">774</a></span>
4124
- <span class="normal"><a href="#__codelineno-0-775">775</a></span>
4125
- <span class="normal"><a href="#__codelineno-0-776">776</a></span>
4126
- <span class="normal"><a href="#__codelineno-0-777">777</a></span>
4127
- <span class="normal"><a href="#__codelineno-0-778">778</a></span>
4128
- <span class="normal"><a href="#__codelineno-0-779">779</a></span>
4129
- <span class="normal"><a href="#__codelineno-0-780">780</a></span>
4130
- <span class="normal"><a href="#__codelineno-0-781">781</a></span>
4131
- <span class="normal"><a href="#__codelineno-0-782">782</a></span>
4132
- <span class="normal"><a href="#__codelineno-0-783">783</a></span>
4133
- <span class="normal"><a href="#__codelineno-0-784">784</a></span>
4134
- <span class="normal"><a href="#__codelineno-0-785">785</a></span>
4182
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-785">785</a></span>
4135
4183
  <span class="normal"><a href="#__codelineno-0-786">786</a></span>
4136
4184
  <span class="normal"><a href="#__codelineno-0-787">787</a></span>
4137
4185
  <span class="normal"><a href="#__codelineno-0-788">788</a></span>
@@ -4161,51 +4209,65 @@
4161
4209
  <span class="normal"><a href="#__codelineno-0-812">812</a></span>
4162
4210
  <span class="normal"><a href="#__codelineno-0-813">813</a></span>
4163
4211
  <span class="normal"><a href="#__codelineno-0-814">814</a></span>
4164
- <span class="normal"><a href="#__codelineno-0-815">815</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-771" name="__codelineno-0-771"></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>
4165
- <a id="__codelineno-0-772" name="__codelineno-0-772"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4166
- <a id="__codelineno-0-773" name="__codelineno-0-773"></a><span class="sd"> Given a URL pattern, construct a URL string that would match that pattern.</span>
4167
- <a id="__codelineno-0-774" name="__codelineno-0-774"></a>
4168
- <a id="__codelineno-0-775" name="__codelineno-0-775"></a><span class="sd"> Examples:</span>
4169
- <a id="__codelineno-0-776" name="__codelineno-0-776"></a><span class="sd"> &gt;&gt;&gt; get_url_for_url_pattern(&quot;/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$&quot;)</span>
4170
- <a id="__codelineno-0-777" name="__codelineno-0-777"></a><span class="sd"> &#39;/plugins/example-plugin/models/00000000-0000-0000-0000-000000000000/&#39;</span>
4171
- <a id="__codelineno-0-778" name="__codelineno-0-778"></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>
4172
- <a id="__codelineno-0-779" name="__codelineno-0-779"></a><span class="sd"> &#39;/circuits/circuit-terminations/00000000-0000-0000-0000-000000000000/connect/string/&#39;</span>
4173
- <a id="__codelineno-0-780" name="__codelineno-0-780"></a><span class="sd"> &quot;&quot;&quot;</span>
4174
- <a id="__codelineno-0-781" name="__codelineno-0-781"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">url_pattern</span>
4175
- <a id="__codelineno-0-782" name="__codelineno-0-782"></a> <span class="c1"># Fixup tokens in path-style &quot;classic&quot; view URLs:</span>
4176
- <a id="__codelineno-0-783" name="__codelineno-0-783"></a> <span class="c1"># &quot;/admin/users/user/&lt;id&gt;/password/&quot;</span>
4177
- <a id="__codelineno-0-784" name="__codelineno-0-784"></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>
4178
- <a id="__codelineno-0-785" name="__codelineno-0-785"></a> <span class="c1"># &quot;/silk/request/&lt;uuid:request_id&gt;/profile/&lt;int:profile_id&gt;/&quot;</span>
4179
- <a id="__codelineno-0-786" name="__codelineno-0-786"></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>
4180
- <a id="__codelineno-0-787" name="__codelineno-0-787"></a> <span class="c1"># &quot;/admin/admin/logentry/&lt;path:object_id&gt;/&quot;</span>
4181
- <a id="__codelineno-0-788" name="__codelineno-0-788"></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>
4182
- <a id="__codelineno-0-789" name="__codelineno-0-789"></a> <span class="c1"># &quot;/dcim/sites/&lt;slug:slug&gt;/&quot;</span>
4183
- <a id="__codelineno-0-790" name="__codelineno-0-790"></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>
4184
- <a id="__codelineno-0-791" name="__codelineno-0-791"></a> <span class="c1"># &quot;/apps/installed-apps/&lt;str:app&gt;/&quot;</span>
4185
- <a id="__codelineno-0-792" name="__codelineno-0-792"></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>
4186
- <a id="__codelineno-0-793" name="__codelineno-0-793"></a> <span class="c1"># &quot;/dcim/locations/&lt;uuid:pk&gt;/&quot;</span>
4187
- <a id="__codelineno-0-794" name="__codelineno-0-794"></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>
4188
- <a id="__codelineno-0-795" name="__codelineno-0-795"></a> <span class="c1"># tokens in regexp-style router urls, including REST and NautobotUIViewSet:</span>
4189
- <a id="__codelineno-0-796" name="__codelineno-0-796"></a> <span class="c1"># &quot;/extras/^external-integrations/(?P&lt;pk&gt;[^/.]+)/$&quot;</span>
4190
- <a id="__codelineno-0-797" name="__codelineno-0-797"></a> <span class="c1"># &quot;/api/virtualization/^interfaces/(?P&lt;pk&gt;[^/.]+)/$&quot;</span>
4191
- <a id="__codelineno-0-798" name="__codelineno-0-798"></a> <span class="c1"># &quot;/api/virtualization/^interfaces/(?P&lt;pk&gt;[^/.]+)\\.(?P&lt;format&gt;[a-z0-9]+)/?$&quot;</span>
4192
- <a id="__codelineno-0-799" name="__codelineno-0-799"></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>
4193
- <a id="__codelineno-0-800" name="__codelineno-0-800"></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>
4194
- <a id="__codelineno-0-801" name="__codelineno-0-801"></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>
4195
- <a id="__codelineno-0-802" name="__codelineno-0-802"></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>
4196
- <a id="__codelineno-0-803" name="__codelineno-0-803"></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>
4197
- <a id="__codelineno-0-804" name="__codelineno-0-804"></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>
4198
- <a id="__codelineno-0-805" name="__codelineno-0-805"></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>
4199
- <a id="__codelineno-0-806" name="__codelineno-0-806"></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>
4200
- <a id="__codelineno-0-807" name="__codelineno-0-807"></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>
4201
- <a id="__codelineno-0-808" name="__codelineno-0-808"></a> <span class="c1"># Fallthru for generic URL parameters</span>
4202
- <a id="__codelineno-0-809" name="__codelineno-0-809"></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>
4203
- <a id="__codelineno-0-810" name="__codelineno-0-810"></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>
4204
- <a id="__codelineno-0-811" name="__codelineno-0-811"></a>
4205
- <a id="__codelineno-0-812" name="__codelineno-0-812"></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>
4206
- <a id="__codelineno-0-813" name="__codelineno-0-813"></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>
4207
- <a id="__codelineno-0-814" name="__codelineno-0-814"></a>
4208
- <a id="__codelineno-0-815" name="__codelineno-0-815"></a> <span class="k">return</span> <span class="n">url</span>
4212
+ <span class="normal"><a href="#__codelineno-0-815">815</a></span>
4213
+ <span class="normal"><a href="#__codelineno-0-816">816</a></span>
4214
+ <span class="normal"><a href="#__codelineno-0-817">817</a></span>
4215
+ <span class="normal"><a href="#__codelineno-0-818">818</a></span>
4216
+ <span class="normal"><a href="#__codelineno-0-819">819</a></span>
4217
+ <span class="normal"><a href="#__codelineno-0-820">820</a></span>
4218
+ <span class="normal"><a href="#__codelineno-0-821">821</a></span>
4219
+ <span class="normal"><a href="#__codelineno-0-822">822</a></span>
4220
+ <span class="normal"><a href="#__codelineno-0-823">823</a></span>
4221
+ <span class="normal"><a href="#__codelineno-0-824">824</a></span>
4222
+ <span class="normal"><a href="#__codelineno-0-825">825</a></span>
4223
+ <span class="normal"><a href="#__codelineno-0-826">826</a></span>
4224
+ <span class="normal"><a href="#__codelineno-0-827">827</a></span>
4225
+ <span class="normal"><a href="#__codelineno-0-828">828</a></span>
4226
+ <span class="normal"><a href="#__codelineno-0-829">829</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-785" name="__codelineno-0-785"></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>
4227
+ <a id="__codelineno-0-786" name="__codelineno-0-786"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4228
+ <a id="__codelineno-0-787" name="__codelineno-0-787"></a><span class="sd"> Given a URL pattern, construct a URL string that would match that pattern.</span>
4229
+ <a id="__codelineno-0-788" name="__codelineno-0-788"></a>
4230
+ <a id="__codelineno-0-789" name="__codelineno-0-789"></a><span class="sd"> Examples:</span>
4231
+ <a id="__codelineno-0-790" name="__codelineno-0-790"></a><span class="sd"> &gt;&gt;&gt; get_url_for_url_pattern(&quot;/plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$&quot;)</span>
4232
+ <a id="__codelineno-0-791" name="__codelineno-0-791"></a><span class="sd"> &#39;/plugins/example-plugin/models/00000000-0000-0000-0000-000000000000/&#39;</span>
4233
+ <a id="__codelineno-0-792" name="__codelineno-0-792"></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>
4234
+ <a id="__codelineno-0-793" name="__codelineno-0-793"></a><span class="sd"> &#39;/circuits/circuit-terminations/00000000-0000-0000-0000-000000000000/connect/string/&#39;</span>
4235
+ <a id="__codelineno-0-794" name="__codelineno-0-794"></a><span class="sd"> &quot;&quot;&quot;</span>
4236
+ <a id="__codelineno-0-795" name="__codelineno-0-795"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">url_pattern</span>
4237
+ <a id="__codelineno-0-796" name="__codelineno-0-796"></a> <span class="c1"># Fixup tokens in path-style &quot;classic&quot; view URLs:</span>
4238
+ <a id="__codelineno-0-797" name="__codelineno-0-797"></a> <span class="c1"># &quot;/admin/users/user/&lt;id&gt;/password/&quot;</span>
4239
+ <a id="__codelineno-0-798" name="__codelineno-0-798"></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>
4240
+ <a id="__codelineno-0-799" name="__codelineno-0-799"></a> <span class="c1"># &quot;/silk/request/&lt;uuid:request_id&gt;/profile/&lt;int:profile_id&gt;/&quot;</span>
4241
+ <a id="__codelineno-0-800" name="__codelineno-0-800"></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>
4242
+ <a id="__codelineno-0-801" name="__codelineno-0-801"></a> <span class="c1"># &quot;/admin/admin/logentry/&lt;path:object_id&gt;/&quot;</span>
4243
+ <a id="__codelineno-0-802" name="__codelineno-0-802"></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>
4244
+ <a id="__codelineno-0-803" name="__codelineno-0-803"></a> <span class="c1"># &quot;/dcim/sites/&lt;slug:slug&gt;/&quot;</span>
4245
+ <a id="__codelineno-0-804" name="__codelineno-0-804"></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>
4246
+ <a id="__codelineno-0-805" name="__codelineno-0-805"></a> <span class="c1"># &quot;/apps/installed-apps/&lt;str:app&gt;/&quot;</span>
4247
+ <a id="__codelineno-0-806" name="__codelineno-0-806"></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>
4248
+ <a id="__codelineno-0-807" name="__codelineno-0-807"></a> <span class="c1"># &quot;/dcim/locations/&lt;uuid:pk&gt;/&quot;</span>
4249
+ <a id="__codelineno-0-808" name="__codelineno-0-808"></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>
4250
+ <a id="__codelineno-0-809" name="__codelineno-0-809"></a> <span class="c1"># tokens in regexp-style router urls, including REST and NautobotUIViewSet:</span>
4251
+ <a id="__codelineno-0-810" name="__codelineno-0-810"></a> <span class="c1"># &quot;/extras/^external-integrations/(?P&lt;pk&gt;[^/.]+)/$&quot;</span>
4252
+ <a id="__codelineno-0-811" name="__codelineno-0-811"></a> <span class="c1"># &quot;/api/virtualization/^interfaces/(?P&lt;pk&gt;[^/.]+)/$&quot;</span>
4253
+ <a id="__codelineno-0-812" name="__codelineno-0-812"></a> <span class="c1"># &quot;/api/virtualization/^interfaces/(?P&lt;pk&gt;[^/.]+)\\.(?P&lt;format&gt;[a-z0-9]+)/?$&quot;</span>
4254
+ <a id="__codelineno-0-813" name="__codelineno-0-813"></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>
4255
+ <a id="__codelineno-0-814" name="__codelineno-0-814"></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>
4256
+ <a id="__codelineno-0-815" name="__codelineno-0-815"></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>
4257
+ <a id="__codelineno-0-816" name="__codelineno-0-816"></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>
4258
+ <a id="__codelineno-0-817" name="__codelineno-0-817"></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>
4259
+ <a id="__codelineno-0-818" name="__codelineno-0-818"></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>
4260
+ <a id="__codelineno-0-819" name="__codelineno-0-819"></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>
4261
+ <a id="__codelineno-0-820" name="__codelineno-0-820"></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>
4262
+ <a id="__codelineno-0-821" name="__codelineno-0-821"></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>
4263
+ <a id="__codelineno-0-822" name="__codelineno-0-822"></a> <span class="c1"># Fallthru for generic URL parameters</span>
4264
+ <a id="__codelineno-0-823" name="__codelineno-0-823"></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>
4265
+ <a id="__codelineno-0-824" name="__codelineno-0-824"></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>
4266
+ <a id="__codelineno-0-825" name="__codelineno-0-825"></a>
4267
+ <a id="__codelineno-0-826" name="__codelineno-0-826"></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>
4268
+ <a id="__codelineno-0-827" name="__codelineno-0-827"></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>
4269
+ <a id="__codelineno-0-828" name="__codelineno-0-828"></a>
4270
+ <a id="__codelineno-0-829" name="__codelineno-0-829"></a> <span class="k">return</span> <span class="n">url</span>
4209
4271
  </code></pre></div></td></tr></table></div>
4210
4272
  </details>
4211
4273
  </div>
@@ -4364,21 +4426,7 @@ Default if unspecified is the string <code>"/"</code>.</p>
4364
4426
 
4365
4427
  <details class="quote">
4366
4428
  <summary>Source code in <code>nautobot/utilities/utils.py</code></summary>
4367
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-696">696</a></span>
4368
- <span class="normal"><a href="#__codelineno-0-697">697</a></span>
4369
- <span class="normal"><a href="#__codelineno-0-698">698</a></span>
4370
- <span class="normal"><a href="#__codelineno-0-699">699</a></span>
4371
- <span class="normal"><a href="#__codelineno-0-700">700</a></span>
4372
- <span class="normal"><a href="#__codelineno-0-701">701</a></span>
4373
- <span class="normal"><a href="#__codelineno-0-702">702</a></span>
4374
- <span class="normal"><a href="#__codelineno-0-703">703</a></span>
4375
- <span class="normal"><a href="#__codelineno-0-704">704</a></span>
4376
- <span class="normal"><a href="#__codelineno-0-705">705</a></span>
4377
- <span class="normal"><a href="#__codelineno-0-706">706</a></span>
4378
- <span class="normal"><a href="#__codelineno-0-707">707</a></span>
4379
- <span class="normal"><a href="#__codelineno-0-708">708</a></span>
4380
- <span class="normal"><a href="#__codelineno-0-709">709</a></span>
4381
- <span class="normal"><a href="#__codelineno-0-710">710</a></span>
4429
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-710">710</a></span>
4382
4430
  <span class="normal"><a href="#__codelineno-0-711">711</a></span>
4383
4431
  <span class="normal"><a href="#__codelineno-0-712">712</a></span>
4384
4432
  <span class="normal"><a href="#__codelineno-0-713">713</a></span>
@@ -4436,79 +4484,93 @@ Default if unspecified is the string <code>"/"</code>.</p>
4436
4484
  <span class="normal"><a href="#__codelineno-0-765">765</a></span>
4437
4485
  <span class="normal"><a href="#__codelineno-0-766">766</a></span>
4438
4486
  <span class="normal"><a href="#__codelineno-0-767">767</a></span>
4439
- <span class="normal"><a href="#__codelineno-0-768">768</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-696" name="__codelineno-0-696"></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>
4440
- <a id="__codelineno-0-697" name="__codelineno-0-697"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4441
- <a id="__codelineno-0-698" name="__codelineno-0-698"></a><span class="sd"> Recursively yield a list of registered URL patterns.</span>
4442
- <a id="__codelineno-0-699" name="__codelineno-0-699"></a>
4443
- <a id="__codelineno-0-700" name="__codelineno-0-700"></a><span class="sd"> Args:</span>
4444
- <a id="__codelineno-0-701" name="__codelineno-0-701"></a><span class="sd"> urlconf (URLConf): Python module such as `nautobot.core.urls`.</span>
4445
- <a id="__codelineno-0-702" name="__codelineno-0-702"></a><span class="sd"> Default if unspecified is the value of `settings.ROOT_URLCONF`, i.e. the `nautobot.core.urls` module.</span>
4446
- <a id="__codelineno-0-703" name="__codelineno-0-703"></a><span class="sd"> patterns_list (list): Used in recursion. Generally can be omitted on initial call.</span>
4447
- <a id="__codelineno-0-704" name="__codelineno-0-704"></a><span class="sd"> Default if unspecified is the `url_patterns` attribute of the given `urlconf` module.</span>
4448
- <a id="__codelineno-0-705" name="__codelineno-0-705"></a><span class="sd"> base_path (str): String to prepend to all URL patterns yielded.</span>
4449
- <a id="__codelineno-0-706" name="__codelineno-0-706"></a><span class="sd"> Default if unspecified is the string `&quot;/&quot;`.</span>
4450
- <a id="__codelineno-0-707" name="__codelineno-0-707"></a>
4451
- <a id="__codelineno-0-708" name="__codelineno-0-708"></a><span class="sd"> Yields:</span>
4452
- <a id="__codelineno-0-709" name="__codelineno-0-709"></a><span class="sd"> (str): Each URL pattern defined in the given urlconf and its descendants</span>
4453
- <a id="__codelineno-0-710" name="__codelineno-0-710"></a>
4454
- <a id="__codelineno-0-711" name="__codelineno-0-711"></a><span class="sd"> Examples:</span>
4455
- <a id="__codelineno-0-712" name="__codelineno-0-712"></a><span class="sd"> &gt;&gt;&gt; generator = get_url_patterns()</span>
4456
- <a id="__codelineno-0-713" name="__codelineno-0-713"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4457
- <a id="__codelineno-0-714" name="__codelineno-0-714"></a><span class="sd"> &#39;/&#39;</span>
4458
- <a id="__codelineno-0-715" name="__codelineno-0-715"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4459
- <a id="__codelineno-0-716" name="__codelineno-0-716"></a><span class="sd"> &#39;/search/&#39;</span>
4460
- <a id="__codelineno-0-717" name="__codelineno-0-717"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4461
- <a id="__codelineno-0-718" name="__codelineno-0-718"></a><span class="sd"> &#39;/login/&#39;</span>
4462
- <a id="__codelineno-0-719" name="__codelineno-0-719"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4463
- <a id="__codelineno-0-720" name="__codelineno-0-720"></a><span class="sd"> &#39;/logout/&#39;</span>
4464
- <a id="__codelineno-0-721" name="__codelineno-0-721"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4465
- <a id="__codelineno-0-722" name="__codelineno-0-722"></a><span class="sd"> &#39;/circuits/circuits/&lt;uuid:pk&gt;/terminations/swap/&#39;</span>
4466
- <a id="__codelineno-0-723" name="__codelineno-0-723"></a>
4467
- <a id="__codelineno-0-724" name="__codelineno-0-724"></a><span class="sd"> &gt;&gt;&gt; import example_plugin.urls as example_urls</span>
4468
- <a id="__codelineno-0-725" name="__codelineno-0-725"></a><span class="sd"> &gt;&gt;&gt; for url_pattern in get_url_patterns(example_urls, base_path=&quot;/plugins/example-plugin/&quot;):</span>
4469
- <a id="__codelineno-0-726" name="__codelineno-0-726"></a><span class="sd"> ... print(url_pattern)</span>
4470
- <a id="__codelineno-0-727" name="__codelineno-0-727"></a><span class="sd"> ...</span>
4471
- <a id="__codelineno-0-728" name="__codelineno-0-728"></a><span class="sd"> /plugins/example-plugin/</span>
4472
- <a id="__codelineno-0-729" name="__codelineno-0-729"></a><span class="sd"> /plugins/example-plugin/config/</span>
4473
- <a id="__codelineno-0-730" name="__codelineno-0-730"></a><span class="sd"> /plugins/example-plugin/models/&lt;uuid:pk&gt;/dynamic-groups/</span>
4474
- <a id="__codelineno-0-731" name="__codelineno-0-731"></a><span class="sd"> /plugins/example-plugin/other-models/&lt;uuid:pk&gt;/dynamic-groups/</span>
4475
- <a id="__codelineno-0-732" name="__codelineno-0-732"></a><span class="sd"> /plugins/example-plugin/docs/</span>
4476
- <a id="__codelineno-0-733" name="__codelineno-0-733"></a><span class="sd"> /plugins/example-plugin/circuits/&lt;uuid:pk&gt;/example-plugin-tab/</span>
4477
- <a id="__codelineno-0-734" name="__codelineno-0-734"></a><span class="sd"> /plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-1/</span>
4478
- <a id="__codelineno-0-735" name="__codelineno-0-735"></a><span class="sd"> /plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-2/</span>
4479
- <a id="__codelineno-0-736" name="__codelineno-0-736"></a><span class="sd"> /plugins/example-plugin/override-target/</span>
4480
- <a id="__codelineno-0-737" name="__codelineno-0-737"></a><span class="sd"> /plugins/example-plugin/^models/$</span>
4481
- <a id="__codelineno-0-738" name="__codelineno-0-738"></a><span class="sd"> /plugins/example-plugin/^models/add/$</span>
4482
- <a id="__codelineno-0-739" name="__codelineno-0-739"></a><span class="sd"> /plugins/example-plugin/^models/import/$</span>
4483
- <a id="__codelineno-0-740" name="__codelineno-0-740"></a><span class="sd"> /plugins/example-plugin/^models/edit/$</span>
4484
- <a id="__codelineno-0-741" name="__codelineno-0-741"></a><span class="sd"> /plugins/example-plugin/^models/delete/$</span>
4485
- <a id="__codelineno-0-742" name="__codelineno-0-742"></a><span class="sd"> /plugins/example-plugin/^models/all-names/$</span>
4486
- <a id="__codelineno-0-743" name="__codelineno-0-743"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$</span>
4487
- <a id="__codelineno-0-744" name="__codelineno-0-744"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
4488
- <a id="__codelineno-0-745" name="__codelineno-0-745"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
4489
- <a id="__codelineno-0-746" name="__codelineno-0-746"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
4490
- <a id="__codelineno-0-747" name="__codelineno-0-747"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
4491
- <a id="__codelineno-0-748" name="__codelineno-0-748"></a><span class="sd"> /plugins/example-plugin/^other-models/$</span>
4492
- <a id="__codelineno-0-749" name="__codelineno-0-749"></a><span class="sd"> /plugins/example-plugin/^other-models/add/$</span>
4493
- <a id="__codelineno-0-750" name="__codelineno-0-750"></a><span class="sd"> /plugins/example-plugin/^other-models/edit/$</span>
4494
- <a id="__codelineno-0-751" name="__codelineno-0-751"></a><span class="sd"> /plugins/example-plugin/^other-models/delete/$</span>
4495
- <a id="__codelineno-0-752" name="__codelineno-0-752"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/$</span>
4496
- <a id="__codelineno-0-753" name="__codelineno-0-753"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
4497
- <a id="__codelineno-0-754" name="__codelineno-0-754"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
4498
- <a id="__codelineno-0-755" name="__codelineno-0-755"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
4499
- <a id="__codelineno-0-756" name="__codelineno-0-756"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
4500
- <a id="__codelineno-0-757" name="__codelineno-0-757"></a><span class="sd"> &quot;&quot;&quot;</span>
4501
- <a id="__codelineno-0-758" name="__codelineno-0-758"></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>
4502
- <a id="__codelineno-0-759" name="__codelineno-0-759"></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>
4503
- <a id="__codelineno-0-760" name="__codelineno-0-760"></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>
4504
- <a id="__codelineno-0-761" name="__codelineno-0-761"></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>
4505
- <a id="__codelineno-0-762" name="__codelineno-0-762"></a>
4506
- <a id="__codelineno-0-763" name="__codelineno-0-763"></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>
4507
- <a id="__codelineno-0-764" name="__codelineno-0-764"></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>
4508
- <a id="__codelineno-0-765" name="__codelineno-0-765"></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>
4509
- <a id="__codelineno-0-766" name="__codelineno-0-766"></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>
4510
- <a id="__codelineno-0-767" name="__codelineno-0-767"></a> <span class="c1"># Recurse!</span>
4511
- <a id="__codelineno-0-768" name="__codelineno-0-768"></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>
4487
+ <span class="normal"><a href="#__codelineno-0-768">768</a></span>
4488
+ <span class="normal"><a href="#__codelineno-0-769">769</a></span>
4489
+ <span class="normal"><a href="#__codelineno-0-770">770</a></span>
4490
+ <span class="normal"><a href="#__codelineno-0-771">771</a></span>
4491
+ <span class="normal"><a href="#__codelineno-0-772">772</a></span>
4492
+ <span class="normal"><a href="#__codelineno-0-773">773</a></span>
4493
+ <span class="normal"><a href="#__codelineno-0-774">774</a></span>
4494
+ <span class="normal"><a href="#__codelineno-0-775">775</a></span>
4495
+ <span class="normal"><a href="#__codelineno-0-776">776</a></span>
4496
+ <span class="normal"><a href="#__codelineno-0-777">777</a></span>
4497
+ <span class="normal"><a href="#__codelineno-0-778">778</a></span>
4498
+ <span class="normal"><a href="#__codelineno-0-779">779</a></span>
4499
+ <span class="normal"><a href="#__codelineno-0-780">780</a></span>
4500
+ <span class="normal"><a href="#__codelineno-0-781">781</a></span>
4501
+ <span class="normal"><a href="#__codelineno-0-782">782</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-710" name="__codelineno-0-710"></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>
4502
+ <a id="__codelineno-0-711" name="__codelineno-0-711"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4503
+ <a id="__codelineno-0-712" name="__codelineno-0-712"></a><span class="sd"> Recursively yield a list of registered URL patterns.</span>
4504
+ <a id="__codelineno-0-713" name="__codelineno-0-713"></a>
4505
+ <a id="__codelineno-0-714" name="__codelineno-0-714"></a><span class="sd"> Args:</span>
4506
+ <a id="__codelineno-0-715" name="__codelineno-0-715"></a><span class="sd"> urlconf (URLConf): Python module such as `nautobot.core.urls`.</span>
4507
+ <a id="__codelineno-0-716" name="__codelineno-0-716"></a><span class="sd"> Default if unspecified is the value of `settings.ROOT_URLCONF`, i.e. the `nautobot.core.urls` module.</span>
4508
+ <a id="__codelineno-0-717" name="__codelineno-0-717"></a><span class="sd"> patterns_list (list): Used in recursion. Generally can be omitted on initial call.</span>
4509
+ <a id="__codelineno-0-718" name="__codelineno-0-718"></a><span class="sd"> Default if unspecified is the `url_patterns` attribute of the given `urlconf` module.</span>
4510
+ <a id="__codelineno-0-719" name="__codelineno-0-719"></a><span class="sd"> base_path (str): String to prepend to all URL patterns yielded.</span>
4511
+ <a id="__codelineno-0-720" name="__codelineno-0-720"></a><span class="sd"> Default if unspecified is the string `&quot;/&quot;`.</span>
4512
+ <a id="__codelineno-0-721" name="__codelineno-0-721"></a>
4513
+ <a id="__codelineno-0-722" name="__codelineno-0-722"></a><span class="sd"> Yields:</span>
4514
+ <a id="__codelineno-0-723" name="__codelineno-0-723"></a><span class="sd"> (str): Each URL pattern defined in the given urlconf and its descendants</span>
4515
+ <a id="__codelineno-0-724" name="__codelineno-0-724"></a>
4516
+ <a id="__codelineno-0-725" name="__codelineno-0-725"></a><span class="sd"> Examples:</span>
4517
+ <a id="__codelineno-0-726" name="__codelineno-0-726"></a><span class="sd"> &gt;&gt;&gt; generator = get_url_patterns()</span>
4518
+ <a id="__codelineno-0-727" name="__codelineno-0-727"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4519
+ <a id="__codelineno-0-728" name="__codelineno-0-728"></a><span class="sd"> &#39;/&#39;</span>
4520
+ <a id="__codelineno-0-729" name="__codelineno-0-729"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4521
+ <a id="__codelineno-0-730" name="__codelineno-0-730"></a><span class="sd"> &#39;/search/&#39;</span>
4522
+ <a id="__codelineno-0-731" name="__codelineno-0-731"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4523
+ <a id="__codelineno-0-732" name="__codelineno-0-732"></a><span class="sd"> &#39;/login/&#39;</span>
4524
+ <a id="__codelineno-0-733" name="__codelineno-0-733"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4525
+ <a id="__codelineno-0-734" name="__codelineno-0-734"></a><span class="sd"> &#39;/logout/&#39;</span>
4526
+ <a id="__codelineno-0-735" name="__codelineno-0-735"></a><span class="sd"> &gt;&gt;&gt; next(generator)</span>
4527
+ <a id="__codelineno-0-736" name="__codelineno-0-736"></a><span class="sd"> &#39;/circuits/circuits/&lt;uuid:pk&gt;/terminations/swap/&#39;</span>
4528
+ <a id="__codelineno-0-737" name="__codelineno-0-737"></a>
4529
+ <a id="__codelineno-0-738" name="__codelineno-0-738"></a><span class="sd"> &gt;&gt;&gt; import example_plugin.urls as example_urls</span>
4530
+ <a id="__codelineno-0-739" name="__codelineno-0-739"></a><span class="sd"> &gt;&gt;&gt; for url_pattern in get_url_patterns(example_urls, base_path=&quot;/plugins/example-plugin/&quot;):</span>
4531
+ <a id="__codelineno-0-740" name="__codelineno-0-740"></a><span class="sd"> ... print(url_pattern)</span>
4532
+ <a id="__codelineno-0-741" name="__codelineno-0-741"></a><span class="sd"> ...</span>
4533
+ <a id="__codelineno-0-742" name="__codelineno-0-742"></a><span class="sd"> /plugins/example-plugin/</span>
4534
+ <a id="__codelineno-0-743" name="__codelineno-0-743"></a><span class="sd"> /plugins/example-plugin/config/</span>
4535
+ <a id="__codelineno-0-744" name="__codelineno-0-744"></a><span class="sd"> /plugins/example-plugin/models/&lt;uuid:pk&gt;/dynamic-groups/</span>
4536
+ <a id="__codelineno-0-745" name="__codelineno-0-745"></a><span class="sd"> /plugins/example-plugin/other-models/&lt;uuid:pk&gt;/dynamic-groups/</span>
4537
+ <a id="__codelineno-0-746" name="__codelineno-0-746"></a><span class="sd"> /plugins/example-plugin/docs/</span>
4538
+ <a id="__codelineno-0-747" name="__codelineno-0-747"></a><span class="sd"> /plugins/example-plugin/circuits/&lt;uuid:pk&gt;/example-plugin-tab/</span>
4539
+ <a id="__codelineno-0-748" name="__codelineno-0-748"></a><span class="sd"> /plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-1/</span>
4540
+ <a id="__codelineno-0-749" name="__codelineno-0-749"></a><span class="sd"> /plugins/example-plugin/devices/&lt;uuid:pk&gt;/example-plugin-tab-2/</span>
4541
+ <a id="__codelineno-0-750" name="__codelineno-0-750"></a><span class="sd"> /plugins/example-plugin/override-target/</span>
4542
+ <a id="__codelineno-0-751" name="__codelineno-0-751"></a><span class="sd"> /plugins/example-plugin/^models/$</span>
4543
+ <a id="__codelineno-0-752" name="__codelineno-0-752"></a><span class="sd"> /plugins/example-plugin/^models/add/$</span>
4544
+ <a id="__codelineno-0-753" name="__codelineno-0-753"></a><span class="sd"> /plugins/example-plugin/^models/import/$</span>
4545
+ <a id="__codelineno-0-754" name="__codelineno-0-754"></a><span class="sd"> /plugins/example-plugin/^models/edit/$</span>
4546
+ <a id="__codelineno-0-755" name="__codelineno-0-755"></a><span class="sd"> /plugins/example-plugin/^models/delete/$</span>
4547
+ <a id="__codelineno-0-756" name="__codelineno-0-756"></a><span class="sd"> /plugins/example-plugin/^models/all-names/$</span>
4548
+ <a id="__codelineno-0-757" name="__codelineno-0-757"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/$</span>
4549
+ <a id="__codelineno-0-758" name="__codelineno-0-758"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
4550
+ <a id="__codelineno-0-759" name="__codelineno-0-759"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
4551
+ <a id="__codelineno-0-760" name="__codelineno-0-760"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
4552
+ <a id="__codelineno-0-761" name="__codelineno-0-761"></a><span class="sd"> /plugins/example-plugin/^models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
4553
+ <a id="__codelineno-0-762" name="__codelineno-0-762"></a><span class="sd"> /plugins/example-plugin/^other-models/$</span>
4554
+ <a id="__codelineno-0-763" name="__codelineno-0-763"></a><span class="sd"> /plugins/example-plugin/^other-models/add/$</span>
4555
+ <a id="__codelineno-0-764" name="__codelineno-0-764"></a><span class="sd"> /plugins/example-plugin/^other-models/edit/$</span>
4556
+ <a id="__codelineno-0-765" name="__codelineno-0-765"></a><span class="sd"> /plugins/example-plugin/^other-models/delete/$</span>
4557
+ <a id="__codelineno-0-766" name="__codelineno-0-766"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/$</span>
4558
+ <a id="__codelineno-0-767" name="__codelineno-0-767"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/delete/$</span>
4559
+ <a id="__codelineno-0-768" name="__codelineno-0-768"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/edit/$</span>
4560
+ <a id="__codelineno-0-769" name="__codelineno-0-769"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/changelog/$</span>
4561
+ <a id="__codelineno-0-770" name="__codelineno-0-770"></a><span class="sd"> /plugins/example-plugin/^other-models/(?P&lt;pk&gt;[^/.]+)/notes/$</span>
4562
+ <a id="__codelineno-0-771" name="__codelineno-0-771"></a><span class="sd"> &quot;&quot;&quot;</span>
4563
+ <a id="__codelineno-0-772" name="__codelineno-0-772"></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>
4564
+ <a id="__codelineno-0-773" name="__codelineno-0-773"></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>
4565
+ <a id="__codelineno-0-774" name="__codelineno-0-774"></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>
4566
+ <a id="__codelineno-0-775" name="__codelineno-0-775"></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>
4567
+ <a id="__codelineno-0-776" name="__codelineno-0-776"></a>
4568
+ <a id="__codelineno-0-777" name="__codelineno-0-777"></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>
4569
+ <a id="__codelineno-0-778" name="__codelineno-0-778"></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>
4570
+ <a id="__codelineno-0-779" name="__codelineno-0-779"></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>
4571
+ <a id="__codelineno-0-780" name="__codelineno-0-780"></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>
4572
+ <a id="__codelineno-0-781" name="__codelineno-0-781"></a> <span class="c1"># Recurse!</span>
4573
+ <a id="__codelineno-0-782" name="__codelineno-0-782"></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>
4512
4574
  </code></pre></div></td></tr></table></div>
4513
4575
  </details>
4514
4576
  </div>