0121_cache_cable_peer.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import sys
  2. from django.db import migrations, models
  3. import django.db.models.deletion
  4. def cache_cable_peers(apps, schema_editor):
  5. ContentType = apps.get_model('contenttypes', 'ContentType')
  6. Cable = apps.get_model('dcim', 'Cable')
  7. ConsolePort = apps.get_model('dcim', 'ConsolePort')
  8. ConsoleServerPort = apps.get_model('dcim', 'ConsoleServerPort')
  9. PowerPort = apps.get_model('dcim', 'PowerPort')
  10. PowerOutlet = apps.get_model('dcim', 'PowerOutlet')
  11. Interface = apps.get_model('dcim', 'Interface')
  12. FrontPort = apps.get_model('dcim', 'FrontPort')
  13. RearPort = apps.get_model('dcim', 'RearPort')
  14. PowerFeed = apps.get_model('dcim', 'PowerFeed')
  15. models = (
  16. ConsolePort,
  17. ConsoleServerPort,
  18. PowerPort,
  19. PowerOutlet,
  20. Interface,
  21. FrontPort,
  22. RearPort,
  23. PowerFeed
  24. )
  25. if 'test' not in sys.argv:
  26. print("\n", end="")
  27. for model in models:
  28. if 'test' not in sys.argv:
  29. print(f" Updating {model._meta.verbose_name} cable peers...", flush=True)
  30. ct = ContentType.objects.get_for_model(model)
  31. for cable in Cable.objects.filter(termination_a_type=ct):
  32. model.objects.filter(pk=cable.termination_a_id).update(
  33. _cable_peer_type_id=cable.termination_b_type_id,
  34. _cable_peer_id=cable.termination_b_id
  35. )
  36. for cable in Cable.objects.filter(termination_b_type=ct):
  37. model.objects.filter(pk=cable.termination_b_id).update(
  38. _cable_peer_type_id=cable.termination_a_type_id,
  39. _cable_peer_id=cable.termination_a_id
  40. )
  41. class Migration(migrations.Migration):
  42. dependencies = [
  43. ('contenttypes', '0002_remove_content_type_name'),
  44. ('dcim', '0120_cablepath'),
  45. ]
  46. operations = [
  47. migrations.AddField(
  48. model_name='consoleport',
  49. name='_cable_peer_id',
  50. field=models.PositiveIntegerField(blank=True, null=True),
  51. ),
  52. migrations.AddField(
  53. model_name='consoleport',
  54. name='_cable_peer_type',
  55. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  56. ),
  57. migrations.AddField(
  58. model_name='consoleserverport',
  59. name='_cable_peer_id',
  60. field=models.PositiveIntegerField(blank=True, null=True),
  61. ),
  62. migrations.AddField(
  63. model_name='consoleserverport',
  64. name='_cable_peer_type',
  65. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  66. ),
  67. migrations.AddField(
  68. model_name='frontport',
  69. name='_cable_peer_id',
  70. field=models.PositiveIntegerField(blank=True, null=True),
  71. ),
  72. migrations.AddField(
  73. model_name='frontport',
  74. name='_cable_peer_type',
  75. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  76. ),
  77. migrations.AddField(
  78. model_name='interface',
  79. name='_cable_peer_id',
  80. field=models.PositiveIntegerField(blank=True, null=True),
  81. ),
  82. migrations.AddField(
  83. model_name='interface',
  84. name='_cable_peer_type',
  85. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  86. ),
  87. migrations.AddField(
  88. model_name='powerfeed',
  89. name='_cable_peer_id',
  90. field=models.PositiveIntegerField(blank=True, null=True),
  91. ),
  92. migrations.AddField(
  93. model_name='powerfeed',
  94. name='_cable_peer_type',
  95. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  96. ),
  97. migrations.AddField(
  98. model_name='poweroutlet',
  99. name='_cable_peer_id',
  100. field=models.PositiveIntegerField(blank=True, null=True),
  101. ),
  102. migrations.AddField(
  103. model_name='poweroutlet',
  104. name='_cable_peer_type',
  105. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  106. ),
  107. migrations.AddField(
  108. model_name='powerport',
  109. name='_cable_peer_id',
  110. field=models.PositiveIntegerField(blank=True, null=True),
  111. ),
  112. migrations.AddField(
  113. model_name='powerport',
  114. name='_cable_peer_type',
  115. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  116. ),
  117. migrations.AddField(
  118. model_name='rearport',
  119. name='_cable_peer_id',
  120. field=models.PositiveIntegerField(blank=True, null=True),
  121. ),
  122. migrations.AddField(
  123. model_name='rearport',
  124. name='_cable_peer_type',
  125. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
  126. ),
  127. migrations.RunPython(
  128. code=cache_cable_peers,
  129. reverse_code=migrations.RunPython.noop
  130. ),
  131. ]