aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--models.py22
-rw-r--r--utils.py15
2 files changed, 20 insertions, 17 deletions
diff --git a/models.py b/models.py
index 1e96a88..478b48f 100644
--- a/models.py
+++ b/models.py
@@ -20,6 +20,8 @@ from django.db.models.expressions import RawSQL
from django.db.models.functions import Extract, ExtractYear
from django.utils.text import slugify
+from .utils import parse_group
+
import hashlib
import os
@@ -81,23 +83,9 @@ class Group(models.Model):
return self.name
def save(self, *args, **kwargs):
- try:
- parts = self.celcat_name.split("-")[-2:]
- group = parts[1].strip()[2:]
-
- self.mention = parts[0].strip()
- self.subgroup = group[0]
-
- if len(group) > 1:
- self.td = int(group[1])
- if len(group) > 2:
- self.tp = int(group[2])
- except:
- print("Malformed name: {0}. Ignoring".format(self.celcat_name))
- finally:
- if self.name == "":
- self.name = self.celcat_name
-
+ self.mention, self.subgroup, self.td, self.tp = parse_group(self.celcat_name)
+ if self.name == "":
+ self.name = self.celcat_name
self.slug = slugify(self.name)
super(Group, self).save()
diff --git a/utils.py b/utils.py
index 4ce3a21..090142b 100644
--- a/utils.py
+++ b/utils.py
@@ -17,6 +17,7 @@
from django.utils import timezone
import datetime
+import re
def get_current_week():
return timezone.now().isocalendar()[:2]
@@ -44,3 +45,17 @@ def group_courses(courses):
grouped_courses[-1].append(course)
return grouped_courses
+
+def parse_group(name):
+ group_regex = re.compile("^(.+?)\s*\-\s*(((CM)(\w))|((TD)(\w)(\d))|((TP)(\w)(\d)(\d)))$")
+ search = group_regex.search(name)
+ if search is None:
+ return None, None, None, None
+
+ parts = search.groups(0)
+ if parts[3] == "CM":
+ return parts[0], parts[4], None, None
+ elif parts[6] == "TD":
+ return parts[0], parts[7], parts[8], None
+ elif parts[10] == "TP":
+ return parts[0], parts[11], parts[12], parts[13]