From 9613186f9f3d7836d60ab1dc94b4ffc8e6fff6a2 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Fri, 16 Sep 2011 11:25:51 +0000 Subject: [PATCH] Move name parsing to separate file - Legacy-Id: 3424 --- redesign/person/models.py | 25 ++++--------------------- redesign/person/name.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 redesign/person/name.py diff --git a/redesign/person/models.py b/redesign/person/models.py index 6586e304a..8b7567379 100644 --- a/redesign/person/models.py +++ b/redesign/person/models.py @@ -3,6 +3,8 @@ from django.db import models from django.contrib.auth.models import User +from redesign.person.name import name_parts + class PersonInfo(models.Model): time = models.DateTimeField(auto_now_add=True) # When this Person record entered the system name = models.CharField(max_length=255, db_index=True) # The normal unicode form of the name. This must be @@ -14,29 +16,10 @@ class PersonInfo(models.Model): def __unicode__(self): return self.name - def _parts(self, name): - prefix, first, middle, last, suffix = "", "", "", "", "" - parts = name.split() - if parts[0] in ["Mr", "Mr.", "Mrs", "Mrs.", "Ms", "Ms.", "Miss", "Dr.", "Doctor", "Prof", "Prof.", "Professor", "Sir", "Lady", "Dame", ]: - prefix = parts[0]; - parts = parts[1:] - if len(parts) > 2: - if parts[-1] in ["Jr", "Jr.", "II", "2nd", "III", "3rd", ]: - suffix = parts[-1] - parts = parts[:-1] - if len(parts) > 2: - first = parts[0] - last = parts[-1] - middle = " ".join(parts[1:-1]) - elif len(parts) == 2: - first, last = parts - else: - last = parts[0] - return prefix, first, middle, last, suffix def name_parts(self): - return self._parts(self.name) + return name_parts(self.name) def ascii_parts(self): - return self._parts(self.ascii) + return name_parts(self.ascii) def short(self): if self.ascii_short: return self.ascii_short diff --git a/redesign/person/name.py b/redesign/person/name.py new file mode 100644 index 000000000..f15bdf259 --- /dev/null +++ b/redesign/person/name.py @@ -0,0 +1,20 @@ +def name_parts(name): + prefix, first, middle, last, suffix = "", "", "", "", "" + parts = name.split() + if parts[0] in ["Mr", "Mr.", "Mrs", "Mrs.", "Ms", "Ms.", "Miss", "Dr.", "Doctor", "Prof", "Prof.", "Professor", "Sir", "Lady", "Dame"]: + prefix = parts[0]; + parts = parts[1:] + if len(parts) > 2: + if parts[-1] in ["Jr", "Jr.", "II", "2nd", "III", "3rd", ]: + suffix = parts[-1] + parts = parts[:-1] + if len(parts) > 2: + first = parts[0] + last = parts[-1] + middle = " ".join(parts[1:-1]) + elif len(parts) == 2: + first, last = parts + else: + last = parts[0] + return prefix, first, middle, last, suffix +