14438 script model

This commit is contained in:
Arthur 2024-02-05 15:15:01 -08:00
parent 4cb3b63f79
commit fc890e36af
3 changed files with 25 additions and 27 deletions

View File

@ -5,14 +5,15 @@ import django.db.models.deletion
def update_scripts(apps, schema_editor): def update_scripts(apps, schema_editor):
ScriptModule = apps.get_model('extras', 'ScriptModule') from extras.models import ScriptModule
ScriptModuleNew = apps.get_model('extras', 'ScriptModule')
Script = apps.get_model('extras', 'Script') Script = apps.get_model('extras', 'Script')
for module in ScriptModule.objects.all(): for module in ScriptModule.objects.all():
for script, cls in module.get_module_scripts: for script in module.get_module_scripts.keys():
Script.objects.create( Script.objects.create(
name=script, name=script,
script_module=module, module=ScriptModuleNew.objects.get(file_root=module.file_root, file_path=module.file_path),
) )
@ -23,26 +24,16 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.AddField( migrations.CreateModel(
model_name='script', name='Script',
name='name', fields=[
field=models.CharField(default=None, max_length=79), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
preserve_default=False, ('name', models.CharField(max_length=79)),
), ('module', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='scripts', to='extras.scriptmodule')),
migrations.AddField( ],
model_name='script', options={
name='module', 'ordering': ('name', 'pk'),
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='scripts', to='extras.scriptmodule'), },
preserve_default=False,
),
migrations.AlterField(
model_name='script',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False),
),
migrations.AlterModelOptions(
name='script',
options={'ordering': ('name', 'pk')},
), ),
migrations.RunPython( migrations.RunPython(
code=update_scripts, code=update_scripts,

View File

@ -32,9 +32,16 @@ class Script(EventRulesMixin, models.Model):
related_name='scripts' related_name='scripts'
) )
def __str__(self):
return self.name
class Meta: class Meta:
ordering = ('name', 'pk') ordering = ('name', 'pk')
@cached_property
def python_class(self):
return self.module.get_module_scripts.get(self.name)
class ScriptModuleManager(models.Manager.from_queryset(RestrictedQuerySet)): class ScriptModuleManager(models.Manager.from_queryset(RestrictedQuerySet)):

View File

@ -53,15 +53,15 @@
</thead> </thead>
<tbody> <tbody>
{% with jobs=module.get_latest_jobs %} {% with jobs=module.get_latest_jobs %}
{% for script_name, script_class in module.scripts.items %} {% for script in module.scripts.all %}
<tr> <tr>
<td> <td>
<a href="{% url 'extras:script' module=module.python_name name=script_name %}" name="script.{{ script_name }}">{{ script_class.name }}</a> <a href="{% url 'extras:script' module=module.python_name name=script.name %}" name="script.{{ script.name }}">{{ script.python_class.name }}</a>
</td> </td>
<td> <td>
{{ script_class.Meta.description|markdown|placeholder }} {{ script.python_class.Meta.description|markdown|placeholder }}
</td> </td>
{% with last_result=jobs|get_key:script_class.class_name %} {% with last_result=jobs|get_key:script.python_class.class_name %}
{% if last_result %} {% if last_result %}
<td> <td>
<a href="{% url 'extras:script_result' job_pk=last_result.pk %}">{{ last_result.created|annotated_date }}</a> <a href="{% url 'extras:script_result' job_pk=last_result.pk %}">{{ last_result.created|annotated_date }}</a>