Refactor out the merging logic
[climbing.kerkeslager.com] / src / climbing / models.py
index 60aa717..83d437f 100644 (file)
@@ -1,6 +1,8 @@
 from django.contrib.auth.models import User
 from django.db import models
 
+from core import utils
+
 class Area(models.Model):
     name = models.CharField(max_length=64)
     notes = models.TextField(blank=True, null=True)
@@ -10,46 +12,11 @@ class Area(models.Model):
 
     @property
     def sub_areas(self):
-        crags = iter(self.crags.order_by('name'))
-        clusters = iter(self.clusters.order_by('name'))
-
-        try:
-            crag = next(crags)
-        except StopIteration:
-            crag = None
-
-        try:
-            cluster = next(clusters)
-        except StopIteration:
-            cluster = None
-
-        while crag and cluster:
-            if crag.name < cluster.name:
-                yield crag
-                try:
-                    crag = next(crags)
-                except:
-                    crag = None
-            else:
-                yield cluster
-                try:
-                    cluster = next(clusters)
-                except:
-                    cluster = None
-
-        while crag:
-            yield crag
-            try:
-                crag = next(crags)
-            except:
-                crag = None
-
-        while cluster:
-            yield cluster
-            try:
-                cluster = next(clusters)
-            except:
-                cluster = None
+        return utils.merge(
+            self.crags.order_by('name'),
+            self.clusters.order_by('name'),
+            'name',
+        )
 
 class Crag(models.Model):
     area = models.ForeignKey(