mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 09:16:10 -06:00
Render discrete form fields for backend parameters
This commit is contained in:
parent
521b30ffb7
commit
1000fe5a3d
@ -4,12 +4,13 @@ import tempfile
|
||||
from contextlib import contextmanager
|
||||
from urllib.parse import quote, urlunparse, urlparse
|
||||
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
|
||||
from .exceptions import SyncError
|
||||
|
||||
__all__ = (
|
||||
'LocalBakend',
|
||||
'LocalBackend',
|
||||
'GitBackend',
|
||||
)
|
||||
|
||||
@ -17,6 +18,7 @@ logger = logging.getLogger('netbox.data_backends')
|
||||
|
||||
|
||||
class DataBackend:
|
||||
parameters = {}
|
||||
|
||||
def __init__(self, url, **kwargs):
|
||||
self.url = url
|
||||
@ -31,7 +33,7 @@ class DataBackend:
|
||||
raise NotImplemented()
|
||||
|
||||
|
||||
class LocalBakend(DataBackend):
|
||||
class LocalBackend(DataBackend):
|
||||
|
||||
@contextmanager
|
||||
def fetch(self):
|
||||
@ -42,6 +44,17 @@ class LocalBakend(DataBackend):
|
||||
|
||||
|
||||
class GitBackend(DataBackend):
|
||||
parameters = {
|
||||
'username': forms.CharField(
|
||||
required=False
|
||||
),
|
||||
'password': forms.CharField(
|
||||
required=False
|
||||
),
|
||||
'branch': forms.CharField(
|
||||
required=False
|
||||
)
|
||||
}
|
||||
|
||||
@contextmanager
|
||||
def fetch(self):
|
||||
|
@ -7,16 +7,42 @@ __all__ = (
|
||||
|
||||
|
||||
class DataSourceForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
('Source', ('name', 'type', 'url', 'enabled', 'description')),
|
||||
('Backend', ('parameters', 'ignore_rules')),
|
||||
)
|
||||
# fieldsets = (
|
||||
# ('Source', ('name', 'type', 'url', 'enabled', 'description')),
|
||||
# ('Backend', ('parameters', 'ignore_rules')),
|
||||
# )
|
||||
|
||||
class Meta:
|
||||
model = DataSource
|
||||
fields = [
|
||||
'name', 'type', 'url', 'enabled', 'description', 'parameters', 'ignore_rules',
|
||||
'name', 'type', 'url', 'enabled', 'description', 'ignore_rules',
|
||||
]
|
||||
widgets = {
|
||||
'type': StaticSelect(),
|
||||
'type': StaticSelect(
|
||||
# attrs={
|
||||
# 'hx-get': '.',
|
||||
# 'hx-include': '#form_fields input',
|
||||
# 'hx-target': '#form_fields',
|
||||
# }
|
||||
),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
if self.instance:
|
||||
backend = self.instance.get_backend()
|
||||
for name, form_field in backend.parameters.items():
|
||||
field_name = f'backend_{name}'
|
||||
self.fields[field_name] = form_field
|
||||
self.fields[field_name].initial = self.instance.parameters.get(name)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
||||
parameters = {}
|
||||
for name in self.fields:
|
||||
if name.startswith('backend_'):
|
||||
parameters[name[8:]] = self.cleaned_data[name]
|
||||
self.instance.parameters = parameters
|
||||
|
||||
return super().save(*args, **kwargs)
|
||||
|
@ -17,7 +17,7 @@ from netbox.models import ChangeLoggedModel
|
||||
from utilities.files import sha256_hash
|
||||
from utilities.querysets import RestrictedQuerySet
|
||||
from ..choices import *
|
||||
from ..data_backends import GitBackend, LocalBakend
|
||||
from ..data_backends import GitBackend, LocalBackend
|
||||
from ..exceptions import SyncError
|
||||
|
||||
__all__ = (
|
||||
@ -125,7 +125,7 @@ class DataSource(ChangeLoggedModel):
|
||||
|
||||
def get_backend(self):
|
||||
backend_cls = {
|
||||
DataSourceTypeChoices.LOCAL: LocalBakend,
|
||||
DataSourceTypeChoices.LOCAL: LocalBackend,
|
||||
DataSourceTypeChoices.GIT: GitBackend,
|
||||
}.get(self.type)
|
||||
backend_params = self.parameters or {}
|
||||
|
@ -58,6 +58,15 @@
|
||||
<a href="{{ object.url }}">{{ object.url }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Ignore rules</th>
|
||||
<td>
|
||||
{% if object.ignore_rules %}
|
||||
<pre>{{ object.ignore_rules }}</pre>
|
||||
{% else %}
|
||||
{{ ''|placeholder }}
|
||||
{% endif %}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">File count</th>
|
||||
<td>{{ object.datafiles.count }}</td>
|
||||
@ -72,24 +81,18 @@
|
||||
<h5 class="card-header">Backend</h5>
|
||||
<div class="card-body">
|
||||
<table class="table table-hover attr-table">
|
||||
<tr>
|
||||
<th scope="row">Parameters</th>
|
||||
<td>
|
||||
{% if object.parameters %}
|
||||
<pre>{{ object.parameters }}</pre>
|
||||
{% else %}
|
||||
{{ ''|placeholder }}
|
||||
{% endif %}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Ignore rules</th>
|
||||
<td>
|
||||
{% if object.ignore_rules %}
|
||||
<pre>{{ object.ignore_rules }}</pre>
|
||||
{% else %}
|
||||
{{ ''|placeholder }}
|
||||
{% endif %}</td>
|
||||
</tr>
|
||||
{% for name, value in object.parameters.items %}
|
||||
<tr>
|
||||
<th scope="row">{{ name }}</th>
|
||||
<td>{{ value|placeholder }}</td>
|
||||
</tr>
|
||||
{% empty %}
|
||||
<tr>
|
||||
<td colspan="2" class="text-muted">
|
||||
No parameters defined
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user