datasource.html 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. {% extends 'generic/object.html' %}
  2. {% load static %}
  3. {% load helpers %}
  4. {% load plugins %}
  5. {% load render_table from django_tables2 %}
  6. {% block extra_controls %}
  7. {% if perms.core.sync_datasource %}
  8. {% if object.ready_for_sync %}
  9. <form action="{% url 'core:datasource_sync' pk=object.pk %}" method="post">
  10. {% csrf_token %}
  11. <button type="submit" class="btn btn-sm btn-primary">
  12. <i class="mdi mdi-sync" aria-hidden="true"></i> Sync
  13. </button>
  14. </form>
  15. {% else %}
  16. <button class="btn btn-sm btn-primary" disabled>
  17. <i class="mdi mdi-sync" aria-hidden="true"></i> Sync
  18. </button>
  19. {% endif %}
  20. {% endif %}
  21. {% endblock %}
  22. {% block content %}
  23. <div class="row mb-3">
  24. <div class="col col-md-6">
  25. <div class="card">
  26. <h5 class="card-header">Data Source</h5>
  27. <div class="card-body">
  28. <table class="table table-hover attr-table">
  29. <tr>
  30. <th scope="row">Name</th>
  31. <td>{{ object.name }}</td>
  32. </tr>
  33. <tr>
  34. <th scope="row">Type</th>
  35. <td>{{ object.get_type_display }}</td>
  36. </tr>
  37. <tr>
  38. <th scope="row">Enabled</th>
  39. <td>{% checkmark object.enabled %}</td>
  40. </tr>
  41. <tr>
  42. <th scope="row">Status</th>
  43. <td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
  44. </tr>
  45. <tr>
  46. <th scope="row">Last synced</th>
  47. <td>{{ object.last_synced|placeholder }}</td>
  48. </tr>
  49. <tr>
  50. <th scope="row">Description</th>
  51. <td>{{ object.description|placeholder }}</td>
  52. </tr>
  53. <tr>
  54. <th scope="row">URL</th>
  55. <td>
  56. <a href="{{ object.url }}">{{ object.url }}</a>
  57. </td>
  58. </tr>
  59. <tr>
  60. <th scope="row">Ignore rules</th>
  61. <td>
  62. {% if object.ignore_rules %}
  63. <pre>{{ object.ignore_rules }}</pre>
  64. {% else %}
  65. {{ ''|placeholder }}
  66. {% endif %}</td>
  67. </tr>
  68. </table>
  69. </div>
  70. </div>
  71. {% include 'inc/panels/tags.html' %}
  72. {% include 'inc/panels/comments.html' %}
  73. {% plugin_left_page object %}
  74. </div>
  75. <div class="col col-md-6">
  76. <div class="card">
  77. <h5 class="card-header">Backend</h5>
  78. <div class="card-body">
  79. <table class="table table-hover attr-table">
  80. {% for name, field in object.get_backend.parameters.items %}
  81. <tr>
  82. <th scope="row">{{ field.label }}</th>
  83. <td>{{ object.parameters|get_key:name|placeholder }}</td>
  84. </tr>
  85. {% empty %}
  86. <tr>
  87. <td colspan="2" class="text-muted">
  88. No parameters defined
  89. </td>
  90. </tr>
  91. {% endfor %}
  92. </table>
  93. </div>
  94. </div>
  95. {% include 'inc/panels/related_objects.html' %}
  96. {% include 'inc/panels/custom_fields.html' %}
  97. {% plugin_right_page object %}
  98. </div>
  99. </div>
  100. <div class="row mb-3">
  101. <div class="col col-md-12">
  102. <div class="card">
  103. <h5 class="card-header">Files</h5>
  104. <div class="card-body htmx-container table-responsive"
  105. hx-get="{% url 'core:datafile_list' %}?source_id={{ object.pk }}"
  106. hx-trigger="load"
  107. ></div>
  108. </div>
  109. {% plugin_full_width_page object %}
  110. </div>
  111. </div>
  112. {% endblock %}