tables.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import django_tables2 as tables
  2. from django.utils.safestring import mark_safe
  3. from django_tables2.utils import Accessor
  4. from tenancy.tables import COL_TENANT
  5. from utilities.tables import BaseTable, ToggleColumn
  6. from .models import Circuit, CircuitType, Provider
  7. CIRCUITTYPE_ACTIONS = """
  8. <a href="{% url 'circuits:circuittype_changelog' slug=record.slug %}" class="btn btn-default btn-xs" title="Changelog">
  9. <i class="fa fa-history"></i>
  10. </a>
  11. {% if perms.circuit.change_circuittype %}
  12. <a href="{% url 'circuits:circuittype_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
  13. {% endif %}
  14. """
  15. STATUS_LABEL = """
  16. <span class="label label-{{ record.get_status_class }}">{{ record.get_status_display }}</span>
  17. """
  18. class CircuitTerminationColumn(tables.Column):
  19. def render(self, value):
  20. return mark_safe('<a href="{}">{}</a>'.format(
  21. value.site.get_absolute_url(),
  22. value.site
  23. ))
  24. #
  25. # Providers
  26. #
  27. class ProviderTable(BaseTable):
  28. pk = ToggleColumn()
  29. name = tables.LinkColumn()
  30. class Meta(BaseTable.Meta):
  31. model = Provider
  32. fields = ('pk', 'name', 'asn', 'account',)
  33. class ProviderDetailTable(ProviderTable):
  34. circuit_count = tables.Column(accessor=Accessor('count_circuits'), verbose_name='Circuits')
  35. class Meta(ProviderTable.Meta):
  36. model = Provider
  37. fields = ('pk', 'name', 'asn', 'account', 'circuit_count')
  38. #
  39. # Circuit types
  40. #
  41. class CircuitTypeTable(BaseTable):
  42. pk = ToggleColumn()
  43. name = tables.LinkColumn()
  44. circuit_count = tables.Column(verbose_name='Circuits')
  45. actions = tables.TemplateColumn(
  46. template_code=CIRCUITTYPE_ACTIONS, attrs={'td': {'class': 'text-right noprint'}}, verbose_name=''
  47. )
  48. class Meta(BaseTable.Meta):
  49. model = CircuitType
  50. fields = ('pk', 'name', 'circuit_count', 'slug', 'actions')
  51. #
  52. # Circuits
  53. #
  54. class CircuitTable(BaseTable):
  55. pk = ToggleColumn()
  56. cid = tables.LinkColumn(verbose_name='ID')
  57. provider = tables.LinkColumn('circuits:provider', args=[Accessor('provider.slug')])
  58. status = tables.TemplateColumn(template_code=STATUS_LABEL, verbose_name='Status')
  59. tenant = tables.TemplateColumn(template_code=COL_TENANT)
  60. termination_a = CircuitTerminationColumn(orderable=False, verbose_name='A Side')
  61. termination_z = CircuitTerminationColumn(orderable=False, verbose_name='Z Side')
  62. class Meta(BaseTable.Meta):
  63. model = Circuit
  64. fields = ('pk', 'cid', 'status', 'type', 'provider', 'tenant', 'termination_a', 'termination_z', 'description')