From 317d3aa9ed884877f71905bdb07a71c33aaf9776 Mon Sep 17 00:00:00 2001 From: Al Date: Thu, 14 Apr 2016 02:38:45 -0400 Subject: [PATCH] [addresses] PO Box phrase generator --- scripts/geodata/addresses/po_box.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 scripts/geodata/addresses/po_box.py diff --git a/scripts/geodata/addresses/po_box.py b/scripts/geodata/addresses/po_box.py new file mode 100644 index 00000000..fab90ac9 --- /dev/null +++ b/scripts/geodata/addresses/po_box.py @@ -0,0 +1,33 @@ +import random +import six + +from geodata.addresses.numbering import NumberedComponent, sample_alphabet, latin_alphabet +from geodata.encoding import safe_decode + + +class POBox(NumberedComponent): + @classmethod + def random_digits(cls, num_digits): + # Note: PO Boxes can have leading zeros but not important for the parser + # since it only cares about how many digits there are in a number + low = 10 ** (num_digits - 1) + high = (10 ** num_digits) - 1 + + return random.randint(low, high) + + @classmethod + def random_digits_with_prefix(cls, num_digits, prefix=six.u('')): + return six.u('').join([prefix, safe_decode(cls.random_digits(num_digits))]) + + @classmethod + def random_digits_with_suffix(cls, num_digits, suffix=six.u('')): + return six.u('').join([safe_decode(cls.random_digits(num_digits)), suffix]) + + @classmethod + def random_letter(cls, alphabet=latin_alphabet): + return random.choice(alphabet) + + @classmethod + def phrase(cls, box_number, language, country=None): + return cls.numeric_phrase('po_boxes.alphanumeric', safe_decode(box_number), language, + dictionaries=['post_office'], country=country)