Example #1
0
    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 ''
Example #2
0
        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)
Example #3
0
        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)
Example #4
0
    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
Example #5
0
 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)