def __init__(self, persoonsgegevens): """ Attribuut aanhef wordt samengesteld op basis van: - voorvoegselGeslachtsnaam - geslachtsnaam - adellijkeTitel_predikaat - geslachtsaanduiding - aanduidingAanschrijving - voorvoegselGeslachtsnaam partner - geslachtsnaam partner - adellijkeTitel_predikaat partner - geslachtsaanduiding partner :param persoonsgegevens: """ self.voorvoegsel_geslachtsnaam = get_value(persoonsgegevens, 'naam', 'voorvoegsel') or '' self.voorletters = get_value(persoonsgegevens, 'naam', 'voorletters') or '' self.geslachtsnaam = get_value(persoonsgegevens, 'naam', 'geslachtsnaam') or '' self.adellijke_titel_predikaat = None self._geslachtsaanduiding = get_value(persoonsgegevens, 'geslachtsaanduiding') or '' self._aanduiding_naamgebruik = get_value(persoonsgegevens, 'naam', 'aanduidingNaamgebruik') or ''
def ouder_sorter(ouder): MAX_NAAM = 'zzzzzzzzzz' # Value that is expected to compare above any real naam geslachtsaanduiding_order = { Geslachtsaanduiding.VROUW_FULL: 0, Geslachtsaanduiding.MAN_FULL: 1, Geslachtsaanduiding.ONBEKEND_FULL: 2, None: 3 } # First sort key is geboortedatum descending geboorte = (get_value(ouder, 'geboorte', 'datum', 'datum') or '9999-99-99').replace('-', '') geboorte = int(geboorte) # oldest first # Second key is geslachtsaanduiding on geslachtsaanduiding_order geslacht = geslachtsaanduiding_order[get_value(ouder, 'geslachtsaanduiding')] # Third key is geslachtsnaam ascending geslachtsnaam = get_value(ouder, 'naam', 'geslachtsnaam') geslachtsnaam = geslachtsnaam.lower() if geslachtsnaam else MAX_NAAM # Fourth key is voornamen ascending voornamen = get_value(ouder, 'naam', 'voornamen') voornamen = voornamen.lower() if voornamen else MAX_NAAM return (geboorte, geslacht, geslachtsnaam, voornamen)
def kinderen_sorter(kind): MAX_NAAM = 'zzzzzzzzzz' # Value that is expected to compare above any real naam # First sort key is geboortedatum descending geboorte = (get_value(kind, 'geboorte', 'datum', 'datum') or '9999-99-99').replace('-', '') geboorte = int(geboorte) # oldest first # Second key is geslachtsnaam ascending geslachtsnaam = get_value(kind, 'naam', 'geslachtsnaam') geslachtsnaam = geslachtsnaam.lower() if geslachtsnaam else MAX_NAAM # Third key is voornamen ascending voornamen = get_value(kind, 'naam', 'voornamen') voornamen = voornamen.lower() if voornamen else MAX_NAAM return (geboorte, geslachtsnaam, voornamen)
def filter_response(self, response_object: dict): """Filter the response object to only return if it matches the wildcard search query For example the following results: [ {'name': 'Jan'}, {'name': 'Jans'}, {'name': 'Jansen'}, {'name': 'van Jansen'} ] and a wildcard search on name 'Jan*' should only return Jan, Jans and Jansen. There are two accepted wildcard characters '*' and '?': - '*': Matches with zero or more (non-space) characters - '?': Matches with exactly one (non-space) character The '?' wildcard can be used multiple times in a row, so searching for Jan??? wil match any record starting with Jan and being exactly 6 characters (in this case Jansen). At least two (non wildcard) characters need to be provided and the wildcard characters can be placed at the beginning or end of a search string: 'A*', '*A', 'A*n', 'A??n' will all result in an error (handled in ArgumentCheck) """ for attribute, value in self.wildcards.items(): attribute_path = attribute.split('__') regex = self._convert_wildcard_query(value) if not re.match(regex, get_value(response_object, *attribute_path), re.IGNORECASE): return None return response_object
def test_get_value(self): dict = {'a': {'b': {'c': 'd'}}} self.assertEqual(get_value(dict, 'a', 'b', 'c'), 'd') self.assertEqual(get_value(dict, 'a', 'b', 'c', 'd'), None)