From b8aba86471d9eeef231e16bdd80443f9f83eb811 Mon Sep 17 00:00:00 2001 From: Al Date: Thu, 16 Jun 2016 01:45:43 +0200 Subject: [PATCH] [addresses] Implementing unit types which use concatenated floors with offsets for basement (e.g. Norway) --- scripts/geodata/addresses/units.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/scripts/geodata/addresses/units.py b/scripts/geodata/addresses/units.py index ac8db65d..f23f9168 100644 --- a/scripts/geodata/addresses/units.py +++ b/scripts/geodata/addresses/units.py @@ -61,7 +61,20 @@ class Unit(NumberedComponent): if num_floors is None or random.random() >= use_floor_prob: number = weighted_choice(cls.numbered_units, cls.unit_probs_cdf) else: - floor = Floor.random(language, country=country, num_floors=num_floors, num_basements=num_basements or 0) + floor = Floor.random(language, country=country, num_floors=num_floors, num_basements=num_basements) + + floor_numbering_starts_at = address_config.get_property('levels.numbering_starts_at', language, country=country, default=0) + ground_floor_starts_at = address_config.get_property('units.alphanumeric.use_floor_ground_starts_at', language, country=country, default=None) + + if ground_floor_starts_at is not None: + try: + floor = int(floor) + if floor >= floor_numbering_starts_at: + floor -= floor_numbering_starts_at + floor += ground_floor_starts_at + floor = safe_decode(floor) + except (TypeError, ValueError): + pass use_floor_affix_prob = address_config.get_property('units.alphanumeric.use_floor_numeric_affix_probability', language, country=country, default=0.0) if use_floor_affix_prob and random.random() < use_floor_affix_prob: @@ -76,6 +89,10 @@ class Unit(NumberedComponent): return six.u('{}{}').format(floor_phrase, unit) + floor_num_digits = address_config.get_property('units.alphanumeric.use_floor_floor_num_digits', language, country=country, default=None) + if floor_num_digits is not None and floor.isdigit(): + floor = floor.zfill(floor_num_digits) + number = cls.for_floor(floor) if num_type == cls.NUMERIC: