__init__.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. # coding=utf-8
  2. from __future__ import unicode_literals
  3. from decimal import Decimal
  4. from .. import BaseProvider
  5. from .. import date_time
  6. localized = True
  7. class Provider(BaseProvider):
  8. city_suffixes = ['Ville', ]
  9. street_suffixes = ['Street', ]
  10. city_formats = ('{{first_name}} {{city_suffix}}', )
  11. street_name_formats = ('{{last_name}} {{street_suffix}}', )
  12. street_address_formats = ('{{building_number}} {{street_name}}', )
  13. address_formats = ('{{street_address}} {{postcode}} {{city}}', )
  14. building_number_formats = ('##', )
  15. postcode_formats = ('#####', )
  16. countries = [tz['name'] for tz in date_time.Provider.countries]
  17. ALPHA_2 = 'alpha-2'
  18. ALPHA_3 = 'alpha-3'
  19. alpha_2_country_codes = [tz['alpha-2-code'] for tz in date_time.Provider.countries]
  20. alpha_3_country_codes = [tz['alpha-3-code'] for tz in date_time.Provider.countries]
  21. def city_suffix(self):
  22. """
  23. :example 'town'
  24. """
  25. return self.random_element(self.city_suffixes)
  26. def street_suffix(self):
  27. """
  28. :example 'Avenue'
  29. """
  30. return self.random_element(self.street_suffixes)
  31. def building_number(self):
  32. """
  33. :example '791'
  34. """
  35. return self.numerify(self.random_element(self.building_number_formats))
  36. def city(self):
  37. """
  38. :example 'Sashabury'
  39. """
  40. pattern = self.random_element(self.city_formats)
  41. return self.generator.parse(pattern)
  42. def street_name(self):
  43. """
  44. :example 'Crist Parks'
  45. """
  46. pattern = self.random_element(self.street_name_formats)
  47. return self.generator.parse(pattern)
  48. def street_address(self):
  49. """
  50. :example '791 Crist Parks'
  51. """
  52. pattern = self.random_element(self.street_address_formats)
  53. return self.generator.parse(pattern)
  54. def postcode(self):
  55. """
  56. :example 86039-9874
  57. """
  58. return self.bothify(self.random_element(self.postcode_formats)).upper()
  59. def address(self):
  60. """
  61. :example '791 Crist Parks, Sashabury, IL 86039-9874'
  62. """
  63. pattern = self.random_element(self.address_formats)
  64. return self.generator.parse(pattern)
  65. def country(self):
  66. return self.random_element(self.countries)
  67. def country_code(self, representation=ALPHA_2):
  68. if representation == self.ALPHA_2:
  69. return self.random_element(self.alpha_2_country_codes)
  70. elif representation == self.ALPHA_3:
  71. return self.random_element(self.alpha_3_country_codes)
  72. else:
  73. raise ValueError("`representation` must be one of `alpha-2` or `alpha-3`.")
  74. def geo_coordinate(self, center=None, radius=0.001):
  75. """
  76. Optionally center the coord and pick a point within radius.
  77. """
  78. if center is None:
  79. return Decimal(str(self.generator.random.randint(-180000000,
  80. 180000000) / 1000000.0)).quantize(Decimal('.000001'))
  81. else:
  82. center = float(center)
  83. radius = float(radius)
  84. geo = self.generator.random.uniform(
  85. center - radius, center + radius)
  86. return Decimal(str(geo)).quantize(Decimal('.000001'))
  87. def latitude(self):
  88. # Latitude has a range of -90 to 90, so divide by two.
  89. return self.geo_coordinate() / 2
  90. def longitude(self):
  91. return self.geo_coordinate()